From d168601e83dd69a229d43a577eddf2278def2bf6 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 3 Oct 2019 14:02:00 +0400 Subject: [PATCH] MDEV-20734 Allow reserved keywords as user defined type names --- mysql-test/main/parser.result | 13 + mysql-test/main/parser.test | 18 + .../suite/compat/oracle/r/parser.result | 13 + mysql-test/suite/compat/oracle/t/parser.test | 18 + mysql-test/suite/funcs_1/r/storedproc.result | 33 +- mysql-test/suite/funcs_1/t/storedproc.test | 18 +- sql/sql_lex.cc | 27 + sql/sql_lex.h | 6 + sql/sql_yacc.yy | 900 +++++++++++------- sql/sql_yacc_ora.yy | 900 +++++++++++------- 10 files changed, 1275 insertions(+), 671 deletions(-) diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result index b39f496e3db..53377142dbd 100644 --- a/mysql-test/main/parser.result +++ b/mysql-test/main/parser.result @@ -1798,3 +1798,16 @@ ERROR HY000: Table 't2' was not locked with LOCK TABLES SET STATEMENT max_statement_time=900 FOR unlock tables; drop table t1, t2; # End of 10.4 tests +# +# Start of 10.5 tests +# +# +# MDEV-20734 Allow reserved keywords as user defined type names +# +CREATE TABLE t1 (a DUAL); +ERROR HY000: Unknown data type: 'DUAL' +SELECT CAST(1 AS DUAL); +ERROR HY000: Unknown data type: 'DUAL' +# +# End of 10.5 tests +# diff --git a/mysql-test/main/parser.test b/mysql-test/main/parser.test index c6e9f13cdaf..2df25d4d02d 100644 --- a/mysql-test/main/parser.test +++ b/mysql-test/main/parser.test @@ -1566,3 +1566,21 @@ SET STATEMENT max_statement_time=900 FOR unlock tables; drop table t1, t2; --echo # End of 10.4 tests + + +--echo # +--echo # Start of 10.5 tests +--echo # + +--echo # +--echo # MDEV-20734 Allow reserved keywords as user defined type names +--echo # + +--error ER_UNKNOWN_DATA_TYPE +CREATE TABLE t1 (a DUAL); +--error ER_UNKNOWN_DATA_TYPE +SELECT CAST(1 AS DUAL); + +--echo # +--echo # End of 10.5 tests +--echo # diff --git a/mysql-test/suite/compat/oracle/r/parser.result b/mysql-test/suite/compat/oracle/r/parser.result index 1c60c1434a3..4e814966c73 100644 --- a/mysql-test/suite/compat/oracle/r/parser.result +++ b/mysql-test/suite/compat/oracle/r/parser.result @@ -609,3 +609,16 @@ ERROR HY000: Unknown system variable 'role' # # End of 10.3 tests # +# +# Start of 10.5 tests +# +# +# MDEV-20734 Allow reserved keywords as user defined type names +# +CREATE TABLE t1 (a DUAL); +ERROR HY000: Unknown data type: 'DUAL' +SELECT CAST(1 AS DUAL); +ERROR HY000: Unknown data type: 'DUAL' +# +# End of 10.5 tests +# diff --git a/mysql-test/suite/compat/oracle/t/parser.test b/mysql-test/suite/compat/oracle/t/parser.test index 067fd9beb48..84d275a5d3f 100644 --- a/mysql-test/suite/compat/oracle/t/parser.test +++ b/mysql-test/suite/compat/oracle/t/parser.test @@ -412,3 +412,21 @@ SELECT @@GLOBAL.role; --echo # --echo # End of 10.3 tests --echo # + + +--echo # +--echo # Start of 10.5 tests +--echo # + +--echo # +--echo # MDEV-20734 Allow reserved keywords as user defined type names +--echo # + +--error ER_UNKNOWN_DATA_TYPE +CREATE TABLE t1 (a DUAL); +--error ER_UNKNOWN_DATA_TYPE +SELECT CAST(1 AS DUAL); + +--echo # +--echo # End of 10.5 tests +--echo # diff --git a/mysql-test/suite/funcs_1/r/storedproc.result b/mysql-test/suite/funcs_1/r/storedproc.result index 98dadf45aff..3707c6f94b3 100644 --- a/mysql-test/suite/funcs_1/r/storedproc.result +++ b/mysql-test/suite/funcs_1/r/storedproc.result @@ -5864,9 +5864,7 @@ BEGIN declare x default '0' char; SELECT x; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'default '0' char; -SELECT x; -END' at line 3 +ERROR HY000: Unknown data type: 'default' DROP PROCEDURE IF EXISTS sp6; CREATE PROCEDURE sp6( ) BEGIN @@ -5911,8 +5909,7 @@ CREATE PROCEDURE sp6( ) BEGIN declare x default 'a' char; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'default 'a' char; -END' at line 3 +ERROR HY000: Unknown data type: 'default' DROP PROCEDURE IF EXISTS sp6; CREATE PROCEDURE sp6( ) BEGIN @@ -5967,8 +5964,7 @@ CREATE PROCEDURE sp6( ) BEGIN declare handler continue for sqlstate '02000' set @x2 = 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'continue for sqlstate '02000' set @x2 = 1; -END' at line 3 +ERROR HY000: Unknown data type: 'continue' DROP PROCEDURE IF EXISTS sp6; CREATE PROCEDURE sp6( ) BEGIN @@ -5981,8 +5977,7 @@ CREATE PROCEDURE sp6( ) BEGIN declare handler undo for sqlstate '02000' set @x2 = 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'undo for sqlstate '02000' set @x2 = 1; -END' at line 3 +ERROR HY000: Unknown data type: 'undo' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN @@ -6876,45 +6871,35 @@ BEGIN declare date not null x; SELECT f101 into x from tb2 limit 9998, 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not null x; -SELECT f101 into x from tb2 limit 9998, 1; -END' at line 3 +ERROR HY000: Unknown data type: 'not' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN declare time not null x; SELECT f102 into x from tb2 limit 9998, 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not null x; -SELECT f102 into x from tb2 limit 9998, 1; -END' at line 3 +ERROR HY000: Unknown data type: 'not' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN declare datetime not null x; SELECT f103 into x from tb2 limit 9998, 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not null x; -SELECT f103 into x from tb2 limit 9998, 1; -END' at line 3 +ERROR HY000: Unknown data type: 'not' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN declare timestamp not null x; SELECT f104 into x from tb2 limit 9998, 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not null x; -SELECT f104 into x from tb2 limit 9998, 1; -END' at line 3 +ERROR HY000: Unknown data type: 'not' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN declare year not null x; SELECT f105 into x from tb2 limit 9998, 1; END// -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'not null x; -SELECT f105 into x from tb2 limit 9998, 1; -END' at line 3 +ERROR HY000: Unknown data type: 'not' DROP PROCEDURE IF EXISTS sp1; CREATE PROCEDURE sp1( ) BEGIN diff --git a/mysql-test/suite/funcs_1/t/storedproc.test b/mysql-test/suite/funcs_1/t/storedproc.test index c36e336a2a7..a99bbadbccb 100644 --- a/mysql-test/suite/funcs_1/t/storedproc.test +++ b/mysql-test/suite/funcs_1/t/storedproc.test @@ -5954,7 +5954,7 @@ DROP PROCEDURE IF EXISTS sp6; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp6( ) BEGIN declare x default '0' char; @@ -6021,7 +6021,7 @@ DROP PROCEDURE IF EXISTS sp6; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp6( ) BEGIN declare x default 'a' char; @@ -6117,7 +6117,7 @@ DROP PROCEDURE IF EXISTS sp6; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp6( ) BEGIN declare handler continue for sqlstate '02000' set @x2 = 1; @@ -6141,7 +6141,7 @@ DROP PROCEDURE IF EXISTS sp6; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp6( ) BEGIN declare handler undo for sqlstate '02000' set @x2 = 1; @@ -7455,7 +7455,7 @@ DROP PROCEDURE IF EXISTS sp1; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp1( ) BEGIN declare date not null x; @@ -7468,7 +7468,7 @@ DROP PROCEDURE IF EXISTS sp1; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp1( ) BEGIN declare time not null x; @@ -7481,7 +7481,7 @@ DROP PROCEDURE IF EXISTS sp1; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp1( ) BEGIN declare datetime not null x; @@ -7494,7 +7494,7 @@ DROP PROCEDURE IF EXISTS sp1; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp1( ) BEGIN declare timestamp not null x; @@ -7507,7 +7507,7 @@ DROP PROCEDURE IF EXISTS sp1; --enable_warnings delimiter //; ---error ER_PARSE_ERROR +--error ER_UNKNOWN_DATA_TYPE CREATE PROCEDURE sp1( ) BEGIN declare year not null x; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index bc530f9be60..caccf27446b 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -10433,3 +10433,30 @@ void Lex_field_type_st::set_handler_length_flags(const Type_handler *handler, handler= handler->type_handler_unsigned(); set(handler, length, NULL); } + + +bool LEX::set_field_type_udt(Lex_field_type_st *type, + const LEX_CSTRING &name, + const Lex_length_and_dec_st &attr) +{ + const Type_handler *h; + if (!(h= Type_handler::handler_by_name_or_error(name))) + return true; + type->set(h, attr); + charset= &my_charset_bin; + return false; + +} + + +bool LEX::set_cast_type_udt(Lex_cast_type_st *type, + const LEX_CSTRING &name) +{ + const Type_handler *h; + if (!(h= Type_handler::handler_by_name_or_error(name))) + return true; + type->set(h); + charset= NULL; + return false; +} + diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 730d775b98c..98bec985a64 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -4558,6 +4558,12 @@ public: Item_result return_type, const LEX_CSTRING &soname); Spvar_definition *row_field_name(THD *thd, const Lex_ident_sys_st &name); + + bool set_field_type_udt(Lex_field_type_st *type, + const LEX_CSTRING &name, + const Lex_length_and_dec_st &attr); + bool set_cast_type_udt(Lex_cast_type_st *type, + const LEX_CSTRING &name); }; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 39d8ab530c2..9bbacd34ebc 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -857,315 +857,335 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %token '@' /* - Reserved keywords and operators + Special purpose tokens +*/ +%token ABORT_SYM /* INTERNAL (used in lex) */ +%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */ +%token END_OF_INPUT /* INTERNAL */ +%token COLON_ORACLE_SYM /* INTERNAL */ +%token PARAM_MARKER /* INTERNAL */ +%token FOR_SYSTEM_TIME_SYM /* INTERNAL */ +%token LEFT_PAREN_ALT /* INTERNAL */ +%token LEFT_PAREN_WITH /* INTERNAL */ +%token LEFT_PAREN_LIKE /* INTERNAL */ +%token ORACLE_CONCAT_SYM /* INTERNAL */ +%token PERCENT_ORACLE_SYM /* INTERNAL */ +%token WITH_CUBE_SYM /* INTERNAL */ +%token WITH_ROLLUP_SYM /* INTERNAL */ +%token WITH_SYSTEM_SYM /* INTERNAL */ + + +/* + Identifiers */ -%token ABORT_SYM /* INTERNAL (used in lex) */ -%token ACCESSIBLE_SYM -%token ADD /* SQL-2003-R */ -%token ALL /* SQL-2003-R */ -%token ALTER /* SQL-2003-R */ -%token ANALYZE_SYM -%token AND_AND_SYM /* OPERATOR */ -%token AND_SYM /* SQL-2003-R */ -%token AS /* SQL-2003-R */ -%token ASC /* SQL-2003-N */ -%token ASENSITIVE_SYM /* FUTURE-USE */ -%token BEFORE_SYM /* SQL-2003-N */ -%token BETWEEN_SYM /* SQL-2003-R */ -%token BIGINT /* SQL-2003-R */ -%token BINARY /* SQL-2003-R */ -%token BIN_NUM -%token BIT_AND /* MYSQL-FUNC */ -%token BIT_OR /* MYSQL-FUNC */ -%token BIT_XOR /* MYSQL-FUNC */ -%token BLOB_MARIADB_SYM /* SQL-2003-R */ -%token BLOB_ORACLE_SYM /* Oracle-R */ -%token BODY_ORACLE_SYM /* Oracle-R */ -%token BOTH /* SQL-2003-R */ -%token BY /* SQL-2003-R */ -%token CALL_SYM /* SQL-2003-R */ -%token CASCADE /* SQL-2003-N */ -%token CASE_SYM /* SQL-2003-R */ -%token CAST_SYM /* SQL-2003-R */ -%token CHANGE -%token CHAR_SYM /* SQL-2003-R */ -%token CHECK_SYM /* SQL-2003-R */ -%token COLLATE_SYM /* SQL-2003-R */ -%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ -%token CONSTRAINT /* SQL-2003-R */ -%token CONTINUE_MARIADB_SYM /* SQL-2003-R, Oracle-R */ -%token CONTINUE_ORACLE_SYM /* SQL-2003-R, Oracle-R */ -%token CONVERT_SYM /* SQL-2003-N */ -%token COUNT_SYM /* SQL-2003-N */ -%token CREATE /* SQL-2003-R */ -%token CROSS /* SQL-2003-R */ -%token CUME_DIST_SYM -%token CURDATE /* MYSQL-FUNC */ -%token CURRENT_USER /* SQL-2003-R */ -%token CURRENT_ROLE /* SQL-2003-R */ -%token CURSOR_SYM /* SQL-2003-R */ -%token CURTIME /* MYSQL-FUNC */ -%token DATABASE -%token DATABASES -%token DATE_ADD_INTERVAL /* MYSQL-FUNC */ -%token DATE_SUB_INTERVAL /* MYSQL-FUNC */ -%token DAY_HOUR_SYM -%token DAY_MICROSECOND_SYM -%token DAY_MINUTE_SYM -%token DAY_SECOND_SYM -%token DECIMAL_NUM -%token DECIMAL_SYM /* SQL-2003-R */ -%token DECLARE_MARIADB_SYM /* SQL-2003-R */ -%token DECLARE_ORACLE_SYM /* Oracle-R */ -%token DEFAULT /* SQL-2003-R */ -%token DELETE_DOMAIN_ID_SYM -%token DELETE_SYM /* SQL-2003-R */ -%token DENSE_RANK_SYM -%token DESC /* SQL-2003-N */ -%token DESCRIBE /* SQL-2003-R */ -%token DETERMINISTIC_SYM /* SQL-2003-R */ -%token DISTINCT /* SQL-2003-R */ -%token DIV_SYM -%token DOUBLE_SYM /* SQL-2003-R */ -%token DO_DOMAIN_IDS_SYM -%token DOT_DOT_SYM -%token DROP /* SQL-2003-R */ -%token DUAL_SYM -%token EACH_SYM /* SQL-2003-R */ -%token ELSE /* SQL-2003-R */ -%token ELSEIF_MARIADB_SYM -%token ELSIF_ORACLE_SYM /* PLSQL-R */ -%token ENCLOSED -%token END_OF_INPUT /* INTERNAL */ -%token EQUAL_SYM /* OPERATOR */ -%token ESCAPED -%token EXCEPT_SYM /* SQL-2003-R */ -%token EXISTS /* SQL-2003-R */ -%token EXTRACT_SYM /* SQL-2003-N */ -%token FALSE_SYM /* SQL-2003-R */ -%token FETCH_SYM /* SQL-2003-R */ -%token FIRST_VALUE_SYM /* SQL-2011 */ -%token FLOAT_NUM -%token FLOAT_SYM /* SQL-2003-R */ -%token FOREIGN /* SQL-2003-R */ -%token FOR_SYM /* SQL-2003-R */ -%token FOR_SYSTEM_TIME_SYM /* INTERNAL */ -%token FROM -%token FULLTEXT_SYM -%token GE -%token GOTO_ORACLE_SYM /* Oracle-R */ -%token GRANT /* SQL-2003-R */ -%token GROUP_SYM /* SQL-2003-R */ -%token GROUP_CONCAT_SYM -%token LAG_SYM /* SQL-2011 */ -%token LEAD_SYM /* SQL-2011 */ -%token HAVING /* SQL-2003-R */ -%token HEX_NUM -%token HEX_STRING -%token HOUR_MICROSECOND_SYM -%token HOUR_MINUTE_SYM -%token HOUR_SECOND_SYM %token IDENT %token IDENT_QUOTED -%token IF_SYM -%token IGNORE_DOMAIN_IDS_SYM -%token IGNORE_SYM -%token INDEX_SYM -%token INFILE -%token INNER_SYM /* SQL-2003-R */ -%token INOUT_SYM /* SQL-2003-R */ -%token INSENSITIVE_SYM /* SQL-2003-R */ -%token INSERT /* SQL-2003-R */ -%token INTERSECT_SYM /* SQL-2003-R */ -%token INTERVAL_SYM /* SQL-2003-R */ -%token INTO /* SQL-2003-R */ -%token INT_SYM /* SQL-2003-R */ -%token IN_SYM /* SQL-2003-R */ -%token IS /* SQL-2003-R */ -%token ITERATE_SYM -%token JOIN_SYM /* SQL-2003-R */ -%token KEYS -%token KEY_SYM /* SQL-2003-N */ -%token KILL_SYM -%token LE /* OPERATOR */ -%token LEADING /* SQL-2003-R */ -%token LEAVE_SYM -%token LEFT /* SQL-2003-R */ -%token LEFT_PAREN_ALT /* INTERNAL */ -%token LEFT_PAREN_WITH /* INTERNAL */ -%token LEFT_PAREN_LIKE /* INTERNAL */ %token LEX_HOSTNAME -%token LIKE /* SQL-2003-R */ -%token LIMIT -%token LINEAR_SYM -%token LINES -%token LOAD -%token LOCATOR_SYM /* SQL-2003-N */ -%token LOCK_SYM -%token LONGBLOB -%token LONGTEXT -%token LONG_NUM -%token LONG_SYM -%token LOOP_SYM -%token LOW_PRIORITY -%token MASTER_SSL_VERIFY_SERVER_CERT_SYM -%token MATCH /* SQL-2003-R */ -%token MAX_SYM /* SQL-2003-N */ -%token MAXVALUE_SYM /* SQL-2003-N */ -%token MEDIAN_SYM -%token MEDIUMBLOB -%token MEDIUMINT -%token MEDIUMTEXT -%token MINUTE_MICROSECOND_SYM -%token MINUTE_SECOND_SYM -%token MIN_SYM /* SQL-2003-N */ -%token MODIFIES_SYM /* SQL-2003-R */ -%token MOD_SYM /* SQL-2003-N */ -%token MYSQL_CONCAT_SYM /* OPERATOR */ -%token NATURAL /* SQL-2003-R */ -%token NCHAR_STRING -%token NE /* OPERATOR */ -%token NEG -%token NOT2_SYM -%token NOT_SYM /* SQL-2003-R */ -%token NOW_SYM -%token NO_WRITE_TO_BINLOG -%token NTILE_SYM -%token NULL_SYM /* SQL-2003-R */ -%token NUM -%token NUMERIC_SYM /* SQL-2003-R */ -%token NTH_VALUE_SYM /* SQL-2011 */ -%token ON /* SQL-2003-R */ -%token OPTIMIZE -%token OPTIONALLY -%token ORACLE_CONCAT_SYM /* INTERNAL */ -%token OR2_SYM -%token ORDER_SYM /* SQL-2003-R */ -%token OR_SYM /* SQL-2003-R */ -%token OTHERS_ORACLE_SYM /* SQL-2011-N, PLSQL-R */ -%token OUTER -%token OUTFILE -%token OUT_SYM /* SQL-2003-R */ -%token OVER_SYM -%token PACKAGE_ORACLE_SYM /* Oracle-R */ -%token PAGE_CHECKSUM_SYM -%token PARAM_MARKER -%token PARSE_VCOL_EXPR_SYM -%token PARTITION_SYM /* SQL-2003-R */ -%token PERCENT_ORACLE_SYM /* INTERNAL */ -%token PERCENT_RANK_SYM -%token PERCENTILE_CONT_SYM -%token PERCENTILE_DISC_SYM -%token PORTION_SYM /* SQL-2016-R */ -%token POSITION_SYM /* SQL-2003-N */ -%token PRECISION /* SQL-2003-R */ -%token PRIMARY_SYM /* SQL-2003-R */ -%token PROCEDURE_SYM /* SQL-2003-R */ -%token PURGE -%token RAISE_ORACLE_SYM /* PLSQL-R */ -%token RANGE_SYM /* SQL-2003-R */ -%token RANK_SYM -%token READS_SYM /* SQL-2003-R */ -%token READ_SYM /* SQL-2003-N */ -%token READ_WRITE_SYM -%token REAL /* SQL-2003-R */ -%token RECURSIVE_SYM -%token REF_SYSTEM_ID_SYM -%token REFERENCES /* SQL-2003-R */ -%token REGEXP -%token RELEASE_SYM /* SQL-2003-R */ -%token RENAME -%token REPEAT_SYM /* MYSQL-FUNC */ -%token REPLACE /* MYSQL-FUNC */ -%token REQUIRE_SYM -%token RESIGNAL_SYM /* SQL-2003-R */ -%token RESTRICT -%token RETURNING_SYM -%token RETURN_MARIADB_SYM /* SQL-2003-R, PLSQL-R */ -%token RETURN_ORACLE_SYM /* SQL-2003-R, PLSQL-R */ -%token REVOKE /* SQL-2003-R */ -%token RIGHT /* SQL-2003-R */ -%token ROWS_SYM /* SQL-2003-R */ -%token ROWTYPE_ORACLE_SYM /* PLSQL-R */ -%token ROW_NUMBER_SYM -%token SECOND_MICROSECOND_SYM -%token SELECT_SYM /* SQL-2003-R */ -%token SENSITIVE_SYM /* FUTURE-USE */ -%token SEPARATOR_SYM -%token SERVER_OPTIONS -%token SET /* SQL-2003-R */ -%token SET_VAR -%token SHIFT_LEFT /* OPERATOR */ -%token SHIFT_RIGHT /* OPERATOR */ -%token SHOW -%token SIGNAL_SYM /* SQL-2003-R */ -%token SMALLINT /* SQL-2003-R */ -%token SPATIAL_SYM -%token SPECIFIC_SYM /* SQL-2003-R */ -%token SQLEXCEPTION_SYM /* SQL-2003-R */ -%token SQLSTATE_SYM /* SQL-2003-R */ -%token SQLWARNING_SYM /* SQL-2003-R */ -%token SQL_BIG_RESULT -%token SQL_SMALL_RESULT -%token SQL_SYM /* SQL-2003-R */ -%token SSL_SYM -%token STARTING -%token STATS_AUTO_RECALC_SYM -%token STATS_PERSISTENT_SYM -%token STATS_SAMPLE_PAGES_SYM -%token STDDEV_SAMP_SYM /* SQL-2003-N */ -%token STD_SYM -%token STRAIGHT_JOIN -%token SUBSTRING /* SQL-2003-N */ -%token SUM_SYM /* SQL-2003-N */ -%token SYSDATE -%token TABLE_REF_PRIORITY -%token TABLE_SYM /* SQL-2003-R */ -%token TERMINATED -%token TEXT_STRING -%token THEN_SYM /* SQL-2003-R */ -%token TINYBLOB -%token TINYINT -%token TINYTEXT -%token TO_SYM /* SQL-2003-R */ -%token TRAILING /* SQL-2003-R */ -%token TRIGGER_SYM /* SQL-2003-R */ -%token TRIM /* SQL-2003-N */ -%token TRUE_SYM /* SQL-2003-R */ -%token ULONGLONG_NUM -%token UNDERSCORE_CHARSET -%token UNDO_SYM /* FUTURE-USE */ -%token UNION_SYM /* SQL-2003-R */ -%token UNIQUE_SYM -%token UNLOCK_SYM -%token UNSIGNED -%token UPDATE_SYM /* SQL-2003-R */ -%token USAGE /* SQL-2003-N */ -%token USE_SYM -%token USING /* SQL-2003-R */ -%token UTC_DATE_SYM -%token UTC_TIMESTAMP_SYM -%token UTC_TIME_SYM -%token VALUES /* SQL-2003-R */ -%token VALUES_IN_SYM -%token VALUES_LESS_SYM -%token VARBINARY -%token VARCHAR /* SQL-2003-R */ -%token VARIANCE_SYM -%token VARYING /* SQL-2003-R */ -%token VAR_SAMP_SYM -%token WHEN_SYM /* SQL-2003-R */ -%token WHERE /* SQL-2003-R */ -%token WHILE_SYM -%token WITH /* SQL-2003-R */ -%token WITH_CUBE_SYM /* INTERNAL */ -%token WITH_ROLLUP_SYM /* INTERNAL */ -%token WITH_SYSTEM_SYM /* INTERNAL */ -%token XOR -%token YEAR_MONTH_SYM -%token ZEROFILL +%token UNDERSCORE_CHARSET /* _latin1 */ -%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */ + +/* + Literals +*/ +%token BIN_NUM /* LITERAL */ +%token DECIMAL_NUM /* LITERAL */ +%token FLOAT_NUM /* LITERAL */ +%token HEX_NUM /* LITERAL */ +%token HEX_STRING /* LITERAL */ +%token LONG_NUM /* LITERAL */ +%token NCHAR_STRING /* LITERAL */ +%token NUM /* LITERAL */ +%token TEXT_STRING /* LITERAL */ +%token ULONGLONG_NUM /* LITERAL */ + + +/* + Operators +*/ +%token AND_AND_SYM /* OPERATOR */ +%token DOT_DOT_SYM /* OPERATOR */ +%token EQUAL_SYM /* OPERATOR */ +%token GE /* OPERATOR */ +%token LE /* OPERATOR */ +%token MYSQL_CONCAT_SYM /* OPERATOR */ +%token NE /* OPERATOR */ +%token NOT2_SYM /* OPERATOR */ +%token OR2_SYM /* OPERATOR */ +%token SET_VAR /* OPERATOR */ +%token SHIFT_LEFT /* OPERATOR */ +%token SHIFT_RIGHT /* OPERATOR */ + + +/* + Reserved keywords +*/ +%token ACCESSIBLE_SYM +%token ADD /* SQL-2003-R */ +%token ALL /* SQL-2003-R */ +%token ALTER /* SQL-2003-R */ +%token ANALYZE_SYM +%token AND_SYM /* SQL-2003-R */ +%token ASC /* SQL-2003-N */ +%token ASENSITIVE_SYM /* FUTURE-USE */ +%token AS /* SQL-2003-R */ +%token BEFORE_SYM /* SQL-2003-N */ +%token BETWEEN_SYM /* SQL-2003-R */ +%token BIGINT /* SQL-2003-R */ +%token BINARY /* SQL-2003-R */ +%token BIT_AND /* MYSQL-FUNC */ +%token BIT_OR /* MYSQL-FUNC */ +%token BIT_XOR /* MYSQL-FUNC */ +%token BLOB_MARIADB_SYM /* SQL-2003-R */ +%token BLOB_ORACLE_SYM /* Oracle-R */ +%token BODY_ORACLE_SYM /* Oracle-R */ +%token BOTH /* SQL-2003-R */ +%token BY /* SQL-2003-R */ +%token CALL_SYM /* SQL-2003-R */ +%token CASCADE /* SQL-2003-N */ +%token CASE_SYM /* SQL-2003-R */ +%token CAST_SYM /* SQL-2003-R */ +%token CHANGE +%token CHAR_SYM /* SQL-2003-R */ +%token CHECK_SYM /* SQL-2003-R */ +%token COLLATE_SYM /* SQL-2003-R */ +%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ +%token CONSTRAINT /* SQL-2003-R */ +%token CONTINUE_MARIADB_SYM /* SQL-2003-R, Oracle-R */ +%token CONTINUE_ORACLE_SYM /* SQL-2003-R, Oracle-R */ +%token CONVERT_SYM /* SQL-2003-N */ +%token COUNT_SYM /* SQL-2003-N */ +%token CREATE /* SQL-2003-R */ +%token CROSS /* SQL-2003-R */ +%token CUME_DIST_SYM +%token CURDATE /* MYSQL-FUNC */ +%token CURRENT_ROLE /* SQL-2003-R */ +%token CURRENT_USER /* SQL-2003-R */ +%token CURSOR_SYM /* SQL-2003-R */ +%token CURTIME /* MYSQL-FUNC */ +%token DATABASE +%token DATABASES +%token DATE_ADD_INTERVAL /* MYSQL-FUNC */ +%token DATE_SUB_INTERVAL /* MYSQL-FUNC */ +%token DAY_HOUR_SYM +%token DAY_MICROSECOND_SYM +%token DAY_MINUTE_SYM +%token DAY_SECOND_SYM +%token DECIMAL_SYM /* SQL-2003-R */ +%token DECLARE_MARIADB_SYM /* SQL-2003-R */ +%token DECLARE_ORACLE_SYM /* Oracle-R */ +%token DEFAULT /* SQL-2003-R */ +%token DELETE_DOMAIN_ID_SYM +%token DELETE_SYM /* SQL-2003-R */ +%token DENSE_RANK_SYM +%token DESCRIBE /* SQL-2003-R */ +%token DESC /* SQL-2003-N */ +%token DETERMINISTIC_SYM /* SQL-2003-R */ +%token DISTINCT /* SQL-2003-R */ +%token DIV_SYM +%token DO_DOMAIN_IDS_SYM +%token DOUBLE_SYM /* SQL-2003-R */ +%token DROP /* SQL-2003-R */ +%token DUAL_SYM +%token EACH_SYM /* SQL-2003-R */ +%token ELSEIF_MARIADB_SYM +%token ELSE /* SQL-2003-R */ +%token ELSIF_ORACLE_SYM /* PLSQL-R */ +%token ENCLOSED +%token ESCAPED +%token EXCEPT_SYM /* SQL-2003-R */ +%token EXISTS /* SQL-2003-R */ +%token EXTRACT_SYM /* SQL-2003-N */ +%token FALSE_SYM /* SQL-2003-R */ +%token FETCH_SYM /* SQL-2003-R */ +%token FIRST_VALUE_SYM /* SQL-2011 */ +%token FLOAT_SYM /* SQL-2003-R */ +%token FOREIGN /* SQL-2003-R */ +%token FOR_SYM /* SQL-2003-R */ +%token FROM +%token FULLTEXT_SYM +%token GOTO_ORACLE_SYM /* Oracle-R */ +%token GRANT /* SQL-2003-R */ +%token GROUP_CONCAT_SYM +%token GROUP_SYM /* SQL-2003-R */ +%token HAVING /* SQL-2003-R */ +%token HOUR_MICROSECOND_SYM +%token HOUR_MINUTE_SYM +%token HOUR_SECOND_SYM +%token IF_SYM +%token IGNORE_DOMAIN_IDS_SYM +%token IGNORE_SYM +%token INDEX_SYM +%token INFILE +%token INNER_SYM /* SQL-2003-R */ +%token INOUT_SYM /* SQL-2003-R */ +%token INSENSITIVE_SYM /* SQL-2003-R */ +%token INSERT /* SQL-2003-R */ +%token IN_SYM /* SQL-2003-R */ +%token INTERSECT_SYM /* SQL-2003-R */ +%token INTERVAL_SYM /* SQL-2003-R */ +%token INTO /* SQL-2003-R */ +%token INT_SYM /* SQL-2003-R */ +%token IS /* SQL-2003-R */ +%token ITERATE_SYM +%token JOIN_SYM /* SQL-2003-R */ +%token KEYS +%token KEY_SYM /* SQL-2003-N */ +%token KILL_SYM +%token LAG_SYM /* SQL-2011 */ +%token LEADING /* SQL-2003-R */ +%token LEAD_SYM /* SQL-2011 */ +%token LEAVE_SYM +%token LEFT /* SQL-2003-R */ +%token LIKE /* SQL-2003-R */ +%token LIMIT +%token LINEAR_SYM +%token LINES +%token LOAD +%token LOCATOR_SYM /* SQL-2003-N */ +%token LOCK_SYM +%token LONGBLOB +%token LONG_SYM +%token LONGTEXT +%token LOOP_SYM +%token LOW_PRIORITY +%token MASTER_SSL_VERIFY_SERVER_CERT_SYM +%token MATCH /* SQL-2003-R */ +%token MAX_SYM /* SQL-2003-N */ +%token MAXVALUE_SYM /* SQL-2003-N */ +%token MEDIAN_SYM +%token MEDIUMBLOB +%token MEDIUMINT +%token MEDIUMTEXT +%token MIN_SYM /* SQL-2003-N */ +%token MINUTE_MICROSECOND_SYM +%token MINUTE_SECOND_SYM +%token MODIFIES_SYM /* SQL-2003-R */ +%token MOD_SYM /* SQL-2003-N */ +%token NATURAL /* SQL-2003-R */ +%token NEG +%token NOT_SYM /* SQL-2003-R */ +%token NO_WRITE_TO_BINLOG +%token NOW_SYM +%token NTH_VALUE_SYM /* SQL-2011 */ +%token NTILE_SYM +%token NULL_SYM /* SQL-2003-R */ +%token NUMERIC_SYM /* SQL-2003-R */ +%token ON /* SQL-2003-R */ +%token OPTIMIZE +%token OPTIONALLY +%token ORDER_SYM /* SQL-2003-R */ +%token OR_SYM /* SQL-2003-R */ +%token OTHERS_ORACLE_SYM /* SQL-2011-N, PLSQL-R */ +%token OUTER +%token OUTFILE +%token OUT_SYM /* SQL-2003-R */ +%token OVER_SYM +%token PACKAGE_ORACLE_SYM /* Oracle-R */ +%token PAGE_CHECKSUM_SYM +%token PARSE_VCOL_EXPR_SYM +%token PARTITION_SYM /* SQL-2003-R */ +%token PERCENTILE_CONT_SYM +%token PERCENTILE_DISC_SYM +%token PERCENT_RANK_SYM +%token PORTION_SYM /* SQL-2016-R */ +%token POSITION_SYM /* SQL-2003-N */ +%token PRECISION /* SQL-2003-R */ +%token PRIMARY_SYM /* SQL-2003-R */ +%token PROCEDURE_SYM /* SQL-2003-R */ +%token PURGE +%token RAISE_ORACLE_SYM /* PLSQL-R */ +%token RANGE_SYM /* SQL-2003-R */ +%token RANK_SYM +%token READS_SYM /* SQL-2003-R */ +%token READ_SYM /* SQL-2003-N */ +%token READ_WRITE_SYM +%token REAL /* SQL-2003-R */ +%token RECURSIVE_SYM +%token REFERENCES /* SQL-2003-R */ +%token REF_SYSTEM_ID_SYM +%token REGEXP +%token RELEASE_SYM /* SQL-2003-R */ +%token RENAME +%token REPEAT_SYM /* MYSQL-FUNC */ +%token REPLACE /* MYSQL-FUNC */ +%token REQUIRE_SYM +%token RESIGNAL_SYM /* SQL-2003-R */ +%token RESTRICT +%token RETURNING_SYM +%token RETURN_MARIADB_SYM /* SQL-2003-R, PLSQL-R */ +%token RETURN_ORACLE_SYM /* SQL-2003-R, PLSQL-R */ +%token REVOKE /* SQL-2003-R */ +%token RIGHT /* SQL-2003-R */ +%token ROW_NUMBER_SYM +%token ROWS_SYM /* SQL-2003-R */ +%token ROWTYPE_ORACLE_SYM /* PLSQL-R */ +%token SECOND_MICROSECOND_SYM +%token SELECT_SYM /* SQL-2003-R */ +%token SENSITIVE_SYM /* FUTURE-USE */ +%token SEPARATOR_SYM +%token SERVER_OPTIONS +%token SET /* SQL-2003-R */ +%token SHOW +%token SIGNAL_SYM /* SQL-2003-R */ +%token SMALLINT /* SQL-2003-R */ +%token SPATIAL_SYM +%token SPECIFIC_SYM /* SQL-2003-R */ +%token SQL_BIG_RESULT +%token SQLEXCEPTION_SYM /* SQL-2003-R */ +%token SQL_SMALL_RESULT +%token SQLSTATE_SYM /* SQL-2003-R */ +%token SQL_SYM /* SQL-2003-R */ +%token SQLWARNING_SYM /* SQL-2003-R */ +%token SSL_SYM +%token STARTING +%token STATS_AUTO_RECALC_SYM +%token STATS_PERSISTENT_SYM +%token STATS_SAMPLE_PAGES_SYM +%token STDDEV_SAMP_SYM /* SQL-2003-N */ +%token STD_SYM +%token STRAIGHT_JOIN +%token SUBSTRING /* SQL-2003-N */ +%token SUM_SYM /* SQL-2003-N */ +%token SYSDATE +%token TABLE_REF_PRIORITY +%token TABLE_SYM /* SQL-2003-R */ +%token TERMINATED +%token THEN_SYM /* SQL-2003-R */ +%token TINYBLOB +%token TINYINT +%token TINYTEXT +%token TO_SYM /* SQL-2003-R */ +%token TRAILING /* SQL-2003-R */ +%token TRIGGER_SYM /* SQL-2003-R */ +%token TRIM /* SQL-2003-N */ +%token TRUE_SYM /* SQL-2003-R */ +%token UNDO_SYM /* FUTURE-USE */ +%token UNION_SYM /* SQL-2003-R */ +%token UNIQUE_SYM +%token UNLOCK_SYM +%token UNSIGNED +%token UPDATE_SYM /* SQL-2003-R */ +%token USAGE /* SQL-2003-N */ +%token USE_SYM +%token USING /* SQL-2003-R */ +%token UTC_DATE_SYM +%token UTC_TIMESTAMP_SYM +%token UTC_TIME_SYM +%token VALUES_IN_SYM +%token VALUES_LESS_SYM +%token VALUES /* SQL-2003-R */ +%token VARBINARY +%token VARCHAR /* SQL-2003-R */ +%token VARIANCE_SYM +%token VAR_SAMP_SYM +%token VARYING /* SQL-2003-R */ +%token WHEN_SYM /* SQL-2003-R */ +%token WHERE /* SQL-2003-R */ +%token WHILE_SYM +%token WITH /* SQL-2003-R */ +%token XOR +%token YEAR_MONTH_SYM +%token ZEROFILL /* @@ -1231,7 +1251,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %token COALESCE /* SQL-2003-N */ %token CODE_SYM %token COLLATION_SYM /* SQL-2003-N */ -%token COLON_ORACLE_SYM /* INTERNAL */ %token COLUMNS %token COLUMN_ADD_SYM %token COLUMN_CHECK_SYM @@ -1792,6 +1811,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); keyword_table_alias keyword_verb_clause charset + reserved_keyword_udt %type table_ident table_ident_nodb references xid @@ -2115,7 +2135,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); opt_delete_gtid_domain asrow_attribute opt_constraint_no_id -END_OF_INPUT %type call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt %type sp_proc_stmt_statement sp_proc_stmt_return @@ -2186,11 +2205,6 @@ END_OF_INPUT '-' '+' '*' '/' '%' '(' ')' ',' '!' '{' '}' '&' '|' -%type - AND_SYM OR_SYM BETWEEN_SYM CASE_SYM - THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM DELETE_SYM - MYSQL_CONCAT_SYM ORACLE_CONCAT_SYM - %type with_clause %type query_name @@ -6842,11 +6856,13 @@ field_type: | field_type_misc | IDENT_sys float_options srid_option { - const Type_handler *h; - if (!(h= Type_handler::handler_by_name_or_error($1))) + if (Lex->set_field_type_udt(&$$, $1, $2)) + MYSQL_YYABORT; + } + | reserved_keyword_udt float_options srid_option + { + if (Lex->set_field_type_udt(&$$, $1, $2)) MYSQL_YYABORT; - $$.set(h, $2); - Lex->charset= &my_charset_bin; } ; @@ -11891,11 +11907,13 @@ cast_type: | cast_type_temporal { $$= $1; Lex->charset= NULL; } | IDENT_sys { - const Type_handler *h; - if (!(h= Type_handler::handler_by_name_or_error($1))) + if (Lex->set_cast_type_udt(&$$, $1)) + MYSQL_YYABORT; + } + | reserved_keyword_udt + { + if (Lex->set_cast_type_udt(&$$, $1)) MYSQL_YYABORT; - $$.set(h); - Lex->charset= NULL; } ; @@ -13818,6 +13836,7 @@ delete: lex->first_select_lex()->order_list.empty(); } delete_part2 + { } ; opt_delete_system_time: @@ -16362,6 +16381,249 @@ keyword_sp_var_and_label: | VIA_SYM ; + +reserved_keyword_udt: + ACCESSIBLE_SYM + | ADD + | ALL + | ALTER + | ANALYZE_SYM + | AND_SYM + | AS + | ASC + | ASENSITIVE_SYM + | BEFORE_SYM + | BETWEEN_SYM + | BIT_AND + | BIT_OR + | BIT_XOR + | BODY_ORACLE_SYM + | BOTH + | BY + | CALL_SYM + | CASCADE + | CASE_SYM + | CAST_SYM + | CHANGE + | CHECK_SYM + | COLLATE_SYM + | CONSTRAINT + | CONTINUE_MARIADB_SYM + | CONTINUE_ORACLE_SYM + | CONVERT_SYM + | COUNT_SYM + | CREATE + | CROSS + | CUME_DIST_SYM + | CURDATE + | CURRENT_USER + | CURRENT_ROLE + | CURTIME + | DATABASE + | DATABASES + | DATE_ADD_INTERVAL + | DATE_SUB_INTERVAL + | DAY_HOUR_SYM + | DAY_MICROSECOND_SYM + | DAY_MINUTE_SYM + | DAY_SECOND_SYM + | DECLARE_MARIADB_SYM + | DECLARE_ORACLE_SYM + | DEFAULT + | DELETE_DOMAIN_ID_SYM + | DELETE_SYM + | DENSE_RANK_SYM + | DESC + | DESCRIBE + | DETERMINISTIC_SYM + | DISTINCT + | DIV_SYM + | DO_DOMAIN_IDS_SYM + | DROP + | DUAL_SYM + | EACH_SYM + | ELSE + | ELSEIF_MARIADB_SYM + | ELSIF_ORACLE_SYM + | ENCLOSED + | ESCAPED + | EXCEPT_SYM + | EXISTS + | EXTRACT_SYM + | FALSE_SYM + | FETCH_SYM + | FIRST_VALUE_SYM + | FOREIGN + | FROM + | FULLTEXT_SYM + | GOTO_ORACLE_SYM + | GRANT + | GROUP_SYM + | GROUP_CONCAT_SYM + | LAG_SYM + | LEAD_SYM + | HAVING + | HOUR_MICROSECOND_SYM + | HOUR_MINUTE_SYM + | HOUR_SECOND_SYM + | IF_SYM + | IGNORE_DOMAIN_IDS_SYM + | IGNORE_SYM + | INDEX_SYM + | INFILE + | INNER_SYM + | INOUT_SYM + | INSENSITIVE_SYM + | INSERT + | INTERSECT_SYM + | INTERVAL_SYM + | INTO + | IN_SYM + | IS + | ITERATE_SYM + | JOIN_SYM + | KEYS + | KEY_SYM + | KILL_SYM + | LEADING + | LEAVE_SYM + | LEFT + | LIKE + | LIMIT + | LINEAR_SYM + | LINES + | LOAD + | LOCATOR_SYM + | LOCK_SYM + | LOOP_SYM + | LOW_PRIORITY + | MASTER_SSL_VERIFY_SERVER_CERT_SYM + | MATCH + | MAX_SYM + | MAXVALUE_SYM + | MEDIAN_SYM + | MINUTE_MICROSECOND_SYM + | MINUTE_SECOND_SYM + | MIN_SYM + | MODIFIES_SYM + | MOD_SYM + | NATURAL + | NEG + | NOT_SYM + | NOW_SYM + | NO_WRITE_TO_BINLOG + | NTILE_SYM + | NULL_SYM + | NTH_VALUE_SYM + | ON + | OPTIMIZE + | OPTIONALLY + | ORDER_SYM + | OR_SYM + | OTHERS_ORACLE_SYM + | OUTER + | OUTFILE + | OUT_SYM + | OVER_SYM + | PACKAGE_ORACLE_SYM + | PAGE_CHECKSUM_SYM + | PARSE_VCOL_EXPR_SYM + | PARTITION_SYM + | PERCENT_RANK_SYM + | PERCENTILE_CONT_SYM + | PERCENTILE_DISC_SYM + | PORTION_SYM + | POSITION_SYM + | PRECISION + | PRIMARY_SYM + | PROCEDURE_SYM + | PURGE + | RAISE_ORACLE_SYM + | RANGE_SYM + | RANK_SYM + | READS_SYM + | READ_SYM + | READ_WRITE_SYM + | RECURSIVE_SYM + | REF_SYSTEM_ID_SYM + | REFERENCES + | REGEXP + | RELEASE_SYM + | RENAME + | REPEAT_SYM + | REPLACE + | REQUIRE_SYM + | RESIGNAL_SYM + | RESTRICT + | RETURNING_SYM + | RETURN_MARIADB_SYM + | RETURN_ORACLE_SYM + | REVOKE + | RIGHT + | ROWS_SYM + | ROWTYPE_ORACLE_SYM + | ROW_NUMBER_SYM + | SECOND_MICROSECOND_SYM + | SELECT_SYM + | SENSITIVE_SYM + | SEPARATOR_SYM + | SERVER_OPTIONS + | SHOW + | SIGNAL_SYM + | SPATIAL_SYM + | SPECIFIC_SYM + | SQLEXCEPTION_SYM + | SQLSTATE_SYM + | SQLWARNING_SYM + | SQL_BIG_RESULT + | SQL_SMALL_RESULT + | SQL_SYM + | SSL_SYM + | STARTING + | STATS_AUTO_RECALC_SYM + | STATS_PERSISTENT_SYM + | STATS_SAMPLE_PAGES_SYM + | STDDEV_SAMP_SYM + | STD_SYM + | STRAIGHT_JOIN + | SUBSTRING + | SUM_SYM + | SYSDATE + | TABLE_REF_PRIORITY + | TABLE_SYM + | TERMINATED + | THEN_SYM + | TO_SYM + | TRAILING + | TRIGGER_SYM + | TRIM + | TRUE_SYM + | UNDO_SYM + | UNION_SYM + | UNIQUE_SYM + | UNLOCK_SYM + | UPDATE_SYM + | USAGE + | USE_SYM + | USING + | UTC_DATE_SYM + | UTC_TIMESTAMP_SYM + | UTC_TIME_SYM + | VALUES + | VALUES_IN_SYM + | VALUES_LESS_SYM + | VARIANCE_SYM + | VARYING + | VAR_SAMP_SYM + | WHEN_SYM + | WHERE + | WHILE_SYM + | WITH + | XOR + | YEAR_MONTH_SYM + | ZEROFILL + ; + /* SQLCOM_SET_OPTION statement. diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy index 8768cc1270b..87522dc10dd 100644 --- a/sql/sql_yacc_ora.yy +++ b/sql/sql_yacc_ora.yy @@ -322,315 +322,335 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %token '@' /* - Reserved keywords and operators + Special purpose tokens +*/ +%token ABORT_SYM /* INTERNAL (used in lex) */ +%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */ +%token END_OF_INPUT /* INTERNAL */ +%token COLON_ORACLE_SYM /* INTERNAL */ +%token PARAM_MARKER /* INTERNAL */ +%token FOR_SYSTEM_TIME_SYM /* INTERNAL */ +%token LEFT_PAREN_ALT /* INTERNAL */ +%token LEFT_PAREN_WITH /* INTERNAL */ +%token LEFT_PAREN_LIKE /* INTERNAL */ +%token ORACLE_CONCAT_SYM /* INTERNAL */ +%token PERCENT_ORACLE_SYM /* INTERNAL */ +%token WITH_CUBE_SYM /* INTERNAL */ +%token WITH_ROLLUP_SYM /* INTERNAL */ +%token WITH_SYSTEM_SYM /* INTERNAL */ + + +/* + Identifiers */ -%token ABORT_SYM /* INTERNAL (used in lex) */ -%token ACCESSIBLE_SYM -%token ADD /* SQL-2003-R */ -%token ALL /* SQL-2003-R */ -%token ALTER /* SQL-2003-R */ -%token ANALYZE_SYM -%token AND_AND_SYM /* OPERATOR */ -%token AND_SYM /* SQL-2003-R */ -%token AS /* SQL-2003-R */ -%token ASC /* SQL-2003-N */ -%token ASENSITIVE_SYM /* FUTURE-USE */ -%token BEFORE_SYM /* SQL-2003-N */ -%token BETWEEN_SYM /* SQL-2003-R */ -%token BIGINT /* SQL-2003-R */ -%token BINARY /* SQL-2003-R */ -%token BIN_NUM -%token BIT_AND /* MYSQL-FUNC */ -%token BIT_OR /* MYSQL-FUNC */ -%token BIT_XOR /* MYSQL-FUNC */ -%token BLOB_MARIADB_SYM /* SQL-2003-R */ -%token BLOB_ORACLE_SYM /* Oracle-R */ -%token BODY_ORACLE_SYM /* Oracle-R */ -%token BOTH /* SQL-2003-R */ -%token BY /* SQL-2003-R */ -%token CALL_SYM /* SQL-2003-R */ -%token CASCADE /* SQL-2003-N */ -%token CASE_SYM /* SQL-2003-R */ -%token CAST_SYM /* SQL-2003-R */ -%token CHANGE -%token CHAR_SYM /* SQL-2003-R */ -%token CHECK_SYM /* SQL-2003-R */ -%token COLLATE_SYM /* SQL-2003-R */ -%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ -%token CONSTRAINT /* SQL-2003-R */ -%token CONTINUE_MARIADB_SYM /* SQL-2003-R, Oracle-R */ -%token CONTINUE_ORACLE_SYM /* SQL-2003-R, Oracle-R */ -%token CONVERT_SYM /* SQL-2003-N */ -%token COUNT_SYM /* SQL-2003-N */ -%token CREATE /* SQL-2003-R */ -%token CROSS /* SQL-2003-R */ -%token CUME_DIST_SYM -%token CURDATE /* MYSQL-FUNC */ -%token CURRENT_USER /* SQL-2003-R */ -%token CURRENT_ROLE /* SQL-2003-R */ -%token CURSOR_SYM /* SQL-2003-R */ -%token CURTIME /* MYSQL-FUNC */ -%token DATABASE -%token DATABASES -%token DATE_ADD_INTERVAL /* MYSQL-FUNC */ -%token DATE_SUB_INTERVAL /* MYSQL-FUNC */ -%token DAY_HOUR_SYM -%token DAY_MICROSECOND_SYM -%token DAY_MINUTE_SYM -%token DAY_SECOND_SYM -%token DECIMAL_NUM -%token DECIMAL_SYM /* SQL-2003-R */ -%token DECLARE_MARIADB_SYM /* SQL-2003-R */ -%token DECLARE_ORACLE_SYM /* Oracle-R */ -%token DEFAULT /* SQL-2003-R */ -%token DELETE_DOMAIN_ID_SYM -%token DELETE_SYM /* SQL-2003-R */ -%token DENSE_RANK_SYM -%token DESC /* SQL-2003-N */ -%token DESCRIBE /* SQL-2003-R */ -%token DETERMINISTIC_SYM /* SQL-2003-R */ -%token DISTINCT /* SQL-2003-R */ -%token DIV_SYM -%token DOUBLE_SYM /* SQL-2003-R */ -%token DO_DOMAIN_IDS_SYM -%token DOT_DOT_SYM -%token DROP /* SQL-2003-R */ -%token DUAL_SYM -%token EACH_SYM /* SQL-2003-R */ -%token ELSE /* SQL-2003-R */ -%token ELSEIF_MARIADB_SYM -%token ELSIF_ORACLE_SYM /* PLSQL-R */ -%token ENCLOSED -%token END_OF_INPUT /* INTERNAL */ -%token EQUAL_SYM /* OPERATOR */ -%token ESCAPED -%token EXCEPT_SYM /* SQL-2003-R */ -%token EXISTS /* SQL-2003-R */ -%token EXTRACT_SYM /* SQL-2003-N */ -%token FALSE_SYM /* SQL-2003-R */ -%token FETCH_SYM /* SQL-2003-R */ -%token FIRST_VALUE_SYM /* SQL-2011 */ -%token FLOAT_NUM -%token FLOAT_SYM /* SQL-2003-R */ -%token FOREIGN /* SQL-2003-R */ -%token FOR_SYM /* SQL-2003-R */ -%token FOR_SYSTEM_TIME_SYM /* INTERNAL */ -%token FROM -%token FULLTEXT_SYM -%token GE -%token GOTO_ORACLE_SYM /* Oracle-R */ -%token GRANT /* SQL-2003-R */ -%token GROUP_SYM /* SQL-2003-R */ -%token GROUP_CONCAT_SYM -%token LAG_SYM /* SQL-2011 */ -%token LEAD_SYM /* SQL-2011 */ -%token HAVING /* SQL-2003-R */ -%token HEX_NUM -%token HEX_STRING -%token HOUR_MICROSECOND_SYM -%token HOUR_MINUTE_SYM -%token HOUR_SECOND_SYM %token IDENT %token IDENT_QUOTED -%token IF_SYM -%token IGNORE_DOMAIN_IDS_SYM -%token IGNORE_SYM -%token INDEX_SYM -%token INFILE -%token INNER_SYM /* SQL-2003-R */ -%token INOUT_SYM /* SQL-2003-R */ -%token INSENSITIVE_SYM /* SQL-2003-R */ -%token INSERT /* SQL-2003-R */ -%token INTERSECT_SYM /* SQL-2003-R */ -%token INTERVAL_SYM /* SQL-2003-R */ -%token INTO /* SQL-2003-R */ -%token INT_SYM /* SQL-2003-R */ -%token IN_SYM /* SQL-2003-R */ -%token IS /* SQL-2003-R */ -%token ITERATE_SYM -%token JOIN_SYM /* SQL-2003-R */ -%token KEYS -%token KEY_SYM /* SQL-2003-N */ -%token KILL_SYM -%token LE /* OPERATOR */ -%token LEADING /* SQL-2003-R */ -%token LEAVE_SYM -%token LEFT /* SQL-2003-R */ -%token LEFT_PAREN_ALT /* INTERNAL */ -%token LEFT_PAREN_WITH /* INTERNAL */ -%token LEFT_PAREN_LIKE /* INTERNAL */ %token LEX_HOSTNAME -%token LIKE /* SQL-2003-R */ -%token LIMIT -%token LINEAR_SYM -%token LINES -%token LOAD -%token LOCATOR_SYM /* SQL-2003-N */ -%token LOCK_SYM -%token LONGBLOB -%token LONGTEXT -%token LONG_NUM -%token LONG_SYM -%token LOOP_SYM -%token LOW_PRIORITY -%token MASTER_SSL_VERIFY_SERVER_CERT_SYM -%token MATCH /* SQL-2003-R */ -%token MAX_SYM /* SQL-2003-N */ -%token MAXVALUE_SYM /* SQL-2003-N */ -%token MEDIAN_SYM -%token MEDIUMBLOB -%token MEDIUMINT -%token MEDIUMTEXT -%token MINUTE_MICROSECOND_SYM -%token MINUTE_SECOND_SYM -%token MIN_SYM /* SQL-2003-N */ -%token MODIFIES_SYM /* SQL-2003-R */ -%token MOD_SYM /* SQL-2003-N */ -%token MYSQL_CONCAT_SYM /* OPERATOR */ -%token NATURAL /* SQL-2003-R */ -%token NCHAR_STRING -%token NE /* OPERATOR */ -%token NEG -%token NOT2_SYM -%token NOT_SYM /* SQL-2003-R */ -%token NOW_SYM -%token NO_WRITE_TO_BINLOG -%token NTILE_SYM -%token NULL_SYM /* SQL-2003-R */ -%token NUM -%token NUMERIC_SYM /* SQL-2003-R */ -%token NTH_VALUE_SYM /* SQL-2011 */ -%token ON /* SQL-2003-R */ -%token OPTIMIZE -%token OPTIONALLY -%token ORACLE_CONCAT_SYM /* INTERNAL */ -%token OR2_SYM -%token ORDER_SYM /* SQL-2003-R */ -%token OR_SYM /* SQL-2003-R */ -%token OTHERS_ORACLE_SYM /* SQL-2011-N, PLSQL-R */ -%token OUTER -%token OUTFILE -%token OUT_SYM /* SQL-2003-R */ -%token OVER_SYM -%token PACKAGE_ORACLE_SYM /* Oracle-R */ -%token PAGE_CHECKSUM_SYM -%token PARAM_MARKER -%token PARSE_VCOL_EXPR_SYM -%token PARTITION_SYM /* SQL-2003-R */ -%token PERCENT_ORACLE_SYM /* INTERNAL */ -%token PERCENT_RANK_SYM -%token PERCENTILE_CONT_SYM -%token PERCENTILE_DISC_SYM -%token PORTION_SYM /* SQL-2016-R */ -%token POSITION_SYM /* SQL-2003-N */ -%token PRECISION /* SQL-2003-R */ -%token PRIMARY_SYM /* SQL-2003-R */ -%token PROCEDURE_SYM /* SQL-2003-R */ -%token PURGE -%token RAISE_ORACLE_SYM /* PLSQL-R */ -%token RANGE_SYM /* SQL-2003-R */ -%token RANK_SYM -%token READS_SYM /* SQL-2003-R */ -%token READ_SYM /* SQL-2003-N */ -%token READ_WRITE_SYM -%token REAL /* SQL-2003-R */ -%token RECURSIVE_SYM -%token REF_SYSTEM_ID_SYM -%token REFERENCES /* SQL-2003-R */ -%token REGEXP -%token RELEASE_SYM /* SQL-2003-R */ -%token RENAME -%token REPEAT_SYM /* MYSQL-FUNC */ -%token REPLACE /* MYSQL-FUNC */ -%token REQUIRE_SYM -%token RESIGNAL_SYM /* SQL-2003-R */ -%token RESTRICT -%token RETURNING_SYM -%token RETURN_MARIADB_SYM /* SQL-2003-R, PLSQL-R */ -%token RETURN_ORACLE_SYM /* SQL-2003-R, PLSQL-R */ -%token REVOKE /* SQL-2003-R */ -%token RIGHT /* SQL-2003-R */ -%token ROWS_SYM /* SQL-2003-R */ -%token ROWTYPE_ORACLE_SYM /* PLSQL-R */ -%token ROW_NUMBER_SYM -%token SECOND_MICROSECOND_SYM -%token SELECT_SYM /* SQL-2003-R */ -%token SENSITIVE_SYM /* FUTURE-USE */ -%token SEPARATOR_SYM -%token SERVER_OPTIONS -%token SET /* SQL-2003-R */ -%token SET_VAR -%token SHIFT_LEFT /* OPERATOR */ -%token SHIFT_RIGHT /* OPERATOR */ -%token SHOW -%token SIGNAL_SYM /* SQL-2003-R */ -%token SMALLINT /* SQL-2003-R */ -%token SPATIAL_SYM -%token SPECIFIC_SYM /* SQL-2003-R */ -%token SQLEXCEPTION_SYM /* SQL-2003-R */ -%token SQLSTATE_SYM /* SQL-2003-R */ -%token SQLWARNING_SYM /* SQL-2003-R */ -%token SQL_BIG_RESULT -%token SQL_SMALL_RESULT -%token SQL_SYM /* SQL-2003-R */ -%token SSL_SYM -%token STARTING -%token STATS_AUTO_RECALC_SYM -%token STATS_PERSISTENT_SYM -%token STATS_SAMPLE_PAGES_SYM -%token STDDEV_SAMP_SYM /* SQL-2003-N */ -%token STD_SYM -%token STRAIGHT_JOIN -%token SUBSTRING /* SQL-2003-N */ -%token SUM_SYM /* SQL-2003-N */ -%token SYSDATE -%token TABLE_REF_PRIORITY -%token TABLE_SYM /* SQL-2003-R */ -%token TERMINATED -%token TEXT_STRING -%token THEN_SYM /* SQL-2003-R */ -%token TINYBLOB -%token TINYINT -%token TINYTEXT -%token TO_SYM /* SQL-2003-R */ -%token TRAILING /* SQL-2003-R */ -%token TRIGGER_SYM /* SQL-2003-R */ -%token TRIM /* SQL-2003-N */ -%token TRUE_SYM /* SQL-2003-R */ -%token ULONGLONG_NUM -%token UNDERSCORE_CHARSET -%token UNDO_SYM /* FUTURE-USE */ -%token UNION_SYM /* SQL-2003-R */ -%token UNIQUE_SYM -%token UNLOCK_SYM -%token UNSIGNED -%token UPDATE_SYM /* SQL-2003-R */ -%token USAGE /* SQL-2003-N */ -%token USE_SYM -%token USING /* SQL-2003-R */ -%token UTC_DATE_SYM -%token UTC_TIMESTAMP_SYM -%token UTC_TIME_SYM -%token VALUES /* SQL-2003-R */ -%token VALUES_IN_SYM -%token VALUES_LESS_SYM -%token VARBINARY -%token VARCHAR /* SQL-2003-R */ -%token VARIANCE_SYM -%token VARYING /* SQL-2003-R */ -%token VAR_SAMP_SYM -%token WHEN_SYM /* SQL-2003-R */ -%token WHERE /* SQL-2003-R */ -%token WHILE_SYM -%token WITH /* SQL-2003-R */ -%token WITH_CUBE_SYM /* INTERNAL */ -%token WITH_ROLLUP_SYM /* INTERNAL */ -%token WITH_SYSTEM_SYM /* INTERNAL */ -%token XOR -%token YEAR_MONTH_SYM -%token ZEROFILL +%token UNDERSCORE_CHARSET /* _latin1 */ -%token IMPOSSIBLE_ACTION /* To avoid warning for yyerrlab1 */ + +/* + Literals +*/ +%token BIN_NUM /* LITERAL */ +%token DECIMAL_NUM /* LITERAL */ +%token FLOAT_NUM /* LITERAL */ +%token HEX_NUM /* LITERAL */ +%token HEX_STRING /* LITERAL */ +%token LONG_NUM /* LITERAL */ +%token NCHAR_STRING /* LITERAL */ +%token NUM /* LITERAL */ +%token TEXT_STRING /* LITERAL */ +%token ULONGLONG_NUM /* LITERAL */ + + +/* + Operators +*/ +%token AND_AND_SYM /* OPERATOR */ +%token DOT_DOT_SYM /* OPERATOR */ +%token EQUAL_SYM /* OPERATOR */ +%token GE /* OPERATOR */ +%token LE /* OPERATOR */ +%token MYSQL_CONCAT_SYM /* OPERATOR */ +%token NE /* OPERATOR */ +%token NOT2_SYM /* OPERATOR */ +%token OR2_SYM /* OPERATOR */ +%token SET_VAR /* OPERATOR */ +%token SHIFT_LEFT /* OPERATOR */ +%token SHIFT_RIGHT /* OPERATOR */ + + +/* + Reserved keywords +*/ +%token ACCESSIBLE_SYM +%token ADD /* SQL-2003-R */ +%token ALL /* SQL-2003-R */ +%token ALTER /* SQL-2003-R */ +%token ANALYZE_SYM +%token AND_SYM /* SQL-2003-R */ +%token ASC /* SQL-2003-N */ +%token ASENSITIVE_SYM /* FUTURE-USE */ +%token AS /* SQL-2003-R */ +%token BEFORE_SYM /* SQL-2003-N */ +%token BETWEEN_SYM /* SQL-2003-R */ +%token BIGINT /* SQL-2003-R */ +%token BINARY /* SQL-2003-R */ +%token BIT_AND /* MYSQL-FUNC */ +%token BIT_OR /* MYSQL-FUNC */ +%token BIT_XOR /* MYSQL-FUNC */ +%token BLOB_MARIADB_SYM /* SQL-2003-R */ +%token BLOB_ORACLE_SYM /* Oracle-R */ +%token BODY_ORACLE_SYM /* Oracle-R */ +%token BOTH /* SQL-2003-R */ +%token BY /* SQL-2003-R */ +%token CALL_SYM /* SQL-2003-R */ +%token CASCADE /* SQL-2003-N */ +%token CASE_SYM /* SQL-2003-R */ +%token CAST_SYM /* SQL-2003-R */ +%token CHANGE +%token CHAR_SYM /* SQL-2003-R */ +%token CHECK_SYM /* SQL-2003-R */ +%token COLLATE_SYM /* SQL-2003-R */ +%token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ +%token CONSTRAINT /* SQL-2003-R */ +%token CONTINUE_MARIADB_SYM /* SQL-2003-R, Oracle-R */ +%token CONTINUE_ORACLE_SYM /* SQL-2003-R, Oracle-R */ +%token CONVERT_SYM /* SQL-2003-N */ +%token COUNT_SYM /* SQL-2003-N */ +%token CREATE /* SQL-2003-R */ +%token CROSS /* SQL-2003-R */ +%token CUME_DIST_SYM +%token CURDATE /* MYSQL-FUNC */ +%token CURRENT_ROLE /* SQL-2003-R */ +%token CURRENT_USER /* SQL-2003-R */ +%token CURSOR_SYM /* SQL-2003-R */ +%token CURTIME /* MYSQL-FUNC */ +%token DATABASE +%token DATABASES +%token DATE_ADD_INTERVAL /* MYSQL-FUNC */ +%token DATE_SUB_INTERVAL /* MYSQL-FUNC */ +%token DAY_HOUR_SYM +%token DAY_MICROSECOND_SYM +%token DAY_MINUTE_SYM +%token DAY_SECOND_SYM +%token DECIMAL_SYM /* SQL-2003-R */ +%token DECLARE_MARIADB_SYM /* SQL-2003-R */ +%token DECLARE_ORACLE_SYM /* Oracle-R */ +%token DEFAULT /* SQL-2003-R */ +%token DELETE_DOMAIN_ID_SYM +%token DELETE_SYM /* SQL-2003-R */ +%token DENSE_RANK_SYM +%token DESCRIBE /* SQL-2003-R */ +%token DESC /* SQL-2003-N */ +%token DETERMINISTIC_SYM /* SQL-2003-R */ +%token DISTINCT /* SQL-2003-R */ +%token DIV_SYM +%token DO_DOMAIN_IDS_SYM +%token DOUBLE_SYM /* SQL-2003-R */ +%token DROP /* SQL-2003-R */ +%token DUAL_SYM +%token EACH_SYM /* SQL-2003-R */ +%token ELSEIF_MARIADB_SYM +%token ELSE /* SQL-2003-R */ +%token ELSIF_ORACLE_SYM /* PLSQL-R */ +%token ENCLOSED +%token ESCAPED +%token EXCEPT_SYM /* SQL-2003-R */ +%token EXISTS /* SQL-2003-R */ +%token EXTRACT_SYM /* SQL-2003-N */ +%token FALSE_SYM /* SQL-2003-R */ +%token FETCH_SYM /* SQL-2003-R */ +%token FIRST_VALUE_SYM /* SQL-2011 */ +%token FLOAT_SYM /* SQL-2003-R */ +%token FOREIGN /* SQL-2003-R */ +%token FOR_SYM /* SQL-2003-R */ +%token FROM +%token FULLTEXT_SYM +%token GOTO_ORACLE_SYM /* Oracle-R */ +%token GRANT /* SQL-2003-R */ +%token GROUP_CONCAT_SYM +%token GROUP_SYM /* SQL-2003-R */ +%token HAVING /* SQL-2003-R */ +%token HOUR_MICROSECOND_SYM +%token HOUR_MINUTE_SYM +%token HOUR_SECOND_SYM +%token IF_SYM +%token IGNORE_DOMAIN_IDS_SYM +%token IGNORE_SYM +%token INDEX_SYM +%token INFILE +%token INNER_SYM /* SQL-2003-R */ +%token INOUT_SYM /* SQL-2003-R */ +%token INSENSITIVE_SYM /* SQL-2003-R */ +%token INSERT /* SQL-2003-R */ +%token IN_SYM /* SQL-2003-R */ +%token INTERSECT_SYM /* SQL-2003-R */ +%token INTERVAL_SYM /* SQL-2003-R */ +%token INTO /* SQL-2003-R */ +%token INT_SYM /* SQL-2003-R */ +%token IS /* SQL-2003-R */ +%token ITERATE_SYM +%token JOIN_SYM /* SQL-2003-R */ +%token KEYS +%token KEY_SYM /* SQL-2003-N */ +%token KILL_SYM +%token LAG_SYM /* SQL-2011 */ +%token LEADING /* SQL-2003-R */ +%token LEAD_SYM /* SQL-2011 */ +%token LEAVE_SYM +%token LEFT /* SQL-2003-R */ +%token LIKE /* SQL-2003-R */ +%token LIMIT +%token LINEAR_SYM +%token LINES +%token LOAD +%token LOCATOR_SYM /* SQL-2003-N */ +%token LOCK_SYM +%token LONGBLOB +%token LONG_SYM +%token LONGTEXT +%token LOOP_SYM +%token LOW_PRIORITY +%token MASTER_SSL_VERIFY_SERVER_CERT_SYM +%token MATCH /* SQL-2003-R */ +%token MAX_SYM /* SQL-2003-N */ +%token MAXVALUE_SYM /* SQL-2003-N */ +%token MEDIAN_SYM +%token MEDIUMBLOB +%token MEDIUMINT +%token MEDIUMTEXT +%token MIN_SYM /* SQL-2003-N */ +%token MINUTE_MICROSECOND_SYM +%token MINUTE_SECOND_SYM +%token MODIFIES_SYM /* SQL-2003-R */ +%token MOD_SYM /* SQL-2003-N */ +%token NATURAL /* SQL-2003-R */ +%token NEG +%token NOT_SYM /* SQL-2003-R */ +%token NO_WRITE_TO_BINLOG +%token NOW_SYM +%token NTH_VALUE_SYM /* SQL-2011 */ +%token NTILE_SYM +%token NULL_SYM /* SQL-2003-R */ +%token NUMERIC_SYM /* SQL-2003-R */ +%token ON /* SQL-2003-R */ +%token OPTIMIZE +%token OPTIONALLY +%token ORDER_SYM /* SQL-2003-R */ +%token OR_SYM /* SQL-2003-R */ +%token OTHERS_ORACLE_SYM /* SQL-2011-N, PLSQL-R */ +%token OUTER +%token OUTFILE +%token OUT_SYM /* SQL-2003-R */ +%token OVER_SYM +%token PACKAGE_ORACLE_SYM /* Oracle-R */ +%token PAGE_CHECKSUM_SYM +%token PARSE_VCOL_EXPR_SYM +%token PARTITION_SYM /* SQL-2003-R */ +%token PERCENTILE_CONT_SYM +%token PERCENTILE_DISC_SYM +%token PERCENT_RANK_SYM +%token PORTION_SYM /* SQL-2016-R */ +%token POSITION_SYM /* SQL-2003-N */ +%token PRECISION /* SQL-2003-R */ +%token PRIMARY_SYM /* SQL-2003-R */ +%token PROCEDURE_SYM /* SQL-2003-R */ +%token PURGE +%token RAISE_ORACLE_SYM /* PLSQL-R */ +%token RANGE_SYM /* SQL-2003-R */ +%token RANK_SYM +%token READS_SYM /* SQL-2003-R */ +%token READ_SYM /* SQL-2003-N */ +%token READ_WRITE_SYM +%token REAL /* SQL-2003-R */ +%token RECURSIVE_SYM +%token REFERENCES /* SQL-2003-R */ +%token REF_SYSTEM_ID_SYM +%token REGEXP +%token RELEASE_SYM /* SQL-2003-R */ +%token RENAME +%token REPEAT_SYM /* MYSQL-FUNC */ +%token REPLACE /* MYSQL-FUNC */ +%token REQUIRE_SYM +%token RESIGNAL_SYM /* SQL-2003-R */ +%token RESTRICT +%token RETURNING_SYM +%token RETURN_MARIADB_SYM /* SQL-2003-R, PLSQL-R */ +%token RETURN_ORACLE_SYM /* SQL-2003-R, PLSQL-R */ +%token REVOKE /* SQL-2003-R */ +%token RIGHT /* SQL-2003-R */ +%token ROW_NUMBER_SYM +%token ROWS_SYM /* SQL-2003-R */ +%token ROWTYPE_ORACLE_SYM /* PLSQL-R */ +%token SECOND_MICROSECOND_SYM +%token SELECT_SYM /* SQL-2003-R */ +%token SENSITIVE_SYM /* FUTURE-USE */ +%token SEPARATOR_SYM +%token SERVER_OPTIONS +%token SET /* SQL-2003-R */ +%token SHOW +%token SIGNAL_SYM /* SQL-2003-R */ +%token SMALLINT /* SQL-2003-R */ +%token SPATIAL_SYM +%token SPECIFIC_SYM /* SQL-2003-R */ +%token SQL_BIG_RESULT +%token SQLEXCEPTION_SYM /* SQL-2003-R */ +%token SQL_SMALL_RESULT +%token SQLSTATE_SYM /* SQL-2003-R */ +%token SQL_SYM /* SQL-2003-R */ +%token SQLWARNING_SYM /* SQL-2003-R */ +%token SSL_SYM +%token STARTING +%token STATS_AUTO_RECALC_SYM +%token STATS_PERSISTENT_SYM +%token STATS_SAMPLE_PAGES_SYM +%token STDDEV_SAMP_SYM /* SQL-2003-N */ +%token STD_SYM +%token STRAIGHT_JOIN +%token SUBSTRING /* SQL-2003-N */ +%token SUM_SYM /* SQL-2003-N */ +%token SYSDATE +%token TABLE_REF_PRIORITY +%token TABLE_SYM /* SQL-2003-R */ +%token TERMINATED +%token THEN_SYM /* SQL-2003-R */ +%token TINYBLOB +%token TINYINT +%token TINYTEXT +%token TO_SYM /* SQL-2003-R */ +%token TRAILING /* SQL-2003-R */ +%token TRIGGER_SYM /* SQL-2003-R */ +%token TRIM /* SQL-2003-N */ +%token TRUE_SYM /* SQL-2003-R */ +%token UNDO_SYM /* FUTURE-USE */ +%token UNION_SYM /* SQL-2003-R */ +%token UNIQUE_SYM +%token UNLOCK_SYM +%token UNSIGNED +%token UPDATE_SYM /* SQL-2003-R */ +%token USAGE /* SQL-2003-N */ +%token USE_SYM +%token USING /* SQL-2003-R */ +%token UTC_DATE_SYM +%token UTC_TIMESTAMP_SYM +%token UTC_TIME_SYM +%token VALUES_IN_SYM +%token VALUES_LESS_SYM +%token VALUES /* SQL-2003-R */ +%token VARBINARY +%token VARCHAR /* SQL-2003-R */ +%token VARIANCE_SYM +%token VAR_SAMP_SYM +%token VARYING /* SQL-2003-R */ +%token WHEN_SYM /* SQL-2003-R */ +%token WHERE /* SQL-2003-R */ +%token WHILE_SYM +%token WITH /* SQL-2003-R */ +%token XOR +%token YEAR_MONTH_SYM +%token ZEROFILL /* @@ -696,7 +716,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %token COALESCE /* SQL-2003-N */ %token CODE_SYM %token COLLATION_SYM /* SQL-2003-N */ -%token COLON_ORACLE_SYM /* INTERNAL */ %token COLUMNS %token COLUMN_ADD_SYM %token COLUMN_CHECK_SYM @@ -1262,6 +1281,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); keyword_verb_clause keyword_directly_assignable charset + reserved_keyword_udt %type
table_ident table_ident_nodb references xid @@ -1592,7 +1612,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); set_assign sp_tail_standalone opt_constraint_no_id -END_OF_INPUT %type call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt %type sp_proc_stmt_statement sp_proc_stmt_return @@ -1677,11 +1696,6 @@ END_OF_INPUT '-' '+' '*' '/' '%' '(' ')' ',' '!' '{' '}' '&' '|' -%type - AND_SYM OR_SYM BETWEEN_SYM CASE_SYM - THEN_SYM WHEN_SYM DIV_SYM MOD_SYM OR2_SYM AND_AND_SYM DELETE_SYM - MYSQL_CONCAT_SYM ORACLE_CONCAT_SYM - %type with_clause %type query_name @@ -6841,11 +6855,13 @@ field_type: | field_type_misc | IDENT_sys float_options srid_option { - const Type_handler *h; - if (!(h= Type_handler::handler_by_name_or_error($1))) + if (Lex->set_field_type_udt(&$$, $1, $2)) + MYSQL_YYABORT; + } + | reserved_keyword_udt float_options srid_option + { + if (Lex->set_field_type_udt(&$$, $1, $2)) MYSQL_YYABORT; - $$.set(h, $2); - Lex->charset= &my_charset_bin; } ; @@ -11990,11 +12006,13 @@ cast_type: | cast_type_temporal { $$= $1; Lex->charset= NULL; } | IDENT_sys { - const Type_handler *h; - if (!(h= Type_handler::handler_by_name_or_error($1))) + if (Lex->set_cast_type_udt(&$$, $1)) + MYSQL_YYABORT; + } + | reserved_keyword_udt + { + if (Lex->set_cast_type_udt(&$$, $1)) MYSQL_YYABORT; - $$.set(h); - Lex->charset= NULL; } ; @@ -13934,6 +13952,7 @@ delete: lex->first_select_lex()->order_list.empty(); } delete_part2 + { } ; opt_delete_system_time: @@ -16527,6 +16546,249 @@ keyword_sp_var_and_label: | VIA_SYM ; + +reserved_keyword_udt: + ACCESSIBLE_SYM + | ADD + | ALL + | ALTER + | ANALYZE_SYM + | AND_SYM + | AS + | ASC + | ASENSITIVE_SYM + | BEFORE_SYM + | BETWEEN_SYM + | BIT_AND + | BIT_OR + | BIT_XOR + | BODY_ORACLE_SYM + | BOTH + | BY + | CALL_SYM + | CASCADE + | CASE_SYM + | CAST_SYM + | CHANGE + | CHECK_SYM + | COLLATE_SYM + | CONSTRAINT + | CONTINUE_MARIADB_SYM + | CONTINUE_ORACLE_SYM + | CONVERT_SYM + | COUNT_SYM + | CREATE + | CROSS + | CUME_DIST_SYM + | CURDATE + | CURRENT_USER + | CURRENT_ROLE + | CURTIME + | DATABASE + | DATABASES + | DATE_ADD_INTERVAL + | DATE_SUB_INTERVAL + | DAY_HOUR_SYM + | DAY_MICROSECOND_SYM + | DAY_MINUTE_SYM + | DAY_SECOND_SYM + | DECLARE_MARIADB_SYM + | DECLARE_ORACLE_SYM + | DEFAULT + | DELETE_DOMAIN_ID_SYM + | DELETE_SYM + | DENSE_RANK_SYM + | DESC + | DESCRIBE + | DETERMINISTIC_SYM + | DISTINCT + | DIV_SYM + | DO_DOMAIN_IDS_SYM + | DROP + | DUAL_SYM + | EACH_SYM + | ELSE + | ELSEIF_MARIADB_SYM + | ELSIF_ORACLE_SYM + | ENCLOSED + | ESCAPED + | EXCEPT_SYM + | EXISTS + | EXTRACT_SYM + | FALSE_SYM + | FETCH_SYM + | FIRST_VALUE_SYM + | FOREIGN + | FROM + | FULLTEXT_SYM + | GOTO_ORACLE_SYM + | GRANT + | GROUP_SYM + | GROUP_CONCAT_SYM + | LAG_SYM + | LEAD_SYM + | HAVING + | HOUR_MICROSECOND_SYM + | HOUR_MINUTE_SYM + | HOUR_SECOND_SYM + | IF_SYM + | IGNORE_DOMAIN_IDS_SYM + | IGNORE_SYM + | INDEX_SYM + | INFILE + | INNER_SYM + | INOUT_SYM + | INSENSITIVE_SYM + | INSERT + | INTERSECT_SYM + | INTERVAL_SYM + | INTO + | IN_SYM + | IS + | ITERATE_SYM + | JOIN_SYM + | KEYS + | KEY_SYM + | KILL_SYM + | LEADING + | LEAVE_SYM + | LEFT + | LIKE + | LIMIT + | LINEAR_SYM + | LINES + | LOAD + | LOCATOR_SYM + | LOCK_SYM + | LOOP_SYM + | LOW_PRIORITY + | MASTER_SSL_VERIFY_SERVER_CERT_SYM + | MATCH + | MAX_SYM + | MAXVALUE_SYM + | MEDIAN_SYM + | MINUTE_MICROSECOND_SYM + | MINUTE_SECOND_SYM + | MIN_SYM + | MODIFIES_SYM + | MOD_SYM + | NATURAL + | NEG + | NOT_SYM + | NOW_SYM + | NO_WRITE_TO_BINLOG + | NTILE_SYM + | NULL_SYM + | NTH_VALUE_SYM + | ON + | OPTIMIZE + | OPTIONALLY + | ORDER_SYM + | OR_SYM + | OTHERS_ORACLE_SYM + | OUTER + | OUTFILE + | OUT_SYM + | OVER_SYM + | PACKAGE_ORACLE_SYM + | PAGE_CHECKSUM_SYM + | PARSE_VCOL_EXPR_SYM + | PARTITION_SYM + | PERCENT_RANK_SYM + | PERCENTILE_CONT_SYM + | PERCENTILE_DISC_SYM + | PORTION_SYM + | POSITION_SYM + | PRECISION + | PRIMARY_SYM + | PROCEDURE_SYM + | PURGE + | RAISE_ORACLE_SYM + | RANGE_SYM + | RANK_SYM + | READS_SYM + | READ_SYM + | READ_WRITE_SYM + | RECURSIVE_SYM + | REF_SYSTEM_ID_SYM + | REFERENCES + | REGEXP + | RELEASE_SYM + | RENAME + | REPEAT_SYM + | REPLACE + | REQUIRE_SYM + | RESIGNAL_SYM + | RESTRICT + | RETURNING_SYM + | RETURN_MARIADB_SYM + | RETURN_ORACLE_SYM + | REVOKE + | RIGHT + | ROWS_SYM + | ROWTYPE_ORACLE_SYM + | ROW_NUMBER_SYM + | SECOND_MICROSECOND_SYM + | SELECT_SYM + | SENSITIVE_SYM + | SEPARATOR_SYM + | SERVER_OPTIONS + | SHOW + | SIGNAL_SYM + | SPATIAL_SYM + | SPECIFIC_SYM + | SQLEXCEPTION_SYM + | SQLSTATE_SYM + | SQLWARNING_SYM + | SQL_BIG_RESULT + | SQL_SMALL_RESULT + | SQL_SYM + | SSL_SYM + | STARTING + | STATS_AUTO_RECALC_SYM + | STATS_PERSISTENT_SYM + | STATS_SAMPLE_PAGES_SYM + | STDDEV_SAMP_SYM + | STD_SYM + | STRAIGHT_JOIN + | SUBSTRING + | SUM_SYM + | SYSDATE + | TABLE_REF_PRIORITY + | TABLE_SYM + | TERMINATED + | THEN_SYM + | TO_SYM + | TRAILING + | TRIGGER_SYM + | TRIM + | TRUE_SYM + | UNDO_SYM + | UNION_SYM + | UNIQUE_SYM + | UNLOCK_SYM + | UPDATE_SYM + | USAGE + | USE_SYM + | USING + | UTC_DATE_SYM + | UTC_TIMESTAMP_SYM + | UTC_TIME_SYM + | VALUES + | VALUES_IN_SYM + | VALUES_LESS_SYM + | VARIANCE_SYM + | VARYING + | VAR_SAMP_SYM + | WHEN_SYM + | WHERE + | WHILE_SYM + | WITH + | XOR + | YEAR_MONTH_SYM + | ZEROFILL + ; + /* SQLCOM_SET_OPTION statement.