summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2005-02-10 17:53:06 +0300
committerunknown <konstantin@mysql.com>2005-02-10 17:53:06 +0300
commit98bc23483098fb01df035f7947eb1a6509d0f82a (patch)
tree7bfba9f1adbfda2e33a18e54b581ca9e86fa2512
parentbebba9582f8c874018d19c73d28874915c3801bb (diff)
parenta26ce94f7adf0fb992045dfdf9d9401a36a6c31c (diff)
downloadmariadb-git-98bc23483098fb01df035f7947eb1a6509d0f82a.tar.gz
Merge mysql.com:/home/kostja/work/mysql-4.1-root
into mysql.com:/home/kostja/work/mysql-5.0-root libmysql/libmysql.c: Auto merged tests/mysql_client_test.c: Auto merged
-rw-r--r--libmysql/libmysql.c17
-rw-r--r--tests/mysql_client_test.c22
2 files changed, 38 insertions, 1 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 48af83f4de5..d0dee7976db 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1809,6 +1809,18 @@ static my_bool my_realloc_str(NET *net, ulong length)
}
+/* Clear possible error statee of struct NET */
+
+static void net_clear_error(NET *net)
+{
+ if (net->last_errno)
+ {
+ net->last_errno= 0;
+ net->last_error[0]= '\0';
+ strmov(net->sqlstate, not_error_sqlstate);
+ }
+}
+
/*
Set statement error code, sqlstate, and error message
from given errcode and sqlstate.
@@ -4869,6 +4881,11 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)
if (mysql->unbuffered_fetch_owner == &stmt->unbuffered_fetch_cancelled)
mysql->unbuffered_fetch_owner= 0;
+ /*
+ Clear NET error state: if the following commands come through
+ successfully, connection will still be usable for other commands.
+ */
+ net_clear_error(&mysql->net);
if (mysql->status != MYSQL_STATUS_READY)
{
/*
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 018bc554093..8f76b7757dc 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -12513,7 +12513,7 @@ static void test_bug6761(void)
}
-/* Bug#8330 - Bug #8330 mysql_stmt_execute crashes (libmysql) */
+/* Bug#8330 - mysql_stmt_execute crashes (libmysql) */
static void test_bug8330()
{
@@ -12564,6 +12564,26 @@ static void test_bug8330()
}
+/* Bug#7990 - mysql_stmt_close doesn't reset mysql->net.last_error */
+
+static void test_bug7990()
+{
+ MYSQL_STMT *stmt;
+ int rc;
+ myheader("test_bug7990");
+
+ stmt= mysql_stmt_init(mysql);
+ rc= mysql_stmt_prepare(stmt, "foo", 3);
+ /*
+ XXX: the fact that we store errno both in STMT and in
+ MYSQL is not documented and is subject to change in 5.0
+ */
+ DIE_UNLESS(rc && mysql_stmt_errno(stmt) && mysql_errno(mysql));
+ mysql_stmt_close(stmt);
+ DIE_UNLESS(!mysql_errno(mysql));
+}
+
+
/*
Read and parse arguments and MySQL options from my.cnf
*/