diff options
author | unknown <venu@myvenu.com> | 2003-07-08 02:27:21 -0700 |
---|---|---|
committer | unknown <venu@myvenu.com> | 2003-07-08 02:27:21 -0700 |
commit | 6a2e71229042ce17c922ff796763743653606e89 (patch) | |
tree | d30194a84c520bf0e621463153cea359044f89e1 | |
parent | e25c83e0c6b6db5c5aec223b8f4d18210017181d (diff) | |
download | mariadb-git-6a2e71229042ce17c922ff796763743653606e89.tar.gz |
implementation of mysql_stmt_reset client end
include/mysql.h:
add mysql_stmt_reset prototype
include/mysql_com.h:
add COM_STMT_RESET
libmysql/libmysql.def:
Add mysql_stmt_reset def
sql/sql_prepare.cc:
Fix selects hang after windows slowdown issue fix (send_fields)
sql/sql_parse.cc:
Add COM_STMT_RESET
sql/mysql_priv.h:
add defination of mysql_stmt_reset
-rw-r--r-- | include/mysql.h | 1 | ||||
-rw-r--r-- | include/mysql_com.h | 1 | ||||
-rw-r--r-- | libmysql/libmysql.c | 23 | ||||
-rw-r--r-- | libmysql/libmysql.def | 1 | ||||
-rw-r--r-- | sql/mysql_priv.h | 1 | ||||
-rw-r--r-- | sql/sql_parse.cc | 5 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 2 |
7 files changed, 33 insertions, 1 deletions
diff --git a/include/mysql.h b/include/mysql.h index bd63a10ba45..27d6b03bd0b 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -566,6 +566,7 @@ unsigned long STDCALL mysql_param_count(MYSQL_STMT * stmt); my_bool STDCALL mysql_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); my_bool STDCALL mysql_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); diff --git a/include/mysql_com.h b/include/mysql_com.h index e87001ff27d..5eb59a1c7ab 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -44,6 +44,7 @@ enum enum_server_command COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, COM_PREPARE, COM_EXECUTE, COM_LONG_DATA, COM_CLOSE_STMT, + COM_RESET_STMT, COM_END /* Must be last */ }; diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 771278c1dbb..1461d2fa128 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -3316,6 +3316,7 @@ mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) } else DBUG_PRINT("exit", ("stmt doesn't contain any resultset")); + DBUG_VOID_RETURN; } @@ -3422,6 +3423,28 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt) } /* + Reset the statement buffers in server +*/ + +my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt) +{ + char buff[MYSQL_STMT_HEADER]; + MYSQL *mysql; + DBUG_ENTER("mysql_stmt_reset"); + DBUG_ASSERT(stmt != 0); + + mysql= stmt->mysql->last_used_con; + int4store(buff, stmt->stmt_id); /* Send stmt id to server */ + if (advanced_command(mysql, COM_RESET_STMT,buff,MYSQL_STMT_HEADER,0,0,1)) + { + set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, + mysql->net.sqlstate); + DBUG_RETURN(1); + } + DBUG_RETURN(0); +} + +/* Return statement error code */ diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index d641ca57274..51869eacc4b 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -98,6 +98,7 @@ EXPORTS mysql_stat mysql_stmt_affected_rows mysql_stmt_close + mysql_stmt_reset mysql_stmt_data_seek mysql_stmt_errno mysql_stmt_error diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 5ad2cc56b8c..6633912967e 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -557,6 +557,7 @@ void free_prep_stmt(PREP_STMT *stmt, TREE_FREE mode, void *not_used); bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length); void mysql_stmt_execute(THD *thd, char *packet); void mysql_stmt_free(THD *thd, char *packet); +void mysql_stmt_reset(THD *thd, char *packet); void mysql_stmt_get_longdata(THD *thd, char *pos, ulong packet_length); int check_insert_fields(THD *thd,TABLE *table,List<Item> &fields, List<Item> &values, ulong counter); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 0db6ce8a642..00917e296ca 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1290,6 +1290,11 @@ restore_user: mysql_stmt_free(thd, packet); break; } + case COM_RESET_STMT: + { + mysql_stmt_reset(thd, packet); + break; + } case COM_QUERY: { if (alloc_query(thd, packet, packet_length)) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index c38fb44db1c..550e4bbe086 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -965,7 +965,7 @@ void mysql_stmt_reset(THD *thd, char *packet) PREP_STMT *stmt; DBUG_ENTER("mysql_stmt_reset"); - if (!(stmt=find_prepared_statement(thd, stmt_id, "close"))) + if (!(stmt= find_prepared_statement(thd, stmt_id, "reset"))) { send_error(thd); DBUG_VOID_RETURN; |