此内容没有您所选择的语言版本。
A.7. Productions
string ::=
Expand < string literal >
'a string'
'a string'
'it''s a string'
'it''s a string'
reserved identifier ::=
Expand INSTEADExpand VIEWExpand ENABLEDExpand DISABLEDExpand KEYExpand SERIALExpand TEXTAGGExpand COUNTExpand ROW_NUMBERExpand RANKExpand DENSE_RANKExpand SUMExpand AVGExpand MINExpand MAXExpand EVERYExpand STDDEV_POPExpand STDDEV_SAMPExpand VAR_SAMPExpand VAR_POPExpand DOCUMENTExpand CONTENTExpand TRIMExpand EMPTYExpand ORDINALITYExpand PATHExpand FIRSTExpand LASTExpand NEXTExpand SUBSTRINGExpand EXTRACTExpand TO_CHARSExpand TO_BYTESExpand TIMESTAMPADDExpand TIMESTAMPDIFFExpand QUERYSTRINGExpand NAMESPACEExpand RESULTExpand INDEXExpand ACCESSPATTERNExpand AUTO_INCREMENTExpand WELLFORMEDExpand SQL_TSI_FRAC_SECONDExpand SQL_TSI_SECONDExpand SQL_TSI_MINUTEExpand SQL_TSI_HOURExpand SQL_TSI_DAYExpand SQL_TSI_WEEKExpand SQL_TSI_MONTHExpand SQL_TSI_QUARTERExpand SQL_TSI_YEARExpand TEXTTABLEExpand ARRAYTABLEExpand SELECTORExpand SKIPExpand WIDTHExpand PASSINGExpand NAMEExpand ENCODINGExpand COLUMNSExpand DELIMITERExpand QUOTEExpand HEADERExpand NULLSExpand OBJECTTABLEExpand VERSIONExpand INCLUDINGExpand EXCLUDINGExpand XMLDECLARATIONExpand VARIADICExpand RAISEExpand EXCEPTIONExpand CHAINExpand JSONARRAY_AGGExpand JSONOBJECT
identifier ::=
Expand < identifier >Expand < non-reserved identifier >
tbl.col
tbl.col
"tbl"."col"
"tbl"."col"
create trigger ::=
Expand CREATE TRIGGER ON < identifier > INSTEAD OF ( INSERT | UPDATE | DELETE ) AS < for each row trigger action >
CREATE TRIGGER ON vw INSTEAD OF INSERT AS FOR EACH ROW BEGIN ATOMIC ... END
CREATE TRIGGER ON vw INSTEAD OF INSERT AS FOR EACH ROW BEGIN ATOMIC ... END
alter ::=
Expand ALTER ( ( VIEW < identifier > AS < query expression > ) | ( PROCEDURE < identifier > AS < statement > ) | ( TRIGGER ON < identifier > INSTEAD OF ( INSERT | UPDATE | DELETE ) ( ( AS < for each row trigger action > ) | ENABLED | DISABLED ) ) )
ALTER VIEW vw AS SELECT col FROM tbl
ALTER VIEW vw AS SELECT col FROM tbl
for each row trigger action ::=
Expand FOR EACH ROW ( ( BEGIN ( ATOMIC )? ( < statement > )* END ) | < statement > )
FOR EACH ROW BEGIN ATOMIC ... END
FOR EACH ROW BEGIN ATOMIC ... END
directly executable statement ::=
Expand < query expression >Expand < call statement >Expand < insert statement >Expand < update statement >Expand < delete statement >Expand < drop table >Expand < create temporary table >Expand < create foreign temp table >Expand < alter >Expand < create trigger >
SELECT * FROM tbl
SELECT * FROM tbl
drop table ::=
Expand DROP TABLE < identifier >
CREATE TRIGGER ON vw INSTEAD OF INSERT AS FOR EACH ROW BEGIN ATOMIC ... END
CREATE TRIGGER ON vw INSTEAD OF INSERT AS FOR EACH ROW BEGIN ATOMIC ... END
create temporary table ::=
Expand CREATE LOCAL TEMPORARY TABLE < identifier > < lparen > < temporary table element > ( < comma > < temporary table element > )* ( < comma > PRIMARY KEY < column list > )? < rparen >
CREATE LOCAL TEMPORARY TABLE tmp (col integer)
CREATE LOCAL TEMPORARY TABLE tmp (col integer)
temporary table element ::=
Expand < identifier > ( < data type > | SERIAL ) ( NOT NULL )?
col string NOT NULL
col string NOT NULL
raise error statement ::=
Expand ERROR < expression >
ERROR 'something went wrong'
ERROR 'something went wrong'
raise statement ::=
Expand RAISE ( SQLWARNING )? < exception reference >
RAISE SQLEXCEPTION 'something went wrong'
RAISE SQLEXCEPTION 'something went wrong'
exception reference ::=
Expand < identifier >Expand < sql exception >
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
sql exception ::=
Expand SQLEXCEPTION < common value expression > ( SQLSTATE < common value expression > ( < comma > < common value expression > )? )? ( CHAIN < exception reference > )?
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
statement ::=
Expand ( ( < identifier > < colon > )? ( < loop statement > | < while statement > | < compound statement > ) )Expand < if statement > | < delimited statement >
IF (x = 5) BEGIN ... END
IF (x = 5) BEGIN ... END
delimited statement ::=
Expand ( < assignment statement > | < data statement > | < raise error statement > | < raise statement > | < declare statement > | < branching statement > | < return statement > ) < semicolon >
SELECT * FROM tbl;
SELECT * FROM tbl;
compound statement ::=
Expand BEGIN ( ( NOT )? ATOMIC )? ( < statement > )* ( EXCEPTION < identifier > ( < statement > )* )? END
BEGIN NOT ATOMIC ... END
BEGIN NOT ATOMIC ... END
branching statement ::=
Expand ( ( BREAK | CONTINUE ) ( < identifier > )? )Expand ( LEAVE < identifier > )
BREAK x
BREAK x
return statement ::=
Expand RETURN ( < expression > )?
RETURN 1
RETURN 1
while statement ::=
Expand WHILE < lparen > < condition > < rparen > < statement >
WHILE (var) BEGIN ... END
WHILE (var) BEGIN ... END
loop statement ::=
Expand LOOP ON < lparen > < query expression > < rparen > AS < identifier > < statement >
IF (boolVal) BEGIN variables.x = 1 END ELSE BEGIN variables.x = 2 END
IF (boolVal) BEGIN variables.x = 1 END ELSE BEGIN variables.x = 2 END
if statement ::=
Expand IF < lparen > < condition > < rparen > < statement > ( ELSE < statement > )?
LOOP ON (SELECT * FROM tbl) AS x BEGIN ... END
LOOP ON (SELECT * FROM tbl) AS x BEGIN ... END
declare statement ::=
Expand DECLARE ( < data type > | EXCEPTION ) < identifier > ( < eq > < assignment statement operand > )?
DECLARE STRING x = 'a'
DECLARE STRING x = 'a'
assignment statement ::=
Expand < identifier > < eq > ( < assignment statement operand > | ( < call statement > ( ( WITH | WITHOUT ) RETURN )? ) )
x = 'b'
x = 'b'
assignment statement operand ::=
Expand < insert statement >Expand < update statement >Expand < delete statement >Expand < expression >Expand < query expression >Expand < sql exception >
Note
data statement ::=
Expand ( < directly executable statement > | < dynamic data statement > ) ( ( WITH | WITHOUT ) RETURN )?
procedure body definition ::=
Expand ( CREATE ( VIRTUAL )? PROCEDURE )? < statement >
CREATE VIRTUAL PROCEDURE BEGIN ... END
CREATE VIRTUAL PROCEDURE BEGIN ... END
dynamic data statement ::=
Expand ( EXECUTE | EXEC ) ( STRING | IMMEDIATE )? < expression > ( AS < typed element list > ( INTO < identifier > )? )? ( USING < set clause list > )? ( UPDATE ( < unsigned integer > | < star > ) )?
EXECUTE IMMEDIATE 'SELECT * FROM tbl' AS x STRING INTO #temp
EXECUTE IMMEDIATE 'SELECT * FROM tbl' AS x STRING INTO #temp
set clause list ::=
Expand < identifier > < eq > < expression > ( < comma > < identifier > < eq > < expression > )*
col1 = 'x', col2 = 'y' ...
col1 = 'x', col2 = 'y' ...
typed element list ::=
Expand < identifier > < data type > ( < comma > < identifier > < data type > )*
col1 string, col2 integer ...
col1 string, col2 integer ...
callable statement ::=
Expand < lbrace > ( < qmark > < eq > )? CALL < identifier > ( < lparen > ( < expression list > )? < rparen > )? < rbrace > ( < option clause > )?
{? = CALL proc}
{? = CALL proc}
call statement ::=
Expand ( ( EXEC | EXECUTE | CALL ) < identifier > < lparen > ( < named parameter list > | ( < expression list > )? ) < rparen > ) ( < option clause > )?
CALL proc('a', 1)
CALL proc('a', 1)
named parameter list ::=
Expand ( < identifier > < eq > ( < gt > )? < expression > ( < comma > < identifier > < eq > ( < gt > )? < expression > )* )
param1 => 'x', param2 => 1
param1 => 'x', param2 => 1
insert statement ::=
Expand ( INSERT | MERGE ) INTO < identifier > ( < column list > )? ( ( VALUES < lparen > < expression list > < rparen > ) | < query expression > ) ( < option clause > )?
INSERT INTO tbl (col1, col2) VALUES ('a', 1)
INSERT INTO tbl (col1, col2) VALUES ('a', 1)
expression list ::=
Expand < expression > ( < comma > < expression > )*
col1, 'a', ...
col1, 'a', ...
update statement ::=
Expand UPDATE < identifier > SET < set clause list > ( < where clause > )? ( < option clause > )?
UPDATE tbl SET (col1 = 'a') WHERE col2 = 1
UPDATE tbl SET (col1 = 'a') WHERE col2 = 1
delete statement ::=
Expand DELETE FROM < identifier > ( < where clause > )? ( < option clause > )?
DELETE FROM tbl WHERE col2 = 1
DELETE FROM tbl WHERE col2 = 1
query expression ::=
Expand ( WITH < with list element > ( < comma > < with list element > )* )? < query expression body >
SELECT * FROM tbl WHERE col2 = 1
SELECT * FROM tbl WHERE col2 = 1
with list element ::=
Expand < identifier > ( < column list > )? AS < lparen > < query expression > < rparen >
X (Y, Z) AS (SELECT 1, 2)
X (Y, Z) AS (SELECT 1, 2)
query expression body ::=
Expand < query term > ( ( UNION | EXCEPT ) ( ALL | DISTINCT )? < query term > )* ( < order by clause > )? ( < limit clause > )? ( < option clause > )?
SELECT * FROM tbl ORDER BY col1 LIMIT 1
SELECT * FROM tbl ORDER BY col1 LIMIT 1
query term ::=
Expand < query primary > ( INTERSECT ( ALL | DISTINCT )? < query primary > )*
SELECT * FROM tbl
SELECT * FROM tbl
SELECT * FROM tbl1 INTERSECT SELECT * FROM tbl2
SELECT * FROM tbl1 INTERSECT SELECT * FROM tbl2
query primary ::=
Expand < query >Expand ( TABLE < identifier > )Expand ( < lparen > < query expression body > < rparen > )
TABLE tbl
TABLE tbl
SELECT * FROM tbl1
SELECT * FROM tbl1
query ::=
Expand < select clause > ( < into clause > )? ( < from clause > ( < where clause > )? ( < group by clause > )? ( < having clause > )? )?
SELECT col1, max(col2) FROM tbl GROUP BY col1
SELECT col1, max(col2) FROM tbl GROUP BY col1
into clause ::=
Expand INTO < identifier >
Note
INTO tbl
INTO tbl
select clause ::=
Expand SELECT ( ALL | DISTINCT )? ( < star > | ( < select sublist > ( < comma > < select sublist > )* ) )
SELECT *
SELECT *
SELECT DISTINCT a, b, c
SELECT DISTINCT a, b, c
select sublist ::=
Expand < select derived column >Expand < all in group >
tbl.*
tbl.*
tbl.col AS x
tbl.col AS x
select derived column ::=
Expand ( < expression > ( ( AS )? < identifier > )? )
Note
tbl.col AS x
tbl.col AS x
derived column ::=
Expand ( < expression > ( AS < identifier > )? )
tbl.col AS x
tbl.col AS x
all in group ::=
Expand < all in group identifier >
tbl.*
tbl.*
ordered aggreate function ::=
Expand ( XMLAGG | ARRAY_AGG | JSONARRAY_AGG ) < lparen > < expression > ( < order by clause > )? < rparen >
XMLAGG(col1) ORDER BY col2
XMLAGG(col1) ORDER BY col2
ARRAY_AGG(col1)
ARRAY_AGG(col1)
text aggreate function ::=
Expand TEXTAGG < lparen > ( FOR )? < derived column > ( < comma > < derived column > )* ( DELIMITER < character > )? ( QUOTE < character > )? ( HEADER )? ( ENCODING < identifier > )? ( < order by clause > )? < rparen >
TEXTAGG (col1 as t1, col2 as t2 DELIMITER ',' HEADER)
TEXTAGG (col1 as t1, col2 as t2 DELIMITER ',' HEADER)
standard aggregate function ::=
Expand ( COUNT < lparen > < star > < rparen > )Expand ( ( COUNT | SUM | AVG | MIN | MAX | EVERY | STDDEV_POP | STDDEV_SAMP | VAR_SAMP | VAR_POP | SOME | ANY ) < lparen > ( DISTINCT | ALL )? < expression > < rparen > )
COUNT(*)
COUNT(*)
analytic aggregate function ::=
Expand ( ROW_NUMBER | RANK | DENSE_RANK ) < lparen > < rparen >
ROW_NUMBER()
ROW_NUMBER()
filter clause ::=
Expand FILTER < lparen > WHERE < boolean primary > < rparen >
FILTER (WHERE col1='a')
FILTER (WHERE col1='a')
from clause ::=
Expand FROM ( < table reference > ( < comma > < table reference > )* )
FROM a, b
FROM a, b
FROM a right outer join b, c, d join e".</p>
FROM a right outer join b, c, d join e".</p>
table reference ::=
Expand ( < escaped join > < joined table > < rbrace > )Expand < joined table >
a
a
a inner join b
a inner join b
joined table ::=
Expand < table primary > ( < cross join > | < qualified table > )*
a
a
a inner join b
a inner join b
cross join ::=
Expand ( ( CROSS | UNION ) JOIN < table primary > )
a CROSS JOIN b
a CROSS JOIN b
qualified table ::=
Expand ( ( ( RIGHT ( OUTER )? ) | ( LEFT ( OUTER )? ) | ( FULL ( OUTER )? ) | INNER )? JOIN < table reference > ON < condition > )
a inner join b
a inner join b
table primary ::=
Expand ( < text table > | < array table > | < xml table > | < object table > | < table name > | < table subquery > | ( < lparen > < joined table > < rparen > ) ) ( MAKEDEP | MAKENOTDEP )?
a
a
xml serialize ::=
Expand XMLSERIALIZE < lparen > ( DOCUMENT | CONTENT )? < expression > ( AS ( STRING | VARCHAR | CLOB | VARBINARY | BLOB ) )? ( ENCODING < identifier > )? ( VERSION < string > )? ( ( INCLUDING | EXCLUDING ) XMLDECLARATION )? < rparen >
XMLSERIALIZE(col1 AS CLOB)
XMLSERIALIZE(col1 AS CLOB)
array table ::=
Expand ARRAYTABLE < lparen > < value expression primary > COLUMNS < typed element list > < rparen > ( AS )? < identifier >
ARRAYTABLE (col1 COLUMNS x STRING) AS y
ARRAYTABLE (col1 COLUMNS x STRING) AS y
text table ::=
Expand TEXTTABLE < lparen > < common value expression > ( SELECTOR < string > )? COLUMNS < text table column > ( < comma > < text table column > )* ( NO ROW DELIMITER )? ( DELIMITER < character > )? ( ( ESCAPE < character > ) | ( QUOTE < character > ) )? ( HEADER ( < unsigned integer > )? )? ( SKIP < unsigned integer > )? < rparen > ( AS )? < identifier >
TEXTTABLE (file COLUMNS x STRING) AS y
TEXTTABLE (file COLUMNS x STRING) AS y
text table column ::=
Expand < identifier > < data type > ( WIDTH < unsigned integer > ( NO TRIM )? )? ( SELECTOR < string > < unsigned integer > )?
x INTEGER WIDTH 6
x INTEGER WIDTH 6
xml query ::=
Expand XMLQUERY < lparen > ( < xml namespaces > < comma > )? < string > ( PASSING < derived column > ( < comma > < derived column > )* )? ( ( NULL | EMPTY ) ON EMPTY )? < rparen >
XMLQUERY('<a>...</a>' PASSING doc)
XMLQUERY('<a>...</a>' PASSING doc)
object table ::=
Expand OBJECTTABLE < lparen > ( LANGUAGE < string > )? < string > ( PASSING < derived column > ( < comma > < derived column > )* )? COLUMNS < object table column > ( < comma > < object table column > )* < rparen > ( AS )? < identifier >
OBJECTTABLE('z' PASSING val AS z COLUMNS col OBJECT 'teiid_row') AS X
OBJECTTABLE('z' PASSING val AS z COLUMNS col OBJECT 'teiid_row') AS X
object table column ::=
Expand < identifier > < data type > < string > ( DEFAULT < expression > )?
y integer 'teiid_row_number'
y integer 'teiid_row_number'
xml table ::=
Expand XMLTABLE < lparen > ( < xml namespaces > < comma > )? < string > ( PASSING < derived column > ( < comma > < derived column > )* )? ( COLUMNS < xml table column > ( < comma > < xml table column > )* )? < rparen > ( AS )? < identifier >
XMLTABLE('/a/b' PASSING doc COLUMNS col XML PATH '.') AS X
XMLTABLE('/a/b' PASSING doc COLUMNS col XML PATH '.') AS X
xml table column ::=
Expand < identifier > ( ( FOR ORDINALITY ) | ( < data type > ( DEFAULT < expression > )? ( PATH < string > )? ) )
y FOR ORDINALITY
y FOR ORDINALITY
unsigned integer ::=
Expand < unsigned integer literal >
12345
12345
table subquery ::=
Expand ( TABLE | LATERAL )? < lparen > ( < query expression > | < call statement > ) < rparen > ( AS )? < identifier >
(SELECT * FROM tbl) AS x
(SELECT * FROM tbl) AS x
table name ::=
Expand ( < identifier > ( ( AS )? < identifier > )? )
tbl AS x
tbl AS x
where clause ::=
Expand WHERE < condition >
WHERE x = 'a'
WHERE x = 'a'
condition ::=
Expand < boolean value expression >
boolean value expression ::=
Expand < boolean term > ( OR < boolean term > )*
boolean term ::=
Expand < boolean factor > ( AND < boolean factor > )*
boolean factor ::=
Expand ( NOT )? < boolean primary >
NOT x = 'a'
NOT x = 'a'
boolean primary ::=
Expand ( < common value expression > ( < between predicate > | < match predicate > | < like regex predicate > | < in predicate > | < is null predicate > | < quantified comparison predicate > | < comparison predicate > )? )Expand < exists predicate >
col LIKE 'a%'
col LIKE 'a%'
comparison operator ::=
Expand < eq >Expand < ne >Expand < ne2 >Expand < lt >Expand < le >Expand < gt >Expand < ge >
=
=
comparison predicate ::=
Expand < comparison operator > < common value expression >
= 'a'
= 'a'
subquery ::=
Expand < lparen > ( < query expression > | < call statement > ) < rparen >
(SELECT * FROM tbl)
(SELECT * FROM tbl)
quantified comparison predicate ::=
Expand < comparison operator > ( ANY | SOME | ALL ) < subquery >
= ANY (SELECT col FROM tbl)
= ANY (SELECT col FROM tbl)
match predicate ::=
Expand ( NOT )? ( LIKE | ( SIMILAR TO ) ) < common value expression > ( ESCAPE < character > | ( < lbrace > ESCAPE < character > < rbrace > ) )?
LIKE 'a_'
LIKE 'a_'
like regex predicate ::=
Expand ( NOT )? LIKE_REGEX < common value expression >
LIKE_REGEX 'a.*b'
LIKE_REGEX 'a.*b'
character ::=
Expand < string >
'a'
'a'
between predicate ::=
Expand ( NOT )? BETWEEN < common value expression > AND < common value expression >
BETWEEN 1 AND 5
BETWEEN 1 AND 5
is null predicate ::=
Expand IS ( NOT )? NULL
IS NOT NULL
IS NOT NULL
in predicate ::=
Expand ( NOT )? IN ( < subquery > | ( < lparen > < common value expression > ( < comma > < common value expression > )* < rparen > ) )
IN (1, 5)
IN (1, 5)
exists predicate ::=
Expand EXISTS < subquery >
EXISTS (SELECT col FROM tbl)
EXISTS (SELECT col FROM tbl)
group by clause ::=
Expand GROUP BY < expression list >
GROUP BY col1, col2
GROUP BY col1, col2
having clause ::=
Expand HAVING < condition >
HAVING max(col1) = 5
HAVING max(col1) = 5
order by clause ::=
Expand ORDER BY < sort specification > ( < comma > < sort specification > )*
ORDER BY x, y DESC
ORDER BY x, y DESC
sort specification ::=
Expand < sort key > ( ASC | DESC )? ( NULLS ( FIRST | LAST ) )?
col1 NULLS FIRST
col1 NULLS FIRST
sort key ::=
Expand < expression >
col1
col1
integer parameter ::=
Expand < unsigned integer >Expand < qmark >
?
?
limit clause ::=
Expand ( LIMIT < integer parameter > ( < comma > < integer parameter > )? )Expand ( OFFSET < integer parameter > ( ROW | ROWS ) ( < fetch clause > )? )Expand < fetch clause >
LIMIT 2
LIMIT 2
fetch clause ::=
Expand FETCH ( FIRST | NEXT ) ( < integer parameter > )? ( ROW | ROWS ) ONLY
FETCH FIRST 1 ROWS ONLY
FETCH FIRST 1 ROWS ONLY
option clause ::=
Expand OPTION ( MAKEDEP < identifier > ( < comma > < identifier > )* | MAKENOTDEP < identifier > ( < comma > < identifier > )* | NOCACHE ( < identifier > ( < comma > < identifier > )* )? )*
OPTION MAKEDEP tbl
OPTION MAKEDEP tbl
expression ::=
Expand < condition >
col1
col1
common value expression ::=
Expand ( < numeric value expression > ( < concat_op > < numeric value expression > )* )
'a' || 'b'
'a' || 'b'
numeric value expression ::=
Expand ( < term > ( < plus or minus > < term > )* )
1 + 2
1 + 2
plus or minus ::=
Expand < plus >Expand < minus >
+
+
term ::=
Expand ( < value expression primary > ( < star or slash > < value expression primary > )* )
1 * 2
1 * 2
star or slash ::=
Expand < star >Expand < slash >
/
/
value expression primary ::=
Expand < non numeric literal >Expand ( < plus or minus > )? ( < unsigned numeric literal > | < unsigned value expression primary > )
+col1
+col1
unsigned value expression primary ::=
Expand < qmark >Expand ( < dollar > < unsigned integer > )Expand ( < escaped function > < function > < rbrace > )Expand ( ( < text aggreate function > | < standard aggregate function > | < ordered aggreate function > ) ( < filter clause > )? ( < window specification > )? )Expand ( < analytic aggregate function > ( < filter clause > )? < window specification > )Expand ( < function > ( < window specification > )? )Expand ( ( < identifier > | < non-reserved identifier > ) ( < lsbrace > < common value expression > < rsbrace > )? )Expand < subquery >Expand ( < lparen > < expression > < rparen > ( < lsbrace > < common value expression > < rsbrace > )? )Expand < searched case expression >Expand < case expression >
col1
col1
window specification ::=
Expand OVER < lparen > ( PARTITION BY < expression list > )? ( < order by clause > )? < rparen >
OVER (PARTION BY col1)
OVER (PARTION BY col1)
case expression ::=
Expand CASE < expression > ( WHEN < expression > THEN < expression > )+ ( ELSE < expression > )? END
CASE col1 WHEN 'a' THEN 1 ELSE 2
CASE col1 WHEN 'a' THEN 1 ELSE 2
searched case expression ::=
Expand CASE ( WHEN < condition > THEN < expression > )+ ( ELSE < expression > )? END
CASE WHEN x = 'a' THEN 1 WHEN y = 'b' THEN 2
CASE WHEN x = 'a' THEN 1 WHEN y = 'b' THEN 2
function ::=
Expand ( CONVERT < lparen > < expression > < comma > < data type > < rparen > )Expand ( CAST < lparen > < expression > AS < data type > < rparen > )Expand ( SUBSTRING < lparen > < expression > ( ( FROM < expression > ( FOR < expression > )? ) | ( < comma > < expression list > ) ) < rparen > )Expand ( EXTRACT < lparen > ( YEAR | MONTH | DAY | HOUR | MINUTE | SECOND ) FROM < expression > < rparen > )Expand ( TRIM < lparen > ( ( ( ( LEADING | TRAILING | BOTH ) ( < expression > )? ) | < expression > ) FROM )? < expression > < rparen > )Expand ( ( TO_CHARS | TO_BYTES ) < lparen > < expression > < comma > < string > < rparen > )Expand ( ( TIMESTAMPADD | TIMESTAMPDIFF ) < lparen > < time interval > < comma > < expression > < comma > < expression > < rparen > )Expand < querystring function >Expand ( ( LEFT | RIGHT | CHAR | USER | YEAR | MONTH | HOUR | MINUTE | SECOND | XMLCONCAT | XMLCOMMENT ) < lparen > ( < expression list > )? < rparen > )Expand ( ( TRANSLATE | INSERT ) < lparen > ( < expression list > )? < rparen > )Expand < xml parse >Expand < xml element >Expand ( XMLPI < lparen > ( ( NAME )? < identifier > ) ( < comma > < expression > )? < rparen > )Expand < xml forest >Expand < json object >Expand < xml serialize >Expand < xml query >Expand ( < identifier > < lparen > ( ALL | DISTINCT )? ( < expression list > )? ( < order by clause > )? < rparen > ( < filter clause > )? )
func('1', col1)
func('1', col1)
xml parse ::=
Expand XMLPARSE < lparen > ( DOCUMENT | CONTENT ) < expression > ( WELLFORMED )? < rparen >
XMLPARSE(DOCUMENT doc WELLFORMED)
XMLPARSE(DOCUMENT doc WELLFORMED)
querystring function ::=
Expand QUERYSTRING < lparen > < expression > ( < comma > < derived column > )* < rparen >
QUERYSTRING(col1 AS opt, col2 AS val)
QUERYSTRING(col1 AS opt, col2 AS val)
xml element ::=
Expand XMLELEMENT < lparen > ( ( NAME )? < identifier > ) ( < comma > < xml namespaces > )? ( < comma > < xml attributes > )? ( < comma > < expression > )* < rparen >
XMLELEMENT(NAME "root", child)
XMLELEMENT(NAME "root", child)
xml attributes ::=
Expand XMLATTRIBUTES < lparen > < derived column > ( < comma > < derived column > )* < rparen >
XMLATTRIBUTES(col1 AS attr1, col2 AS attr2)
XMLATTRIBUTES(col1 AS attr1, col2 AS attr2)
json object ::=
Expand JSONOBJECT < lparen > < derived column list > < rparen >
JSONOBJECT(col1 AS val1, col2 AS val2)
JSONOBJECT(col1 AS val1, col2 AS val2)
derived column list ::=
Expand < derived column > ( < comma > < derived column > )*
col1 AS val1, col2 AS val2
col1 AS val1, col2 AS val2
xml forest ::=
Expand XMLFOREST < lparen > ( < xml namespaces > < comma > )? < derived column list > < rparen >
XMLFOREST(col1 AS ELEM1, col2 AS ELEM2)
XMLFOREST(col1 AS ELEM1, col2 AS ELEM2)
xml namespaces ::=
Expand XMLNAMESPACES < lparen > < xml namespace element > ( < comma > < xml namespace element > )* < rparen >
XMLNAMESPACES('http://foo' AS foo)
XMLNAMESPACES('http://foo' AS foo)
xml namespace element ::=
Expand ( < string > AS < identifier > )Expand ( NO DEFAULT )Expand ( DEFAULT < string > )
NO DEFAULT
NO DEFAULT
data type ::=
Expand ( STRING ( < lparen > < unsigned integer > < rparen > )? )Expand ( VARCHAR ( < lparen > < unsigned integer > < rparen > )? )Expand BOOLEANExpand BYTEExpand TINYINTExpand SHORTExpand SMALLINTExpand ( CHAR ( < lparen > < unsigned integer > < rparen > )? )Expand INTEGERExpand LONGExpand BIGINTExpand ( BIGINTEGER ( < lparen > < unsigned integer > < rparen > )? )Expand FLOATExpand REALExpand DOUBLEExpand ( BIGDECIMAL ( < lparen > < unsigned integer > ( < comma > < unsigned integer > )? < rparen > )? )Expand ( DECIMAL ( < lparen > < unsigned integer > ( < comma > < unsigned integer > )? < rparen > )? )Expand DATEExpand TIMEExpand TIMESTAMPExpand OBJECTExpand ( BLOB ( < lparen > < unsigned integer > < rparen > )? )Expand ( CLOB ( < lparen > < unsigned integer > < rparen > )? )Expand ( VARBINARY ( < lparen > < unsigned integer > < rparen > )? )Expand XML
STRING
STRING
time interval ::=
Expand SQL_TSI_FRAC_SECONDExpand SQL_TSI_SECONDExpand SQL_TSI_MINUTEExpand SQL_TSI_HOURExpand SQL_TSI_DAYExpand SQL_TSI_WEEKExpand SQL_TSI_MONTHExpand SQL_TSI_QUARTERExpand SQL_TSI_YEAR
SQL_TSI_HOUR
SQL_TSI_HOUR
non numeric literal ::=
Expand < string >Expand < binary string literal >Expand FALSEExpand TRUEExpand UNKNOWNExpand NULLExpand ( < escaped type > < string > < rbrace > )
'a'
'a'
unsigned numeric literal ::=
Expand < unsigned integer literal >Expand < approximate numeric literal >Expand < decimal numeric literal >
1.234
1.234
ddl statement ::=
Expand ( < create table > | < create procedure > | < option namespace > | < alter options > | < create trigger > ) ( < semicolon > )?
CREATE FOREIGN TABLE X (Y STRING)
CREATE FOREIGN TABLE X (Y STRING)
option namespace ::=
Expand SET NAMESPACE < string > AS < identifier >
SET NAMESPACE 'http://foo' AS foo
SET NAMESPACE 'http://foo' AS foo
create procedure ::=
Expand CREATE ( VIRTUAL | FOREIGN )? ( PROCEDURE | FUNCTION ) ( < identifier > < lparen > ( < procedure parameter > ( < comma > < procedure parameter > )* )? < rparen > ( RETURNS ( ( ( TABLE )? < lparen > < procedure result column > ( < comma > < procedure result column > )* < rparen > ) | < data type > ) )? ( < options clause > )? ( AS < statement > )? )
CREATE FOREIGN PROCEDURE proc (param STRING) RETURNS STRING
CREATE FOREIGN PROCEDURE proc (param STRING) RETURNS STRING
procedure parameter ::=
Expand ( IN | OUT | INOUT | VARIADIC )? < identifier > < data type > ( NOT NULL )? ( RESULT )? ( DEFAULT < string > )? ( < options clause > )?
OUT x INTEGER
OUT x INTEGER
procedure result column ::=
Expand < identifier > < data type > ( NOT NULL )? ( < options clause > )?
x INTEGER
x INTEGER
create table ::=
Expand CREATE ( FOREIGN TABLE | ( VIRTUAL )? VIEW ) < identifier > ( < create table body > | ( < options clause > )? ) ( AS < query expression > )?
CREATE VIEW vw AS SELECT 1
CREATE VIEW vw AS SELECT 1
create foreign temp table ::=
Expand CREATE FOREIGN TEMPORARY TABLE < identifier > < create table body > ON < identifier >
CREATE FOREIGN TEMPORARY TABLE t (x string) ON z
CREATE FOREIGN TEMPORARY TABLE t (x string) ON z
create table body ::=
Expand ( < lparen > < table element > ( < comma > < table element > )* ( < comma > ( CONSTRAINT < identifier > )? ( < primary key > | < other constraints > | < foreign key > ) ( < options clause > )? )* < rparen > )? ( < options clause > )?
(x string) OPTIONS (CARDINALITY 100)
(x string) OPTIONS (CARDINALITY 100)
foreign key ::=
Expand FOREIGN KEY < column list > REFERENCES < identifier > ( < column list > )?
FOREIGN KEY (a, b) REFERENCES tbl (x, y)
FOREIGN KEY (a, b) REFERENCES tbl (x, y)
primary key ::=
Expand PRIMARY KEY < column list >
PRIMARY KEY (a, b)
PRIMARY KEY (a, b)
other constraints ::=
Expand ( ( UNIQUE | ACCESSPATTERN ) < column list > )Expand ( INDEX < lparen > < expression list > < rparen > )
UNIQUE (a)
UNIQUE (a)
column list ::=
Expand < lparen > < identifier > ( < comma > < identifier > )* < rparen >
(a, b)
(a, b)
table element ::=
Expand < identifier > < data type > ( NOT NULL )? ( AUTO_INCREMENT )? ( ( PRIMARY KEY ) | ( ( UNIQUE )? ( INDEX )? ) ) ( DEFAULT < string > )? ( < options clause > )?
x INTEGER NOT NULL
x INTEGER NOT NULL
options clause ::=
Expand OPTIONS < lparen > < option pair > ( < comma > < option pair > )* < rparen >
OPTIONS ('x' 'y', 'a' 'b')
OPTIONS ('x' 'y', 'a' 'b')
option pair ::=
Expand < identifier > ( < non numeric literal > | ( < plus or minus > )? < unsigned numeric literal > )
'key' 'value'
'key' 'value'
alter options ::=
Expand ALTER ( VIRTUAL | FOREIGN )? ( TABLE | VIEW | PROCEDURE ) < identifier > ( < alter options list > | < alter column options > )
ALTER FOREIGN TABLE foo OPTIONS (ADD cardinality 100)
ALTER FOREIGN TABLE foo OPTIONS (ADD cardinality 100)
alter options list ::=
Expand OPTIONS < lparen > ( < add set option > | < drop option > ) ( < comma > ( < add set option > | < drop option > ) )* < rparen >
OPTIONS (ADD updatable true)
OPTIONS (ADD updatable true)
drop option ::=
Expand DROP < identifier >
DROP updatable
DROP updatable
add set option ::=
Expand ( ADD | SET ) < option pair >
ADD updatable true
ADD updatable true
alter column options ::=
Expand ALTER ( COLUMN | PARAMETER )? < identifier > < alter options list >
ALTER COLUMN bar OPTIONS (ADD updatable true)
ALTER COLUMN bar OPTIONS (ADD updatable true)