From 84d36981ba14a73656fe888285327d6d9f0bb457 Mon Sep 17 00:00:00 2001 From: zhouyx Date: Wed, 3 Sep 2025 17:25:49 +0800 Subject: [PATCH] feat: add Tdengine parser and examples migrate from the parse module of TDengine. Signed-off-by: zhouyx --- sql/pom.xml | 1 + sql/tdengine/TDengineLexer.g4 | 1641 +++++++++++++++++++++++++++++ sql/tdengine/TDengineParser.g4 | 1414 +++++++++++++++++++++++++ sql/tdengine/desc.xml | 5 + sql/tdengine/examples/create.sql | 20 + sql/tdengine/examples/explain.sql | 3 + sql/tdengine/examples/insert.sql | 10 + sql/tdengine/examples/select.sql | 6 + sql/tdengine/examples/stream.sql | 27 + sql/tdengine/pom.xml | 56 + 10 files changed, 3183 insertions(+) create mode 100644 sql/tdengine/TDengineLexer.g4 create mode 100644 sql/tdengine/TDengineParser.g4 create mode 100644 sql/tdengine/desc.xml create mode 100644 sql/tdengine/examples/create.sql create mode 100644 sql/tdengine/examples/explain.sql create mode 100644 sql/tdengine/examples/insert.sql create mode 100644 sql/tdengine/examples/select.sql create mode 100644 sql/tdengine/examples/stream.sql create mode 100644 sql/tdengine/pom.xml diff --git a/sql/pom.xml b/sql/pom.xml index 8ec4089be4..5593f1fe1b 100644 --- a/sql/pom.xml +++ b/sql/pom.xml @@ -24,6 +24,7 @@ postgresql snowflake sqlite + tdengine teradata trino tsql diff --git a/sql/tdengine/TDengineLexer.g4 b/sql/tdengine/TDengineLexer.g4 new file mode 100644 index 0000000000..3216eac3a8 --- /dev/null +++ b/sql/tdengine/TDengineLexer.g4 @@ -0,0 +1,1641 @@ +lexer grammar TDengineLexer; + + +options { caseInsensitive = true; } +// ============================================================================= + +// Keywords (from keywordTable) + +// ============================================================================= + +ACCOUNT + : 'ACCOUNT' + ; + +ACCOUNTS + : 'ACCOUNTS' + ; + +ADD + : 'ADD' + ; + +AGGREGATE + : 'AGGREGATE' + ; + +ALL + : 'ALL' + ; + +ALTER + : 'ALTER' + ; + +ALIVE + : 'ALIVE' + ; + +ANALYZE + : 'ANALYZE' + ; + +AND + : 'AND' + ; + +ANTI + : 'ANTI' + ; + +ANODE + : 'ANODE' + ; + +ANODES + : 'ANODES' + ; + +ANOMALY_WINDOW + : 'ANOMALY_WINDOW' + ; + +APPS + : 'APPS' + ; + +ARBGROUPS + : 'ARBGROUPS' + ; + +AS + : 'AS' + ; + +ASC + : 'ASC' + ; + +ASOF + : 'ASOF' + ; + +ASSIGN + : 'ASSIGN' + ; + +AUTO + : 'AUTO' + ; + +BALANCE + : 'BALANCE' + ; + +BATCH_SCAN + : 'BATCH_SCAN' + ; + +BETWEEN + : 'BETWEEN' + ; + +BIGINT + : 'BIGINT' + ; + +BINARY + : 'BINARY' + ; + +BLOB + : 'BLOB' + ; + +BNODE + : 'BNODE' + ; + +BNODES + : 'BNODES' + ; + +BOOL + : 'BOOL' + ; + +BOTH + : 'BOTH' + ; + +BUFFER + : 'BUFFER' + ; + +BUFSIZE + : 'BUFSIZE' + ; + +BY + : 'BY' + ; + +BWLIMIT + : 'BWLIMIT' + ; + +CACHE + : 'CACHE' + ; + +CACHEMODEL + : 'CACHEMODEL' + ; + +CACHESIZE + : 'CACHESIZE' + ; + +CALC_NOTIFY_ONLY + : 'CALC_NOTIFY_ONLY' + ; + +CASE + : 'CASE' + ; + +CAST + : 'CAST' + ; + +CHILD + : 'CHILD' + ; + +CLIENT_VERSION + : 'CLIENT_VERSION' + ; + +CLUSTER + : 'CLUSTER' + ; + +COLUMN + : 'COLUMN' + ; + +COLS + : 'COLS' + ; + +COMMENT + : 'COMMENT' + ; + +COMP + : 'COMP' + ; + +COMPACT + : 'COMPACT' + ; + +COMPACTS + : 'COMPACTS' + ; + +COMPACT_INTERVAL + : 'COMPACT_INTERVAL' + ; + +COMPACT_TIME_OFFSET + : 'COMPACT_TIME_OFFSET' + ; + +COMPACT_TIME_RANGE + : 'COMPACT_TIME_RANGE' + ; + +COMPOSITE + : 'COMPOSITE' + ; + +CONNECTION + : 'CONNECTION' + ; + +CONNECTIONS + : 'CONNECTIONS' + ; + +CONNS + : 'CONNS' + ; + +CONSUMER + : 'CONSUMER' + ; + +CONSUMERS + : 'CONSUMERS' + ; + +CONTAINS + : 'CONTAINS' + ; + +COUNT + : 'COUNT' + ; + +COUNT_WINDOW + : 'COUNT_WINDOW' + ; + +CREATE + : 'CREATE' + ; + +CREATEDB + : 'CREATEDB' + ; + +CURRENT_USER + : 'CURRENT_USER' + ; + +DATABASE + : 'DATABASE' + ; + +DATABASES + : 'DATABASES' + ; + +DBS + : 'DBS' + ; + +DECIMAL + : 'DECIMAL' + ; + +DELETE + : 'DELETE' + ; + +DELETE_MARK + : 'DELETE_MARK' + ; + +DELETE_OUTPUT_TABLE + : 'DELETE_OUTPUT_TABLE' + ; + +DELETE_RECALC + : 'DELETE_RECALC' + ; + +DESC + : 'DESC' + ; + +DESCRIBE + : 'DESCRIBE' + ; + +DISK_INFO + : 'DISK_INFO' + ; + +DISTINCT + : 'DISTINCT' + ; + +DISTRIBUTED + : 'DISTRIBUTED' + ; + +DNODE + : 'DNODE' + ; + +DNODES + : 'DNODES' + ; + +DOUBLE + : 'DOUBLE' + ; + +DROP + : 'DROP' + ; + +DURATION + : 'DURATION' + ; + +ELSE + : 'ELSE' + ; + +ENABLE + : 'ENABLE' + ; + +ENCRYPTIONS + : 'ENCRYPTIONS' + ; + +ENCRYPT_ALGORITHM + : 'ENCRYPT_ALGORITHM' + ; + +ENCRYPT_KEY + : 'ENCRYPT_KEY' + ; + +END + : 'END' + ; + +EVENT_TYPE + : 'EVENT_TYPE' + ; + +EVENT_WINDOW + : 'EVENT_WINDOW' + ; + +EVERY + : 'EVERY' + ; + +EXISTS + : 'EXISTS' + ; + +EXPIRED_TIME + : 'EXPIRED_TIME' + ; + +EXPLAIN + : 'EXPLAIN' + ; + +FILE + : 'FILE' + ; + +FILL + : 'FILL' + ; + +FILL_HISTORY + : 'FILL_HISTORY' + ; + +FILL_HISTORY_FIRST + : 'FILL_HISTORY_FIRST' + ; + +FIRST + : 'FIRST' + ; + +FLOAT + : 'FLOAT' + ; + +FLUSH + : 'FLUSH' + ; + +FOR + : 'FOR' + ; + +FORCE + : 'FORCE' + ; + +FORCE_OUTPUT + : 'FORCE_OUTPUT' + ; + +FROM + : 'FROM' + ; + +FULL + : 'FULL' + ; + +FUNCTION + : 'FUNCTION' + ; + +FUNCTIONS + : 'FUNCTIONS' + ; + +GEOMETRY + : 'GEOMETRY' + ; + +GRANT + : 'GRANT' + ; + +GRANTS + : 'GRANTS' + ; + +GROUP + : 'GROUP' + ; + +HASH_JOIN + : 'HASH_JOIN' + ; + +HAVING + : 'HAVING' + ; + +HOST + : 'HOST' + ; + +IF + : 'IF' + ; + +IGNORE + : 'IGNORE' + ; + +IGNORE_DISORDER + : 'IGNORE_DISORDER' + ; + +IGNORE_NODATA_TRIGGER + : 'IGNORE_NODATA_TRIGGER' + ; + +IMPORT + : 'IMPORT' + ; + +IN + : 'IN' + ; + +INDEX + : 'INDEX' + ; + +INDEXES + : 'INDEXES' + ; + +INNER + : 'INNER' + ; + +INSERT + : 'INSERT' + ; + +INT + : 'INT' + ; + +INTEGER + : 'INTEGER' + ; + +INTERVAL + : 'INTERVAL' + ; + +INTO + : 'INTO' + ; + +IS + : 'IS' + ; + +IS_IMPORT + : 'IS_IMPORT' + ; + +JLIMIT + : 'JLIMIT' + ; + +JOIN + : 'JOIN' + ; + +JSON + : 'JSON' + ; + +KEEP + : 'KEEP' + ; + +KEEP_TIME_OFFSET + : 'KEEP_TIME_OFFSET' + ; + +KEY + : 'KEY' + ; + +KILL + : 'KILL' + ; + +LANGUAGE + : 'LANGUAGE' + ; + +LAST + : 'LAST' + ; + +LAST_ROW + : 'LAST_ROW' + ; + +LEADER + : 'LEADER' + ; + +LEADING + : 'LEADING' + ; + +LEFT + : 'LEFT' + ; + +LICENCES + : 'LICENCES' + ; + +LIKE + : 'LIKE' + ; + +LIMIT + : 'LIMIT' + ; + +LINEAR + : 'LINEAR' + ; + +LOCAL + : 'LOCAL' + ; + +LOGS + : 'LOGS' + ; + +LOW_LATENCY_CALC + : 'LOW_LATENCY_CALC' + ; + +MACHINES + : 'MACHINES' + ; + +MATCH + : 'MATCH' + ; + +MAXROWS + : 'MAXROWS' + ; + +MAX_DELAY + : 'MAX_DELAY' + ; + +MEDIUMBLOB + : 'MEDIUMBLOB' + ; + +MERGE + : 'MERGE' + ; + +META + : 'META' + ; + +META_ONLY + : 'META_ONLY' + ; + +MINROWS + : 'MINROWS' + ; + +MINUS + : 'MINUS' + ; + +MNODE + : 'MNODE' + ; + +MNODES + : 'MNODES' + ; + +MODIFY + : 'MODIFY' + ; + +MODULES + : 'MODULES' + ; + +MOUNT + : 'MOUNT' + ; + +MOUNTS + : 'MOUNTS' + ; + +NCHAR + : 'NCHAR' + ; + +NEAR + : 'NEAR' + ; + +NEXT + : 'NEXT' + ; + +NMATCH + : 'NMATCH' + ; + +NONE + : 'NONE' + ; + +NORMAL + : 'NORMAL' + ; + +NOT + : 'NOT' + ; + +NOTIFY + : 'NOTIFY' + ; + +NOTIFY_HISTORY + : 'NOTIFY_HISTORY' + ; + +NOTIFY_OPTIONS + : 'NOTIFY_OPTIONS' + ; + +NOW + : 'NOW' + ; + +NO_BATCH_SCAN + : 'NO_BATCH_SCAN' + ; + +NULL + : 'NULL' + ; + +NULL_F + : 'NULL_F' + ; + +NULLS + : 'NULLS' + ; + +OFFSET + : 'OFFSET' + ; + +ON + : 'ON' + ; + +ONLY + : 'ONLY' + ; + +OR + : 'OR' + ; + +ORDER + : 'ORDER' + ; + +OUTER + : 'OUTER' + ; + +OUTPUTTYPE + : 'OUTPUTTYPE' + ; + +OUTPUT_SUBTABLE + : 'OUTPUT_SUBTABLE' + ; + +PAGES + : 'PAGES' + ; + +PAGESIZE + : 'PAGESIZE' + ; + +PARA_TABLES_SORT + : 'PARA_TABLES_SORT' + ; + +PARTITION + : 'PARTITION' + ; + +PARTITION_FIRST + : 'PARTITION_FIRST' + ; + +PASS + : 'PASS' + ; + +PERIOD + : 'PERIOD' + ; + +PI + : 'PI' + ; + +PORT + : 'PORT' + ; + +POSITION + : 'POSITION' + ; + +PPS + : 'PPS' + ; + +PRECISION + : 'PRECISION' + ; + +PREV + : 'PREV' + ; + +PRIMARY + : 'PRIMARY' + ; + +PRE_FILTER + : 'PRE_FILTER' + ; + +PRIVILEGES + : 'PRIVILEGES' + ; + +QNODE + : 'QNODE' + ; + +QNODES + : 'QNODES' + ; + +QTIME + : 'QTIME' + ; + +QUERIES + : 'QUERIES' + ; + +QUERY + : 'QUERY' + ; + +RAND + : 'RAND' + ; + +RANGE + : 'RANGE' + ; + +RATIO + : 'RATIO' + ; + +READ + : 'READ' + ; + +RECALCULATE + : 'RECALCULATE' + ; + +RECURSIVE + : 'RECURSIVE' + ; + +REDISTRIBUTE + : 'REDISTRIBUTE' + ; + +REGEXP + : 'REGEXP' + ; + +RENAME + : 'RENAME' + ; + +REPLACE + : 'REPLACE' + ; + +REPLICA + : 'REPLICA' + ; + +REPLICAS + : 'REPLICAS' + ; + +RESET + : 'RESET' + ; + +RESTORE + : 'RESTORE' + ; + +RETENTIONS + : 'RETENTIONS' + ; + +REVOKE + : 'REVOKE' + ; + +RIGHT + : 'RIGHT' + ; + +ROLLUP + : 'ROLLUP' + ; + +SCHEMALESS + : 'SCHEMALESS' + ; + +SCORES + : 'SCORES' + ; + +SELECT + : 'SELECT' + ; + +SEMI + : 'SEMI' + ; + +SERVER_STATUS + : 'SERVER_STATUS' + ; + +SERVER_VERSION + : 'SERVER_VERSION' + ; + +SESSION + : 'SESSION' + ; + +SET + : 'SET' + ; + +SHOW + : 'SHOW' + ; + +SINGLE_STABLE + : 'SINGLE_STABLE' + ; + +SKIP_TSMA + : 'SKIP_TSMA' + ; + +SLIDING + : 'SLIDING' + ; + +SLIMIT + : 'SLIMIT' + ; + +SMA + : 'SMA' + ; + +SMALLDATA_TS_SORT + : 'SMALLDATA_TS_SORT' + ; + +SMALLINT + : 'SMALLINT' + ; + +SNODE + : 'SNODE' + ; + +SNODES + : 'SNODES' + ; + +SORT_FOR_GROUP + : 'SORT_FOR_GROUP' + ; + +SOFFSET + : 'SOFFSET' + ; + +SPLIT + : 'SPLIT' + ; + +SSMIGRATE + : 'SSMIGRATE' + ; + +SS_CHUNKPAGES + : 'SS_CHUNKPAGES' + ; + +SS_COMPACT + : 'SS_COMPACT' + ; + +SS_KEEPLOCAL + : 'SS_KEEPLOCAL' + ; + +STABLE + : 'STABLE' + ; + +STABLES + : 'STABLES' + ; + +START + : 'START' + ; + +STATE + : 'STATE' + ; + +STATE_WINDOW + : 'STATE_WINDOW' + ; + +STOP + : 'STOP' + ; + +STORAGE + : 'STORAGE' + ; + +STREAM + : 'STREAM' + ; + +STREAMS + : 'STREAMS' + ; + +STREAM_OPTIONS + : 'STREAM_OPTIONS' + ; + +STRICT + : 'STRICT' + ; + +STT_TRIGGER + : 'STT_TRIGGER' + ; + +SUBSCRIBE + : 'SUBSCRIBE' + ; + +SUBSCRIPTIONS + : 'SUBSCRIPTIONS' + ; + +SUBSTR + : 'SUBSTR' + ; + +SUBSTRING + : 'SUBSTRING' + ; + +SYSINFO + : 'SYSINFO' + ; + +SYSTEM + : 'SYSTEM' + ; + +TABLE + : 'TABLE' + ; + +TABLES + : 'TABLES' + ; + +TABLE_PREFIX + : 'TABLE_PREFIX' + ; + +TABLE_SUFFIX + : 'TABLE_SUFFIX' + ; + +TAG + : 'TAG' + ; + +TAGS + : 'TAGS' + ; + +TBNAME + : 'TBNAME' + ; + +THEN + : 'THEN' + ; + +TIMESTAMP + : 'TIMESTAMP' + ; + +TIMEZONE + : 'TIMEZONE' + ; + +TINYINT + : 'TINYINT' + ; + +TO + : 'TO' + ; + +TODAY + : 'TODAY' + ; + +TOPIC + : 'TOPIC' + ; + +TOPICS + : 'TOPICS' + ; + +TRAILING + : 'TRAILING' + ; + +TRANSACTION + : 'TRANSACTION' + ; + +TRANSACTIONS + : 'TRANSACTIONS' + ; + +TRIM + : 'TRIM' + ; + +TROWS + : 'TROWS' + ; + +TRUE_FOR + : 'TRUE_FOR' + ; + +TSDB_PAGESIZE + : 'TSDB_PAGESIZE' + ; + +TSERIES + : 'TSERIES' + ; + +TSMA + : 'TSMA' + ; + +TSMAS + : 'TSMAS' + ; + +TTL + : 'TTL' + ; + +UNION + : 'UNION' + ; + +UNSIGNED + : 'UNSIGNED' + ; + +UNSAFE + : 'UNSAFE' + ; + +UNTREATED + : 'UNTREATED' + ; + +UPDATE + : 'UPDATE' + ; + +USE + : 'USE' + ; + +USER + : 'USER' + ; + +USERS + : 'USERS' + ; + +USING + : 'USING' + ; + +VALUE + : 'VALUE' + ; + +VALUES + : 'VALUES' + ; + +VALUE_F + : 'VALUE_F' + ; + +VARBINARY + : 'VARBINARY' + ; + +VARCHAR + : 'VARCHAR' + ; + +VARIABLES + : 'VARIABLES' + ; + +VERBOSE + : 'VERBOSE' + ; + +VGROUP + : 'VGROUP' + ; + +VGROUPS + : 'VGROUPS' + ; + +VIEW + : 'VIEW' + ; + +VIEWS + : 'VIEWS' + ; + +VIRTUAL + : 'VIRTUAL' + ; + +VNODE + : 'VNODE' + ; + +VNODES + : 'VNODES' + ; + +VTABLE + : 'VTABLE' + ; + +VTABLES + : 'VTABLES' + ; + +WAL_FSYNC_PERIOD + : 'WAL_FSYNC_PERIOD' + ; + +WAL_LEVEL + : 'WAL_LEVEL' + ; + +WAL_RETENTION_PERIOD + : 'WAL_RETENTION_PERIOD' + ; + +WAL_RETENTION_SIZE + : 'WAL_RETENTION_SIZE' + ; + +WAL_ROLL_PERIOD + : 'WAL_ROLL_PERIOD' + ; + +WAL_SEGMENT_SIZE + : 'WAL_SEGMENT_SIZE' + ; + +WATERMARK + : 'WATERMARK' + ; + +WHEN + : 'WHEN' + ; + +WHERE + : 'WHERE' + ; + +WINDOW + : 'WINDOW' + ; + +WINDOW_CLOSE + : 'WINDOW_CLOSE' + ; + +WINDOW_OFFSET + : 'WINDOW_OFFSET' + ; + +WINDOW_OPEN + : 'WINDOW_OPEN' + ; + +WITH + : 'WITH' + ; + +WRITE + : 'WRITE' + ; + // Internal/System keywords (prefixed with underscore) + +ROWTS + : '_C0' + | '_ROWTS' + ; + +IROWTS + : '_IROWTS' + ; + +IROWTS_ORIGIN + : '_IROWTS_ORIGIN' + ; + +ISFILLED + : '_ISFILLED' + ; + +QDURATION + : '_QDURATION' + ; + +QEND + : '_QEND' + ; + +QSTART + : '_QSTART' + ; + +QTAGS + : '_TAGS' + ; + +WDURATION + : '_WDURATION' + ; + +WEND + : '_WEND' + ; + +WSTART + : '_WSTART' + ; + +FLOW + : '_FLOW' + ; + +FHIGH + : '_FHIGH' + ; + +FROWTS + : '_FROWTS' + ; + +TPREV_TS + : '_TPREV_TS' + ; + +TCURRENT_TS + : '_TCURRENT_TS' + ; + +TNEXT_TS + : '_TNEXT_TS' + ; + +TWSTART + : '_TWSTART' + ; + +TWEND + : '_TWEND' + ; + +TWDURATION + : '_TWDURATION' + ; + +TWROWNUM + : '_TWROWNUM' + ; + +TPREV_LOCALTIME + : '_TPREV_LOCALTIME' + ; + +TNEXT_LOCALTIME + : '_TNEXT_LOCALTIME' + ; + +TLOCALTIME + : '_TLOCALTIME' + ; + +TGRPID + : '_TGRPID' + ; + // ============================================================================= + + // Non-Keyword Tokens (Operators, Literals, etc.) + + // ============================================================================= + +NK_ARROW + : '->' + ; + +NK_CONCAT + : '||' + ; + +NK_LSHIFT + : '<<' + ; + +NK_RSHIFT + : '>>' + ; + +NK_LE + : '<=' + ; + +NK_GE + : '>=' + ; + +NK_NE + : '<>' + | '!=' + ; + +NK_PH + : '%%' + ; + +NK_PLUS + : '+' + ; + +NK_MINUS + : '-' + ; + +NK_STAR + : '*' + ; + +NK_SLASH + : '/' + ; + +NK_REM + : '%' + ; + +NK_EQ + : '=' + ; + +NK_LT + : '<' + ; + +NK_GT + : '>' + ; + +NK_BITAND + : '&' + ; + +NK_BITOR + : '|' + ; + +NK_BITNOT + : '~' + ; + +NK_LP + : '(' + ; + +NK_RP + : ')' + ; + +NK_COMMA + : ',' + ; + +NK_SEMI + : ';' + ; + +NK_COLON + : ':' + ; + +NK_QUESTION + : '?' + ; + +NK_DOT + : '.' + ; + // Literals + +NK_BOOL + : 'TRUE' + | 'FALSE' + ; + +NK_VARIABLE + : DIGIT+ ('B' | 'U' | 'A' | 'S' | 'M' | 'H' | 'D' | 'N' | 'Y' | 'W') + ; + +NK_IPTOKEN + : DIGIT+ '.' DIGIT+ '.' DIGIT+ '.' DIGIT+ + ; + +NK_FLOAT + : DIGIT+ '.' DIGIT* EXPONENT? + | '.' DIGIT+ EXPONENT? + | DIGIT+ EXPONENT + ; + +NK_HEX + : '0' ('X') HEX_DIGIT+ + ; + +NK_BIN + : '0' ('B') ('0' | '1')+ + ; + +NK_INTEGER + : DIGIT+ + ; + +NK_STRING + : '\'' (~ ('\'' | '\\') | '\\' . | '\'\'')* '\'' + | '"' (~ ('"' | '\\') | '\\' . | '""')* '"' + ; + // Identifier (must be last to not consume keywords) + +NK_ID + : [A-Z_] [A-Z0-9_]* + | '`' (~ '`' | '``')* '`' + ; + +NK_HINT + : '/*+' .*? '*/' + ; + +NK_COMMENT + : ('--' ~ [\r\n]* | '/*' .*? '*/') -> skip + ; + +NK_SPACE + : [ \t\r\n\f]+ -> skip + ; + +fragment DIGIT + : [0-9] + ; + +fragment HEX_DIGIT + : [0-9A-F] + ; + +fragment EXPONENT + : ('E') ('+' | '-')? DIGIT+ + ; + diff --git a/sql/tdengine/TDengineParser.g4 b/sql/tdengine/TDengineParser.g4 new file mode 100644 index 0000000000..ba552ba76b --- /dev/null +++ b/sql/tdengine/TDengineParser.g4 @@ -0,0 +1,1414 @@ +parser grammar TDengineParser; + + +options { tokenVocab = TDengineLexer; } +sqlCommandList + : cmd (';' cmd)* ';'? EOF + ; +/* + * ============================================================================= + * Main command rule (cmd) combining all possible SQL statements + * ============================================================================= + */ + + +cmd + : CREATE ACCOUNT NK_ID PASS NK_STRING accountOptions + | ALTER ACCOUNT NK_ID alterAccountOptions + | CREATE USER userName PASS NK_STRING sysinfoOpt isCreatedbOpt isImportOpt whiteListOpt + | ALTER USER userName PASS NK_STRING + | ALTER USER userName ENABLE NK_INTEGER + | ALTER USER userName SYSINFO NK_INTEGER + | ALTER USER userName CREATEDB NK_INTEGER + | ALTER USER userName ADD whiteList + | ALTER USER userName DROP whiteList + | DROP USER userName + | GRANT privileges ON privLevel withClauseOpt TO userName + | REVOKE privileges ON privLevel withClauseOpt FROM userName + | CREATE ENCRYPT_KEY NK_STRING + | CREATE ANODE NK_STRING + | UPDATE ANODE NK_INTEGER + | UPDATE ALL ANODES + | DROP ANODE NK_INTEGER + | CREATE DNODE dnodeEndpoint (PORT NK_INTEGER)? + | DROP DNODE (NK_INTEGER | dnodeEndpoint) FORCE + | DROP DNODE (NK_INTEGER | dnodeEndpoint) UNSAFE + | ALTER DNODE NK_INTEGER NK_STRING NK_STRING? + | ALTER ALL DNODES NK_STRING NK_STRING? + | RESTORE DNODE NK_INTEGER + | ALTER CLUSTER NK_STRING NK_STRING? + | ALTER LOCAL NK_STRING NK_STRING? + | CREATE QNODE ON DNODE NK_INTEGER + | DROP QNODE ON DNODE NK_INTEGER + | RESTORE QNODE ON DNODE NK_INTEGER + | CREATE SNODE ON DNODE NK_INTEGER + | DROP SNODE ON DNODE NK_INTEGER + | CREATE BNODE ON DNODE NK_INTEGER bnodeOptions + | DROP BNODE ON DNODE NK_INTEGER + | CREATE MNODE ON DNODE NK_INTEGER + | DROP MNODE ON DNODE NK_INTEGER + | RESTORE MNODE ON DNODE NK_INTEGER + | RESTORE VNODE ON DNODE NK_INTEGER + | CREATE DATABASE notExistsOpt dbName dbOptions + | DROP DATABASE existsOpt dbName forceOpt + | USE dbName + | ALTER DATABASE dbName alterDbOptions + | FLUSH DATABASE dbName + | TRIM DATABASE dbName speedOpt + | SSMIGRATE DATABASE dbName + | COMPACT DATABASE dbName startOpt endOpt metaOnly + | COMPACT dbNameCondOpt? VGROUPS IN NK_LP integerList NK_RP startOpt endOpt metaOnly + | CREATE TABLE notExistsOpt fullTableName NK_LP columnDefList NK_RP tagsDefOpt tableOptions + | CREATE TABLE multiCreateClause + | CREATE TABLE notExistsOpt USING fullTableName NK_LP tagListOpt NK_RP FILE NK_STRING + | CREATE STABLE notExistsOpt fullTableName NK_LP columnDefList NK_RP tagsDef tableOptions + | CREATE VTABLE notExistsOpt fullTableName NK_LP columnDefList NK_RP + | CREATE VTABLE notExistsOpt fullTableName NK_LP specificColumnRefList NK_RP USING fullTableName specificColsOpt TAGS NK_LP tagsLiteralList NK_RP + | CREATE VTABLE notExistsOpt fullTableName NK_LP columnRefList NK_RP USING fullTableName specificColsOpt TAGS NK_LP tagsLiteralList NK_RP + | CREATE VTABLE notExistsOpt fullTableName USING fullTableName specificColsOpt TAGS NK_LP tagsLiteralList NK_RP + | DROP TABLE withOpt? multiDropClause + | DROP STABLE withOpt? existsOpt fullTableName + | DROP VTABLE withOpt? existsOpt fullTableName + | ALTER TABLE alterTableClause + | ALTER STABLE alterTableClause + | ALTER VTABLE alterTableClause + | CREATE MOUNT notExistsOpt mountName ON DNODE NK_INTEGER FROM NK_STRING + | DROP MOUNT existsOpt mountName + | SHOW DNODES + | SHOW USERS FULL? + | SHOW USER PRIVILEGES + | SHOW dbKindOpt DATABASES + | SHOW tableKindDbNameCondOpt TABLES likePatternOpt + | SHOW tableKindDbNameCondOpt VTABLES likePatternOpt + | SHOW tableKindDbNameCondOpt STABLES likePatternOpt + | SHOW dbNameCondOpt? VGROUPS + | SHOW MNODES + | SHOW QNODES + | SHOW ANODES FULL? + | SHOW ARBGROUPS + | SHOW FUNCTIONS + | SHOW INDEXES FROM table_name_cond fromDbOpt + | SHOW INDEXES FROM dbName NK_DOT tableName + | SHOW dbNameCondOpt? STREAMS + | SHOW ACCOUNTS + | SHOW APPS + | SHOW CONNECTIONS + | SHOW LICENCES + | SHOW GRANTS (FULL | LOGS)? + | SHOW CLUSTER MACHINES + | SHOW MOUNTS + | SHOW CREATE DATABASE dbName + | SHOW CREATE TABLE fullTableName + | SHOW CREATE VTABLE fullTableName + | SHOW CREATE STABLE fullTableName + | SHOW ENCRYPTIONS + | SHOW QUERIES + | SHOW SCORES + | SHOW TOPICS + | SHOW (CLUSTER | LOCAL)? VARIABLES likePatternOpt + | SHOW DNODE NK_INTEGER VARIABLES likePatternOpt + | SHOW SNODES + | SHOW BNODES + | SHOW CLUSTER + | SHOW TRANSACTIONS + | SHOW TRANSACTION NK_INTEGER + | SHOW TABLE DISTRIBUTED fullTableName + | SHOW CONSUMERS + | SHOW SUBSCRIPTIONS + | SHOW TAGS FROM table_name_cond fromDbOpt + | SHOW TAGS FROM dbName NK_DOT tableName + | SHOW TABLE TAGS tagListOpt FROM table_name_cond fromDbOpt + | SHOW TABLE TAGS tagListOpt FROM dbName NK_DOT tableName + | SHOW VNODES (ON DNODE NK_INTEGER)? + | SHOW dbNameCondOpt? ALIVE + | SHOW CLUSTER ALIVE + | SHOW dbNameCondOpt? VIEWS likePatternOpt + | SHOW CREATE VIEW fullViewName + | SHOW COMPACTS + | SHOW COMPACT NK_INTEGER + | SHOW dbNameCondOpt? DISK_INFO + | CREATE TSMA notExistsOpt tsmaName ON fullTableName tsmaFuncList INTERVAL NK_LP durationLiteral NK_RP + | CREATE RECURSIVE TSMA notExistsOpt tsmaName ON fullTableName INTERVAL NK_LP durationLiteral NK_RP + | DROP TSMA existsOpt fullTsmaName + | SHOW dbNameCondOpt? TSMAS + | CREATE SMA INDEX notExistsOpt colName ON fullTableName indexOptions + | CREATE INDEX notExistsOpt colName ON fullTableName NK_LP colNameList NK_RP + | DROP INDEX existsOpt fullIndexName + | CREATE TOPIC notExistsOpt topicName AS queryOrSubquery + | CREATE TOPIC notExistsOpt topicName withMeta DATABASE dbName + | CREATE TOPIC notExistsOpt topicName withMeta STABLE fullTableName whereClauseOpt? + | DROP TOPIC existsOpt forceOpt topicName + | DROP CONSUMER GROUP existsOpt forceOpt cgroupName ON topicName + | (DESC | DESCRIBE) fullTableName + | RESET QUERY CACHE + | EXPLAIN analyzeOpt? explainOptions queryOrSubquery + | EXPLAIN analyzeOpt? explainOptions insertQuery + | CREATE orReplaceOpt? aggFuncOpt? FUNCTION notExistsOpt functionName AS NK_STRING OUTPUTTYPE typeName bufsizeOpt languageOpt + | DROP FUNCTION existsOpt functionName + | CREATE orReplaceOpt? VIEW fullViewName AS queryOrSubquery + | DROP VIEW existsOpt fullViewName + | CREATE STREAM notExistsOpt fullStreamName streamTrigger streamOuttableOpt asSubqueryOpt + | DROP STREAM existsOpt fullStreamName + | STOP STREAM existsOpt fullStreamName + | START STREAM existsOpt ignoreOpt? fullStreamName + | RECALCULATE STREAM fullStreamName recalculateRange + | KILL CONNECTION NK_INTEGER + | KILL QUERY NK_STRING + | KILL TRANSACTION NK_INTEGER + | KILL COMPACT NK_INTEGER + | BALANCE VGROUP + | ASSIGN LEADER FORCE + | BALANCE VGROUP LEADER onVgroupId + | BALANCE VGROUP LEADER DATABASE dbName + | MERGE VGROUP NK_INTEGER NK_INTEGER + | REDISTRIBUTE VGROUP NK_INTEGER dnodeList + | SPLIT VGROUP NK_INTEGER forceOpt + | DELETE FROM fullTableName whereClauseOpt? + | queryOrSubquery + | insertQuery + ; +/* + * ============================================================================= + * Clause and options definitions + * ============================================================================= + */ + + +accountOptions + : (PPS literal | TSERIES literal | STORAGE literal | STREAMS literal | QTIME literal | DBS literal | USERS literal | CONNS literal | STATE literal)* + ; + +alterAccountOptions + : alterAccountOption+ + ; + +alterAccountOption + : PASS literal + | PPS literal + | TSERIES literal + | STORAGE literal + | STREAMS literal + | QTIME literal + | DBS literal + | USERS literal + | CONNS literal + | STATE literal + ; + +ipRangeList + : NK_STRING (NK_COMMA NK_STRING)* + ; + +whiteList + : HOST ipRangeList + ; + +whiteListOpt + : whiteList? + ; + +isImportOpt + : (IS_IMPORT NK_INTEGER)? + ; + +isCreatedbOpt + : (CREATEDB NK_INTEGER)? + ; + +sysinfoOpt + : (SYSINFO NK_INTEGER)? + ; + +privileges + : ALL + | privTypeList + | SUBSCRIBE + ; + +privTypeList + : privType (NK_COMMA privType)* + ; + +privType + : READ + | WRITE + | ALTER + ; + +privLevel + : NK_STAR NK_DOT NK_STAR + | dbName NK_DOT NK_STAR + | dbName NK_DOT tableName + | topicName + ; + +withClauseOpt + : (WITH searchCondition)? + ; + +dnodeEndpoint + : NK_STRING + | NK_ID + | NK_IPTOKEN + ; + +forceOpt + : FORCE? + ; + +unsafeOpt + : UNSAFE + ; + +bnodeOptions + : (NK_ID NK_STRING)* + ; + +notExistsOpt + : (IF NOT EXISTS)? + ; + +existsOpt + : (IF EXISTS)? + ; + +metaOnly + : META_ONLY? + ; + +dbOptions + : (BUFFER NK_INTEGER | CACHEMODEL NK_STRING | CACHESIZE NK_INTEGER | COMP NK_INTEGER | DURATION (NK_INTEGER | NK_VARIABLE) | MAXROWS NK_INTEGER | MINROWS NK_INTEGER | KEEP (integerList | variableList) | PAGES NK_INTEGER | PAGESIZE NK_INTEGER | TSDB_PAGESIZE NK_INTEGER | PRECISION NK_STRING | (REPLICAS | REPLICA) NK_INTEGER | VGROUPS NK_INTEGER | SINGLE_STABLE NK_INTEGER | RETENTIONS retentionList | SCHEMALESS NK_INTEGER | WAL_LEVEL NK_INTEGER | WAL_FSYNC_PERIOD NK_INTEGER | WAL_RETENTION_PERIOD NK_MINUS? NK_INTEGER | WAL_RETENTION_SIZE NK_MINUS? NK_INTEGER | WAL_ROLL_PERIOD NK_INTEGER | WAL_SEGMENT_SIZE NK_INTEGER | STT_TRIGGER NK_INTEGER | TABLE_PREFIX signed | TABLE_SUFFIX signed | SS_CHUNKPAGES NK_INTEGER | SS_KEEPLOCAL (NK_INTEGER | NK_VARIABLE) | SS_COMPACT NK_INTEGER | KEEP_TIME_OFFSET (NK_INTEGER | NK_VARIABLE) | ENCRYPT_ALGORITHM NK_STRING | DNODES NK_STRING | COMPACT_INTERVAL (NK_INTEGER | NK_VARIABLE) | COMPACT_TIME_RANGE signedDurationList | COMPACT_TIME_OFFSET (NK_INTEGER | NK_VARIABLE))* + ; + +alterDbOptions + : alterDbOption+ + ; + +alterDbOption + : BUFFER NK_INTEGER + | CACHEMODEL NK_STRING + | CACHESIZE NK_INTEGER + | WAL_FSYNC_PERIOD NK_INTEGER + | KEEP (integerList | variableList) + | PAGES NK_INTEGER + | (REPLICA | REPLICAS) NK_INTEGER + | WAL_LEVEL NK_INTEGER + | STT_TRIGGER NK_INTEGER + | MINROWS NK_INTEGER + | WAL_RETENTION_PERIOD NK_MINUS? NK_INTEGER + | WAL_RETENTION_SIZE NK_MINUS? NK_INTEGER + | SS_KEEPLOCAL (NK_INTEGER | NK_VARIABLE) + | SS_COMPACT NK_INTEGER + | KEEP_TIME_OFFSET (NK_INTEGER | NK_VARIABLE) + | ENCRYPT_ALGORITHM NK_STRING + | COMPACT_INTERVAL (NK_INTEGER | NK_VARIABLE) + | COMPACT_TIME_RANGE signedDurationList + | COMPACT_TIME_OFFSET (NK_INTEGER | NK_VARIABLE) + ; + +integerList + : NK_INTEGER (NK_COMMA NK_INTEGER)* + ; + +variableList + : NK_VARIABLE (NK_COMMA NK_VARIABLE)* + ; + +signedDurationList + : (signedVariable | signedInteger) (NK_COMMA (signedVariable | signedInteger))* + ; + +retentionList + : retention (NK_COMMA retention)* + ; + +retention + : (NK_VARIABLE | NK_MINUS) NK_COLON NK_VARIABLE + ; + +speedOpt + : (BWLIMIT NK_INTEGER)? + ; + +startOpt + : (START WITH (TIMESTAMP? (NK_INTEGER | NK_STRING)))? + ; + +endOpt + : (END WITH (TIMESTAMP? (NK_INTEGER | NK_STRING)))? + ; + +withOpt + : WITH + ; + +alterTableClause + : fullTableName alterTableOptions + | fullTableName ADD COLUMN columnName typeName columnOptions + | fullTableName DROP COLUMN columnName + | fullTableName MODIFY COLUMN columnName typeName + | fullTableName MODIFY COLUMN columnName columnOptions + | fullTableName RENAME COLUMN columnName columnName + | fullTableName ADD TAG columnName typeName + | fullTableName DROP TAG columnName + | fullTableName MODIFY TAG columnName typeName + | fullTableName RENAME TAG columnName columnName + | fullTableName ALTER COLUMN columnName SET columnRef + | fullTableName ALTER COLUMN columnName SET NULL + | fullTableName SET TAG columnTagValueList + ; + +columnTagValueList + : columnTagValue (NK_COMMA columnTagValue)* + ; + +columnTagValue + : columnName NK_EQ tagsLiteral + ; + +multiCreateClause + : createSubtableClause+ + ; + +createSubtableClause + : notExistsOpt fullTableName USING fullTableName specificColsOpt TAGS NK_LP tagsLiteralList NK_RP tableOptions + ; + +multiDropClause + : dropTableClause (NK_COMMA dropTableClause)* + ; + +dropTableClause + : existsOpt fullTableName + ; + +specificColsOpt + : (NK_LP colNameList NK_RP)? + ; + +fullTableName + : (dbName NK_DOT)? tableName + ; + +tagDefList + : tagDef (NK_COMMA tagDef)* + ; + +tagDef + : columnName typeName + ; + +columnDefList + : columnDef (NK_COMMA columnDef)* + ; + +columnDef + : columnName typeName columnOptions + ; + +specificColumnRefList + : specificColumnRef (NK_COMMA specificColumnRef)* + ; + +specificColumnRef + : columnName FROM columnRef + ; + +columnRefList + : columnRef (NK_COMMA columnRef)* + ; + +typeName + : BOOL + | TINYINT UNSIGNED? + | SMALLINT UNSIGNED? + | (INT | INTEGER) UNSIGNED? + | BIGINT UNSIGNED? + | FLOAT + | DOUBLE + | BINARY NK_LP NK_INTEGER NK_RP + | TIMESTAMP + | NCHAR NK_LP NK_INTEGER NK_RP + | JSON + | VARCHAR NK_LP NK_INTEGER NK_RP + | MEDIUMBLOB + | BLOB + | VARBINARY NK_LP NK_INTEGER NK_RP + | GEOMETRY NK_LP NK_INTEGER NK_RP + | DECIMAL NK_LP NK_INTEGER (NK_COMMA NK_INTEGER)? NK_RP + ; + +typeNameDefaultLen + : BINARY + | NCHAR + | VARCHAR + | VARBINARY + ; + +tagsDefOpt + : tagsDef? + ; + +tagsDef + : TAGS NK_LP tagDefList NK_RP + ; + +tableOptions + : (COMMENT NK_STRING | MAX_DELAY durationList | WATERMARK durationList | ROLLUP NK_LP rollupFuncList NK_RP | TTL NK_INTEGER | SMA NK_LP colNameList NK_RP | DELETE_MARK durationList | KEEP (NK_INTEGER | NK_VARIABLE) | VIRTUAL NK_INTEGER)* + ; + +alterTableOptions + : alterTableOption+ + ; + +alterTableOption + : COMMENT NK_STRING + | TTL NK_INTEGER + | KEEP (NK_INTEGER | NK_VARIABLE) + ; + +durationList + : durationLiteral (NK_COMMA durationLiteral)* + ; + +rollupFuncList + : rollupFuncName (NK_COMMA rollupFuncName)* + ; + +rollupFuncName + : functionName + | FIRST + | LAST + ; + +colNameList + : colName (NK_COMMA colName)* + ; + +colName + : columnName + | TBNAME + ; + +dbKindOpt + : (USER | SYSTEM)? + ; + +tableKindDbNameCondOpt + : (tableKind? dbName NK_DOT) + | tableKind? + ; + +tableKind + : NORMAL + | CHILD + | VIRTUAL + ; + +dbNameCondOpt + : (dbName NK_DOT) + ; + +likePatternOpt + : (LIKE NK_STRING)? + ; + +table_name_cond + : tableName + ; + +fromDbOpt + : (FROM dbName)? + ; + +tagListOpt + : tagItem (NK_COMMA tagItem)* + | + ; + +tagList + : tagItem (NK_COMMA tagItem)* + ; + +tagItem + : TBNAME + | QTAGS + | columnName (AS? columnAlias)? + ; + +fullTsmaName + : (dbName NK_DOT)? tsmaName + ; + +tsmaFuncList + : FUNCTION NK_LP funcList NK_RP + ; + +fullIndexName + : (dbName NK_DOT)? indexName + ; + +indexOptions + : FUNCTION NK_LP funcList NK_RP INTERVAL NK_LP durationLiteral (NK_COMMA durationLiteral)? NK_RP slidingOpt smaStreamOpt + ; + +funcList + : func (NK_COMMA func)* + ; + +func + : smaFuncName NK_LP expressionList NK_RP + ; + +smaFuncName + : functionName + | COUNT + | FIRST + | LAST + | LAST_ROW + ; + +smaStreamOpt + : + ; + +withMeta + : AS + | WITH META AS + | ONLY META AS + ; + +analyzeOpt + : ANALYZE + ; + +explainOptions + : (VERBOSE NK_BOOL | RATIO NK_FLOAT)* + ; + +aggFuncOpt + : AGGREGATE + ; + +bufsizeOpt + : (BUFSIZE NK_INTEGER)? + ; + +languageOpt + : (LANGUAGE NK_STRING)? + ; + +orReplaceOpt + : (OR REPLACE) + ; + +fullViewName + : (dbName NK_DOT)? viewName + ; + +recalculateRange + : FROM timePoint (TO timePoint)? + ; + +fullStreamName + : (dbName NK_DOT)? streamName + ; + +streamOuttableOpt + : (INTO fullTableName outputSubtableOpt? columnNameOpt? streamTagsDefOpt?)? + ; + +streamTrigger + : triggerType triggerTableOpt? streamPartitionByOpt? triggerOptionsOpt? notificationOpt? + ; + +triggerType + : SESSION NK_LP columnReference NK_COMMA intervalSlidingDurationLiteral NK_RP + | STATE_WINDOW NK_LP columnReference NK_RP trueForOpt + | intervalOpt? SLIDING NK_LP slidingExpr NK_RP + | EVENT_WINDOW NK_LP START WITH searchCondition END WITH searchCondition NK_RP trueForOpt + | COUNT_WINDOW NK_LP countWindowArgs NK_RP + | PERIOD NK_LP intervalSlidingDurationLiteral offsetOpt NK_RP + ; + +intervalOpt + : (INTERVAL NK_LP intervalSlidingDurationLiteral (NK_COMMA intervalSlidingDurationLiteral)? NK_RP) + ; + +slidingExpr + : intervalSlidingDurationLiteral (NK_COMMA intervalSlidingDurationLiteral)? + ; + +offsetOpt + : (NK_COMMA intervalSlidingDurationLiteral)? + ; + +triggerTableOpt + : (FROM fullTableName) + ; + +streamPartitionByOpt + : (PARTITION BY columnNameList) + ; + +triggerOptionsOpt + : (STREAM_OPTIONS NK_LP triggerOptionList NK_RP) + ; + +triggerOptionList + : triggerOption (NK_BITOR triggerOption)* + ; + +triggerOption + : CALC_NOTIFY_ONLY + | DELETE_RECALC + | DELETE_OUTPUT_TABLE + | EXPIRED_TIME NK_LP durationLiteral NK_RP + | FILL_HISTORY (NK_LP timePoint NK_RP)? + | FILL_HISTORY_FIRST (NK_LP timePoint NK_RP)? + | FORCE_OUTPUT + | IGNORE_DISORDER + | LOW_LATENCY_CALC + | MAX_DELAY NK_LP durationLiteral NK_RP + | PRE_FILTER NK_LP searchCondition NK_RP + | WATERMARK NK_LP durationLiteral NK_RP + | EVENT_TYPE NK_LP eventTypeList NK_RP + | IGNORE_NODATA_TRIGGER + ; + +notificationOpt + : (NOTIFY NK_LP notifyUrlList NK_RP notifyOnOpt whereClauseOpt? notifyOptionsOpt?) + ; + +notifyUrlList + : NK_STRING (NK_COMMA NK_STRING)* + ; + +notifyOnOpt + : (ON NK_LP eventTypeList NK_RP)? + ; + +notifyOptionsOpt + : (NOTIFY_OPTIONS NK_LP notifyOptionsList NK_RP) + ; + +notifyOptionsList + : notifyOption (NK_BITOR notifyOption)* + ; + +notifyOption + : NOTIFY_HISTORY + ; + +timePoint + : NK_INTEGER + | NK_STRING + ; + +columnNameList + : triggerColName (NK_COMMA triggerColName)* + ; + +triggerColName + : columnName + | TBNAME + ; + +eventTypeList + : eventTypes (NK_BITOR eventTypes)* + ; + +eventTypes + : WINDOW_OPEN + | WINDOW_CLOSE + ; + +outputSubtableOpt + : (OUTPUT_SUBTABLE NK_LP exprOrSubquery NK_RP) + ; + +columnNameOpt + : columnNameUnit + ; + +streamTagsDefOpt + : (TAGS NK_LP streamTagsDefList NK_RP) + ; + +streamTagsDefList + : streamTagsDef (NK_COMMA streamTagsDef)* + ; + +streamTagsDef + : columnName typeName AS expression + ; + +columnNameUnit + : NK_LP columnStreamDefList NK_RP + ; + +columnStreamDefList + : columnStreamDef (NK_COMMA columnStreamDef)* + ; + +columnStreamDef + : columnName streamColOptions + ; + +streamColOptions + : (PRIMARY KEY | COMPOSITE KEY)* + ; + +asSubqueryOpt + : (AS queryOrSubquery)? + ; + +ignoreOpt + : IGNORE UNTREATED + ; + +onVgroupId + : (ON NK_INTEGER)? + ; + +dnodeList + : (DNODE NK_INTEGER)+ + ; + +insertQuery + : INSERT INTO insertTableClause+ + ; + +tagsLiteral + : (NK_PLUS | NK_MINUS)? (NK_INTEGER | NK_BIN | NK_HEX) ((NK_PLUS | NK_MINUS) durationLiteral)? + | (NK_PLUS | NK_MINUS)? NK_FLOAT + | NK_STRING ((NK_PLUS | NK_MINUS) durationLiteral)? + | NK_BOOL + | NULL + | literalFunc ((NK_PLUS | NK_MINUS) durationLiteral)? + ; + +tagsLiteralList + : tagsLiteral (NK_COMMA tagsLiteral)* + ; + +literal + : NK_INTEGER + | NK_FLOAT + | NK_STRING + | NK_BOOL + | TIMESTAMP NK_STRING + | durationLiteral + | NULL + | NK_QUESTION + ; + +durationLiteral + : NK_VARIABLE + ; + +signedVariable + : (NK_PLUS | NK_MINUS)? NK_VARIABLE + ; + +signedInteger + : (NK_PLUS | NK_MINUS)? NK_INTEGER + ; + +unsignedInteger + : NK_INTEGER + | NK_QUESTION + ; + +signedFloat + : (NK_PLUS | NK_MINUS)? NK_FLOAT + ; + +signed + : signedInteger + | signedFloat + ; + +signedLiteral + : signed + | NK_STRING + | NK_BOOL + | TIMESTAMP NK_STRING + | durationLiteral + | NULL + | literalFunc + | NK_QUESTION + | timeCalcLiteral + ; + +literalList + : signedLiteral (NK_COMMA signedLiteral)* + ; +/* + * ============================================================================= + * Names and Identifiers + * ============================================================================= + */ + + +dbName + : NK_ID + ; + +mountName + : NK_ID + ; + +tableName + : NK_ID + ; + +columnName + : NK_ID + ; + +functionName + : NK_ID + ; + +viewName + : NK_ID + ; + +tableAlias + : NK_ID + ; + +columnAlias + : NK_ID + ; + +userName + : NK_ID + ; + +topicName + : NK_ID + ; + +streamName + : NK_ID + ; + +cgroupName + : NK_ID + ; + +indexName + : NK_ID + ; + +tsmaName + : NK_ID + ; +/* + * ============================================================================= + * Expressions and Conditions + * ============================================================================= + */ + + +exprOrSubquery + : expression + ; + +expression + : < assoc = right > expression NK_CONCAT expression + | expression (NK_STAR | NK_SLASH | NK_REM) expression + | expression (NK_PLUS | NK_MINUS) expression + | expression (NK_BITAND | NK_BITOR | NK_LSHIFT | NK_RSHIFT | NK_PH) expression + | expression (NK_LT | NK_GT | NK_LE | NK_GE | NK_EQ | NK_NE | LIKE | MATCH | NMATCH | REGEXP | CONTAINS) expression + | expression BETWEEN expression AND expression + | expression IS expression + | expression IN expression + | < assoc = right > NOT expression + | < assoc = right > columnReference NK_ARROW NK_STRING + | (NK_PLUS | NK_MINUS) exprOrSubquery + | primaryExpression + ; + +primaryExpression + : literal + | pseudoColumn + | columnReference + | functionExpression + | caseWhenExpression + | NK_LP expression NK_RP + ; + +expressionList + : exprOrSubquery (NK_COMMA exprOrSubquery)* + ; + +columnReference + : (tableName NK_DOT)? columnName + | (tableName NK_DOT)? columnAlias + ; + +pseudoColumn + : ROWTS + | (tableName NK_DOT)? TBNAME + | QSTART + | QEND + | QDURATION + | WSTART + | WEND + | WDURATION + | IROWTS + | ISFILLED + | QTAGS + | FLOW + | FHIGH + | FROWTS + | IROWTS_ORIGIN + | TPREV_TS + | TCURRENT_TS + | TNEXT_TS + | TWSTART + | TWEND + | TWDURATION + | TWROWNUM + | TPREV_LOCALTIME + | TNEXT_LOCALTIME + | TLOCALTIME + | TGRPID + | NK_PH NK_INTEGER + | NK_PH TBNAME + ; + +functionExpression + : functionName NK_LP expressionList NK_RP + | starFunc NK_LP starFuncParaList NK_RP + | colsFunc NK_LP colsFuncParaList NK_RP + | CAST NK_LP commonExpression AS (typeName | typeNameDefaultLen) NK_RP + | POSITION NK_LP exprOrSubquery IN exprOrSubquery NK_RP + | TRIM NK_LP exprOrSubquery NK_RP + | TRIM NK_LP trimSpecificationType FROM exprOrSubquery NK_RP + | TRIM NK_LP exprOrSubquery FROM exprOrSubquery NK_RP + | TRIM NK_LP trimSpecificationType exprOrSubquery FROM exprOrSubquery NK_RP + | substrFunc NK_LP expressionList NK_RP + | substrFunc NK_LP exprOrSubquery FROM exprOrSubquery (FOR exprOrSubquery)? NK_RP + | REPLACE NK_LP expressionList NK_RP + | literalFunc + | randFunc + ; + +literalFunc + : noargFunc NK_LP NK_RP + | NOW + | TODAY + ; + +timeCalcLiteral + : (NOW | TODAY) (NK_LP NK_RP)? (NK_PLUS | NK_MINUS) durationLiteral + | durationLiteral (NK_PLUS | NK_MINUS) (NOW | TODAY) (NK_LP NK_RP)? + ; + +randFunc + : RAND NK_LP NK_RP + | RAND NK_LP expressionList NK_RP + ; + +substrFunc + : SUBSTR + | SUBSTRING + ; + +trimSpecificationType + : BOTH + | TRAILING + | LEADING + ; + +noargFunc + : NOW + | TODAY + | TIMEZONE + | DATABASE + | CLIENT_VERSION + | SERVER_VERSION + | SERVER_STATUS + | CURRENT_USER + | USER + | PI + ; + +starFunc + : COUNT + | FIRST + | LAST + | LAST_ROW + ; + +colsFunc + : COLS + ; + +colsFuncParaList + : functionExpression NK_COMMA colsFuncExpressionList + ; + +colsFuncExpressionList + : colsFuncExpression (NK_COMMA colsFuncExpression)* + ; + +colsFuncExpression + : exprOrSubquery (AS? columnAlias)? + | NK_STAR + ; + +starFuncParaList + : NK_STAR + | otherParaList + ; + +otherParaList + : starFuncPara (NK_COMMA starFuncPara)* + ; + +starFuncPara + : exprOrSubquery + | tableName NK_DOT NK_STAR + ; + +caseWhenExpression + : CASE commonExpression? whenThenList caseWhenElseOpt? END + ; + +whenThenList + : whenThenExpr+ + ; + +whenThenExpr + : WHEN commonExpression THEN commonExpression + ; + +caseWhenElseOpt + : (ELSE commonExpression) + ; + +predicate + : exprOrSubquery compareOp exprOrSubquery + | exprOrSubquery NOT? BETWEEN exprOrSubquery AND exprOrSubquery + | exprOrSubquery IS NOT? NULL + | exprOrSubquery inOp inPredicateValue + ; + +compareOp + : NK_LT + | NK_GT + | NK_LE + | NK_GE + | NK_NE + | NK_EQ + | NOT? LIKE + | MATCH + | NMATCH + | NOT? REGEXP + | CONTAINS + ; + +inOp + : NOT? IN + ; + +inPredicateValue + : NK_LP literalList NK_RP + ; + +booleanValueExpression + : booleanValueExpression (OR | AND) booleanValueExpression + | NOT booleanPrimary + | booleanPrimary + ; + +booleanPrimary + : predicate + | NK_LP booleanValueExpression NK_RP + ; + +commonExpression + : exprOrSubquery + | booleanValueExpression + ; + +searchCondition + : commonExpression + ; +/* + * ============================================================================= + * Query Structure (FROM, SELECT, JOIN etc.) - CORRECTED SECTION + * ============================================================================= + */ + + +insertTableClause + : fullTableName (NK_LP colNameList NK_RP) (usingClauseWithoutCols? dataClause) + | fullTableName (usingClauseWithOptCols? dataClause) + ; + +usingClauseWithoutCols + : USING fullTableName (NK_LP tagList NK_RP)? TAGS NK_LP tagsLiteralList NK_RP tableOptions + ; + +usingClauseWithOptCols + : USING fullTableName (NK_LP tagList NK_RP)? TAGS NK_LP tagsLiteralList NK_RP (NK_LP colNameList NK_RP)? tableOptions + ; + +dataClause + : VALUES inPredicateValue+ + ; + +fromClauseOpt + : (FROM tableReferenceList) + ; + +tableReferenceList + : tableReference (NK_COMMA tableReference)* + ; + +tableReference + : tablePrimary joinClause? + ; + +tablePrimary + : (dbName NK_DOT)? tableName aliasOpt? + | subquery aliasOpt? + | NK_LP tableReference NK_RP + | NK_PH TBNAME aliasOpt? + | NK_PH TROWS aliasOpt? + ; + +aliasOpt + : (AS? tableAlias) + ; + +joinClause + : (INNER? JOIN) tableReference joinOnClauseOpt? + | (LEFT | RIGHT | FULL) OUTER? JOIN tableReference joinOnClause + | (LEFT | RIGHT) SEMI JOIN tableReference joinOnClause + | (LEFT | RIGHT) ANTI JOIN tableReference joinOnClause + | (LEFT | RIGHT) ASOF JOIN tableReference joinOnClauseOpt? jlimitClauseOpt? + | (LEFT | RIGHT) WINDOW JOIN tableReference joinOnClauseOpt? windowOffsetClause jlimitClauseOpt? + ; + +joinOnClauseOpt + : joinOnClause + ; + +joinOnClause + : ON searchCondition + ; + +windowOffsetClause + : WINDOW_OFFSET NK_LP windowOffsetLiteral NK_COMMA windowOffsetLiteral NK_RP + ; + +windowOffsetLiteral + : NK_MINUS? NK_VARIABLE + ; + +jlimitClauseOpt + : (JLIMIT unsignedInteger) + ; + +querySpecification + : SELECT hintList? setQuantifierOpt? tagModeOpt? selectList fromClauseOpt? whereClauseOpt? partitionByClauseOpt? rangeOpt? everyOpt? interpFillOpt? twindowClauseOpt? groupByClauseOpt? havingClauseOpt? + ; + +hintList + : NK_HINT + ; + +tagModeOpt + : TAGS + ; + +setQuantifierOpt + : (DISTINCT | ALL) + ; + +selectList + : selectItem (NK_COMMA selectItem)* + ; + +selectItem + : (tableName NK_DOT)? NK_STAR + | commonExpression (AS? columnAlias)? + ; + +whereClauseOpt + : (WHERE searchCondition) + ; + +partitionByClauseOpt + : (PARTITION BY partitionList) + ; + +partitionList + : partitionItem (NK_COMMA partitionItem)* + ; + +partitionItem + : exprOrSubquery (AS? columnAlias)? + ; + +twindowClauseOpt + : SESSION NK_LP columnReference NK_COMMA intervalSlidingDurationLiteral NK_RP + | STATE_WINDOW NK_LP exprOrSubquery NK_RP trueForOpt + | INTERVAL NK_LP intervalSlidingDurationLiteral (NK_COMMA (intervalSlidingDurationLiteral | AUTO))? NK_RP slidingOpt? fillOpt? + | EVENT_WINDOW START WITH searchCondition END WITH searchCondition trueForOpt + | COUNT_WINDOW NK_LP countWindowArgs NK_RP + | ANOMALY_WINDOW NK_LP exprOrSubquery (NK_COMMA NK_STRING)? NK_RP + ; + +slidingOpt + : (SLIDING NK_LP intervalSlidingDurationLiteral NK_RP) + ; + +intervalSlidingDurationLiteral + : NK_VARIABLE + | NK_STRING + | NK_INTEGER + ; + +interpFillOpt + : fillValue + | FILL NK_LP fillPositionModeExtension NK_COMMA expressionList NK_RP + | FILL NK_LP interpFillMode NK_RP + ; + +fillOpt + : (FILL NK_LP fillMode NK_RP) + | fillValue + ; + +fillValue + : FILL NK_LP VALUE NK_COMMA expressionList NK_RP + | FILL NK_LP VALUE_F NK_COMMA expressionList NK_RP + ; + +countWindowArgs + : NK_INTEGER (NK_COMMA NK_INTEGER)? (NK_COMMA columnNameList)? + ; + +fillMode + : NONE + | NULL + | NULL_F + | LINEAR + | fillPositionMode + ; + +fillPositionMode + : PREV + | NEXT + ; + +fillPositionModeExtension + : fillPositionMode + | NEAR + ; + +interpFillMode + : fillMode + | NEAR + ; + +groupByClauseOpt + : (GROUP BY groupByList) + ; + +groupByList + : exprOrSubquery (NK_COMMA exprOrSubquery)* + ; + +havingClauseOpt + : (HAVING searchCondition) + ; + +rangeOpt + : (RANGE NK_LP exprOrSubquery (NK_COMMA exprOrSubquery (NK_COMMA exprOrSubquery)?)? NK_RP) + ; + +everyOpt + : (EVERY NK_LP durationLiteral NK_RP) + ; + +trueForOpt + : (TRUE_FOR NK_LP intervalSlidingDurationLiteral NK_RP)? + ; +/* + * ============================================================================= + * Query Expression (SELECT, UNION etc.) - CORRECTED SECTION + * ============================================================================= + */ + + +queryOrSubquery + : queryExpression + | subquery + ; + +queryExpression + : queryExpressionBody orderByClauseOpt? slimitClauseOpt? limitClauseOpt? + ; + +queryExpressionBody + : queryTerm (UNION ALL? queryTerm)* + ; + +queryTerm + : querySpecification + | subquery + ; + +subquery + : NK_LP queryExpression NK_RP + ; + +orderByClauseOpt + : (ORDER BY sortSpecificationList) + ; + +slimitClauseOpt + : (SLIMIT unsignedInteger (SOFFSET unsignedInteger | NK_COMMA unsignedInteger)?) + ; + +limitClauseOpt + : (LIMIT unsignedInteger (OFFSET unsignedInteger | NK_COMMA unsignedInteger)?) + ; + +sortSpecificationList + : sortSpecification (NK_COMMA sortSpecification)* + ; + +sortSpecification + : exprOrSubquery orderingSpecificationOpt? nullOrderingOpt? + ; + +orderingSpecificationOpt + : (ASC | DESC) + ; + +nullOrderingOpt + : (NULLS (FIRST | LAST)) + ; + +columnOptions + : ((PRIMARY KEY | COMPOSITE KEY) | (NK_ID NK_STRING) | (FROM columnRef))* + ; + +columnRef + : columnNameTriplet + ; + +columnNameTriplet + : NK_ID (NK_DOT NK_ID)* + ; + diff --git a/sql/tdengine/desc.xml b/sql/tdengine/desc.xml new file mode 100644 index 0000000000..04ff22b66c --- /dev/null +++ b/sql/tdengine/desc.xml @@ -0,0 +1,5 @@ + + + ^4.10 + CSharp;Cpp;Dart;Go;Java;JavaScript;PHP;Python3 + diff --git a/sql/tdengine/examples/create.sql b/sql/tdengine/examples/create.sql new file mode 100644 index 0000000000..9d9b98df2a --- /dev/null +++ b/sql/tdengine/examples/create.sql @@ -0,0 +1,20 @@ +CREATE TABLE t1(ts TIMESTAMP, c1 INT); + +CREATE TABLE IF NOT EXISTS test.t1( + ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), + c8 SMALLINT, c9 SMALLINT UNSIGNED, c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, + c13 NCHAR(30), c15 VARCHAR(50)) + TTL 100 COMMENT 'test create table' SMA(c1, c2, c3); + +CREATE TABLE IF NOT EXISTS rollup_db.t1( + ts TIMESTAMP, c1 INT, c2 INT UNSIGNED, c3 BIGINT, c4 BIGINT UNSIGNED, c5 FLOAT, c6 DOUBLE, c7 BINARY(20), + c8 SMALLINT, c9 SMALLINT UNSIGNED, c10 TINYINT, c11 TINYINT UNSIGNED, c12 BOOL, + c13 NCHAR(30), c14 VARCHAR(50)) + TAGS (a1 TIMESTAMP, a2 INT, a3 INT UNSIGNED, a4 BIGINT, a5 BIGINT UNSIGNED, a6 FLOAT, a7 DOUBLE, a8 BINARY(20),a9 SMALLINT, a10 SMALLINT UNSIGNED, a11 TINYINT, a12 TINYINT UNSIGNED, a13 BOOL, a14 NCHAR(30), a15 VARCHAR(50)) + COMMENT 'test create table' SMA(c1, c2, c3) ROLLUP (MIN); + +CREATE TABLE IF NOT EXISTS t1 USING st1 TAGS(1, 'wxy', NOW); + +CREATE TABLE IF NOT EXISTS test.t1 USING test.st1 (tag1, tag2) TAGS(1, 'abc') IF NOT EXISTS test.t2 USING test.st1 (tag1, tag2) TAGS(2, 'abc') IF NOT EXISTS test.t3 USING test.st1 (tag1, tag2) TAGS(3, 'abc'); + +CREATE TABLE IF NOT EXISTS t1 USING st1 TAGS(1, 'wxy', NOW + 1S); \ No newline at end of file diff --git a/sql/tdengine/examples/explain.sql b/sql/tdengine/examples/explain.sql new file mode 100644 index 0000000000..ecee6e7a29 --- /dev/null +++ b/sql/tdengine/examples/explain.sql @@ -0,0 +1,3 @@ +EXPLAIN SELECT * FROM t1; +EXPLAIN ANALYZE SELECT * FROM t1; +EXPLAIN ANALYZE VERBOSE true RATIO 0.01 SELECT * FROM t1 diff --git a/sql/tdengine/examples/insert.sql b/sql/tdengine/examples/insert.sql new file mode 100644 index 0000000000..7facf4bc56 --- /dev/null +++ b/sql/tdengine/examples/insert.sql @@ -0,0 +1,10 @@ +INSERT INTO t1 VALUES (now, 1, 'beijing', 3, 4, 5); +INSERT INTO t1 (ts, c1, c2, c3, c4, c5) VALUES (now, 1, 'beijing', 3, 4, 5); +INSERT INTO t1 VALUES (now, 1, 'beijing', 3, 4, 5)(now+1s, 2, 'shanghai', 6, 7, 8)(now+2s, 3, 'guangzhou', 9, 10, 11); +INSERT INTO st1s1 VALUES (now, 1, 'beijing') st1s2 VALUES (now, 10, '131028'); +INSERT INTO st1s1 VALUES (now, 1, 'beijing')(now+1s, 2, 'shanghai')(now+2s, 3, 'guangzhou') st1s2 VALUES (now, 10, '131028')(now+1s, 20, '132028'); + +INSERT INTO st1s1 USING st1 TAGS(1, 'wxy', now) VALUES (now, 1, 'beijing')(now+1s, 2, 'shanghai')(now+2s, 3, 'guangzhou'); +INSERT INTO st1s1 USING st1 (tag1, tag2) TAGS(1, 'wxy') (ts, c1, c2) VALUES (now, 1, 'beijing')(now+1s, 2, 'shanghai')(now+2s, 3, 'guangzhou'); +INSERT INTO st1s1 (ts, c1, c2) USING st1 (tag1, tag2) TAGS(1, 'wxy') VALUES (now, 1, 'beijing')(now+1s, 2, 'shanghai')(now+2s, 3, 'guangzhou'); +INSERT INTO st1s1 USING st1 (tag1, tag2) TAGS(1, 'wxy') (ts, c1, c2) VALUES (now, 1, 'beijing') st1s2 (ts, c1, c2) USING st1 TAGS(2, 'abc', now) VALUES (now+1s, 2, 'shanghai'); \ No newline at end of file diff --git a/sql/tdengine/examples/select.sql b/sql/tdengine/examples/select.sql new file mode 100644 index 0000000000..75ca49e657 --- /dev/null +++ b/sql/tdengine/examples/select.sql @@ -0,0 +1,6 @@ +SELECT * FROM t1; +SELECT * FROM test.t1; +SELECT ts, c1 FROM t1; +SELECT ts, t.c1 FROM (SELECT * FROM t1) t; +SELECT * FROM t1 tt1, t1 tt2 WHERE tt1.c1 = tt2.c1; +SELECT * FROM st1; \ No newline at end of file diff --git a/sql/tdengine/examples/stream.sql b/sql/tdengine/examples/stream.sql new file mode 100644 index 0000000000..6d828bfc2d --- /dev/null +++ b/sql/tdengine/examples/stream.sql @@ -0,0 +1,27 @@ +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb_2.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1_2 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1_2 interval(1s) sliding(1s) from stream_triggerdb_2.stream_t1 into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1_2 interval(1s) sliding(1s) from stream_triggerdb_2.stream_t1 into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 stream_options(expired_time(1000a)) into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 stream_options(ignore_disorder) into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 stream_options(delete_recalc) into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 stream_options(fill_history('2025-06-11 15:17:14')) into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; +-- window +create stream stream_streamdb.s1 count_window(20, 10, c1, c2) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 period(1s) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t; +create stream stream_streamdb.s1 period(1m, 1s) from stream_triggerdb.stream_t1 into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; + +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tbname into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tbname, tag1, tag2, tag3 into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; + +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 notify('ws://localhost:8080') on (window_close) into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.stream_t1 notify('ws://localhost:8080', 'ws://localhost:8080/notify') on (window_close|window_open) into stream_outdb.stream_out as select _tlocaltime, avg(c1) from stream_querydb.stream_t2; + +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tag1, tag2, tag3 into stream_outdb.stream_out output_subtable(concat('t_', tag2)) as select ts, c1, c2 from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tag1, tag2, tag3 into stream_outdb.stream_out (out_ts, out_c1 primary key, out_c2) as select ts, c1, c2 from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tag1, tag2, tag3 into stream_outdb.stream_out tags(out_tag1 int as cast(tag1 + 1 as int), out_tag2 varchar(20) as upper(tag2), out_tag3 timestamp as tag3) as select ts, c1, c2 from stream_querydb.stream_t2; + +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tbname into stream_outdb.stream_out as select _tprev_ts, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tbname into stream_outdb.stream_out as select _tcurrent_ts, avg(c1) from stream_querydb.stream_t2; +create stream stream_streamdb.s1 interval(1s) sliding(1s) from stream_triggerdb.st1 partition by tbname into stream_outdb.stream_out as select _twstart, avg(c1) from stream_querydb.stream_t2; \ No newline at end of file diff --git a/sql/tdengine/pom.xml b/sql/tdengine/pom.xml new file mode 100644 index 0000000000..193e9efb13 --- /dev/null +++ b/sql/tdengine/pom.xml @@ -0,0 +1,56 @@ + + 4.0.0 + tdengine + jar + TDengine grammar + + org.antlr.grammars + sqlparent + 1.0-SNAPSHOT + + + + + org.antlr + antlr4-maven-plugin + ${antlr.version} + + ${basedir} + + TDengineLexer.g4 + TDengineParser.g4 + + true + true + + + + + antlr4 + + + + + + com.khubla.antlr + antlr4test-maven-plugin + ${antlr4test-maven-plugin.version} + + false + false + sqlCommandList + TDengine + + examples/ + + + + + test + + + + + + +