summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2005-11-17 19:26:58 +0300
committerunknown <konstantin@mysql.com>2005-11-17 19:26:58 +0300
commitde9065a39dbe73f286a8c2b8f6f71c33717d8529 (patch)
tree0191eee4e173c6b613b3f572ab75b0d2117c7be7
parent34658129cddb4ca18e201ae37f89cb6a49eef0ed (diff)
parent18aea761232a8d34dc847859b105989b62634d66 (diff)
downloadmariadb-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.cc1
-rw-r--r--tests/mysql_client_test.c63
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 }
};