|
| 1 | +%%% vim: noet ts=8 sts=4 sw=4 |
1 | 2 | %%%------------------------------------------------------------------- |
2 | 3 | %%% File : mysql_conn.erl |
3 | 4 | %%% Author : Fredrik Thulin <ft@it.su.se> |
@@ -263,18 +264,28 @@ do_recv(LogFun, RecvPid, SeqNum) when is_function(LogFun); |
263 | 264 | LogFun == undefined, |
264 | 265 | SeqNum == undefined -> |
265 | 266 | receive |
266 | | - {mysql_recv, RecvPid, data, Packet, Num} -> |
| 267 | + {mysql_recv, RecvPid, data, Packet, Num} when size(Packet) == 16#ffffff -> |
| 268 | + do_recv_more(LogFun, RecvPid, Packet, Num); |
| 269 | + {mysql_recv, RecvPid, data, Packet, Num} -> |
267 | 270 | {ok, Packet, Num}; |
268 | 271 | {mysql_recv, RecvPid, closed, _E} -> |
269 | 272 | {error, io_lib:format("mysql_recv: socket was closed ~p", [_E])} |
270 | 273 | end; |
271 | 274 | do_recv(LogFun, RecvPid, SeqNum) when is_function(LogFun); |
272 | 275 | LogFun == undefined, |
273 | 276 | is_integer(SeqNum) -> |
| 277 | + do_recv_more(LogFun, RecvPid, <<>>, SeqNum). |
| 278 | + |
| 279 | +do_recv_more(LogFun, RecvPid, Partial, SeqNum) when is_function(LogFun); |
| 280 | + LogFun == undefined, |
| 281 | + is_binary(Partial), |
| 282 | + is_integer(SeqNum) -> |
274 | 283 | ResponseNum = SeqNum + 1, |
275 | 284 | receive |
276 | | - {mysql_recv, RecvPid, data, Packet, ResponseNum} -> |
277 | | - {ok, Packet, ResponseNum}; |
| 285 | + {mysql_recv, RecvPid, data, Packet, ResponseNum} when size(Packet) == 16#ffffff -> |
| 286 | + do_recv_more(LogFun, RecvPid, <<Partial/binary, Packet/binary>>, ResponseNum); |
| 287 | + {mysql_recv, RecvPid, data, Packet, ResponseNum} -> |
| 288 | + {ok, <<Partial/binary, Packet/binary>>, ResponseNum}; |
278 | 289 | {mysql_recv, RecvPid, closed, _E} -> |
279 | 290 | {error, io_lib:format("mysql_recv: socket was closed ~p", [_E])} |
280 | 291 | end. |
@@ -832,7 +843,8 @@ get_lcb(<<252:8, Value:16/little, Rest/binary>>) -> |
832 | 843 | {Value, Rest}; |
833 | 844 | get_lcb(<<253:8, Value:24/little, Rest/binary>>) -> |
834 | 845 | {Value, Rest}; |
835 | | -get_lcb(<<254:8, Value:32/little, Rest/binary>>) -> |
| 846 | +% for MySQL 3.23 or later, after a 0xfe the length is 8 bytes long |
| 847 | +get_lcb(<<254:8, Value:64/little, Rest/binary>>) -> |
836 | 848 | {Value, Rest}; |
837 | 849 | get_lcb(<<Value:8, Rest/binary>>) when Value < 251 -> |
838 | 850 | {Value, Rest}; |
|
0 commit comments