mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fix result of ROW_COUNT() after 'EXECUTE prepstmt'. (Bug #14956)
mysql-test/r/ps.result: Add new results mysql-test/t/ps.test: Add new test sql/sql_parse.cc: Don't reset row_count after processing EXECUTE statement.
This commit is contained in:
@@ -806,3 +806,10 @@ execute stmt;
|
|||||||
@@tx_isolation
|
@@tx_isolation
|
||||||
REPEATABLE-READ
|
REPEATABLE-READ
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
|
create table t1 (id int);
|
||||||
|
prepare ins_call from "insert into t1 (id) values (1)";
|
||||||
|
execute ins_call;
|
||||||
|
select row_count();
|
||||||
|
row_count()
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
|
@@ -843,3 +843,15 @@ execute stmt;
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #14956: ROW_COUNT() returns incorrect result after EXECUTE of prepared
|
||||||
|
# statement
|
||||||
|
#
|
||||||
|
create table t1 (id int);
|
||||||
|
prepare ins_call from "insert into t1 (id) values (1)";
|
||||||
|
execute ins_call;
|
||||||
|
select row_count();
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# End of 5.0 tests
|
||||||
|
@@ -4822,11 +4822,15 @@ end_with_restore_list:
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The return value for ROW_COUNT() is "implementation dependent" if
|
The return value for ROW_COUNT() is "implementation dependent" if the
|
||||||
the statement is not DELETE, INSERT or UPDATE (or a CALL executing
|
statement is not DELETE, INSERT or UPDATE, but -1 is what JDBC and ODBC
|
||||||
such a statement), but -1 is what JDBC and ODBC wants.
|
wants.
|
||||||
|
|
||||||
|
We do not change the value for a CALL or EXECUTE statement, so the value
|
||||||
|
generated by the last called (or executed) statement is preserved.
|
||||||
*/
|
*/
|
||||||
if (lex->sql_command != SQLCOM_CALL && uc_update_queries[lex->sql_command]<2)
|
if (lex->sql_command != SQLCOM_CALL && lex->sql_command != SQLCOM_EXECUTE &&
|
||||||
|
uc_update_queries[lex->sql_command]<2)
|
||||||
thd->row_count_func= -1;
|
thd->row_count_func= -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user