diff options
author | unknown <konstantin@mysql.com> | 2005-11-17 19:26:58 +0300 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2005-11-17 19:26:58 +0300 |
commit | de9065a39dbe73f286a8c2b8f6f71c33717d8529 (patch) | |
tree | 0191eee4e173c6b613b3f572ab75b0d2117c7be7 | |
parent | 34658129cddb4ca18e201ae37f89cb6a49eef0ed (diff) | |
parent | 18aea761232a8d34dc847859b105989b62634d66 (diff) | |
download | mariadb-git-de9065a39dbe73f286a8c2b8f6f71c33717d8529.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/opt/local/work/mysql-5.0-13524
-rw-r--r-- | sql/sql_prepare.cc | 1 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 63 |
2 files changed, 63 insertions, 1 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index ced862170ec..c7145e3aabc 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -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; diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index b065a0dfa03..e0f3fd91e5c 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -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() { @@ -14488,6 +14488,66 @@ static void test_bug13488() } /* + 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 } }; |