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++でも遊びたいしアセンブラはもうちょいやらないとだし・・・.帰国準備もしないとだし、、、こっちの友達とも最後だから会ったり遊びに行ったりするし.ぐわぁ、時間がぁ〜.