Commit f3d691a9 authored by unknown's avatar unknown

Correction of WL#1567: row_count() is -1 following non-insert/update/delete

statements.


mysql-test/r/sp.result:
  Added row_count() test for non-insert/update/delete statement.
mysql-test/t/sp.test:
  Added row_count() test for non-insert/update/delete statement.
sql/sql_class.h:
  thd->row_count_func must be signed for JDBC/ODBC (can be -1).
sql/sql_parse.cc:
  Reset thd->row_count_func to -1 for non-insert/update/delete statements.
parent 7c4ceb73
...@@ -823,6 +823,11 @@ delete from t1| ...@@ -823,6 +823,11 @@ delete from t1|
select row_count()| select row_count()|
row_count() row_count()
0 0
select * from t1|
id data
select row_count()|
row_count()
-1
drop procedure rc| drop procedure rc|
create procedure bug822(a_id char(16), a_data int) create procedure bug822(a_id char(16), a_data int)
begin begin
......
...@@ -947,6 +947,8 @@ delete from t1| ...@@ -947,6 +947,8 @@ delete from t1|
select row_count()| select row_count()|
delete from t1| delete from t1|
select row_count()| select row_count()|
select * from t1|
select row_count()|
drop procedure rc| drop procedure rc|
......
...@@ -829,7 +829,7 @@ public: ...@@ -829,7 +829,7 @@ public:
bool charset_is_system_charset, charset_is_collation_connection; bool charset_is_system_charset, charset_is_collation_connection;
bool slow_command; bool slow_command;
ulong row_count_func; /* For the ROW_COUNT() function */ longlong row_count_func; /* For the ROW_COUNT() function */
sp_rcontext *spcont; // SP runtime context sp_rcontext *spcont; // SP runtime context
sp_cache *sp_proc_cache; sp_cache *sp_proc_cache;
sp_cache *sp_func_cache; sp_cache *sp_func_cache;
......
...@@ -3727,6 +3727,26 @@ unsent_create_error: ...@@ -3727,6 +3727,26 @@ unsent_create_error:
} }
thd->proc_info="query end"; // QQ thd->proc_info="query end"; // QQ
/*
The return value for ROW_COUNT() is "implementation dependent" if
the statement is not DELETE, INSERT or UPDATE (or a CALL executing
such a statement), but -1 is what JDBC and ODBC wants.
*/
switch (lex->sql_command) {
case SQLCOM_UPDATE:
case SQLCOM_UPDATE_MULTI:
case SQLCOM_REPLACE:
case SQLCOM_INSERT:
case SQLCOM_REPLACE_SELECT:
case SQLCOM_INSERT_SELECT:
case SQLCOM_DELETE:
case SQLCOM_DELETE_MULTI:
case SQLCOM_CALL:
break;
default:
thd->row_count_func= -1;
}
// We end up here if res == 0 and send_ok() has been done, // We end up here if res == 0 and send_ok() has been done,
// or res != 0 and no send_error() has yet been done. // or res != 0 and no send_error() has yet been done.
if (res < 0) if (res < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment