From 63c21c07fc4745485804a2ab2e9599d13e732f43 Mon Sep 17 00:00:00 2001 From: unknown <konstantin@mysql.com> Date: Fri, 17 Jun 2005 23:26:25 +0400 Subject: [PATCH] Rename all prepared statements COM_ commands to prefix with COM_STMT_ libmysql/libmysql.c: Rename. libmysqld/lib_sql.cc: Rename. sql/item_cmpfunc.cc: Use proper method to check for stmt prepare, only_prepare is removed. sql/mysql_priv.h: Remove an obsolete define. Rename mysql_stmt_free to mysql_stmt_close. sql/sql_class.h: Remove THD::only_prepare. Rename. sql/sql_lex.cc: Rename COM_PREPARE -> COM_STMT_PREPARE sql/sql_parse.cc: Rename. sql/sql_prepare.cc: Rename. sql/sql_yacc.yy: Rename. tests/mysql_client_test.c: Rename. --- include/mysql_com.h | 4 ++-- libmysql/libmysql.c | 27 ++++++++++++++------------- libmysqld/lib_sql.cc | 2 +- sql/item_cmpfunc.cc | 2 +- sql/mysql_priv.h | 4 +--- sql/sql_class.h | 8 ++------ sql/sql_lex.cc | 2 +- sql/sql_parse.cc | 18 +++++++++--------- sql/sql_prepare.cc | 21 +++++++++++---------- sql/sql_yacc.yy | 8 ++++---- tests/mysql_client_test.c | 2 +- 11 files changed, 47 insertions(+), 51 deletions(-) diff --git a/include/mysql_com.h b/include/mysql_com.h index c608a2e772..2293476c76 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -48,8 +48,8 @@ enum enum_server_command COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, 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_SET_OPTION, COM_FETCH, + COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, + COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, /* don't forget to update const char *command_name[] in sql_parse.cc */ /* Must be last */ diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 753657951e..8ee1151961 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1736,7 +1736,7 @@ myodbc_remove_escape(MYSQL *mysql,char *name) /******************* Declarations ***********************************/ -/* Default number of rows fetched per one COM_FETCH command. */ +/* Default number of rows fetched per one COM_STMT_FETCH command. */ #define DEFAULT_PREFETCH_ROWS (ulong) 1 @@ -1887,7 +1887,7 @@ void set_stmt_errmsg(MYSQL_STMT * stmt, const char *err, int errcode, } /* - Read and unpack server reply to COM_PREPARE command (sent from + Read and unpack server reply to COM_STMT_PREPARE command (sent from mysql_stmt_prepare). SYNOPSIS @@ -2082,7 +2082,7 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) mysql_use_result it won't be freed in mysql_stmt_free_result and we should get 'Commands out of sync' here. */ - if (simple_command(mysql, COM_CLOSE_STMT, buff, 4, 1)) + if (simple_command(mysql, COM_STMT_CLOSE, buff, 4, 1)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); @@ -2091,7 +2091,7 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) stmt->state= MYSQL_STMT_INIT_DONE; } - if (simple_command(mysql, COM_PREPARE, query, length, 1)) + if (simple_command(mysql, COM_STMT_PREPARE, query, length, 1)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); @@ -2175,7 +2175,7 @@ static unsigned int alloc_stmt_fields(MYSQL_STMT *stmt) /* Update result set columns metadata if it was sent again in - reply to COM_EXECUTE. + reply to COM_STMT_EXECUTE. */ static void update_stmt_fields(MYSQL_STMT *stmt) @@ -2490,7 +2490,7 @@ static my_bool store_param(MYSQL_STMT *stmt, MYSQL_BIND *param) /* - Auxilary function to send COM_EXECUTE packet to server and read reply. + Auxilary function to send COM_STMT_EXECUTE packet to server and read reply. Used from cli_stmt_execute, which is in turn used by mysql_stmt_execute. */ @@ -2507,7 +2507,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) int4store(buff, stmt->stmt_id); /* Send stmt id to server */ buff[4]= (char) stmt->flags; int4store(buff+5, 1); /* iteration count */ - if (cli_advanced_command(mysql, COM_EXECUTE, buff, sizeof(buff), + if (cli_advanced_command(mysql, COM_STMT_EXECUTE, buff, sizeof(buff), packet, length, 1) || (*mysql->methods->read_query_result)(mysql)) { @@ -2720,7 +2720,7 @@ stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row) /* Send row request to the server */ int4store(buff, stmt->stmt_id); int4store(buff + 4, stmt->prefetch_rows); /* number of rows to fetch */ - if (cli_advanced_command(mysql, COM_FETCH, buff, sizeof(buff), + if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff), NullS, 0, 1)) { set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate); @@ -2910,7 +2910,7 @@ int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt) - if data dictionary changed between prepare and execute, for example a table used in the query was altered. Note, that now (4.1.3) we always send metadata in reply to - COM_EXECUTE (even if it is not necessary), so either this or + COM_STMT_EXECUTE (even if it is not necessary), so either this or previous branch always works. TODO: send metadata only when it's really necessary and add a warning 'Metadata changed' when it's sent twice. @@ -3380,8 +3380,9 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, Note that we don't get any ok packet from the server in this case This is intentional to save bandwidth. */ - if ((*mysql->methods->advanced_command)(mysql, COM_LONG_DATA, buff, - sizeof(buff), data, length, 1)) + if ((*mysql->methods->advanced_command)(mysql, COM_STMT_SEND_LONG_DATA, + buff, sizeof(buff), data, + length, 1)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); @@ -4930,7 +4931,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) */ char buff[MYSQL_STMT_HEADER]; /* packet header: 4 bytes for stmt id */ int4store(buff, stmt->stmt_id); - if ((*mysql->methods->advanced_command)(mysql, COM_RESET_STMT, buff, + if ((*mysql->methods->advanced_command)(mysql, COM_STMT_RESET, buff, sizeof(buff), 0, 0, 0)) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, @@ -5004,7 +5005,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt) mysql->status= MYSQL_STATUS_READY; } int4store(buff, stmt->stmt_id); - if ((rc= simple_command(mysql, COM_CLOSE_STMT, buff, 4, 1))) + if ((rc= simple_command(mysql, COM_STMT_CLOSE, buff, 4, 1))) { set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno, mysql->net.sqlstate); diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 74a1c8c792..dd4ba939eb 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -220,7 +220,7 @@ static int emb_stmt_execute(MYSQL_STMT *stmt) THD *thd= (THD*)stmt->mysql->thd; thd->client_param_count= stmt->param_count; thd->client_params= stmt->params; - if (emb_advanced_command(stmt->mysql, COM_EXECUTE,0,0, + if (emb_advanced_command(stmt->mysql, COM_STMT_EXECUTE,0,0, header, sizeof(header), 1) || emb_mysql_read_query_result(stmt->mysql)) { diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index eabc89bc42..5a2e14eef2 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -649,7 +649,7 @@ bool Item_in_optimizer::fix_left(THD *thd, If it is preparation PS only then we do not know values of parameters => cant't get there values and do not need that values. */ - if (!thd->only_prepare()) + if (!thd->current_arena->is_stmt_prepare()) cache->store(args[0]); if (cache->cols() == 1) { diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 336d493d66..5d40610a80 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -559,8 +559,6 @@ struct Query_cache_query_flags #define query_cache_invalidate_by_MyISAM_filename_ref NULL #endif /*HAVE_QUERY_CACHE*/ -#define prepare_execute(A) ((A)->command == COM_EXECUTE) - bool mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create, bool silent); bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create); bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent); @@ -842,7 +840,7 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length, void mysql_stmt_execute(THD *thd, char *packet, uint packet_length); void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name); void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length); -void mysql_stmt_free(THD *thd, char *packet); +void mysql_stmt_close(THD *thd, char *packet); void mysql_stmt_reset(THD *thd, char *packet); void mysql_stmt_get_longdata(THD *thd, char *pos, ulong packet_length); void reinit_stmt_before_use(THD *thd, LEX *lex); diff --git a/sql/sql_class.h b/sql/sql_class.h index 6097fb1d4e..84c8354dfa 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1046,7 +1046,7 @@ public: #endif struct st_my_thread_var *mysys_var; /* - Type of current query: COM_PREPARE, COM_QUERY, etc. Set from + Type of current query: COM_STMT_PREPARE, COM_QUERY, etc. Set from first byte of the packet in do_command() */ enum enum_server_command command; @@ -1338,13 +1338,9 @@ public: return 0; #endif } - inline bool only_prepare() - { - return command == COM_PREPARE; - } inline bool fill_derived_tables() { - return !only_prepare() && !lex->only_view_structure(); + return !current_arena->is_stmt_prepare() && !lex->only_view_structure(); } inline gptr trans_alloc(unsigned int size) { diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 1270aab18a..d1adb66bd8 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -967,7 +967,7 @@ int yylex(void *arg, void *yythd) { THD* thd= (THD*)yythd; if ((thd->client_capabilities & CLIENT_MULTI_STATEMENTS) && - (thd->command != COM_PREPARE)) + (thd->command != COM_STMT_PREPARE)) { lex->safe_to_cache_query= 0; lex->found_semicolon=(char*) lex->ptr; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 91bccd4dd1..33339cf088 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1634,32 +1634,32 @@ bool dispatch_command(enum enum_server_command command, THD *thd, } break; } - case COM_EXECUTE: + case COM_STMT_EXECUTE: { mysql_stmt_execute(thd, packet, packet_length); break; } - case COM_FETCH: + case COM_STMT_FETCH: { mysql_stmt_fetch(thd, packet, packet_length); break; } - case COM_LONG_DATA: + case COM_STMT_SEND_LONG_DATA: { mysql_stmt_get_longdata(thd, packet, packet_length); break; } - case COM_PREPARE: + case COM_STMT_PREPARE: { mysql_stmt_prepare(thd, packet, packet_length, 0); break; } - case COM_CLOSE_STMT: + case COM_STMT_CLOSE: { - mysql_stmt_free(thd, packet); + mysql_stmt_close(thd, packet); break; } - case COM_RESET_STMT: + case COM_STMT_RESET: { mysql_stmt_reset(thd, packet); break; @@ -2199,7 +2199,7 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident, /* Read query from packet and store in thd->query - Used in COM_QUERY and COM_PREPARE + Used in COM_QUERY and COM_STMT_PREPARE DESCRIPTION Sets the following THD variables: @@ -2501,7 +2501,7 @@ mysql_execute_command(THD *thd) lex->prepared_stmt_name.str, query_len, query_str)); } - thd->command= COM_PREPARE; + thd->command= COM_STMT_PREPARE; if (!(res= mysql_stmt_prepare(thd, query_str, query_len + 1, &lex->prepared_stmt_name))) send_ok(thd, 0L, 0L, "Statement prepared"); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 7af881790e..80ebb09bac 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -19,9 +19,9 @@ This file contains the implementation of prepare and executes. Prepare: - - Server gets the query from client with command 'COM_PREPARE'; + - Server gets the query from client with command 'COM_STMT_PREPARE'; in the following format: - [COM_PREPARE:1] [query] + [COM_STMT_PREPARE:1] [query] - Parse the query and recognize any parameter markers '?' and store its information list in lex->param_list - Allocate a new statement for this prepare; and keep this in @@ -37,10 +37,10 @@ Prepare: Prepare-execute: - - Server gets the command 'COM_EXECUTE' to execute the + - Server gets the command 'COM_STMT_EXECUTE' to execute the previously prepared query. If there is any param markers; then client will send the data in the following format: - [COM_EXECUTE:1] + [COM_STMT_EXECUTE:1] [STMT_ID:4] [NULL_BITS:(param_count+7)/8)] [TYPES_SUPPLIED_BY_CLIENT(0/1):1] @@ -55,9 +55,10 @@ Prepare-execute: Long data handling: - - Server gets the long data in pieces with command type 'COM_LONG_DATA'. + - Server gets the long data in pieces with command type + 'COM_STMT_SEND_LONG_DATA'. - The packet recieved will have the format as: - [COM_LONG_DATA:1][STMT_ID:4][parameter_number:2][data] + [COM_STMT_SEND_LONG_DATA:1][STMT_ID:4][parameter_number:2][data] - data from the packet is appended to long data value buffer for this placeholder. - It's up to the client to check for read data ended. The server doesn't @@ -2117,7 +2118,7 @@ void mysql_sql_stmt_execute(THD *thd, LEX_STRING *stmt_name) { my_error(ER_WRONG_ARGUMENTS, MYF(0), "EXECUTE"); } - thd->command= COM_EXECUTE; /* For nice messages in general log */ + thd->command= COM_STMT_EXECUTE; /* For nice messages in general log */ execute_stmt(thd, stmt, &expanded_query); DBUG_VOID_RETURN; } @@ -2185,7 +2186,7 @@ static void execute_stmt(THD *thd, Prepared_statement *stmt, /* - COM_FETCH handler: fetches requested amount of rows from cursor + COM_STMT_FETCH handler: fetches requested amount of rows from cursor SYNOPSIS mysql_stmt_fetch() @@ -2290,13 +2291,13 @@ void mysql_stmt_reset(THD *thd, char *packet) Note: we don't send any reply to that command. */ -void mysql_stmt_free(THD *thd, char *packet) +void mysql_stmt_close(THD *thd, char *packet) { /* There is always space for 4 bytes in packet buffer */ ulong stmt_id= uint4korr(packet); Prepared_statement *stmt; - DBUG_ENTER("mysql_stmt_free"); + DBUG_ENTER("mysql_stmt_close"); statistic_increment(thd->status_var.com_stmt_close, &LOCK_status); if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_close"))) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 892d251680..508948bede 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -914,7 +914,7 @@ deallocate: { THD *thd=YYTHD; LEX *lex= thd->lex; - if (thd->command == COM_PREPARE) + if (thd->command == COM_STMT_PREPARE) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; @@ -939,7 +939,7 @@ prepare: { THD *thd=YYTHD; LEX *lex= thd->lex; - if (thd->command == COM_PREPARE) + if (thd->command == COM_STMT_PREPARE) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; @@ -974,7 +974,7 @@ execute: { THD *thd=YYTHD; LEX *lex= thd->lex; - if (thd->command == COM_PREPARE) + if (thd->command == COM_STMT_PREPARE) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; @@ -6902,7 +6902,7 @@ param_marker: { THD *thd=YYTHD; LEX *lex= thd->lex; - if (thd->command == COM_PREPARE) + if (thd->command == COM_STMT_PREPARE) { Item_param *item= new Item_param((uint) (lex->tok_start - (uchar *) thd->query)); diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 7a683659df..1cde3a1e97 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -13040,7 +13040,7 @@ static void test_bug9478() int4store(buff, stmt->stmt_id); buff[4]= 0; /* Flag */ int4store(buff+5, 1); /* Return 1 row */ - rc= ((*mysql->methods->advanced_command)(mysql, COM_EXECUTE, buff, + rc= ((*mysql->methods->advanced_command)(mysql, COM_STMT_EXECUTE, buff, sizeof(buff), 0,0,1) || (*mysql->methods->read_query_result)(mysql)); DIE_UNLESS(rc); -- 2.30.9