From: Marc Alff Date: November 15 2010 8:21am Subject: bzr commit into mysql-trunk-wl2111 branch (marc.alff:3205) WL#2111 List-Archive: http://lists.mysql.com/commits/123836 Message-Id: <201011150822.oAF8MNqP010411@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7020621235672621380==" --===============7020621235672621380== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/malff/BZR_TREE/mysql-trunk-wl2111/ based on revid:marc.alff@stripped 3205 Marc Alff 2010-11-15 WL#2111 Stored Procedures: Implement GET DIAGNOSTICS Preserving previous work from mysql-next-mr-wl2111 modified: .bzr-mysql/default.conf sql/item_create.cc sql/lex.h sql/mysqld.cc sql/sql_class.h sql/sql_cmd.h sql/sql_lex.cc sql/sql_lex.h sql/sql_signal.cc sql/sql_signal.h sql/sql_yacc.yy === modified file '.bzr-mysql/default.conf' --- a/.bzr-mysql/default.conf 2010-11-13 15:58:25 +0000 +++ b/.bzr-mysql/default.conf 2010-11-15 08:20:48 +0000 @@ -1,4 +1,4 @@ [MYSQL] post_commit_to = "commits@stripped" post_push_to = "commits@stripped" -tree_name = "mysql-trunk" +tree_name = "mysql-trunk-wl2111" === modified file 'sql/item_create.cc' --- a/sql/item_create.cc 2010-10-28 09:54:31 +0000 +++ b/sql/item_create.cc 2010-11-15 08:20:48 +0000 @@ -1912,19 +1912,6 @@ protected: }; -class Create_func_row_count : public Create_func_arg0 -{ -public: - virtual Item *create(THD *thd); - - static Create_func_row_count s_singleton; - -protected: - Create_func_row_count() {} - virtual ~Create_func_row_count() {} -}; - - class Create_func_rpad : public Create_func_arg3 { public: @@ -4592,18 +4579,6 @@ Create_func_round::create_native(THD *th } -Create_func_row_count Create_func_row_count::s_singleton; - -Item* -Create_func_row_count::create(THD *thd) -{ - DBUG_ENTER("Create_func_row_count::create"); - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); - thd->lex->safe_to_cache_query= 0; - DBUG_RETURN(new (thd->mem_root) Item_func_row_count()); -} - - Create_func_rpad Create_func_rpad::s_singleton; Item* @@ -5264,7 +5239,6 @@ static Native_func_registry func_array[] { { C_STRING_WITH_LEN("RELEASE_LOCK") }, BUILDER(Create_func_release_lock)}, { { C_STRING_WITH_LEN("REVERSE") }, BUILDER(Create_func_reverse)}, { { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)}, - { { C_STRING_WITH_LEN("ROW_COUNT") }, BUILDER(Create_func_row_count)}, { { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)}, { { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)}, { { C_STRING_WITH_LEN("SEC_TO_TIME") }, BUILDER(Create_func_sec_to_time)}, === modified file 'sql/lex.h' --- a/sql/lex.h 2010-10-21 12:18:25 +0000 +++ b/sql/lex.h 2010-11-15 08:20:48 +0000 @@ -119,6 +119,8 @@ static SYMBOL symbols[] = { { "COLUMN", SYM(COLUMN_SYM)}, { "COLUMN_NAME", SYM(COLUMN_NAME_SYM)}, { "COLUMNS", SYM(COLUMNS)}, + { "COMMAND_FUNCTION", SYM(COMMAND_FUNCTION_SYM)}, + { "COMMAND_FUNCTION_CODE", SYM(COMMAND_FUNCTION_CODE_SYM)}, { "COMMENT", SYM(COMMENT_SYM)}, { "COMMIT", SYM(COMMIT_SYM)}, { "COMMITTED", SYM(COMMITTED_SYM)}, @@ -127,7 +129,10 @@ static SYMBOL symbols[] = { { "COMPRESSED", SYM(COMPRESSED_SYM)}, { "CONCURRENT", SYM(CONCURRENT)}, { "CONDITION", SYM(CONDITION_SYM)}, + { "CONDITION_NUMBER", SYM(CONDITION_NUMBER_SYM)}, + { "CONDITION_IDENTIFIER", SYM(CONDITION_IDENTIFIER_SYM)}, { "CONNECTION", SYM(CONNECTION_SYM)}, + { "CONNECTION_NAME", SYM(CONNECTION_NAME_SYM)}, { "CONSISTENT", SYM(CONSISTENT_SYM)}, { "CONSTRAINT", SYM(CONSTRAINT)}, { "CONSTRAINT_CATALOG", SYM(CONSTRAINT_CATALOG_SYM)}, @@ -142,6 +147,7 @@ static SYMBOL symbols[] = { { "CREATE", SYM(CREATE)}, { "CROSS", SYM(CROSS)}, { "CUBE", SYM(CUBE_SYM)}, + { "CURRENT", SYM(CURRENT_SYM)}, { "CURRENT_DATE", SYM(CURDATE)}, { "CURRENT_TIME", SYM(CURTIME)}, { "CURRENT_TIMESTAMP", SYM(NOW_SYM)}, @@ -172,6 +178,7 @@ static SYMBOL symbols[] = { { "DESCRIBE", SYM(DESCRIBE)}, { "DES_KEY_FILE", SYM(DES_KEY_FILE)}, { "DETERMINISTIC", SYM(DETERMINISTIC_SYM)}, + { "DIAGNOSTICS", SYM(DIAGNOSTICS_SYM)}, { "DIRECTORY", SYM(DIRECTORY_SYM)}, { "DISABLE", SYM(DISABLE_SYM)}, { "DISCARD", SYM(DISCARD)}, @@ -186,6 +193,8 @@ static SYMBOL symbols[] = { { "DUMPFILE", SYM(DUMPFILE)}, { "DUPLICATE", SYM(DUPLICATE_SYM)}, { "DYNAMIC", SYM(DYNAMIC_SYM)}, + { "DYNAMIC_FUNCTION", SYM(DYNAMIC_FUNCTION_SYM)}, + { "DYNAMIC_FUNCTION_CODE", SYM(DYNAMIC_FUNCTION_CODE_SYM)}, { "EACH", SYM(EACH_SYM)}, { "ELSE", SYM(ELSE)}, { "ELSEIF", SYM(ELSEIF_SYM)}, @@ -203,6 +212,7 @@ static SYMBOL symbols[] = { { "EVENT", SYM(EVENT_SYM)}, { "EVENTS", SYM(EVENTS_SYM)}, { "EVERY", SYM(EVERY_SYM)}, + { "EXCEPTION", SYM(EXCEPTION_SYM)}, { "EXECUTE", SYM(EXECUTE_SYM)}, { "EXISTS", SYM(EXISTS)}, { "EXIT", SYM(EXIT_SYM)}, @@ -234,6 +244,7 @@ static SYMBOL symbols[] = { { "GENERAL", SYM(GENERAL)}, { "GEOMETRY", SYM(GEOMETRY_SYM)}, { "GEOMETRYCOLLECTION",SYM(GEOMETRYCOLLECTION)}, + { "GET", SYM(GET_SYM)}, { "GET_FORMAT", SYM(GET_FORMAT)}, { "GLOBAL", SYM(GLOBAL_SYM)}, { "GRANT", SYM(GRANT)}, @@ -348,6 +359,8 @@ static SYMBOL symbols[] = { { "MEDIUMTEXT", SYM(MEDIUMTEXT)}, { "MEMORY", SYM(MEMORY_SYM)}, { "MERGE", SYM(MERGE_SYM)}, + { "MESSAGE_LENGTH", SYM(MESSAGE_LENGTH_SYM)}, + { "MESSAGE_OCTET_LENGTH", SYM(MESSAGE_OCTET_LENGTH_SYM)}, { "MESSAGE_TEXT", SYM(MESSAGE_TEXT_SYM)}, { "MICROSECOND", SYM(MICROSECOND_SYM)}, { "MIDDLEINT", SYM(MEDIUMINT)}, /* For powerbuilder */ @@ -361,6 +374,7 @@ static SYMBOL symbols[] = { { "MODIFIES", SYM(MODIFIES_SYM)}, { "MODIFY", SYM(MODIFY_SYM)}, { "MONTH", SYM(MONTH_SYM)}, + { "MORE", SYM(MORE_SYM)}, { "MULTILINESTRING", SYM(MULTILINESTRING)}, { "MULTIPOINT", SYM(MULTIPOINT)}, { "MULTIPOLYGON", SYM(MULTIPOLYGON)}, @@ -382,6 +396,7 @@ static SYMBOL symbols[] = { { "NOT", SYM(NOT_SYM)}, { "NO_WRITE_TO_BINLOG", SYM(NO_WRITE_TO_BINLOG)}, { "NULL", SYM(NULL_SYM)}, + { "NUMBER", SYM(NUMBER_SYM)}, { "NUMERIC", SYM(NUMERIC_SYM)}, { "NVARCHAR", SYM(NVARCHAR_SYM)}, { "OFFSET", SYM(OFFSET_SYM)}, @@ -401,6 +416,9 @@ static SYMBOL symbols[] = { { "OUTFILE", SYM(OUTFILE)}, { "OWNER", SYM(OWNER_SYM)}, { "PACK_KEYS", SYM(PACK_KEYS_SYM)}, + { "PARAMETER_MODE", SYM(PARAMETER_MODE_SYM)}, + { "PARAMETER_NAME", SYM(PARAMETER_NAME_SYM)}, + { "PARAMETER_ORDINAL_POSITION", SYM(PARAMETER_ORDINAL_POSITION_SYM)}, { "PARSER", SYM(PARSER_SYM)}, { "PAGE", SYM(PAGE_SYM)}, { "PARTIAL", SYM(PARTIAL)}, @@ -465,6 +483,7 @@ static SYMBOL symbols[] = { { "RESTRICT", SYM(RESTRICT)}, { "RESUME", SYM(RESUME_SYM)}, { "RETURN", SYM(RETURN_SYM)}, + { "RETURNED_SQLSTATE", SYM(RETURNED_SQLSTATE_SYM)}, { "RETURNS", SYM(RETURNS_SYM)}, { "REVERSE", SYM(REVERSE_SYM)}, { "REVOKE", SYM(REVOKE)}, @@ -473,8 +492,12 @@ static SYMBOL symbols[] = { { "ROLLBACK", SYM(ROLLBACK_SYM)}, { "ROLLUP", SYM(ROLLUP_SYM)}, { "ROUTINE", SYM(ROUTINE_SYM)}, + { "ROUTINE_CATALOG", SYM(ROUTINE_CATALOG_SYM)}, + { "ROUTINE_NAME", SYM(ROUTINE_NAME_SYM)}, + { "ROUTINE_SCHEMA", SYM(ROUTINE_SCHEMA_SYM)}, { "ROW", SYM(ROW_SYM)}, { "ROWS", SYM(ROWS_SYM)}, + { "ROW_COUNT", SYM(ROW_COUNT_SYM)}, { "ROW_FORMAT", SYM(ROW_FORMAT_SYM)}, { "RTREE", SYM(RTREE_SYM)}, { "SAVEPOINT", SYM(SAVEPOINT_SYM)}, @@ -492,6 +515,7 @@ static SYMBOL symbols[] = { { "SERIALIZABLE", SYM(SERIALIZABLE_SYM)}, { "SESSION", SYM(SESSION_SYM)}, { "SERVER", SYM(SERVER_SYM)}, + { "SERVER_NAME", SYM(SERVER_NAME_SYM)}, { "SET", SYM(SET)}, { "SHARE", SYM(SHARE_SYM)}, { "SHOW", SYM(SHOW)}, @@ -510,6 +534,7 @@ static SYMBOL symbols[] = { { "SOURCE", SYM(SOURCE_SYM)}, { "SPATIAL", SYM(SPATIAL_SYM)}, { "SPECIFIC", SYM(SPECIFIC_SYM)}, + { "SPECIFIC_NAME", SYM(SPECIFIC_NAME_SYM)}, { "SQL", SYM(SQL_SYM)}, { "SQLEXCEPTION", SYM(SQLEXCEPTION_SYM)}, { "SQLSTATE", SYM(SQLSTATE_SYM)}, @@ -530,6 +555,7 @@ static SYMBOL symbols[] = { { "SQL_TSI_QUARTER", SYM(QUARTER_SYM)}, { "SQL_TSI_YEAR", SYM(YEAR_SYM)}, { "SSL", SYM(SSL_SYM)}, + { "STACKED", SYM(STACKED_SYM)}, { "START", SYM(START_SYM)}, { "STARTING", SYM(STARTING)}, { "STARTS", SYM(STARTS_SYM)}, @@ -567,7 +593,13 @@ static SYMBOL symbols[] = { { "TO", SYM(TO_SYM)}, { "TRAILING", SYM(TRAILING)}, { "TRANSACTION", SYM(TRANSACTION_SYM)}, + { "TRANSACTION_ACTIVE", SYM(TRANSACTION_ACTIVE_SYM)}, + { "TRANSACTIONS_COMMITTED", SYM(TRANSACTIONS_COMMITTED_SYM)}, + { "TRANSACTIONS_ROLLED_BACK", SYM(TRANSACTIONS_ROLLED_BACK_SYM)}, { "TRIGGER", SYM(TRIGGER_SYM)}, + { "TRIGGER_CATALOG", SYM(TRIGGER_CATALOG_SYM)}, + { "TRIGGER_NAME", SYM(TRIGGER_NAME_SYM)}, + { "TRIGGER_SCHEMA", SYM(TRIGGER_SCHEMA_SYM)}, { "TRIGGERS", SYM(TRIGGERS_SYM)}, { "TRUE", SYM(TRUE_SYM)}, { "TRUNCATE", SYM(TRUNCATE_SYM)}, === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-11-09 20:10:44 +0000 +++ b/sql/mysqld.cc 2010-11-15 08:20:48 +0000 @@ -2960,6 +2960,7 @@ SHOW_VAR com_status_vars[]= { {"empty_query", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_EMPTY_QUERY]), SHOW_LONG_STATUS}, {"execute_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_EXECUTE]), SHOW_LONG_STATUS}, {"flush", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_FLUSH]), SHOW_LONG_STATUS}, + {"get_diagnostics", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_GET_DIAGNOSTICS]), SHOW_LONG_STATUS}, {"grant", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_GRANT]), SHOW_LONG_STATUS}, {"ha_close", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_CLOSE]), SHOW_LONG_STATUS}, {"ha_open", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_OPEN]), SHOW_LONG_STATUS}, === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2010-11-05 08:13:09 +0000 +++ b/sql/sql_class.h 2010-11-15 08:20:48 +0000 @@ -344,9 +344,51 @@ typedef enum enum_diag_condition_item_na DIAG_CURSOR_NAME= 9, DIAG_MESSAGE_TEXT= 10, DIAG_MYSQL_ERRNO= 11, - LAST_DIAG_SET_PROPERTY= DIAG_MYSQL_ERRNO + LAST_DIAG_SET_PROPERTY= DIAG_MYSQL_ERRNO, + + /* + Conditions that can be set only by the server implementation. + */ + + DIAG_CONDITION_IDENTIFIER= 12, + DIAG_CONDITION_NUMBER= 13, + DIAG_CONNECTION_NAME= 14, + DIAG_MESSAGE_LENGTH= 15, + DIAG_MESSAGE_OCTET_LENGTH= 16, + DIAG_PARAMETER_MODE= 17, + DIAG_PARAMETER_NAME= 18, + DIAG_PARAMETER_ORDINAL_POSITION= 19, + DIAG_RETURNED_SQLSTATE= 20, + DIAG_ROUTINE_CATALOG= 21, + DIAG_ROUTINE_NAME= 22, + DIAG_ROUTINE_SCHEMA= 23, + DIAG_SERVER_NAME= 24, + DIAG_SPECIFIC_NAME= 25, + DIAG_TRIGGER_CATALOG= 26, + DIAG_TRIGGER_NAME= 27, + DIAG_TRIGGER_SCHEMA= 28, } Diag_condition_item_name; +typedef enum enum_diag_statement_item_name +{ + DIAG_NUMBER= 0, + DIAG_MORE= 1, + DIAG_COMMAND_FUNCTION= 2, + DIAG_COMMAND_FUNCTION_CODE= 3, + DIAG_DYNAMIC_FUNCTION= 4, + DIAG_DYNAMIC_FUNCTION_CODE= 5, + DIAG_ROW_COUNT= 6, + DIAG_TRANSACTIONS_COMMITTED= 7, + DIAG_TRANSACTIONS_ROLLED_BACK= 8, + DIAG_TRANSACTION_ACTIVE= 9 +} Diag_statement_item_name; + +enum diagnostic_area_type +{ + CURRENT_AREA, + STACKED_AREA +}; + /** Name of each diagnostic condition item. This array is indexed by Diag_condition_item_name. === modified file 'sql/sql_cmd.h' --- a/sql/sql_cmd.h 2010-04-16 09:07:23 +0000 +++ b/sql/sql_cmd.h 2010-11-15 08:20:48 +0000 @@ -87,8 +87,8 @@ enum enum_sql_command { SQLCOM_ALTER_DB_UPGRADE, SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES, SQLCOM_SIGNAL, SQLCOM_RESIGNAL, - SQLCOM_SHOW_RELAYLOG_EVENTS, - + SQLCOM_SHOW_RELAYLOG_EVENTS, + SQLCOM_GET_DIAGNOSTICS, /* When a command is added here, be sure it's also added in mysqld.cc in "struct show_var_st status_vars[]= {" ... === modified file 'sql/sql_lex.cc' --- a/sql/sql_lex.cc 2010-11-10 11:26:45 +0000 +++ b/sql/sql_lex.cc 2010-11-15 08:20:48 +0000 @@ -903,6 +903,8 @@ int MYSQLlex(void *arg, void *yythd) break; } +fprintf(stderr, "lex token %d\n", token); + return token; } === modified file 'sql/sql_lex.h' --- a/sql/sql_lex.h 2010-11-10 11:26:45 +0000 +++ b/sql/sql_lex.h 2010-11-15 08:20:48 +0000 @@ -2434,7 +2434,7 @@ class Set_signal_information { public: /** Empty default constructor, use clear() */ - Set_signal_information() {} + Set_signal_information() {} /** Copy constructor. */ Set_signal_information(const Set_signal_information& set); @@ -2454,6 +2454,37 @@ public: Item *m_item[LAST_DIAG_SET_PROPERTY+1]; }; +class Diag_condition_property : public Sql_alloc +{ +public: + Diag_condition_property(Item *target, Diag_condition_item_name item_name) + : m_target(target), + m_item_name(item_name) + {} + + ~Diag_condition_property() + {} + +private: + Item *m_target; + Diag_condition_item_name m_item_name; +}; + +class Diag_statement_property : public Sql_alloc +{ +public: + Diag_statement_property(Item *target, Diag_statement_item_name item_name) + : m_target(target), + m_item_name(item_name) + {} + + ~Diag_statement_property() + {} + +private: + Item *m_target; + Diag_statement_item_name m_item_name; +}; /** The internal state of the syntax parser. === modified file 'sql/sql_signal.cc' --- a/sql/sql_signal.cc 2010-08-04 10:34:01 +0000 +++ b/sql/sql_signal.cc 2010-11-15 08:20:48 +0000 @@ -504,3 +504,10 @@ bool Sql_cmd_resignal::execute(THD *thd) DBUG_RETURN(result); } + +bool Sql_cmd_get_diag::execute(THD *thd) +{ + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "GET DIAGNOSTICS"); + return true; +} + === modified file 'sql/sql_signal.h' --- a/sql/sql_signal.h 2010-07-13 17:29:44 +0000 +++ b/sql/sql_signal.h 2010-11-15 08:20:48 +0000 @@ -142,5 +142,47 @@ public: virtual bool execute(THD *thd); }; +/** + Sql_cmd_get_diag represents a GET DIAGNOSTICS statement. +*/ +class Sql_cmd_get_diag : public Sql_cmd +{ +public: + Sql_cmd_get_diag(diagnostic_area_type area_type, + List *statement_property_list) + : Sql_cmd(), + m_area_type(area_type), + m_cond_expr(NULL), + m_condition_property_list(NULL), + m_statement_property_list(statement_property_list) + {} + + Sql_cmd_get_diag(diagnostic_area_type area_type, + Item *condition_expr, + List *condition_property_list) + : Sql_cmd(), + m_area_type(area_type), + m_cond_expr(condition_expr), + m_condition_property_list(condition_property_list), + m_statement_property_list(NULL) + {} + + virtual ~Sql_cmd_get_diag() + {} + + virtual enum_sql_command sql_command_code() const + { + return SQLCOM_GET_DIAGNOSTICS; + } + + virtual bool execute(THD *thd); + +private: + diagnostic_area_type m_area_type; + Item *m_cond_expr; + List *m_condition_property_list; + List *m_statement_property_list; +}; + #endif === modified file 'sql/sql_yacc.yy' --- a/sql/sql_yacc.yy 2010-11-05 12:03:40 +0000 +++ b/sql/sql_yacc.yy 2010-11-15 08:20:48 +0000 @@ -772,6 +772,12 @@ static bool add_create_index (LEX *lex, enum Foreign_key::fk_option m_fk_option; enum enum_yes_no_unknown m_yes_no_unk; Diag_condition_item_name diag_condition_item_name; + Diag_statement_item_name diag_statement_item_name; + class Diag_condition_property *diag_condition; + class Diag_statement_property *diag_statement; + List *condition_information_list; + List *statement_information_list; + enum diagnostic_area_type diag_area; } %{ @@ -872,6 +878,8 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token COLUMNS %token COLUMN_SYM /* SQL-2003-R */ %token COLUMN_NAME_SYM /* SQL-2003-N */ +%token COMMAND_FUNCTION_SYM /* SQL-2003-N */ +%token COMMAND_FUNCTION_CODE_SYM /* SQL-2003-N */ %token COMMENT_SYM %token COMMITTED_SYM /* SQL-2003-N */ %token COMMIT_SYM /* SQL-2003-R */ @@ -879,7 +887,10 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token COMPLETION_SYM %token COMPRESSED_SYM %token CONCURRENT +%token CONDITION_NUMBER_SYM /* SQL-2003-N */ +%token CONDITION_IDENTIFIER_SYM /* SQL-2003-N */ %token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ +%token CONNECTION_NAME_SYM /* SQL-2003-N */ %token CONNECTION_SYM %token CONSISTENT_SYM %token CONSTRAINT /* SQL-2003-R */ @@ -897,6 +908,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token CROSS /* SQL-2003-R */ %token CUBE_SYM /* SQL-2003-R */ %token CURDATE /* MYSQL-FUNC */ +%token CURRENT_SYM /* SQL-2003-N */ %token CURRENT_USER /* SQL-2003-R */ %token CURSOR_SYM /* SQL-2003-R */ %token CURSOR_NAME_SYM /* SQL-2003-N */ @@ -927,6 +939,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token DESCRIBE /* SQL-2003-R */ %token DES_KEY_FILE %token DETERMINISTIC_SYM /* SQL-2003-R */ +%token DIAGNOSTICS_SYM /* SQL-2003-N */ %token DIRECTORY_SYM %token DISABLE_SYM %token DISCARD @@ -939,6 +952,8 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token DUAL_SYM %token DUMPFILE %token DUPLICATE_SYM +%token DYNAMIC_FUNCTION_SYM /* SQL-2003-N */ +%token DYNAMIC_FUNCTION_CODE_SYM /* SQL-2003-N */ %token DYNAMIC_SYM /* SQL-2003-R */ %token EACH_SYM /* SQL-2003-R */ %token ELSE /* SQL-2003-R */ @@ -960,6 +975,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token EVENTS_SYM %token EVENT_SYM %token EVERY_SYM /* SQL-2003-N */ +%token EXCEPTION_SYM /* SQL-2003-N */ %token EXCHANGE_SYM %token EXECUTE_SYM /* SQL-2003-R */ %token EXISTS /* SQL-2003-R */ @@ -991,6 +1007,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token GEOMETRYCOLLECTION %token GEOMETRY_SYM %token GET_FORMAT /* MYSQL-FUNC */ +%token GET_SYM /* SQL-2003-R */ %token GLOBAL_SYM /* SQL-2003-R */ %token GRANT /* SQL-2003-R */ %token GRANTS @@ -1106,6 +1123,8 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token MEDIUM_SYM %token MEMORY_SYM %token MERGE_SYM /* SQL-2003-R */ +%token MESSAGE_LENGTH_SYM /* SQL-2003-N */ +%token MESSAGE_OCTET_LENGTH_SYM /* SQL-2003-N */ %token MESSAGE_TEXT_SYM /* SQL-2003-N */ %token MICROSECOND_SYM /* MYSQL-FUNC */ %token MIGRATE_SYM @@ -1119,6 +1138,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token MODIFY_SYM %token MOD_SYM /* SQL-2003-N */ %token MONTH_SYM /* SQL-2003-R */ +%token MORE_SYM /* SQL-2003-N */ %token MULTILINESTRING %token MULTIPOINT %token MULTIPOLYGON @@ -1145,6 +1165,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token NO_WRITE_TO_BINLOG %token NULL_SYM /* SQL-2003-R */ %token NUM +%token NUMBER_SYM /* SQL-2003-N */ %token NUMERIC_SYM /* SQL-2003-R */ %token NVARCHAR_SYM %token OFFSET_SYM @@ -1168,6 +1189,9 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token PACK_KEYS_SYM %token PAGE_SYM %token PARAM_MARKER +%token PARAMETER_MODE_SYM /* SQL-2003-N */ +%token PARAMETER_NAME_SYM /* SQL-2003-N */ +%token PARAMETER_ORDINAL_POSITION_SYM /* SQL-2003-N */ %token PARSER_SYM %token PARTIAL /* SQL-2003-N */ %token PARTITIONING_SYM @@ -1232,6 +1256,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token RESTORE_SYM %token RESTRICT %token RESUME_SYM +%token RETURNED_SQLSTATE_SYM /* SQL-2003-N */ %token RETURNS_SYM /* SQL-2003-R */ %token RETURN_SYM /* SQL-2003-R */ %token REVERSE_SYM @@ -1240,7 +1265,11 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token ROLLBACK_SYM /* SQL-2003-R */ %token ROLLUP_SYM /* SQL-2003-R */ %token ROUTINE_SYM /* SQL-2003-N */ +%token ROUTINE_CATALOG_SYM /* SQL-2003-N */ +%token ROUTINE_NAME_SYM /* SQL-2003-N */ +%token ROUTINE_SCHEMA_SYM /* SQL-2003-N */ %token ROWS_SYM /* SQL-2003-R */ +%token ROW_COUNT_SYM /* SQL-2003-N */ %token ROW_FORMAT_SYM %token ROW_SYM /* SQL-2003-R */ %token RTREE_SYM @@ -1257,6 +1286,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token SERIAL_SYM %token SESSION_SYM /* SQL-2003-N */ %token SERVER_SYM +%token SERVER_NAME_SYM /* SQL-2003-N */ %token SERVER_OPTIONS %token SET /* SQL-2003-R */ %token SET_VAR @@ -1278,6 +1308,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token SOURCE_SYM %token SPATIAL_SYM %token SPECIFIC_SYM /* SQL-2003-R */ +%token SPECIFIC_NAME_SYM /* SQL-2003-N */ %token SQLEXCEPTION_SYM /* SQL-2003-R */ %token SQLSTATE_SYM /* SQL-2003-R */ %token SQLWARNING_SYM /* SQL-2003-R */ @@ -1290,6 +1321,7 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token SQL_SYM /* SQL-2003-R */ %token SQL_THREAD %token SSL_SYM +%token STACKED_SYM /* SQL-2003-N */ %token STARTING %token STARTS_SYM %token START_SYM /* SQL-2003-R */ @@ -1335,8 +1367,14 @@ bool my_yyoverflow(short **a, YYSTYPE ** %token TO_SYM /* SQL-2003-R */ %token TRAILING /* SQL-2003-R */ %token TRANSACTION_SYM +%token TRANSACTION_ACTIVE_SYM /* SQL-2003-N */ +%token TRANSACTIONS_COMMITTED_SYM /* SQL-2003-N */ +%token TRANSACTIONS_ROLLED_BACK_SYM /* SQL-2003-N */ %token TRIGGERS_SYM %token TRIGGER_SYM /* SQL-2003-R */ +%token TRIGGER_CATALOG_SYM /* SQL-2003-N */ +%token TRIGGER_NAME_SYM /* SQL-2003-N */ +%token TRIGGER_SCHEMA_SYM /* SQL-2003-N */ %token TRIM /* SQL-2003-N */ %token TRUE_SYM /* SQL-2003-R */ %token TRUNCATE_SYM @@ -1630,8 +1668,16 @@ END_OF_INPUT %type index_hint_clause %type data_or_xml -%type signal_stmt resignal_stmt +%type signal_stmt resignal_stmt get_diagnostics_stmt %type signal_condition_information_item_name +%type condition_information_item_name +%type statement_information_item_name +%type condition_information_item +%type statement_information_item +%type opt_which_area +%type simple_target_specification +%type condition_information_list +%type statement_information %type '-' '+' '*' '/' '%' '(' ')' @@ -1733,6 +1779,7 @@ statement: | drop | execute | flush + | get_diagnostics_stmt | grant | handler | help @@ -3092,6 +3139,46 @@ signal_condition_information_item_name: { $$= DIAG_MYSQL_ERRNO; } ; +/* conditions that can be read in get diagnostics */ +condition_information_item_name: + signal_condition_information_item_name + { $$= $1; } + | CONDITION_IDENTIFIER_SYM + { $$= DIAG_CONDITION_IDENTIFIER; } + | CONDITION_NUMBER_SYM + { $$= DIAG_CONDITION_NUMBER; } + | CONNECTION_NAME_SYM + { $$= DIAG_CONNECTION_NAME; } + | MESSAGE_LENGTH_SYM + { $$= DIAG_MESSAGE_LENGTH; } + | MESSAGE_OCTET_LENGTH_SYM + { $$= DIAG_MESSAGE_OCTET_LENGTH; } + | PARAMETER_MODE_SYM + { $$= DIAG_PARAMETER_MODE; } + | PARAMETER_NAME_SYM + { $$= DIAG_PARAMETER_NAME; } + | PARAMETER_ORDINAL_POSITION_SYM + { $$= DIAG_PARAMETER_ORDINAL_POSITION; } + | RETURNED_SQLSTATE_SYM + { $$= DIAG_RETURNED_SQLSTATE; } + | ROUTINE_CATALOG_SYM + { $$= DIAG_ROUTINE_CATALOG; } + | ROUTINE_NAME_SYM + { $$= DIAG_ROUTINE_NAME; } + | ROUTINE_SCHEMA_SYM + { $$= DIAG_ROUTINE_SCHEMA; } + | SERVER_NAME_SYM + { $$= DIAG_SERVER_NAME; } + | SPECIFIC_NAME_SYM + { $$= DIAG_SPECIFIC_NAME; } + | TRIGGER_CATALOG_SYM + { $$= DIAG_TRIGGER_CATALOG; } + | TRIGGER_NAME_SYM + { $$= DIAG_TRIGGER_NAME; } + | TRIGGER_SCHEMA_SYM + { $$= DIAG_TRIGGER_SCHEMA; } + ; + resignal_stmt: RESIGNAL_SYM opt_signal_value opt_set_signal_information { @@ -3108,6 +3195,151 @@ resignal_stmt: } ; +get_diagnostics_stmt: + GET_SYM /* $1 */ + opt_which_area /* $2 */ + DIAGNOSTICS_SYM /* $3 */ + statement_information /* $4 */ + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_GET_DIAGNOSTICS; + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_get_diag($2, $4); + if (lex->m_sql_cmd == NULL) + MYSQL_YYABORT; + } + | GET_SYM /* $1 */ + opt_which_area /* $2 */ + DIAGNOSTICS_SYM /* $3 */ + exception_or_condition /* $4 */ + expr /* $5 */ + condition_information_list /* $6 */ + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_GET_DIAGNOSTICS; + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_get_diag($2, $5, $6); + if (lex->m_sql_cmd == NULL) + MYSQL_YYABORT; + } + ; + +opt_which_area: + /* empty */ + { $$= CURRENT_AREA; } + | CURRENT_SYM + { $$= CURRENT_AREA; } + | STACKED_SYM + { $$= STACKED_AREA; } + ; + +statement_information: + statement_information_item + { + $$= new (YYTHD->mem_root) List; + $$->push_back($1); + } + | statement_information ',' statement_information_item + { + $1->push_back($3); + $$= $1; + } + ; + +statement_information_item: + simple_target_specification EQ statement_information_item_name + { + $$= new (YYTHD->mem_root) Diag_statement_property($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + ; + +statement_information_item_name: + NUMBER_SYM + { $$= DIAG_NUMBER; } + | MORE_SYM + { $$= DIAG_MORE; } + | COMMAND_FUNCTION_SYM + { $$= DIAG_COMMAND_FUNCTION; } + | COMMAND_FUNCTION_CODE_SYM + { $$= DIAG_COMMAND_FUNCTION_CODE; } + | DYNAMIC_FUNCTION_SYM + { $$= DIAG_DYNAMIC_FUNCTION; } + | DYNAMIC_FUNCTION_CODE_SYM + { $$= DIAG_DYNAMIC_FUNCTION_CODE; } + | ROW_COUNT_SYM + { $$= DIAG_ROW_COUNT; } + | TRANSACTIONS_COMMITTED_SYM + { $$= DIAG_TRANSACTIONS_COMMITTED; } + | TRANSACTIONS_ROLLED_BACK_SYM + { $$= DIAG_TRANSACTIONS_ROLLED_BACK; } + | TRANSACTION_ACTIVE_SYM + { $$= DIAG_TRANSACTION_ACTIVE; } + ; + +simple_target_specification: + ident + { + THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_pcontext *spc= thd->lex->spcont; + sp_variable_t *spv; + Item_splocal *splocal; + uint pos_in_q; + uint len_in_q; + + DBUG_ASSERT(spc); + spv = spc->find_variable(&$1); + if (spv == NULL) + { + my_error(ER_SP_UNDECLARED_VAR, MYF(0), $1.str); + MYSQL_YYABORT; + } + + pos_in_q= lip->get_tok_start_prev() - lex->sphead->m_tmp_query; + len_in_q= lip->get_tok_end() - lip->get_tok_start_prev(); + splocal= new (thd->mem_root) Item_splocal($1, + spv->offset, spv->type, + pos_in_q, len_in_q); +#ifndef DBUG_OFF + if (splocal) + splocal->m_sp= lex->sphead; +#endif + $$ = splocal; + } + | '@' ident_or_text + { + $$= new (YYTHD->mem_root) Item_user_var_as_out_param($2); + } + ; + +exception_or_condition: + EXCEPTION_SYM + | CONDITION_SYM + ; + +condition_information_list: + condition_information_item + { + $$= new (YYTHD->mem_root) List; + $$->push_back($1); + } + | condition_information_list ',' condition_information_item + { + $1->push_back($3); + $$= $1; + } + ; + +condition_information_item: + simple_target_specification EQ condition_information_item_name + { + $$= new (YYTHD->mem_root) Diag_condition_property($1, $3); + } + ; + sp_decl_idents: ident { @@ -8612,6 +8844,14 @@ function_call_conflict: if ($$ == NULL) MYSQL_YYABORT; } + | ROW_COUNT_SYM '(' ')' + { + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); + Lex->safe_to_cache_query= 0; + $$= new (YYTHD->mem_root) Item_func_row_count(); + if ($$ == NULL) + MYSQL_YYABORT; + } | TRUNCATE_SYM '(' expr ',' expr ')' { $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); @@ -12595,12 +12835,17 @@ keyword_sp: | COLLATION_SYM {} | COLUMN_NAME_SYM {} | COLUMNS {} + | COMMAND_FUNCTION_SYM {} + | COMMAND_FUNCTION_CODE_SYM {} | COMMITTED_SYM {} | COMPACT_SYM {} | COMPLETION_SYM {} | COMPRESSED_SYM {} | CONCURRENT {} + | CONDITION_IDENTIFIER_SYM {} + | CONDITION_NUMBER_SYM {} | CONNECTION_SYM {} + | CONNECTION_NAME_SYM {} | CONSISTENT_SYM {} | CONSTRAINT_CATALOG_SYM {} | CONSTRAINT_SCHEMA_SYM {} @@ -12609,6 +12854,7 @@ keyword_sp: | CONTRIBUTORS_SYM {} | CPU_SYM {} | CUBE_SYM {} + | CURRENT_SYM {} | CURSOR_NAME_SYM {} | DATA_SYM {} | DATAFILE_SYM {} @@ -12618,6 +12864,7 @@ keyword_sp: | DEFINER_SYM {} | DELAY_KEY_WRITE_SYM {} | DES_KEY_FILE {} + | DIAGNOSTICS_SYM {} | DIRECTORY_SYM {} | DISABLE_SYM {} | DISCARD {} @@ -12625,6 +12872,8 @@ keyword_sp: | DUMPFILE {} | DUPLICATE_SYM {} | DYNAMIC_SYM {} + | DYNAMIC_FUNCTION_SYM {} + | DYNAMIC_FUNCTION_CODE_SYM {} | ENDS_SYM {} | ENUM {} | ENGINE_SYM {} @@ -12635,6 +12884,7 @@ keyword_sp: | EVENT_SYM {} | EVENTS_SYM {} | EVERY_SYM {} + | EXCEPTION_SYM {} | EXCHANGE_SYM {} | EXPANSION_SYM {} | EXTENDED_SYM {} @@ -12705,6 +12955,8 @@ keyword_sp: | MEDIUM_SYM {} | MEMORY_SYM {} | MERGE_SYM {} + | MESSAGE_LENGTH_SYM {} + | MESSAGE_OCTET_LENGTH_SYM {} | MESSAGE_TEXT_SYM {} | MICROSECOND_SYM {} | MIGRATE_SYM {} @@ -12713,6 +12965,7 @@ keyword_sp: | MODIFY_SYM {} | MODE_SYM {} | MONTH_SYM {} + | MORE_SYM {} | MULTILINESTRING {} | MULTIPOINT {} | MULTIPOLYGON {} @@ -12728,12 +12981,16 @@ keyword_sp: | NO_WAIT_SYM {} | NODEGROUP_SYM {} | NONE_SYM {} + | NUMBER_SYM {} | NVARCHAR_SYM {} | OFFSET_SYM {} | OLD_PASSWORD {} | ONE_SYM {} | PACK_KEYS_SYM {} | PAGE_SYM {} + | PARAMETER_MODE_SYM {} + | PARAMETER_NAME_SYM {} + | PARAMETER_ORDINAL_POSITION_SYM {} | PARTIAL {} | PARTITIONING_SYM {} | PARTITIONS_SYM {} @@ -12771,11 +13028,16 @@ keyword_sp: | REPLICATION {} | RESOURCES {} | RESUME_SYM {} + | RETURNED_SQLSTATE_SYM {} | RETURNS_SYM {} | REVERSE_SYM {} | ROLLUP_SYM {} | ROUTINE_SYM {} + | ROUTINE_CATALOG_SYM {} + | ROUTINE_NAME_SYM {} + | ROUTINE_SCHEMA_SYM {} | ROWS_SYM {} + | ROW_COUNT_SYM {} | ROW_FORMAT_SYM {} | ROW_SYM {} | RTREE_SYM {} @@ -12784,6 +13046,7 @@ keyword_sp: | SECOND_SYM {} | SERIAL_SYM {} | SERIALIZABLE_SYM {} + | SERVER_NAME_SYM {} | SESSION_SYM {} | SIMPLE_SYM {} | SHARE_SYM {} @@ -12792,10 +13055,12 @@ keyword_sp: | SNAPSHOT_SYM {} | SOUNDS_SYM {} | SOURCE_SYM {} + | SPECIFIC_NAME_SYM {} | SQL_CACHE_SYM {} | SQL_BUFFER_RESULT {} | SQL_NO_CACHE_SYM {} | SQL_THREAD {} + | STACKED_SYM {} | STARTS_SYM {} | STATUS_SYM {} | STORAGE_SYM {} @@ -12818,6 +13083,12 @@ keyword_sp: | TEXT_SYM {} | THAN_SYM {} | TRANSACTION_SYM {} + | TRANSACTION_ACTIVE_SYM {} + | TRANSACTIONS_COMMITTED_SYM {} + | TRANSACTIONS_ROLLED_BACK_SYM {} + | TRIGGER_CATALOG_SYM {} + | TRIGGER_NAME_SYM {} + | TRIGGER_SCHEMA_SYM {} | TRIGGERS_SYM {} | TIMESTAMP {} | TIMESTAMP_ADD {} --===============7020621235672621380== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///Users/malff/BZR_TREE/mysql-trunk-wl2111/ # testament_sha1: 966e4415a4a9fff848b1ee5b3b34522b7c54c333 # timestamp: 2010-11-15 09:21:10 +0100 # source_branch: file:///Users/malff/BZR_TREE/mysql-trunk/ # base_revision_id: marc.alff@stripped\ # butjboasxz76akqs # # Begin bundle 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 xdyRThQkDXruu8A= --===============7020621235672621380==--