DBZ-1691 Support for SIGNAL statement

This commit is contained in:
Jiri Pechanec 2020-01-11 11:44:52 +01:00 committed by Gunnar Morling
parent 88e280d89e
commit dfb91b779e
3 changed files with 52 additions and 9 deletions

View File

@ -175,6 +175,7 @@ SELECT: 'SELECT';
SET: 'SET';
SEPARATOR: 'SEPARATOR';
SHOW: 'SHOW';
SIGNAL: 'SIGNAL';
SPATIAL: 'SPATIAL';
SQL: 'SQL';
SQLEXCEPTION: 'SQLEXCEPTION';
@ -343,12 +344,14 @@ CHANNEL: 'CHANNEL';
CHECKSUM: 'CHECKSUM';
PAGE_CHECKSUM: 'PAGE_CHECKSUM';
CIPHER: 'CIPHER';
CLASS_ORIGIN: 'CLASS_ORIGIN';
CLIENT: 'CLIENT';
CLOSE: 'CLOSE';
COALESCE: 'COALESCE';
CODE: 'CODE';
COLUMNS: 'COLUMNS';
COLUMN_FORMAT: 'COLUMN_FORMAT';
COLUMN_NAME: 'COLUMN_NAME';
COMMENT: 'COMMENT';
COMMIT: 'COMMIT';
COMPACT: 'COMPACT';
@ -358,6 +361,9 @@ COMPRESSION: 'COMPRESSION';
CONCURRENT: 'CONCURRENT';
CONNECTION: 'CONNECTION';
CONSISTENT: 'CONSISTENT';
CONSTRAINT_CATALOG: 'CONSTRAINT_CATALOG';
CONSTRAINT_SCHEMA: 'CONSTRAINT_SCHEMA';
CONSTRAINT_NAME: 'CONSTRAINT_NAME';
CONTAINS: 'CONTAINS';
CONTEXT: 'CONTEXT';
CONTRIBUTORS: 'CONTRIBUTORS';
@ -473,6 +479,7 @@ MAX_UPDATES_PER_HOUR: 'MAX_UPDATES_PER_HOUR';
MAX_USER_CONNECTIONS: 'MAX_USER_CONNECTIONS';
MEDIUM: 'MEDIUM';
MERGE: 'MERGE';
MESSAGE_TEXT: 'MESSAGE_TEXT';
MID: 'MID';
MIGRATE: 'MIGRATE';
MIN_ROWS: 'MIN_ROWS';
@ -480,6 +487,7 @@ MODE: 'MODE';
MODIFY: 'MODIFY';
MUTEX: 'MUTEX';
MYSQL: 'MYSQL';
MYSQL_ERRNO: 'MYSQL_ERRNO';
NAME: 'NAME';
NAMES: 'NAMES';
NCHAR: 'NCHAR';
@ -582,12 +590,14 @@ STATUS: 'STATUS';
STOP: 'STOP';
STORAGE: 'STORAGE';
STRING: 'STRING';
SUBCLASS_ORIGIN: 'SUBCLASS_ORIGIN';
SUBJECT: 'SUBJECT';
SUBPARTITION: 'SUBPARTITION';
SUBPARTITIONS: 'SUBPARTITIONS';
SUSPEND: 'SUSPEND';
SWAPS: 'SWAPS';
SWITCHES: 'SWITCHES';
TABLE_NAME: 'TABLE_NAME';
TABLESPACE: 'TABLESPACE';
TEMPORARY: 'TEMPORARY';
TEMPTABLE: 'TEMPTABLE';
@ -762,6 +772,7 @@ BIN: 'BIN';
BIT_COUNT: 'BIT_COUNT';
BIT_LENGTH: 'BIT_LENGTH';
BUFFER: 'BUFFER';
CATALOG_NAME: 'CATALOG_NAME';
CEIL: 'CEIL';
CEILING: 'CEILING';
CENTROID: 'CENTROID';
@ -927,6 +938,7 @@ SESSION_USER: 'SESSION_USER';
SHA: 'SHA';
SHA1: 'SHA1';
SHA2: 'SHA2';
SCHEMA_NAME: 'SCHEMA_NAME';
SIGN: 'SIGN';
SIN: 'SIN';
SLEEP: 'SLEEP';

View File

@ -115,7 +115,7 @@ administrationStatement
utilityStatement
: simpleDescribeStatement | fullDescribeStatement
| helpStatement | useStatement
| helpStatement | useStatement | signalStatement
;
@ -1838,6 +1838,26 @@ useStatement
: USE uid
;
signalStatement
: SIGNAL ( ( SQLSTATE VALUE? stringLiteral ) | ID | REVERSE_QUOTE_ID )
( SET signalConditionInformation ( ',' signalConditionInformation)* )?
;
signalConditionInformation
: ( CLASS_ORIGIN
| SUBCLASS_ORIGIN
| MESSAGE_TEXT
| MYSQL_ERRNO
| CONSTRAINT_CATALOG
| CONSTRAINT_SCHEMA
| CONSTRAINT_NAME
| CATALOG_NAME
| SCHEMA_NAME
| TABLE_NAME
| COLUMN_NAME
) '=' ( stringLiteral | DECIMAL_LITERAL )
;
// details
describeObjectClause
@ -2377,10 +2397,12 @@ keywordsCanBeId
| AT | AUTHORS | AUTOCOMMIT | AUTOEXTEND_SIZE
| AUTO_INCREMENT | AVG_ROW_LENGTH | BEGIN | BINLOG | BIT
| BLOCK | BOOL | BOOLEAN | BTREE | CACHE | CASCADED | CHAIN | CHANGED
| CHANNEL | CHECKSUM | PAGE_CHECKSUM | CIPHER | CLIENT | CLOSE | COALESCE | CODE
| COLUMNS | COLUMN_FORMAT | COMMENT | COMMIT | COMPACT
| CHANNEL | CHECKSUM | PAGE_CHECKSUM | CATALOG_NAME | CIPHER
| CLASS_ORIGIN | CLIENT | CLOSE | COALESCE | CODE
| COLUMNS | COLUMN_FORMAT | COLUMN_NAME | COMMENT | COMMIT | COMPACT
| COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT
| CONNECTION | CONSISTENT | CONTAINS | CONTEXT
| CONNECTION | CONSISTENT | CONSTRAINT_CATALOG | CONSTRAINT_NAME
| CONSTRAINT_SCHEMA | CONTAINS | CONTEXT
| CONTRIBUTORS | COPY | CPU | DATA | DATAFILE | DEALLOCATE
| DEFAULT_AUTH | DEFINER | DELAY_KEY_WRITE | DES_KEY_FILE | DIRECTORY
| DISABLE | DISCARD | DISK | DO | DUMPFILE | DUPLICATE
@ -2404,8 +2426,9 @@ keywordsCanBeId
| MASTER_TLS_VERSION | MASTER_USER
| MAX_CONNECTIONS_PER_HOUR | MAX_QUERIES_PER_HOUR
| MAX_ROWS | MAX_SIZE | MAX_UPDATES_PER_HOUR
| MAX_USER_CONNECTIONS | MEDIUM | MEMORY | MERGE | MID | MIGRATE
| MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | NAME | NAMES
| MAX_USER_CONNECTIONS | MEDIUM | MEMORY | MERGE | MESSAGE_TEXT
| MID | MIGRATE
| MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | MYSQL_ERRNO | NAME | NAMES
| NCHAR | NEVER | NEXT | NO | NODEGROUP | NONE | OFFLINE | OFFSET
| OJ | OLD_PASSWORD | ONE | ONLINE | ONLY | OPEN | OPTIMIZER_COSTS
| OPTIONS | OWNER | PACK_KEYS | PAGE | PARSER | PARTIAL
@ -2419,15 +2442,15 @@ keywordsCanBeId
| REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE
| REPLICATE_WILD_IGNORE_TABLE | REPLICATION | RESET | RESUME
| RETURNS | ROLLBACK | ROLLUP | ROTATE | ROW | ROWS
| ROW_FORMAT | SAVEPOINT | SCHEDULE | SECURITY | SERIAL | SERVER
| ROW_FORMAT | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SERIAL | SERVER
| SESSION | SHARE | SHARED | SIGNED | SIMPLE | SLAVE
| SLOW | SNAPSHOT | SOCKET | SOME | SONAME | SOUNDS | SOURCE
| SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS
| SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_THREAD
| START | STARTS | STATS_AUTO_RECALC | STATS_PERSISTENT
| STATS_SAMPLE_PAGES | STATUS | STOP | STORAGE | STRING
| SUBJECT | SUBPARTITION | SUBPARTITIONS | SUSPEND | SWAPS
| SWITCHES | TABLESPACE | TEMPORARY | TEMPTABLE | THAN | TRADITIONAL
| SUBCLASS_ORIGIN | SUBJECT | SUBPARTITION | SUBPARTITIONS | SUSPEND | SWAPS
| SWITCHES | TABLE_NAME | TABLESPACE | TEMPORARY | TEMPTABLE | THAN | TRADITIONAL
| TRANSACTION | TRIGGERS | TRUNCATE | UNDEFINED | UNDOFILE
| UNDO_BUFFER_SIZE | UNINSTALL | UNKNOWN | UNTIL | UPGRADE | USER | USE_FRM | USER_RESOURCES
| VALIDATION | VALUE | VARIABLES | VIEW | WAIT | WARNINGS | WITHOUT

View File

@ -33,3 +33,11 @@ select *, sqrt(a), lower(substring(str, 'a', length(str)/2)) as col3 from tab1 w
INSERT INTO geom VALUES (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F));
select y(point(1.25, 3.47)) as y, x(point(1.25, 3.47)) as x;
#end
#begin
-- Signal tests
SIGNAL SQLSTATE '06660' SET MESSAGE_TEXT = 'Database is in read-only mode!';
SIGNAL specialty SET MESSAGE_TEXT = 'An error occurred';
SIGNAL SQLSTATE '01000' SET MESSAGE_TEXT = 'A warning occurred', MYSQL_ERRNO = 1000;
SIGNAL SQLSTATE '77777';
SIGNAL divide_by_zero;
#end