diff options
author | unknown <hf@deer.(none)> | 2003-09-12 19:36:42 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2003-09-12 19:36:42 +0500 |
commit | 774c65c7a37b0b02912940dd3c804fb526b68afa (patch) | |
tree | 38b0ef8c6f4b6f0091d8017c2347b99f5e902787 | |
parent | 11930efba69eb4d0d76affe34a1323cdd5b5bd79 (diff) | |
parent | dc250a6efc8bc451b301c74b494200dfb3dd3f8b (diff) | |
download | mariadb-git-774c65c7a37b0b02912940dd3c804fb526b68afa.tar.gz |
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.stmt
include/mysql.h:
Auto merged
libmysql/libmysql.c:
Auto merged
libmysqld/libmysqld.c:
Auto merged
-rw-r--r-- | include/mysql.h | 1 | ||||
-rw-r--r-- | libmysql/client_settings.h | 1 | ||||
-rw-r--r-- | libmysql/libmysql.c | 24 | ||||
-rw-r--r-- | libmysqld/libmysqld.c | 6 | ||||
-rw-r--r-- | sql-common/client.c | 3 | ||||
-rw-r--r-- | sql/client_settings.h | 1 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 13 |
7 files changed, 31 insertions, 18 deletions
diff --git a/include/mysql.h b/include/mysql.h index a4e4e9fcee4..453325453af 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -558,6 +558,7 @@ typedef struct st_mysql_methods MYSQL_ROW column, uint field_count); MYSQL_RES * (STDCALL *list_fields)(MYSQL *mysql, const char *table, const char *wild); + my_bool (STDCALL *read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); } MYSQL_METHODS; MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query, 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 68f596c833d..4652f3e8986 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1563,13 +1563,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) @@ -1593,18 +1593,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); } @@ -1648,14 +1638,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); diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c index 56be78e3509..579ff8eadbe 100644 --- a/libmysqld/libmysqld.c +++ b/libmysqld/libmysqld.c @@ -211,7 +211,11 @@ emb_list_fields(MYSQL *mysql, const char *table, const char *wild) DBUG_RETURN(result); } - +my_bool STDCALL emb_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) +{ + stmt->fields= mysql->result->fields; + stmt->alloc; +} /* ** Note that the mysql argument must be initialized with mysql_init() diff --git a/sql-common/client.c b/sql-common/client.c index 6372adb8550..4d1318151b3 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1407,7 +1407,8 @@ static MYSQL_METHODS client_methods= cli_mysql_store_result, cli_mysql_use_result, cli_fetch_lengths, - cli_list_fields + cli_list_fields, + cli_read_prepare_result }; MYSQL * STDCALL diff --git a/sql/client_settings.h b/sql/client_settings.h index e31a75bdddd..97224d9890f 100644 --- a/sql/client_settings.h +++ b/sql/client_settings.h @@ -33,4 +33,5 @@ #undef _CUSTOMCONFIG_ #define cli_list_fields NULL +#define cli_read_prepare_result NULL diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 4abbbcaff1f..088036e4c7e 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -142,6 +142,7 @@ void free_prep_stmt(PREP_STMT *stmt, TREE_FREE mode, void *not_used) Send prepared stmt info to client after prepare */ +#ifndef EMBEDDED_LIBRARY static bool send_prep_stmt(PREP_STMT *stmt, uint columns) { NET *net=&stmt->thd->net; @@ -150,14 +151,20 @@ static bool send_prep_stmt(PREP_STMT *stmt, uint columns) int4store(buff+1, stmt->stmt_id); int2store(buff+5, columns); int2store(buff+7, stmt->param_count); -#ifndef EMBEDDED_LIBRARY /* This should be fixed to work with prepared statements */ return (my_net_write(net, buff, sizeof(buff)) || net_flush(net)); +} #else - return true; -#endif +static bool send_prep_stmt(PREP_STMT *stmt, uint columns) +{ + MYSQL_STMT *client_stmt= stmt->thd->client_stmt; + + client_stmt->stmt_id= stmt->stmt_id; + client_stmt->field_count= columns; + client_stmt->param_count= stmt->param_count; } +#endif /*!EMBEDDED_LIBRAYR*/ /* Send information about all item parameters |