client-server protocol ドキュメントに誤り

Connector/J 5.0のソースを読んでいたら,どうも以下のMySQL client-server protocol解説ドキュメントとは違うような気がしたのでMark Matthews氏に聞いて見た.

http://dev.mysql.com/doc/internals/en/client-server-protocol.html

何が変かというと、Parameter Packetというのは、実際にはClientからServerへは送られていないからです.ServerPreparedStatement.executeServer()からstoreBinding()へとソースを読めば分かります.

http://dev.mysql.com/doc/internals/en/parameter-packet.html

From client to server, for prepared statements which contain parameters.

このドキュメントの記述が間違い,とのこと.MM氏からDocチームに修正依頼も出しているとのこと.そのうち修正され,オンラインにも反映されるでしょう.

従ってPreparedStatementに関してC/Jがサーバへ送るPacketは以下の通り

  • Connection.prepareStatement()時に、Prepared Statement Initialization Packet
  • ServerPreparedStatement.execute()時に、まずLong Data Packetとして送るべきパラメータがあれば該当数だけ
  • その後続いて、Execute Packet

このLong Data Packetは8KBずつにデータを分割して送信する.合計での送信サイズ制限は無い(と思われる).

さて,これで全て謎が解けたので一仕事せねば.来週はニューヨーク+JBossで全て埋まるだろうし.VC++でも遊びたいしアセンブラはもうちょいやらないとだし・・・.帰国準備もしないとだし、、、こっちの友達とも最後だから会ったり遊びに行ったりするし.ぐわぁ、時間がぁ〜.