From 413f092df9a9e31f98a2d7d0df4e56af583fee74 Mon Sep 17 00:00:00 2001 From: ani-sha Date: Thu, 30 Jan 2025 12:09:10 +0530 Subject: [PATCH] Support SEQUENCE_TABLE function --- sql/mysql/Positive-Technologies/MySqlLexer.g4 | 2 ++ sql/mysql/Positive-Technologies/MySqlParser.g4 | 8 ++++++++ .../Positive-Technologies/examples/ddl_create.sql | 15 +++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/sql/mysql/Positive-Technologies/MySqlLexer.g4 b/sql/mysql/Positive-Technologies/MySqlLexer.g4 index 6f57b3d012..5f67a4ebe5 100644 --- a/sql/mysql/Positive-Technologies/MySqlLexer.g4 +++ b/sql/mysql/Positive-Technologies/MySqlLexer.g4 @@ -1068,6 +1068,7 @@ OCT : 'OCT'; OCTET_LENGTH : 'OCTET_LENGTH'; ORD : 'ORD'; OVERLAPS : 'OVERLAPS'; +PERCONA_SEQUENCE_TABLE : 'PERCONA_SEQUENCE_TABLE'; PERIOD_ADD : 'PERIOD_ADD'; PERIOD_DIFF : 'PERIOD_DIFF'; PI : 'PI'; @@ -1094,6 +1095,7 @@ RTRIM : 'RTRIM'; SEC_TO_TIME : 'SEC_TO_TIME'; SECONDARY_ENGINE : 'SECONDARY_ENGINE'; SECONDARY_ENGINE_ATTRIBUTE : 'SECONDARY_ENGINE_ATTRIBUTE'; +SEQUENCE_TABLE : 'SEQUENCE_TABLE'; SESSION_USER : 'SESSION_USER'; SHA : 'SHA'; SHA1 : 'SHA1'; diff --git a/sql/mysql/Positive-Technologies/MySqlParser.g4 b/sql/mysql/Positive-Technologies/MySqlParser.g4 index 9f8993ba1d..d3da727fed 100644 --- a/sql/mysql/Positive-Technologies/MySqlParser.g4 +++ b/sql/mysql/Positive-Technologies/MySqlParser.g4 @@ -978,6 +978,7 @@ tableSource tableSourceItem : tableName (PARTITION '(' uidList ')')? (AS? alias = uid)? (indexHint (',' indexHint)*)? # atomTableItem + | sequenceFunctionName '(' DECIMAL_LITERAL ')' (AS? alias = uid)? # sequenceTableItem | (selectStatement | '(' parenthesisSubquery = selectStatement ')') AS? alias = uid # subqueryTableItem | '(' tableSources ')' # tableSourcesItem ; @@ -2487,6 +2488,11 @@ partitionClause : PARTITION BY expression (',' expression)* ; +sequenceFunctionName + : SEQUENCE_TABLE + | PERCONA_SEQUENCE_TABLE + ; + scalarFunctionName : functionNameBase | ASCII @@ -2988,6 +2994,7 @@ keywordsCanBeId | PASSWORDLESS_USER_ADMIN | PASSWORD_LOCK_TIME | PATH + | PERCONA_SEQUENCE_TABLE | PERSIST_RO_VARIABLES_ADMIN | PHASE | PLUGINS @@ -3050,6 +3057,7 @@ keywordsCanBeId | SCHEMA_NAME | SECURITY | SECONDARY_ENGINE_ATTRIBUTE + | SEQUENCE_TABLE | SERIAL | SERVER | SESSION diff --git a/sql/mysql/Positive-Technologies/examples/ddl_create.sql b/sql/mysql/Positive-Technologies/examples/ddl_create.sql index 38fd32a371..acae587cb4 100644 --- a/sql/mysql/Positive-Technologies/examples/ddl_create.sql +++ b/sql/mysql/Positive-Technologies/examples/ddl_create.sql @@ -270,6 +270,9 @@ CREATE TABLE `TABLE1` ( PRIMARY KEY (`COL1`, `COL2`, `COL3`), CLUSTERING KEY `CLKEY1` (`COL3`, `COL2`)) ENGINE=TOKUDB DEFAULT CHARSET=CP1251; + +CREATE TABLE T1 (NAME VARCHAR(36), SEQUENCE_TABLE BIGINT NOT NULL); + #end #begin -- Rename table @@ -892,4 +895,16 @@ BEGIN SET AI.COL_1 = NULL LIMIT 500; END +#end + +#begin +CREATE DEFINER=`bcadmin`@`%` PROCEDURE `sp_next_available_otc_instance_strategy_id`() +BEGIN + SELECT MIN(st.value) AS strategy_id + FROM SEQUENCE_TABLE(100000) ST + JOIN btc_quant.stratId_ranges r ON r.stratId0 <= st.value AND st.value < r.stratId1 + LEFT JOIN otc_instance i ON i.strategy_id=st.value + WHERE r.category = 'otc' AND now() BETWEEN validFromDate AND COALESCE(validToDate, now()) + AND i.strategy_id IS NULL; +END #end \ No newline at end of file