[MDEV-20734] Allow reserved keywords as user defined type names Created: 2019-10-03  Updated: 2019-10-03  Resolved: 2019-10-03

Status: Closed
Project: MariaDB Server
Component/s: Data types, Parser
Fix Version/s: 10.5.0

Type: Task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-4912 Data type plugin API version 1 Closed
blocks MDEV-20016 Add MariaDB_DATA_TYPE_PLUGIN Closed

 Description   

To avoid compatibility problems in the future, let's allow non-conflicting reserved keywords as user defined type (UDT) names.

This will allow to avoid backticking of user-defined data type names in SHOW CREATE TABLE and mysqldump.

So SHOW CREATE TABLE, instead of returning:

CREATE TABLE t1 (a `udt`);

will return:

CREATE TABLE t1 (a udt);

which is easier to read.

The list of tokens that cannot be used as UDT names (because they cause grammar conflicts with built-in data type names) in 10.5 includes:

  • BIGINT
  • BINARY
  • BLOB_MARIADB_SYM
  • BLOB_ORACLE_SYM
  • CHAR_SYM
  • CONDITION_SYM
  • CURSOR_SYM
  • DECIMAL_SYM
  • DOUBLE_SYM
  • FLOAT_SYM
  • FOR_SYM
  • INT_SYM
  • LONGBLOB
  • LONGTEXT
  • LONG_SYM
  • MEDIUMBLOB
  • MEDIUMINT
  • MEDIUMTEXT
  • NUMERIC_SYM
  • REAL
  • SET
  • SMALLINT
  • TINYBLOB
  • TINYINT
  • TINYTEXT
  • UNSIGNED
  • VARBINARY
  • VARCHAR

All other reserved keywords do not cause conflicts and can be used as UDT names.

Examples:

CREATE TABLE t1 (a DUAL);
SELECT CAST(a AS DUAL);

Before this change, the parser returns a syntax error:

ERROR 1064 (42000): You have an error in your SQL syntax .. near 'DUAL)' at line 1

After this change, the query will pass the parser syntactically. A different error will be returned:

ERROR 4161 (HY000): Unknown data type: 'DUAL'

The list of allowed reserved keyword includes:

  • 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

Generated at Thu Feb 08 09:01:45 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.