C/JがMySQLサーバへ送ったPacketのダンプ の続き
昨夜のエントリの続き.というかもう一昨日か.昨夜は夕方から寝て今日は早朝から活動中.
とみたまさひろさんによるMySQLプロトコル解説
http://tmtm.org/hiki/hiki.cgi?MysqlProtocol
こちらを拝見させていただくに、
- 16777215(0xFFFFFF)の場合は、継続パケットがあることを示す。
ということのようだ。
C/J側でのダンプではそれが確認できなかったわけだが,これを確認するためmy_real_read関数のendのところにprintf文を突っ込んでコンパイルしたので再度実験.
PreparedStatement.execute()で送るデータが100bytesの場合.
[mir] remain = 0 len = 39 length = 39 [mir] remain = 0 len = 17 length = 17 [mir] remain = 0 len = 33 length = 33 [mir] remain = 0 len = 15 length = 15 [mir] remain = 0 len = 15 length = 15 [mir] remain = 0 len = 17 length = 17 [mir] remain = 0 len = 146 length = 146 [mir] remain = 0 len = 1 length = 1
remainとlengthは無視して欲しい.とりあえずlenに注目.
想定通り,かつこれは一昨日C/J側のダンプでも確認済みだ.
続いて100MB分の"AAA...A"をPreparedStatement.execute()で送信した.
[mir] remain = 0 len = 39 length = 39 [mir] remain = 0 len = 17 length = 17 [mir] remain = 0 len = 33 length = 33 [mir] remain = 0 len = 15 length = 15 [mir] remain = 0 len = 15 length = 15 [mir] remain = 0 len = 17 length = 17 [mir] remain = 0 len = 16777215 length = 1859 [mir] remain = 0 len = 16777215 length = 1135 [mir] remain = 0 len = 16777215 length = 1611 [mir] remain = 0 len = 16777215 length = 2399 [mir] remain = 0 len = 16777215 length = 2219 [mir] remain = 0 len = 16113971 length = 1799 [mir] remain = 0 len = 1 length = 1
おー、でてるでてる.ちゃんと理論通り16777215の連打だ.
PreparedStatement.execute()によるPacketは全部で6つ.
16777215 * 5 + 16113971 = 1000046 bytes でこれも想定通りだ.
がしかしC/J側のダンプは"[0][0][0][0]"のままであった.なんなんだろうかねこれは.ダンプに使用しているのはflush直前のBufferインスタンスのbyte配列だから,これを使わないで直接OutputStreamにwriteしてるのかね.
現在 AM5:00.ご飯が炊けたので朝ご飯たべよー.