Commit 5b8a9654 authored by unknown's avatar unknown

A fix and a test case for Bug#13524 "lock timeout gives

incorrect warning on open cursor"


sql/sql_prepare.cc:
  A fix for Bug#13524 "lock timeout gives incorrect 
  warning on open cursor": reset the connection for next
  command before performing a cursor fetch (add an omitted line).
tests/mysql_client_test.c:
  A test case for Bug#13524 "lock timeout gives incorrect 
  warning on open cursor"
parent 4d899772
...@@ -2312,6 +2312,7 @@ void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length) ...@@ -2312,6 +2312,7 @@ void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length)
Server_side_cursor *cursor; Server_side_cursor *cursor;
DBUG_ENTER("mysql_stmt_fetch"); DBUG_ENTER("mysql_stmt_fetch");
mysql_reset_thd_for_next_command(thd);
statistic_increment(thd->status_var.com_stmt_fetch, &LOCK_status); statistic_increment(thd->status_var.com_stmt_fetch, &LOCK_status);
if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_fetch"))) if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_fetch")))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
......
...@@ -14419,7 +14419,7 @@ static void test_bug14210() ...@@ -14419,7 +14419,7 @@ static void test_bug14210()
myquery(rc); myquery(rc);
} }
/* Bug#13488 */ /* Bug#13488: wrong column metadata when fetching from cursor */
static void test_bug13488() static void test_bug13488()
{ {
...@@ -14487,6 +14487,66 @@ static void test_bug13488() ...@@ -14487,6 +14487,66 @@ static void test_bug13488()
myquery(rc); myquery(rc);
} }
/*
Bug#13524: warnings of a previous command are not reset when fetching
from a cursor.
*/
static void test_bug13524()
{
MYSQL_STMT *stmt;
int rc;
unsigned int warning_count;
const ulong type= CURSOR_TYPE_READ_ONLY;
const char *query= "select * from t1";
myheader("test_bug13524");
rc= mysql_query(mysql, "drop table if exists t1, t2");
myquery(rc);
rc= mysql_query(mysql, "create table t1 (a int not null primary key)");
myquery(rc);
rc= mysql_query(mysql, "insert into t1 values (1), (2), (3), (4)");
myquery(rc);
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
check_execute(stmt, rc);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc);
warning_count= mysql_warning_count(mysql);
DIE_UNLESS(warning_count == 0);
/* Check that DROP TABLE produced a warning (no such table) */
rc= mysql_query(mysql, "drop table if exists t2");
myquery(rc);
warning_count= mysql_warning_count(mysql);
DIE_UNLESS(warning_count == 1);
/*
Check that fetch from a cursor cleared the warning from the previous
command.
*/
rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc);
warning_count= mysql_warning_count(mysql);
DIE_UNLESS(warning_count == 0);
/* Cleanup */
mysql_stmt_close(stmt);
rc= mysql_query(mysql, "drop table t1");
myquery(rc);
}
/* /*
Read and parse arguments and MySQL options from my.cnf Read and parse arguments and MySQL options from my.cnf
*/ */
...@@ -14744,6 +14804,7 @@ static struct my_tests_st my_tests[]= { ...@@ -14744,6 +14804,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug12243", test_bug12243 }, { "test_bug12243", test_bug12243 },
{ "test_bug14210", test_bug14210 }, { "test_bug14210", test_bug14210 },
{ "test_bug13488", test_bug13488 }, { "test_bug13488", test_bug13488 },
{ "test_bug13524", test_bug13524 },
{ 0, 0 } { 0, 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