summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2003-09-12 19:35:34 +0500
committerunknown <hf@deer.(none)>2003-09-12 19:35:34 +0500
commitdc250a6efc8bc451b301c74b494200dfb3dd3f8b (patch)
tree46609c9322de2696057f154dff31ea468a3f6280 /libmysql
parentd6f15e9d02d7fb33627c937ff47c948dd9ae0b2e (diff)
downloadmariadb-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.h1
-rw-r--r--libmysql/libmysql.c24
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);