diff options
author | unknown <hf@deer.(none)> | 2003-09-12 19:35:34 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2003-09-12 19:35:34 +0500 |
commit | dc250a6efc8bc451b301c74b494200dfb3dd3f8b (patch) | |
tree | 46609c9322de2696057f154dff31ea468a3f6280 /libmysql | |
parent | d6f15e9d02d7fb33627c937ff47c948dd9ae0b2e (diff) | |
download | mariadb-git-dc250a6efc8bc451b301c74b494200dfb3dd3f8b.tar.gz |
SCRUM:
#977 Prepared statements in embedded library
include/mysql.h:
read_prepare_result function moved to 'virtual'
libmysql/client_settings.h:
declare proper function for libmysql
libmysql/libmysql.c:
some code moved from implementation of read_prepare_result to
mysql_prepare_result to make creating separate (remote and embedded-server)
versions easier
libmysqld/libmysqld.c:
emb_read_prepare_result prototype
sql-common/client.c:
cli_read_prepare_result added to the client_methods
sql/client_settings.h:
we don't need prepared statements in mini_client
sql/sql_prepare.cc:
embedded send_prep_stmt added
Diffstat (limited to 'libmysql')
-rw-r--r-- | libmysql/client_settings.h | 1 | ||||
-rw-r--r-- | libmysql/libmysql.c | 24 |
2 files changed, 12 insertions, 13 deletions
diff --git a/libmysql/client_settings.h b/libmysql/client_settings.h index 9cafd7182d0..77506333779 100644 --- a/libmysql/client_settings.h +++ b/libmysql/client_settings.h @@ -42,4 +42,5 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename); #endif MYSQL_RES * STDCALL cli_list_fields(MYSQL *mysql, const char *table, const char *wild); +my_bool cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt); diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 3058efb83cb..ecc34dd6add 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1556,13 +1556,13 @@ static my_bool my_realloc_str(NET *net, ulong length) 1 error */ -static my_bool read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) +my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) { uchar *pos; uint field_count; ulong length, param_count; MYSQL_DATA *fields_data; - DBUG_ENTER("read_prepare_result"); + DBUG_ENTER("cli_read_prepare_result"); mysql= mysql->last_used_con; if ((length= net_safe_read(mysql)) == packet_error) @@ -1586,18 +1586,8 @@ static my_bool read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) mysql->server_capabilities))) DBUG_RETURN(1); } - if (!(stmt->params= (MYSQL_BIND *) alloc_root(&stmt->mem_root, - sizeof(MYSQL_BIND)* - (param_count + - field_count)))) - { - set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(0); - } - stmt->bind= (stmt->params + param_count); stmt->field_count= (uint) field_count; stmt->param_count= (ulong) param_count; - mysql->status= MYSQL_STATUS_READY; DBUG_RETURN(0); } @@ -1641,14 +1631,22 @@ mysql_prepare(MYSQL *mysql, const char *query, ulong length) } init_alloc_root(&stmt->mem_root,8192,0); - if (read_prepare_result(mysql, stmt)) + if ((*mysql->read_prepare_result)(mysql, stmt)) { stmt_close(stmt, 1); DBUG_RETURN(0); } + if (!(stmt->params= (MYSQL_BIND *) alloc_root(&stmt->mem_root, + sizeof(MYSQL_BIND)* + (param_count + + field_count)))) + set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate); + stmt->bind= stmt->params + param_count; + stmt->state= MY_ST_PREPARE; stmt->mysql= mysql; mysql->stmts= list_add(mysql->stmts, &stmt->list); + mysql->status= MYSQL_STATUS_READY; stmt->list.data= stmt; DBUG_PRINT("info", ("Parameter count: %ld", stmt->param_count)); DBUG_RETURN(stmt); |