On Thu, 27 Aug 2009 09:37:12 +0200, Roy Lyseng <Roy.Lyseng@stripped> wrote:
> #At file:///home/rl136806/mysql/repo/mysql-reeng/ based on
> revid:jon.hauglid@stripped
>
> 2800 Roy Lyseng 2009-08-27
> WL#5070 - Prepare Sql_cmd class for addition of new statement
> classes.
> - Renamed class Sql_statement to Sql_cmd.
> - Added a new file sql/sql_cmd.h and moved the definition of class
> Sql_cmd,
> including the enum_sql_command, to this file.
> - Removed the m_lex member from the base class.
> - Added a virtual method sql_command_code() that will return the
NITPICK: C++ doesn't have methods, it has (virtual) member functions.
> legacy
> SQLCOM_ code from the SQL command object.
> sql/sql_class.h
> Updated friend classes.
> sql/sql_cmd.h
> Contains definition of class Sql_cmd and enum_sql_command.
> sql/sql_error.h
> Updated friend classes.
> sql/sql_lex.h
> Removed definition of class Sql_statement and enum_sql_command.
> sql/sql_signal.cc
> Updated class names.
> sql/sql_signal.h
> Updated class names.
>
> added:
> sql/sql_cmd.h
> modified:
> sql/Makefile.am
> sql/sql_class.h
> sql/sql_error.cc
> sql/sql_error.h
> sql/sql_lex.cc
> sql/sql_lex.h
> sql/sql_parse.cc
> sql/sql_signal.cc
> sql/sql_signal.h
> sql/sql_yacc.yy
> === modified file 'sql/Makefile.am'
> --- a/sql/Makefile.am 2009-07-31 20:21:25 +0000
> +++ b/sql/Makefile.am 2009-08-27 07:33:27 +0000
> @@ -103,7 +103,7 @@ noinst_HEADERS = item.h item_func.h item
> probes.h sql_audit.h transaction.h \
> contributors.h sql_servers.h bml.h \
> si_objects.h si_logs.h sql_plist.h mdl.h records.h \
> - sql_signal.h \
> + sql_cmd.h sql_signal.h \
> rpl_handler.h replication.h sql_prepare.h debug_sync.h
> mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
>
> === modified file 'sql/sql_class.h'
> --- a/sql/sql_class.h 2009-08-26 09:14:05 +0000
> +++ b/sql/sql_class.h 2009-08-27 07:33:27 +0000
> @@ -2560,9 +2560,9 @@ private:
> To raise a SQL condition, the code should use the public
> raise_error() or raise_warning() methods provided by class THD.
> */
> - friend class Signal_common;
> - friend class Signal_statement;
> - friend class Resignal_statement;
> + friend class Sql_cmd_common_signal;
> + friend class Sql_cmd_signal;
> + friend class Sql_cmd_resignal;
> friend void push_warning(THD*, MYSQL_ERROR::enum_warning_level, uint,
> const char*);
> friend void my_message_sql(uint, const char *, myf);
>
> === added file 'sql/sql_cmd.h'
> --- a/sql/sql_cmd.h 1970-01-01 00:00:00 +0000
> +++ b/sql/sql_cmd.h 2009-08-27 07:33:27 +0000
> @@ -0,0 +1,169 @@
> +/* Copyright 2009 Sun Microsystems, Inc.
> +
> + This program is free software; you can redistribute it and/or modify
> + it under the terms of the GNU General Public License as published by
> + the Free Software Foundation; version 2 of the License.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU General Public License for more details.
> +
> + You should have received a copy of the GNU General Public License
> + along with this program; if not, write to the Free Software
> + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
> 02111-1307 USA */
> +
> +/**
> + @file Representation of an SQL command.
> +*/
> +
> +#ifndef SQL_CMD_H
> +#define SQL_CMD_H
I think this should be SQL_CMD_H_INCLUDED
> +
> +/*
> + When a command is added here, be sure it's also added in mysqld.cc
> + in "struct show_var_st status_vars[]= {" ...
> +
> + If the command returns a result set or is not allowed in stored
> + functions or triggers, please also make sure that
> + sp_get_flags_for_command (sp_head.cc) returns proper flags for the
> + added SQLCOM_.
> +*/
> +
> +enum enum_sql_command {
> + SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX,
> SQLCOM_ALTER_TABLE,
> + SQLCOM_UPDATE, SQLCOM_INSERT, SQLCOM_INSERT_SELECT,
> + SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE, SQLCOM_DROP_INDEX,
> +
> + SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS,
> + SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_STATUS,
> + SQLCOM_SHOW_ENGINE_LOGS, SQLCOM_SHOW_ENGINE_STATUS,
> SQLCOM_SHOW_ENGINE_MUTEX,
> + SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT,
> SQLCOM_SHOW_SLAVE_STAT,
> + SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS,
> + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB,
> SQLCOM_SHOW_TABLE_STATUS,
> + SQLCOM_SHOW_TRIGGERS,
> +
> + SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES,
> + SQLCOM_GRANT,
> + SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB, SQLCOM_ALTER_DB,
> + SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT,
> + SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION,
> + SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK,
> + SQLCOM_ASSIGN_TO_KEYCACHE, SQLCOM_PRELOAD_KEYS,
> + SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_ANALYZE,
> + SQLCOM_ROLLBACK, SQLCOM_ROLLBACK_TO_SAVEPOINT,
> + SQLCOM_COMMIT, SQLCOM_SAVEPOINT, SQLCOM_RELEASE_SAVEPOINT,
> + SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
> + SQLCOM_BEGIN, SQLCOM_CHANGE_MASTER,
> + SQLCOM_RENAME_TABLE,
> + SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_PURGE_BEFORE, SQLCOM_SHOW_BINLOGS,
> + SQLCOM_SHOW_OPEN_TABLES,
> + SQLCOM_HA_OPEN, SQLCOM_HA_CLOSE, SQLCOM_HA_READ,
> + SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI,
> + SQLCOM_SHOW_BINLOG_EVENTS, SQLCOM_SHOW_NEW_MASTER, SQLCOM_DO,
> + SQLCOM_SHOW_WARNS, SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS,
> + SQLCOM_SHOW_STORAGE_ENGINES, SQLCOM_SHOW_PRIVILEGES,
> + SQLCOM_HELP, SQLCOM_CREATE_USER, SQLCOM_DROP_USER, SQLCOM_RENAME_USER,
> + SQLCOM_REVOKE_ALL, SQLCOM_CHECKSUM,
> + SQLCOM_CREATE_PROCEDURE, SQLCOM_CREATE_SPFUNCTION, SQLCOM_CALL,
> + SQLCOM_DROP_PROCEDURE, SQLCOM_ALTER_PROCEDURE,SQLCOM_ALTER_FUNCTION,
> + SQLCOM_SHOW_CREATE_PROC, SQLCOM_SHOW_CREATE_FUNC,
> + SQLCOM_SHOW_STATUS_PROC, SQLCOM_SHOW_STATUS_FUNC,
> + SQLCOM_PREPARE, SQLCOM_EXECUTE, SQLCOM_DEALLOCATE_PREPARE,
> + SQLCOM_CREATE_VIEW, SQLCOM_DROP_VIEW,
> + SQLCOM_CREATE_TRIGGER, SQLCOM_DROP_TRIGGER,
> + SQLCOM_XA_START, SQLCOM_XA_END, SQLCOM_XA_PREPARE,
> + SQLCOM_XA_COMMIT, SQLCOM_XA_ROLLBACK, SQLCOM_XA_RECOVER,
> + SQLCOM_SHOW_PROC_CODE, SQLCOM_SHOW_FUNC_CODE,
> + SQLCOM_ALTER_TABLESPACE,
> + SQLCOM_INSTALL_PLUGIN, SQLCOM_UNINSTALL_PLUGIN,
> + SQLCOM_SHOW_AUTHORS, SQLCOM_BINLOG_BASE64_EVENT,
> + SQLCOM_SHOW_PLUGINS,
> + SQLCOM_SHOW_CONTRIBUTORS,
> + SQLCOM_CREATE_SERVER, SQLCOM_DROP_SERVER, SQLCOM_ALTER_SERVER,
> + SQLCOM_CREATE_EVENT, SQLCOM_ALTER_EVENT, SQLCOM_DROP_EVENT,
> + SQLCOM_SHOW_CREATE_EVENT, SQLCOM_SHOW_EVENTS,
> + SQLCOM_SHOW_CREATE_TRIGGER,
> + SQLCOM_ALTER_DB_UPGRADE,
> + SQLCOM_BACKUP, SQLCOM_RESTORE, SQLCOM_PURGE_BACKUP_LOGS,
> + SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES,
> + SQLCOM_SIGNAL, SQLCOM_RESIGNAL,
> + SQLCOM_SHOW_RELAYLOG_EVENTS,
> +
> + /*
> + When a command is added here, be sure it's also added in mysqld.cc
> + in "struct show_var_st status_vars[]= {" ...
> + */
> + /*
> + Conditional SQL command codes are not recommended, but if you need
> to
> + define them, make sure that they are defined immediately before
> SQLCOM_END.
> + */
> +#ifdef BACKUP_TEST
> + SQLCOM_BACKUP_TEST,
> +#endif
> + /* This should be the last !!! */
> + SQLCOM_END
> +};
> +
> +/**
> + @class Sql_cmd - Representation of an SQL command.
> +
> + This class is an interface between the parser and the runtime.
> + The parser builds the appropriate derived classes of Sql_cmd
> + to represent a SQL statement in the parsed tree.
> + The execute() method in the derived classes of Sql_cmd contain the
> runtime
> + implementation.
> + Note that this interface is used for SQL statements recently
> implemented,
> + the code for older statements tend to load the LEX structure with more
> + attributes instead.
> + Implement new statements by sub-classing Sql_cmd, as this improves
> + code modularity (see the 'big switch' in dispatch_command()), and
> decreases
> + the total size of the LEX structure (therefore saving memory in stored
> + programs).
> + The recommended name of a derived class of Sql_cmd is
> Sql_cmd_<derived>.
> +
> + Notice that the Sql_cmd class should not be confused with the
> Statement class.
> + Statement is a class that is used to manage an SQL command or a set
> + of SQL commands. When the SQL statement text is analyzed, the parser
> will
> + create one or more Sql_cmd objects to represent the actual SQL
> commands.
> +*/
> +class Sql_cmd : public Sql_alloc
> +{
> +private:
> + Sql_cmd(const Sql_cmd &); // No copy constructor wanted
> + void operator=(Sql_cmd &); // No assignment operator wanted
> +
> +public:
> + /**
> + @brief Return the command code for this statement
> + */
Add blank line
> + virtual enum_sql_command sql_command_code() const = 0;
> + /**
> + Execute this SQL statement.
> + @param thd the current thread.
> + @retval false on success.
> + @retval true on error
> + */
> + virtual bool execute(THD *thd) = 0;
> +
> +protected:
> + /**
> + Constructor.
> + */
This function is obvious, no need for the comment. Similarly for
destructor below.
> + Sql_cmd()
> + {}
> +
> + /** Destructor. */
> + virtual ~Sql_cmd()
> + {
> + /*
> + Sql_cmd objects are allocated in thd->mem_root.
> + In MySQL, the C++ destructor is never called, the underlying
> MEM_ROOT is
> + simply destroyed instead.
> + Do not rely on the destructor for any cleanup.
> + */
> + DBUG_ASSERT(FALSE);
> + }
> +};
> +
> +#endif /* Include guard */
I would prefer
# endif // SQL_CMD_H_INCLUDED
>
> === modified file 'sql/sql_error.cc'
> --- a/sql/sql_error.cc 2009-07-30 09:41:30 +0000
> +++ b/sql/sql_error.cc 2009-08-27 07:33:27 +0000
> @@ -153,7 +153,7 @@ This file contains the implementation of
> This is implemented by using 'String MYSQL_ERROR::m_message_text'.
> The UTF8 -> error_message_charset_info conversion is implemented in
> - Signal_common::eval_signal_informations() (for path #B and #C).
> + Sql_cmd_common_signal::eval_signal_informations() (for path #B and
> #C).
> Future work
> -----------
>
> === modified file 'sql/sql_error.h'
> --- a/sql/sql_error.h 2009-07-30 09:41:30 +0000
> +++ b/sql/sql_error.h 2009-08-27 07:33:27 +0000
> @@ -213,9 +213,9 @@ private:
> */
> friend class THD;
> friend class Warning_info;
> - friend class Signal_common;
> - friend class Signal_statement;
> - friend class Resignal_statement;
> + friend class Sql_cmd_common_signal;
> + friend class Sql_cmd_signal;
> + friend class Sql_cmd_resignal;
> friend class sp_rcontext;
> /**
> @@ -512,7 +512,7 @@ private:
> /** Read only status. */
> bool m_read_only;
> - friend class Resignal_statement;
> + friend class Sql_cmd_resignal;
> };
> ///////////////////////////////////////////////////////////////////////////
>
> === modified file 'sql/sql_lex.cc'
> --- a/sql/sql_lex.cc 2009-07-28 14:16:37 +0000
> +++ b/sql/sql_lex.cc 2009-08-27 07:33:27 +0000
> @@ -341,6 +341,7 @@ void lex_start(THD *thd)
> lex->select_lex.group_list.empty();
> lex->select_lex.order_list.empty();
> lex->sql_command= SQLCOM_END;
> + lex->m_sql_cmd= NULL;
> lex->duplicates= DUP_ERROR;
> lex->ignore= 0;
> lex->spname= NULL;
>
> === modified file 'sql/sql_lex.h'
> --- a/sql/sql_lex.h 2009-08-26 09:14:05 +0000
> +++ b/sql/sql_lex.h 2009-08-27 07:33:27 +0000
> @@ -55,86 +55,7 @@ class Event_parse_data;
> #endif
> #endif
> -/*
> - When a command is added here, be sure it's also added in mysqld.cc
> - in "struct show_var_st status_vars[]= {" ...
> -
> - If the command returns a result set or is not allowed in stored
> - functions or triggers, please also make sure that
> - sp_get_flags_for_command (sp_head.cc) returns proper flags for the
> - added SQLCOM_.
> -*/
> -
> -enum enum_sql_command {
> - SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX,
> SQLCOM_ALTER_TABLE,
> - SQLCOM_UPDATE, SQLCOM_INSERT, SQLCOM_INSERT_SELECT,
> - SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE, SQLCOM_DROP_INDEX,
> -
> - SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS,
> - SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_STATUS,
> - SQLCOM_SHOW_ENGINE_LOGS, SQLCOM_SHOW_ENGINE_STATUS,
> SQLCOM_SHOW_ENGINE_MUTEX,
> - SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT,
> SQLCOM_SHOW_SLAVE_STAT,
> - SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS,
> - SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB,
> SQLCOM_SHOW_TABLE_STATUS,
> - SQLCOM_SHOW_TRIGGERS,
> -
> - SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES,
> - SQLCOM_GRANT,
> - SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB, SQLCOM_ALTER_DB,
> - SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT,
> - SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION,
> - SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK,
> - SQLCOM_ASSIGN_TO_KEYCACHE, SQLCOM_PRELOAD_KEYS,
> - SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_ANALYZE,
> - SQLCOM_ROLLBACK, SQLCOM_ROLLBACK_TO_SAVEPOINT,
> - SQLCOM_COMMIT, SQLCOM_SAVEPOINT, SQLCOM_RELEASE_SAVEPOINT,
> - SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
> - SQLCOM_BEGIN, SQLCOM_CHANGE_MASTER,
> - SQLCOM_RENAME_TABLE,
> - SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_PURGE_BEFORE, SQLCOM_SHOW_BINLOGS,
> - SQLCOM_SHOW_OPEN_TABLES,
> - SQLCOM_HA_OPEN, SQLCOM_HA_CLOSE, SQLCOM_HA_READ,
> - SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI,
> - SQLCOM_SHOW_BINLOG_EVENTS, SQLCOM_SHOW_NEW_MASTER, SQLCOM_DO,
> - SQLCOM_SHOW_WARNS, SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS,
> - SQLCOM_SHOW_STORAGE_ENGINES, SQLCOM_SHOW_PRIVILEGES,
> - SQLCOM_HELP, SQLCOM_CREATE_USER, SQLCOM_DROP_USER, SQLCOM_RENAME_USER,
> - SQLCOM_REVOKE_ALL, SQLCOM_CHECKSUM,
> - SQLCOM_CREATE_PROCEDURE, SQLCOM_CREATE_SPFUNCTION, SQLCOM_CALL,
> - SQLCOM_DROP_PROCEDURE, SQLCOM_ALTER_PROCEDURE,SQLCOM_ALTER_FUNCTION,
> - SQLCOM_SHOW_CREATE_PROC, SQLCOM_SHOW_CREATE_FUNC,
> - SQLCOM_SHOW_STATUS_PROC, SQLCOM_SHOW_STATUS_FUNC,
> - SQLCOM_PREPARE, SQLCOM_EXECUTE, SQLCOM_DEALLOCATE_PREPARE,
> - SQLCOM_CREATE_VIEW, SQLCOM_DROP_VIEW,
> - SQLCOM_CREATE_TRIGGER, SQLCOM_DROP_TRIGGER,
> - SQLCOM_XA_START, SQLCOM_XA_END, SQLCOM_XA_PREPARE,
> - SQLCOM_XA_COMMIT, SQLCOM_XA_ROLLBACK, SQLCOM_XA_RECOVER,
> - SQLCOM_SHOW_PROC_CODE, SQLCOM_SHOW_FUNC_CODE,
> - SQLCOM_ALTER_TABLESPACE,
> - SQLCOM_INSTALL_PLUGIN, SQLCOM_UNINSTALL_PLUGIN,
> - SQLCOM_SHOW_AUTHORS, SQLCOM_BINLOG_BASE64_EVENT,
> - SQLCOM_SHOW_PLUGINS,
> - SQLCOM_SHOW_CONTRIBUTORS,
> - SQLCOM_CREATE_SERVER, SQLCOM_DROP_SERVER, SQLCOM_ALTER_SERVER,
> - SQLCOM_CREATE_EVENT, SQLCOM_ALTER_EVENT, SQLCOM_DROP_EVENT,
> - SQLCOM_SHOW_CREATE_EVENT, SQLCOM_SHOW_EVENTS,
> - SQLCOM_SHOW_CREATE_TRIGGER,
> - SQLCOM_ALTER_DB_UPGRADE,
> - SQLCOM_BACKUP, SQLCOM_RESTORE, SQLCOM_PURGE_BACKUP_LOGS,
> -#ifdef BACKUP_TEST
> - SQLCOM_BACKUP_TEST,
> -#endif
> - SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES,
> - SQLCOM_SIGNAL, SQLCOM_RESIGNAL,
> - SQLCOM_SHOW_RELAYLOG_EVENTS,
> -
> - /*
> - When a command is added here, be sure it's also added in mysqld.cc
> - in "struct show_var_st status_vars[]= {" ...
> - */
> - /* This should be the last !!! */
> - SQLCOM_END
> -};
> +#include "sql_cmd.h"
> // describe/explain types
> #define DESCRIBE_NORMAL 1
> @@ -1560,62 +1481,6 @@ public:
> CHARSET_INFO *m_underscore_cs;
> };
> -/**
> - Abstract representation of a statement.
> - This class is an interface between the parser and the runtime.
> - The parser builds the appropriate sub classes of Sql_statement
> - to represent a SQL statement in the parsed tree.
> - The execute() method in the sub classes contain the runtime
> implementation.
> - Note that this interface is used for SQL statement recently
> implemented,
> - the code for older statements tend to load the LEX structure with more
> - attributes instead.
> - The recommended way to implement new statements is to sub-class
> - Sql_statement, as this improves code modularity (see the 'big switch'
> in
> - dispatch_command()), and decrease the total size of the LEX structure
> - (therefore saving memory in stored programs).
> -*/
> -class Sql_statement : public Sql_alloc
> -{
> -public:
> - /**
> - Execute this SQL statement.
> - @param thd the current thread.
> - @return 0 on success.
> - */
> - virtual bool execute(THD *thd) = 0;
> -
> -protected:
> - /**
> - Constructor.
> - @param lex the LEX structure that represents parts of this
> statement.
> - */
> - Sql_statement(struct LEX *lex)
> - : m_lex(lex)
> - {}
> -
> - /** Destructor. */
un-necessary comment.
> - virtual ~Sql_statement()
> - {
> - /*
> - Sql_statement objects are allocated in thd->mem_root.
> - In MySQL, the C++ destructor is never called, the underlying
> MEM_ROOT is
> - simply destroyed instead.
> - Do not rely on the destructor for any cleanup.
> - */
> - DBUG_ASSERT(FALSE);
> - }
> -
> -protected:
> - /**
> - The legacy LEX structure for this statement.
> - The LEX structure contains the existing properties of the parsed
> tree.
> - TODO: with time, attributes from LEX should move to sub classes of
> - Sql_statement, so that the parser only builds Sql_statement objects
> - with the minimum set of attributes, instead of a LEX structure that
> - contains the collection of every possible attribute.
> - */
> - struct LEX *m_lex;
> -};
> /* The state of the lex parsing. This is saved in the THD struct */
> @@ -1721,7 +1586,7 @@ struct LEX: public Query_tables_list
> nesting_map allow_sum_func;
> enum_sql_command sql_command;
> - Sql_statement *m_stmt;
> + Sql_cmd *m_sql_cmd;
> /*
> Usually `expr` rule of yacc is quite reused but some commands better
>
> === modified file 'sql/sql_parse.cc'
> --- a/sql/sql_parse.cc 2009-08-25 07:22:47 +0000
> +++ b/sql/sql_parse.cc 2009-08-27 07:33:27 +0000
> @@ -4809,8 +4809,8 @@ create_sp_error:
> }
> case SQLCOM_SIGNAL:
> case SQLCOM_RESIGNAL:
> - DBUG_ASSERT(lex->m_stmt != NULL);
> - res= lex->m_stmt->execute(thd);
> + DBUG_ASSERT(lex->m_sql_cmd != NULL);
> + res= lex->m_sql_cmd->execute(thd);
> break;
> default:
> #ifndef EMBEDDED_LIBRARY
>
> === modified file 'sql/sql_signal.cc'
> --- a/sql/sql_signal.cc 2009-07-30 09:41:30 +0000
> +++ b/sql/sql_signal.cc 2009-08-27 07:33:27 +0000
> @@ -91,7 +91,8 @@ void Set_signal_information::clear()
> memset(m_item, 0, sizeof(m_item));
> }
> -void Signal_common::assign_defaults(MYSQL_ERROR *cond,
> +void Sql_cmd_common_signal::assign_defaults(
> + MYSQL_ERROR *cond,
> bool set_level_code,
> MYSQL_ERROR::enum_warning_level
> level,
> int sqlcode)
> @@ -105,7 +106,7 @@ void Signal_common::assign_defaults(MYSQ
> cond->set_builtin_message_text(ER(sqlcode));
> }
> -void Signal_common::eval_defaults(THD *thd, MYSQL_ERROR *cond)
> +void Sql_cmd_common_signal::eval_defaults(THD *thd, MYSQL_ERROR *cond)
> {
> DBUG_ASSERT(cond);
> @@ -260,7 +261,7 @@ static int assign_condition_item(MEM_ROO
> }
> -int Signal_common::eval_signal_informations(THD *thd, MYSQL_ERROR *cond)
> +int Sql_cmd_common_signal::eval_signal_informations(THD *thd,
> MYSQL_ERROR *cond)
> {
> struct cond_item_map
> {
> @@ -292,7 +293,7 @@ int Signal_common::eval_signal_informati
> String *member;
> const LEX_STRING *name;
> - DBUG_ENTER("Signal_common::eval_signal_informations");
> + DBUG_ENTER("Sql_cmd_common_signal::eval_signal_informations");
> for (i= FIRST_DIAG_SET_PROPERTY;
> i <= LAST_DIAG_SET_PROPERTY;
> @@ -418,13 +419,13 @@ end:
> DBUG_RETURN(result);
> }
> -bool Signal_common::raise_condition(THD *thd, MYSQL_ERROR *cond)
> +bool Sql_cmd_common_signal::raise_condition(THD *thd, MYSQL_ERROR *cond)
> {
> bool result= TRUE;
> - DBUG_ENTER("Signal_common::raise_condition");
> + DBUG_ENTER("Sql_cmd_common_signal::raise_condition");
> - DBUG_ASSERT(m_lex->query_tables == NULL);
> + DBUG_ASSERT(thd->lex->query_tables == NULL);
> eval_defaults(thd, cond);
> if (eval_signal_informations(thd, cond))
> @@ -451,12 +452,12 @@ bool Signal_common::raise_condition(THD
> DBUG_RETURN(result);
> }
> -bool Signal_statement::execute(THD *thd)
> +bool Sql_cmd_signal::execute(THD *thd)
> {
> bool result= TRUE;
> MYSQL_ERROR cond(thd->mem_root);
> - DBUG_ENTER("Signal_statement::execute");
> + DBUG_ENTER("Sql_cmd_signal::execute");
> thd->stmt_da->reset_diagnostics_area();
> thd->row_count_func= 0;
> @@ -468,12 +469,12 @@ bool Signal_statement::execute(THD *thd)
> }
> -bool Resignal_statement::execute(THD *thd)
> +bool Sql_cmd_resignal::execute(THD *thd)
> {
> MYSQL_ERROR *signaled;
> int result= TRUE;
> - DBUG_ENTER("Resignal_statement::execute");
> + DBUG_ENTER("Sql_cmd_resignal::execute");
> thd->warning_info->m_warn_id= thd->query_id;
> @@ -507,4 +508,3 @@ bool Resignal_statement::execute(THD *th
> DBUG_RETURN(result);
> }
> -
>
> === modified file 'sql/sql_signal.h'
> --- a/sql/sql_signal.h 2009-07-30 09:41:30 +0000
> +++ b/sql/sql_signal.h 2009-08-27 07:33:27 +0000
> @@ -17,27 +17,25 @@
> #define SQL_SIGNAL_H
> /**
> - Signal_common represents the common properties of the SIGNAL and
> RESIGNAL
> - statements.
> + Sql_cmd_common_signal represents the common properties of the
> + SIGNAL and RESIGNAL statements.
> */
> -class Signal_common : public Sql_statement
> +class Sql_cmd_common_signal : public Sql_cmd
> {
> protected:
> /**
> Constructor.
> - @param lex the LEX structure for this statement.
> @param cond the condition signaled if any, or NULL.
> @param set collection of signal condition item assignments.
> */
> - Signal_common(LEX *lex,
> - const sp_cond_type_t *cond,
> - const Set_signal_information& set)
> - : Sql_statement(lex),
> + Sql_cmd_common_signal(const sp_cond_type_t *cond,
> + const Set_signal_information& set)
> + : Sql_cmd(),
> m_cond(cond),
> m_set_signal_information(set)
> {}
> - virtual ~Signal_common()
> + virtual ~Sql_cmd_common_signal()
> {}
> /**
> @@ -91,26 +89,27 @@ protected:
> };
> /**
> - Signal_statement represents a SIGNAL statement.
> + Sql_cmd_signal represents a SIGNAL statement.
> */
> -class Signal_statement : public Signal_common
> +class Sql_cmd_signal : public Sql_cmd_common_signal
> {
> public:
> /**
> Constructor, used to represent a SIGNAL statement.
> - @param lex the LEX structure for this statement.
> @param cond the SQL condition to signal (required).
> @param set the collection of signal informations to signal.
> */
> - Signal_statement(LEX *lex,
> - const sp_cond_type_t *cond,
> - const Set_signal_information& set)
> - : Signal_common(lex, cond, set)
> + Sql_cmd_signal(const sp_cond_type_t *cond,
> + const Set_signal_information& set)
> + : Sql_cmd_common_signal(cond, set)
> {}
> - virtual ~Signal_statement()
> + virtual ~Sql_cmd_signal()
> {}
> -
Add blank line between functions.
> + virtual enum_sql_command sql_command_code() const
> + {
> + return SQLCOM_SIGNAL;
> + }
> /**
> Execute a SIGNAL statement at runtime.
> @param thd the current thread.
This is the implementation of the right?
So this function should only be documented once,
with a reference to the interface here.
> @@ -120,30 +119,32 @@ public:
> };
> /**
> - Resignal_statement represents a RESIGNAL statement.
> + Sql_cmd_resignal represents a RESIGNAL statement.
> */
> -class Resignal_statement : public Signal_common
> +class Sql_cmd_resignal : public Sql_cmd_common_signal
> {
> public:
> /**
> Constructor, used to represent a RESIGNAL statement.
> - @param lex the LEX structure for this statement.
> @param cond the SQL condition to resignal (optional, may be NULL).
> @param set the collection of signal informations to resignal.
> */
> - Resignal_statement(LEX *lex,
> - const sp_cond_type_t *cond,
> - const Set_signal_information& set)
> - : Signal_common(lex, cond, set)
> + Sql_cmd_resignal(const sp_cond_type_t *cond,
> + const Set_signal_information& set)
> + : Sql_cmd_common_signal(cond, set)
> {}
> - virtual ~Resignal_statement()
> + virtual ~Sql_cmd_resignal()
> {}
I *think* there should be a blank line here.
> + virtual enum_sql_command sql_command_code() const
> + {
> + return SQLCOM_RESIGNAL;
> + }
> /**
> Execute a RESIGNAL statement at runtime.
> @param thd the current thread.
> - @return 0 on success.
> + @retval false on success.
> */
> virtual bool execute(THD *thd);
> };
>
> === modified file 'sql/sql_yacc.yy'
> --- a/sql/sql_yacc.yy 2009-08-24 09:56:29 +0000
> +++ b/sql/sql_yacc.yy 2009-08-27 07:33:27 +0000
> @@ -2773,9 +2773,9 @@ signal_stmt:
> Yacc_state *state= & thd->m_parser_state->m_yacc;
> lex->sql_command= SQLCOM_SIGNAL;
> - lex->m_stmt= new (thd->mem_root) Signal_statement(lex, $2,
> + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_signal($2,
> state->m_set_signal_info);
Please indent arguments properly, similarly below.
> - if (lex->m_stmt == NULL)
> + if (lex->m_sql_cmd == NULL)
> MYSQL_YYABORT;
> }
> ;
> @@ -2912,9 +2912,9 @@ resignal_stmt:
> Yacc_state *state= & thd->m_parser_state->m_yacc;
> lex->sql_command= SQLCOM_RESIGNAL;
> - lex->m_stmt= new (thd->mem_root) Resignal_statement(lex, $2,
> + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_resignal($2,
> state->m_set_signal_info);
> - if (lex->m_stmt == NULL)
> + if (lex->m_sql_cmd == NULL)
> MYSQL_YYABORT;
> }
> ;
>