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)
Server_side_cursor *cursor;
DBUG_ENTER("mysql_stmt_fetch");
mysql_reset_thd_for_next_command(thd);
statistic_increment(thd->status_var.com_stmt_fetch, &LOCK_status);
if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_fetch")))
DBUG_VOID_RETURN;
......
......@@ -14419,7 +14419,7 @@ static void test_bug14210()
myquery(rc);
}
/* Bug#13488 */
/* Bug#13488: wrong column metadata when fetching from cursor */
static void test_bug13488()
{
......@@ -14487,6 +14487,66 @@ static void test_bug13488()
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
*/
......@@ -14744,6 +14804,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug12243", test_bug12243 },
{ "test_bug14210", test_bug14210 },
{ "test_bug13488", test_bug13488 },
{ "test_bug13524", test_bug13524 },
{ 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