Description:
Proxy handles multi-statement queries internally. Both server and client receive what they expect, but the multiple result sets are not passed to the Lua environment, and thus they can't be handled properly.
For example, when calling a procedure containing two result sets, I see the following:
call p1();
+-----+
| one |
+-----+
| 1 |
+-----+
1 row in set (0.00 sec)
+-----+-----+-------+
| one | two | three |
+-----+-----+-------+
| 1 | 2 | three |
+-----+-----+-------+
1 row in set (0.00 sec)
However, in the proxy I only see one result set:
.--- mysql query
| query.len = 10
| query.packet = 03 63 61 6c 6c 20 70 31 28 29
| .--- query
| | command = COM_QUERY
| | query = "call p1()"
| '---
|
| result.len = 1
| result.packet = 01
| result.flags = { in_trans = 0, auto_commit = 1, no_good_index_used = 0, no_index_used = 0 }
| result.warning_count = 0
| result.affected_rows = 0
| result.insert_id = 0
| result.query_status = 0
| query_time = 1186us
| response_time = 1272us
| .--- result-set
| | command = COM_QUERY
| | num-cols = 1
| | field[0] = { type = 8, name = one }
| | row[0] = { 1 }
| '---
'---
How to repeat:
1)
connect through the proxy, using tutorial-packet.lua
/usr/local/sbin/mysql-proxy --proxy-lua-script=tutorial-packets.lua
2) Using a MySQL client through the proxy, enter the following
drop procedure if exists p1;
delimiter //
create procedure p1()
deterministic
begin
select 1 as one;
select 1 as one, 2 as two, 'three' as three;
end //
delimiter ;
call p1();
Suggested fix:
pass the handling of multiple statements to the Lua environment