From: Marc Alff Date: July 29 2010 2:59pm Subject: bzr commit into mysql-next-mr-wl2110 branch (marc.alff:3166) WL#2111 List-Archive: http://lists.mysql.com/commits/114651 Message-Id: <201007291503.o6T0cBQq020009@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1849711822545875932==" --===============1849711822545875932== 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-next-mr-wl2111/ based on revid:marc.alff@stripped 3166 Marc Alff 2010-07-29 WL#2111 GET DIAGNOSTICS Parser and syntax only, no runtime support in this patch. Work in progress modified: sql/item_create.cc sql/lex.h sql/mysqld.cc sql/sql_class.h sql/sql_lex.cc sql/sql_lex.h sql/sql_signal.cc sql/sql_signal.h sql/sql_yacc.yy === modified file 'sql/item_create.cc' --- a/sql/item_create.cc 2010-06-19 07:50:33 +0000 +++ b/sql/item_create.cc 2010-07-29 14:58:31 +0000 @@ -1769,19 +1769,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: @@ -4328,18 +4315,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* @@ -4989,7 +4964,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-06-21 12:52:24 +0000 +++ b/sql/lex.h 2010-07-29 14:58:31 +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)}, @@ -233,6 +243,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)}, @@ -346,6 +357,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 */ @@ -359,6 +372,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)}, @@ -380,6 +394,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)}, @@ -399,6 +414,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)}, @@ -462,6 +480,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)}, @@ -470,8 +489,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)}, @@ -489,6 +512,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)}, @@ -507,6 +531,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)}, @@ -527,6 +552,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)}, @@ -564,7 +590,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-06-23 09:56:24 +0000 +++ b/sql/mysqld.cc 2010-07-29 14:58:31 +0000 @@ -3257,6 +3257,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-06-23 09:56:24 +0000 +++ b/sql/sql_class.h 2010-07-29 14:58:31 +0000 @@ -345,9 +345,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_lex.cc' --- a/sql/sql_lex.cc 2010-06-23 09:56:24 +0000 +++ b/sql/sql_lex.cc 2010-07-29 14:58:31 +0000 @@ -900,6 +900,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-06-23 09:56:24 +0000 +++ b/sql/sql_lex.h 2010-07-29 14:58:31 +0000 @@ -143,6 +143,7 @@ enum enum_sql_command { SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES, SQLCOM_SIGNAL, SQLCOM_RESIGNAL, 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[]= {" ... @@ -2232,7 +2233,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); @@ -2252,6 +2253,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-05-14 18:11:25 +0000 +++ b/sql/sql_signal.cc 2010-07-29 14:58:31 +0000 @@ -516,3 +516,9 @@ bool Resignal_statement::execute(THD *th DBUG_RETURN(result); } +bool Get_diagnostics_statement::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 2009-09-10 09:18:29 +0000 +++ b/sql/sql_signal.h 2010-07-29 14:58:31 +0000 @@ -148,5 +148,41 @@ public: virtual bool execute(THD *thd); }; +class Get_diagnostics_statement : public Sql_statement +{ +public: + Get_diagnostics_statement(LEX *lex, + diagnostic_area_type area_type, + List *statement_property_list) + : Sql_statement(lex), + m_area_type(area_type), + m_cond_expr(NULL), + m_condition_property_list(NULL), + m_statement_property_list(statement_property_list) + {} + + Get_diagnostics_statement(LEX *lex, + diagnostic_area_type area_type, + Item *condition_expr, + List *condition_property_list) + : Sql_statement(lex), + m_area_type(area_type), + m_cond_expr(condition_expr), + m_condition_property_list(condition_property_list), + m_statement_property_list(NULL) + {} + + virtual ~Get_diagnostics_statement() + {} + + 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-06-23 09:56:24 +0000 +++ b/sql/sql_yacc.yy 2010-07-29 14:58:31 +0000 @@ -768,6 +768,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; } %{ @@ -868,6 +874,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 */ @@ -875,7 +883,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 */ @@ -893,6 +904,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 */ @@ -923,6 +935,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 @@ -935,6 +948,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 */ @@ -956,6 +971,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 EXECUTE_SYM /* SQL-2003-R */ %token EXISTS /* SQL-2003-R */ %token EXIT_SYM @@ -986,6 +1002,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 @@ -1100,6 +1117,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 @@ -1113,6 +1132,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 @@ -1139,6 +1159,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 @@ -1162,6 +1183,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 @@ -1225,6 +1249,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 @@ -1233,7 +1258,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 @@ -1250,6 +1279,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 @@ -1271,6 +1301,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 */ @@ -1283,6 +1314,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 */ @@ -1328,8 +1360,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 @@ -1622,8 +1660,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 '-' '+' '*' '/' '%' '(' ')' @@ -1725,6 +1771,7 @@ statement: | drop | execute | flush + | get_diagnostics_stmt | grant | handler | help @@ -3082,6 +3129,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 { @@ -3097,6 +3184,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_stmt= new (thd->mem_root) Get_diagnostics_statement(lex, $2, $4); + if (lex->m_stmt == 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_stmt= new (thd->mem_root) Get_diagnostics_statement(lex, $2, $5, $6); + if (lex->m_stmt == 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 { @@ -8539,6 +8771,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); @@ -12473,12 +12713,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 {} @@ -12487,6 +12732,7 @@ keyword_sp: | CONTRIBUTORS_SYM {} | CPU_SYM {} | CUBE_SYM {} + | CURRENT_SYM {} | CURSOR_NAME_SYM {} | DATA_SYM {} | DATAFILE_SYM {} @@ -12496,6 +12742,7 @@ keyword_sp: | DEFINER_SYM {} | DELAY_KEY_WRITE_SYM {} | DES_KEY_FILE {} + | DIAGNOSTICS_SYM {} | DIRECTORY_SYM {} | DISABLE_SYM {} | DISCARD {} @@ -12503,6 +12750,8 @@ keyword_sp: | DUMPFILE {} | DUPLICATE_SYM {} | DYNAMIC_SYM {} + | DYNAMIC_FUNCTION_SYM {} + | DYNAMIC_FUNCTION_CODE_SYM {} | ENDS_SYM {} | ENUM {} | ENGINE_SYM {} @@ -12513,6 +12762,7 @@ keyword_sp: | EVENT_SYM {} | EVENTS_SYM {} | EVERY_SYM {} + | EXCEPTION_SYM {} | EXPANSION_SYM {} | EXTENDED_SYM {} | EXTENT_SIZE_SYM {} @@ -12578,6 +12828,8 @@ keyword_sp: | MEDIUM_SYM {} | MEMORY_SYM {} | MERGE_SYM {} + | MESSAGE_LENGTH_SYM {} + | MESSAGE_OCTET_LENGTH_SYM {} | MESSAGE_TEXT_SYM {} | MICROSECOND_SYM {} | MIGRATE_SYM {} @@ -12586,6 +12838,7 @@ keyword_sp: | MODIFY_SYM {} | MODE_SYM {} | MONTH_SYM {} + | MORE_SYM {} | MULTILINESTRING {} | MULTIPOINT {} | MULTIPOLYGON {} @@ -12601,6 +12854,7 @@ keyword_sp: | NO_WAIT_SYM {} | NODEGROUP_SYM {} | NONE_SYM {} + | NUMBER_SYM {} | NVARCHAR_SYM {} | OFFSET_SYM {} | OLD_PASSWORD {} @@ -12608,6 +12862,9 @@ keyword_sp: | ONE_SYM {} | PACK_KEYS_SYM {} | PAGE_SYM {} + | PARAMETER_MODE_SYM {} + | PARAMETER_NAME_SYM {} + | PARAMETER_ORDINAL_POSITION_SYM {} | PARTIAL {} | PARTITIONING_SYM {} | PARTITIONS_SYM {} @@ -12644,11 +12901,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 {} @@ -12657,6 +12919,7 @@ keyword_sp: | SECOND_SYM {} | SERIAL_SYM {} | SERIALIZABLE_SYM {} + | SERVER_NAME_SYM {} | SESSION_SYM {} | SIMPLE_SYM {} | SHARE_SYM {} @@ -12664,10 +12927,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 {} @@ -12690,6 +12955,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 {} --===============1849711822545875932== 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-next-mr-wl2111/ # testament_sha1: 61d196f607ffc221477d3a5020dda7efcbb7be4d # timestamp: 2010-07-29 08:59:55 -0600 # base_revision_id: marc.alff@stripped\ # nugfrc9m07brh03r # # Begin bundle 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 --===============1849711822545875932==--