mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 02:50:46 -06:00
grammar: Add window functions to parser
We don't do anything with the extended parser yet but I'm not even sure the window functions can be used in CREATE TABLE or CREATE INDEX statements anyway.
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,11 @@ public:
|
||||
public: void castexpr();
|
||||
public: void caseexpr();
|
||||
public: void raisefunction();
|
||||
public: void windowfunc();
|
||||
public: void suffixexpr();
|
||||
public: void windowdefn();
|
||||
public: void orderingterm();
|
||||
public: void framespec();
|
||||
public: void like_operator();
|
||||
public: void between_subexpr();
|
||||
public:
|
||||
@@ -80,10 +84,10 @@ protected:
|
||||
private:
|
||||
static const char* tokenNames[];
|
||||
#ifndef NO_STATIC_CONSTS
|
||||
static const int NUM_TOKENS = 113;
|
||||
static const int NUM_TOKENS = 125;
|
||||
#else
|
||||
enum {
|
||||
NUM_TOKENS = 113
|
||||
NUM_TOKENS = 125
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -137,6 +141,14 @@ private:
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_23;
|
||||
static const unsigned long _tokenSet_24_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_24;
|
||||
static const unsigned long _tokenSet_25_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_25;
|
||||
static const unsigned long _tokenSet_26_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_26;
|
||||
static const unsigned long _tokenSet_27_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_27;
|
||||
static const unsigned long _tokenSet_28_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_28;
|
||||
};
|
||||
|
||||
#endif /*INC_Sqlite3Parser_hpp_*/
|
||||
|
||||
@@ -41,6 +41,8 @@ tokens {
|
||||
END="END";
|
||||
ESCAPE="ESCAPE";
|
||||
FAIL="FAIL";
|
||||
FILTER="FILTER";
|
||||
FOLLOWING="FOLLOWING";
|
||||
FOREIGN="FOREIGN";
|
||||
GLOB="GLOB";
|
||||
KEY="KEY";
|
||||
@@ -60,18 +62,24 @@ tokens {
|
||||
MATCH="MATCH";
|
||||
EXISTS="EXISTS";
|
||||
ON="ON";
|
||||
OVER="OVER";
|
||||
PARTITION="PARTITION";
|
||||
PRECEDING="PRECEDING";
|
||||
PRIMARY="PRIMARY";
|
||||
RAISE="RAISE";
|
||||
RANGE="RANGE";
|
||||
REFERENCES="REFERENCES";
|
||||
REGEXP="REGEXP";
|
||||
REPLACE="REPLACE";
|
||||
RESTRICT="RESTRICT";
|
||||
ROLLBACK="ROLLBACK";
|
||||
ROWID="ROWID";
|
||||
ROWS="ROWS";
|
||||
SET="SET";
|
||||
TEMPORARY="TEMPORARY";
|
||||
TEMP="TEMP";
|
||||
THEN="THEN";
|
||||
UNBOUNDED="UNBOUNDED";
|
||||
UNIQUE="UNIQUE";
|
||||
UPDATE="UPDATE";
|
||||
USING="USING";
|
||||
@@ -446,6 +454,7 @@ subexpr
|
||||
| EXISTS LPAREN (expr | selectstmt) RPAREN
|
||||
| caseexpr
|
||||
| raisefunction
|
||||
| windowfunc
|
||||
)
|
||||
(suffixexpr)?
|
||||
;
|
||||
@@ -460,6 +469,54 @@ caseexpr
|
||||
CASE_T (expr)? (WHEN expr THEN expr)+ (ELSE_T expr)? END
|
||||
;
|
||||
|
||||
windowfunc
|
||||
:
|
||||
functionname LPAREN (STAR | (expr (COMMA expr)*))? RPAREN (FILTER LPAREN WHERE expr RPAREN)? OVER
|
||||
(
|
||||
(LPAREN windowdefn RPAREN)
|
||||
| id
|
||||
)
|
||||
;
|
||||
|
||||
windowdefn
|
||||
:
|
||||
(PARTITION BY expr (COMMA expr)*)?
|
||||
(ORDER BY orderingterm (COMMA orderingterm)*)?
|
||||
(framespec)?
|
||||
;
|
||||
|
||||
orderingterm
|
||||
:
|
||||
expr (COLLATE collationname)? (ASC | DESC)?
|
||||
;
|
||||
|
||||
framespec
|
||||
:
|
||||
(RANGE | ROWS)
|
||||
(BETWEEN
|
||||
(
|
||||
(UNBOUNDED PRECEDING)
|
||||
| (expr PRECEDING)
|
||||
| (CURRENT ROW)
|
||||
| (expr FOLLOWING)
|
||||
)
|
||||
AND
|
||||
(
|
||||
(expr PRECEDING)
|
||||
| (CURRENT ROW)
|
||||
| (expr FOLLOWING)
|
||||
| (UNBOUNDED FOLLOWING)
|
||||
)
|
||||
)
|
||||
|
|
||||
(
|
||||
(UNBOUNDED PRECEDING)
|
||||
| (expr PRECEDING)
|
||||
| (CURRENT ROW)
|
||||
| (expr FOLLOWING)
|
||||
)
|
||||
;
|
||||
|
||||
like_operator
|
||||
:
|
||||
LIKE
|
||||
|
||||
@@ -40,87 +40,99 @@ struct CUSTOM_API sqlite3TokenTypes {
|
||||
END = 29,
|
||||
ESCAPE = 30,
|
||||
FAIL = 31,
|
||||
FOREIGN = 32,
|
||||
GLOB = 33,
|
||||
KEY = 34,
|
||||
LIKE = 35,
|
||||
TABLE = 36,
|
||||
IF_T = 37,
|
||||
IGNORE = 38,
|
||||
IN = 39,
|
||||
INDEX = 40,
|
||||
INITIALLY = 41,
|
||||
INSERT = 42,
|
||||
IMMEDIATE = 43,
|
||||
IS = 44,
|
||||
NO = 45,
|
||||
NOT = 46,
|
||||
NULL_T = 47,
|
||||
MATCH = 48,
|
||||
EXISTS = 49,
|
||||
ON = 50,
|
||||
PRIMARY = 51,
|
||||
RAISE = 52,
|
||||
REFERENCES = 53,
|
||||
REGEXP = 54,
|
||||
REPLACE = 55,
|
||||
RESTRICT = 56,
|
||||
ROLLBACK = 57,
|
||||
ROWID = 58,
|
||||
SET = 59,
|
||||
TEMPORARY = 60,
|
||||
TEMP = 61,
|
||||
THEN = 62,
|
||||
UNIQUE = 63,
|
||||
UPDATE = 64,
|
||||
USING = 65,
|
||||
VIRTUAL = 66,
|
||||
WHEN = 67,
|
||||
WHERE = 68,
|
||||
WITHOUT = 69,
|
||||
TYPE_NAME = 70,
|
||||
COLUMNDEF = 71,
|
||||
COLUMNCONSTRAINT = 72,
|
||||
TABLECONSTRAINT = 73,
|
||||
CREATETABLE = 74,
|
||||
CREATEINDEX = 75,
|
||||
INDEXEDCOLUMN = 76,
|
||||
KEYWORDASTABLENAME = 77,
|
||||
KEYWORDASCOLUMNNAME = 78,
|
||||
DIGIT = 79,
|
||||
DOT = 80,
|
||||
ID = 81,
|
||||
QUOTEDID = 82,
|
||||
QUOTEDLITERAL = 83,
|
||||
NUMERIC = 84,
|
||||
NL = 85,
|
||||
COMMENT = 86,
|
||||
WS = 87,
|
||||
STRINGLITERAL = 88,
|
||||
LPAREN = 89,
|
||||
RPAREN = 90,
|
||||
COMMA = 91,
|
||||
SEMI = 92,
|
||||
PLUS = 93,
|
||||
MINUS = 94,
|
||||
STAR = 95,
|
||||
TILDE = 96,
|
||||
AMPERSAND = 97,
|
||||
BITOR = 98,
|
||||
OROP = 99,
|
||||
EQUAL = 100,
|
||||
EQUAL2 = 101,
|
||||
GREATER = 102,
|
||||
GREATEREQUAL = 103,
|
||||
LOWER = 104,
|
||||
LOWEREQUAL = 105,
|
||||
UNEQUAL = 106,
|
||||
UNEQUAL2 = 107,
|
||||
BITWISELEFT = 108,
|
||||
BITWISERIGHT = 109,
|
||||
SELECT = 110,
|
||||
SLASH = 111,
|
||||
PERCENT = 112,
|
||||
FILTER = 32,
|
||||
FOLLOWING = 33,
|
||||
FOREIGN = 34,
|
||||
GLOB = 35,
|
||||
KEY = 36,
|
||||
LIKE = 37,
|
||||
TABLE = 38,
|
||||
IF_T = 39,
|
||||
IGNORE = 40,
|
||||
IN = 41,
|
||||
INDEX = 42,
|
||||
INITIALLY = 43,
|
||||
INSERT = 44,
|
||||
IMMEDIATE = 45,
|
||||
IS = 46,
|
||||
NO = 47,
|
||||
NOT = 48,
|
||||
NULL_T = 49,
|
||||
MATCH = 50,
|
||||
EXISTS = 51,
|
||||
ON = 52,
|
||||
OVER = 53,
|
||||
PARTITION = 54,
|
||||
PRECEDING = 55,
|
||||
PRIMARY = 56,
|
||||
RAISE = 57,
|
||||
RANGE = 58,
|
||||
REFERENCES = 59,
|
||||
REGEXP = 60,
|
||||
REPLACE = 61,
|
||||
RESTRICT = 62,
|
||||
ROLLBACK = 63,
|
||||
ROWID = 64,
|
||||
ROWS = 65,
|
||||
SET = 66,
|
||||
TEMPORARY = 67,
|
||||
TEMP = 68,
|
||||
THEN = 69,
|
||||
UNBOUNDED = 70,
|
||||
UNIQUE = 71,
|
||||
UPDATE = 72,
|
||||
USING = 73,
|
||||
VIRTUAL = 74,
|
||||
WHEN = 75,
|
||||
WHERE = 76,
|
||||
WITHOUT = 77,
|
||||
TYPE_NAME = 78,
|
||||
COLUMNDEF = 79,
|
||||
COLUMNCONSTRAINT = 80,
|
||||
TABLECONSTRAINT = 81,
|
||||
CREATETABLE = 82,
|
||||
CREATEINDEX = 83,
|
||||
INDEXEDCOLUMN = 84,
|
||||
KEYWORDASTABLENAME = 85,
|
||||
KEYWORDASCOLUMNNAME = 86,
|
||||
DIGIT = 87,
|
||||
DOT = 88,
|
||||
ID = 89,
|
||||
QUOTEDID = 90,
|
||||
QUOTEDLITERAL = 91,
|
||||
NUMERIC = 92,
|
||||
NL = 93,
|
||||
COMMENT = 94,
|
||||
WS = 95,
|
||||
STRINGLITERAL = 96,
|
||||
LPAREN = 97,
|
||||
RPAREN = 98,
|
||||
COMMA = 99,
|
||||
SEMI = 100,
|
||||
PLUS = 101,
|
||||
MINUS = 102,
|
||||
STAR = 103,
|
||||
TILDE = 104,
|
||||
AMPERSAND = 105,
|
||||
BITOR = 106,
|
||||
OROP = 107,
|
||||
EQUAL = 108,
|
||||
EQUAL2 = 109,
|
||||
GREATER = 110,
|
||||
GREATEREQUAL = 111,
|
||||
LOWER = 112,
|
||||
LOWEREQUAL = 113,
|
||||
UNEQUAL = 114,
|
||||
UNEQUAL2 = 115,
|
||||
BITWISELEFT = 116,
|
||||
BITWISERIGHT = 117,
|
||||
SELECT = 118,
|
||||
BY = 119,
|
||||
ORDER = 120,
|
||||
CURRENT = 121,
|
||||
ROW = 122,
|
||||
SLASH = 123,
|
||||
PERCENT = 124,
|
||||
NULL_TREE_LOOKAHEAD = 3
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user