From 2ad6ab06ff38f14ba366b93683bbd1623da434f4 Mon Sep 17 00:00:00 2001 From: "a.sabirov" <a.sabirov@picodata.io> Date: Thu, 25 Jul 2024 18:48:46 +0300 Subject: [PATCH] query.ebnf(expression): sync with query.pest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected diagrams: — expression — literal — call — type Extracted diagrams: — case — to_char — to_date — trim --- doc/sql/query.ebnf | 73 ++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/doc/sql/query.ebnf b/doc/sql/query.ebnf index cb8705e6ea..58bccfd9e8 100644 --- a/doc/sql/query.ebnf +++ b/doc/sql/query.ebnf @@ -19,47 +19,61 @@ select ::= 'SELECT' 'DISTINCT'? projection (',' projection)* 'FROM' scan (('UNION' 'ALL'? | 'EXCEPT' 'DISTINCT'?) select)? projection ::= (table '.')? '*' | expression (('AS')? name)? | aggregate scan ::= (table | '(' (query | values) ')') ('AS'? name)? -expression ::= (table '.')? column - | expression ('IS' ('NOT')? 'NULL') - | expression ('OR' | 'AND' | '*' | '/' | '+' | '-' | '=' | '>' | '<' | '>=' | '<=' | ('<>' | '!=')) expression - | expression ('NOT')? 'BETWEEN' expression 'AND' expression - | ('NOT')? 'EXISTS' '(' (query | values) ')' - | expression ('NOT')? 'IN' '(' (query | values) ')' - | (table '.')? column - | '(' (query | values) ')' - | literal - | cast - | ('(' (expression(',' expression)*) ')') - | 'NOT' expression - | '(' expression ')' - | 'CURRENT_DATE' - | 'TO_DATE' '(' expression',' format ')' - | 'TO_CHAR' '(' expression',' format ')' - | 'TRIM' '(' ((('LEADING' | 'TRAILING' | 'BOTH')? expression) | ('LEADING' | 'TRAILING' | 'BOTH')) 'FROM' expression ')' - | 'CASE' expression? ('WHEN' expression 'THEN' expression)+ ('ELSE' expression)? 'END' +expression ::= ('NOT'* ( + (table '.')? column + | literal + | case + | cast + | current_date + | to_char + | to_date + | trim + | '(' expression ')' + | 'NOT'? 'EXISTS' '(' (query | values) ')' + | '(' (query | values) ')' + | '(' expression (',' expression)* ')' + ) ('IS' 'NOT'? 'NULL')?) + | expression + ( + 'NOT'? 'BETWEEN' expression 'AND' + | ('+' | '-' | '*' | '/') + | ('<>' | '!=' | '>=' | '>' | '<=' | '<' | '=' | 'NOT'? 'IN') + | '||' + | 'AND' + | 'OR' + ) + expression aggregate ::= ('AVG' | 'COUNT' | 'MAX' | 'MIN' | 'SUM' | 'TOTAL') '(' ( 'DISTINCT'? expression ) ')' | 'GROUP_CONCAT' '(' expression ',' "'" string "'" ')' +case ::= 'CASE' expression? + ('WHEN' expression 'THEN' expression)+ + ('ELSE' expression)? 'END' cast ::= 'CAST' '(' expression 'AS' type ')' +to_char ::= 'TO_CHAR' '(' expression ',' format ')' +to_date ::= 'TO_DATE' '(' expression ',' format ')' +trim ::= 'TRIM' '(' + ((('LEADING' | 'TRAILING' | 'BOTH')? removal_chars + | ('LEADING' | 'TRAILING' | 'BOTH')) 'FROM')? string ')' values ::= 'VALUES' ('(' (expression(',' expression)*) ')') (',' ('(' (expression(',' expression)*) ')'))* literal ::= 'TRUE' | 'FALSE' | 'NULL' - | '?' - | ('$' unsigned) - | integer - | unsigned - | double | decimal + | double + | integer | string + | unsigned + | ('$' unsigned) + | '?' dml ::= (call | delete | insert | update) ( 'OPTION' '(' (('VTABLE_MAX_ROWS' | 'SQL_VDBE_MAX_STEPS') '=' unsigned) (',' (('VTABLE_MAX_ROWS' | 'SQL_VDBE_MAX_STEPS') '=' unsigned))* ')')? -call ::= 'CALL' procedure '(' literal? (',' literal)* ')' +call ::= 'CALL' procedure '(' (literal (',' literal)*)? ')' delete ::= 'DELETE' 'FROM' table ('WHERE' expression)? insert ::= 'INSERT' 'INTO' table ('(' column (',' column)* ')')? (query | values) ('ON' 'CONFLICT' 'DO' ('NOTHING' | 'REPLACE' | 'FAIL'))? @@ -154,14 +168,17 @@ drop_procedure ::= 'DROP' 'PROCEDURE' procedure ('(' type (',' type)* ')')? drop_table ::= 'DROP' 'TABLE' table drop_role ::= 'DROP' 'ROLE' role drop_user ::= 'DROP' 'USER' user -type ::= ('BOOL' | 'BOOLEAN') +type ::= 'BOOL' + | 'BOOLEAN' | 'DATETIME' | 'DECIMAL' | 'DOUBLE' - | ('INT' | 'INTEGER') + | 'INT' + | 'INTEGER' | 'NUMBER' | 'SCALAR' - | ('STRING' | 'TEXT') + | 'STRING' + | 'TEXT' | 'UNSIGNED' | 'UUID' - | 'VARCHAR' ('(' length ')')? + | 'VARCHAR' '(' length ')' -- GitLab