-
Language:
English
-
Language:
English
Red Hat Training
A Red Hat training course is available for Red Hat JBoss Data Virtualization
A.7. Productions
string ::=
- < string literal >
'a string'
'it''s a string'
reserved identifier ::=
- INSTEAD
- VIEW
- ENABLED
- DISABLED
- KEY
- SERIAL
- TEXTAGG
- COUNT
- ROW_NUMBER
- RANK
- DENSE_RANK
- SUM
- AVG
- MIN
- MAX
- EVERY
- STDDEV_POP
- STDDEV_SAMP
- VAR_SAMP
- VAR_POP
- DOCUMENT
- CONTENT
- TRIM
- EMPTY
- ORDINALITY
- PATH
- FIRST
- LAST
- NEXT
- SUBSTRING
- EXTRACT
- TO_CHARS
- TO_BYTES
- TIMESTAMPADD
- TIMESTAMPDIFF
- QUERYSTRING
- NAMESPACE
- RESULT
- INDEX
- ACCESSPATTERN
- AUTO_INCREMENT
- WELLFORMED
- SQL_TSI_FRAC_SECOND
- SQL_TSI_SECOND
- SQL_TSI_MINUTE
- SQL_TSI_HOUR
- SQL_TSI_DAY
- SQL_TSI_WEEK
- SQL_TSI_MONTH
- SQL_TSI_QUARTER
- SQL_TSI_YEAR
- TEXTTABLE
- ARRAYTABLE
- SELECTOR
- SKIP
- WIDTH
- PASSING
- NAME
- ENCODING
- COLUMNS
- DELIMITER
- QUOTE
- HEADER
- NULLS
- OBJECTTABLE
- VERSION
- INCLUDING
- EXCLUDING
- XMLDECLARATION
- VARIADIC
- RAISE
- EXCEPTION
- CHAIN
- JSONARRAY_AGG
- JSONOBJECT
identifier ::=
- < identifier >
- < non-reserved identifier >
tbl.col
"tbl"."col"
create trigger ::=
- 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
alter ::=
- 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
for each row trigger action ::=
- FOR EACH ROW ( ( BEGIN ( ATOMIC )? ( < statement > )* END ) | < statement > )
FOR EACH ROW BEGIN ATOMIC ... END
directly executable statement ::=
- < query expression >
- < call statement >
- < insert statement >
- < update statement >
- < delete statement >
- < drop table >
- < create temporary table >
- < create foreign temp table >
- < alter >
- < create trigger >
SELECT * FROM tbl
drop table ::=
- DROP TABLE < identifier >
CREATE TRIGGER ON vw INSTEAD OF INSERT AS FOR EACH ROW BEGIN ATOMIC ... END
create temporary table ::=
- 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)
temporary table element ::=
- < identifier > ( < data type > | SERIAL ) ( NOT NULL )?
col string NOT NULL
raise error statement ::=
- ERROR < expression >
ERROR 'something went wrong'
raise statement ::=
- RAISE ( SQLWARNING )? < exception reference >
RAISE SQLEXCEPTION 'something went wrong'
exception reference ::=
- < identifier >
- < sql exception >
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
sql exception ::=
- SQLEXCEPTION < common value expression > ( SQLSTATE < common value expression > ( < comma > < common value expression > )? )? ( CHAIN < exception reference > )?
SQLEXCEPTION 'something went wrong' SQLSTATE '00X', 2
statement ::=
- ( ( < identifier > < colon > )? ( < loop statement > | < while statement > | < compound statement > ) )
- < if statement > | < delimited statement >
IF (x = 5) BEGIN ... END
delimited statement ::=
- ( < assignment statement > | < data statement > | < raise error statement > | < raise statement > | < declare statement > | < branching statement > | < return statement > ) < semicolon >
SELECT * FROM tbl;
compound statement ::=
- BEGIN ( ( NOT )? ATOMIC )? ( < statement > )* ( EXCEPTION < identifier > ( < statement > )* )? END
BEGIN NOT ATOMIC ... END
branching statement ::=
- ( ( BREAK | CONTINUE ) ( < identifier > )? )
- ( LEAVE < identifier > )
BREAK x
return statement ::=
- RETURN ( < expression > )?
RETURN 1
while statement ::=
- WHILE < lparen > < condition > < rparen > < statement >
WHILE (var) BEGIN ... END
loop statement ::=
- LOOP ON < lparen > < query expression > < rparen > AS < identifier > < statement >
IF (boolVal) BEGIN variables.x = 1 END ELSE BEGIN variables.x = 2 END
if statement ::=
- IF < lparen > < condition > < rparen > < statement > ( ELSE < statement > )?
LOOP ON (SELECT * FROM tbl) AS x BEGIN ... END
declare statement ::=
- DECLARE ( < data type > | EXCEPTION ) < identifier > ( < eq > < assignment statement operand > )?
DECLARE STRING x = 'a'
assignment statement ::=
- < identifier > < eq > ( < assignment statement operand > | ( < call statement > ( ( WITH | WITHOUT ) RETURN )? ) )
x = 'b'
assignment statement operand ::=
- < insert statement >
- < update statement >
- < delete statement >
- < expression >
- < query expression >
- < sql exception >
Note
data statement ::=
- ( < directly executable statement > | < dynamic data statement > ) ( ( WITH | WITHOUT ) RETURN )?
procedure body definition ::=
- ( CREATE ( VIRTUAL )? PROCEDURE )? < statement >
CREATE VIRTUAL PROCEDURE BEGIN ... END
dynamic data statement ::=
- ( 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
set clause list ::=
- < identifier > < eq > < expression > ( < comma > < identifier > < eq > < expression > )*
col1 = 'x', col2 = 'y' ...
typed element list ::=
- < identifier > < data type > ( < comma > < identifier > < data type > )*
col1 string, col2 integer ...
callable statement ::=
- < lbrace > ( < qmark > < eq > )? CALL < identifier > ( < lparen > ( < expression list > )? < rparen > )? < rbrace > ( < option clause > )?
{? = CALL proc}
call statement ::=
- ( ( EXEC | EXECUTE | CALL ) < identifier > < lparen > ( < named parameter list > | ( < expression list > )? ) < rparen > ) ( < option clause > )?
CALL proc('a', 1)
named parameter list ::=
- ( < identifier > < eq > ( < gt > )? < expression > ( < comma > < identifier > < eq > ( < gt > )? < expression > )* )
param1 => 'x', param2 => 1
insert statement ::=
- ( INSERT | MERGE ) INTO < identifier > ( < column list > )? ( ( VALUES < lparen > < expression list > < rparen > ) | < query expression > ) ( < option clause > )?
INSERT INTO tbl (col1, col2) VALUES ('a', 1)
expression list ::=
- < expression > ( < comma > < expression > )*
col1, 'a', ...
update statement ::=
- UPDATE < identifier > SET < set clause list > ( < where clause > )? ( < option clause > )?
UPDATE tbl SET (col1 = 'a') WHERE col2 = 1
delete statement ::=
- DELETE FROM < identifier > ( < where clause > )? ( < option clause > )?
DELETE FROM tbl WHERE col2 = 1
query expression ::=
- ( WITH < with list element > ( < comma > < with list element > )* )? < query expression body >
SELECT * FROM tbl WHERE col2 = 1
with list element ::=
- < identifier > ( < column list > )? AS < lparen > < query expression > < rparen >
X (Y, Z) AS (SELECT 1, 2)
query expression body ::=
- < query term > ( ( UNION | EXCEPT ) ( ALL | DISTINCT )? < query term > )* ( < order by clause > )? ( < limit clause > )? ( < option clause > )?
SELECT * FROM tbl ORDER BY col1 LIMIT 1
query term ::=
- < query primary > ( INTERSECT ( ALL | DISTINCT )? < query primary > )*
SELECT * FROM tbl
SELECT * FROM tbl1 INTERSECT SELECT * FROM tbl2
query primary ::=
- < query >
- ( TABLE < identifier > )
- ( < lparen > < query expression body > < rparen > )
TABLE tbl
SELECT * FROM tbl1
query ::=
- < select clause > ( < into clause > )? ( < from clause > ( < where clause > )? ( < group by clause > )? ( < having clause > )? )?
SELECT col1, max(col2) FROM tbl GROUP BY col1
into clause ::=
- INTO < identifier >
Note
INTO tbl
select clause ::=
- SELECT ( ALL | DISTINCT )? ( < star > | ( < select sublist > ( < comma > < select sublist > )* ) )
SELECT *
SELECT DISTINCT a, b, c
select sublist ::=
- < select derived column >
- < all in group >
tbl.*
tbl.col AS x
select derived column ::=
- ( < expression > ( ( AS )? < identifier > )? )
Note
tbl.col AS x
derived column ::=
- ( < expression > ( AS < identifier > )? )
tbl.col AS x
all in group ::=
- < all in group identifier >
tbl.*
ordered aggreate function ::=
- ( XMLAGG | ARRAY_AGG | JSONARRAY_AGG ) < lparen > < expression > ( < order by clause > )? < rparen >
XMLAGG(col1) ORDER BY col2
ARRAY_AGG(col1)
text aggreate function ::=
- 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)
standard aggregate function ::=
- ( COUNT < lparen > < star > < rparen > )
- ( ( COUNT | SUM | AVG | MIN | MAX | EVERY | STDDEV_POP | STDDEV_SAMP | VAR_SAMP | VAR_POP | SOME | ANY ) < lparen > ( DISTINCT | ALL )? < expression > < rparen > )
COUNT(*)
analytic aggregate function ::=
- ( ROW_NUMBER | RANK | DENSE_RANK ) < lparen > < rparen >
ROW_NUMBER()
filter clause ::=
- FILTER < lparen > WHERE < boolean primary > < rparen >
FILTER (WHERE col1='a')
from clause ::=
- FROM ( < table reference > ( < comma > < table reference > )* )
FROM a, b
FROM a right outer join b, c, d join e".</p>
table reference ::=
- ( < escaped join > < joined table > < rbrace > )
- < joined table >
a
a inner join b
joined table ::=
- < table primary > ( < cross join > | < qualified table > )*
a
a inner join b
cross join ::=
- ( ( CROSS | UNION ) JOIN < table primary > )
a CROSS JOIN b
qualified table ::=
- ( ( ( RIGHT ( OUTER )? ) | ( LEFT ( OUTER )? ) | ( FULL ( OUTER )? ) | INNER )? JOIN < table reference > ON < condition > )
a inner join b
table primary ::=
- ( < text table > | < array table > | < xml table > | < object table > | < table name > | < table subquery > | ( < lparen > < joined table > < rparen > ) ) ( MAKEDEP | MAKENOTDEP )?
a
xml serialize ::=
- XMLSERIALIZE < lparen > ( DOCUMENT | CONTENT )? < expression > ( AS ( STRING | VARCHAR | CLOB | VARBINARY | BLOB ) )? ( ENCODING < identifier > )? ( VERSION < string > )? ( ( INCLUDING | EXCLUDING ) XMLDECLARATION )? < rparen >
XMLSERIALIZE(col1 AS CLOB)
array table ::=
- ARRAYTABLE < lparen > < value expression primary > COLUMNS < typed element list > < rparen > ( AS )? < identifier >
ARRAYTABLE (col1 COLUMNS x STRING) AS y
text table ::=
- 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
text table column ::=
- < identifier > < data type > ( WIDTH < unsigned integer > ( NO TRIM )? )? ( SELECTOR < string > < unsigned integer > )?
x INTEGER WIDTH 6
xml query ::=
- XMLQUERY < lparen > ( < xml namespaces > < comma > )? < string > ( PASSING < derived column > ( < comma > < derived column > )* )? ( ( NULL | EMPTY ) ON EMPTY )? < rparen >
XMLQUERY('<a>...</a>' PASSING doc)
object table ::=
- 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
object table column ::=
- < identifier > < data type > < string > ( DEFAULT < expression > )?
y integer 'teiid_row_number'
xml table ::=
- 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
xml table column ::=
- < identifier > ( ( FOR ORDINALITY ) | ( < data type > ( DEFAULT < expression > )? ( PATH < string > )? ) )
y FOR ORDINALITY
unsigned integer ::=
- < unsigned integer literal >
12345
table subquery ::=
- ( TABLE | LATERAL )? < lparen > ( < query expression > | < call statement > ) < rparen > ( AS )? < identifier >
(SELECT * FROM tbl) AS x
table name ::=
- ( < identifier > ( ( AS )? < identifier > )? )
tbl AS x
where clause ::=
- WHERE < condition >
WHERE x = 'a'
condition ::=
- < boolean value expression >
boolean value expression ::=
- < boolean term > ( OR < boolean term > )*
boolean term ::=
- < boolean factor > ( AND < boolean factor > )*
boolean factor ::=
- ( NOT )? < boolean primary >
NOT x = 'a'
boolean primary ::=
- ( < common value expression > ( < between predicate > | < match predicate > | < like regex predicate > | < in predicate > | < is null predicate > | < quantified comparison predicate > | < comparison predicate > )? )
- < exists predicate >
col LIKE 'a%'
comparison operator ::=
- < eq >
- < ne >
- < ne2 >
- < lt >
- < le >
- < gt >
- < ge >
=
comparison predicate ::=
- < comparison operator > < common value expression >
= 'a'
subquery ::=
- < lparen > ( < query expression > | < call statement > ) < rparen >
(SELECT * FROM tbl)
quantified comparison predicate ::=
- < comparison operator > ( ANY | SOME | ALL ) < subquery >
= ANY (SELECT col FROM tbl)
match predicate ::=
- ( NOT )? ( LIKE | ( SIMILAR TO ) ) < common value expression > ( ESCAPE < character > | ( < lbrace > ESCAPE < character > < rbrace > ) )?
LIKE 'a_'
like regex predicate ::=
- ( NOT )? LIKE_REGEX < common value expression >
LIKE_REGEX 'a.*b'
character ::=
- < string >
'a'
between predicate ::=
- ( NOT )? BETWEEN < common value expression > AND < common value expression >
BETWEEN 1 AND 5
is null predicate ::=
- IS ( NOT )? NULL
IS NOT NULL
in predicate ::=
- ( NOT )? IN ( < subquery > | ( < lparen > < common value expression > ( < comma > < common value expression > )* < rparen > ) )
IN (1, 5)
exists predicate ::=
- EXISTS < subquery >
EXISTS (SELECT col FROM tbl)
group by clause ::=
- GROUP BY < expression list >
GROUP BY col1, col2
having clause ::=
- HAVING < condition >
HAVING max(col1) = 5
order by clause ::=
- ORDER BY < sort specification > ( < comma > < sort specification > )*
ORDER BY x, y DESC
sort specification ::=
- < sort key > ( ASC | DESC )? ( NULLS ( FIRST | LAST ) )?
col1 NULLS FIRST
sort key ::=
- < expression >
col1
integer parameter ::=
- < unsigned integer >
- < qmark >
?
limit clause ::=
- ( LIMIT < integer parameter > ( < comma > < integer parameter > )? )
- ( OFFSET < integer parameter > ( ROW | ROWS ) ( < fetch clause > )? )
- < fetch clause >
LIMIT 2
fetch clause ::=
- FETCH ( FIRST | NEXT ) ( < integer parameter > )? ( ROW | ROWS ) ONLY
FETCH FIRST 1 ROWS ONLY
option clause ::=
- OPTION ( MAKEDEP < identifier > ( < comma > < identifier > )* | MAKENOTDEP < identifier > ( < comma > < identifier > )* | NOCACHE ( < identifier > ( < comma > < identifier > )* )? )*
OPTION MAKEDEP tbl
expression ::=
- < condition >
col1
common value expression ::=
- ( < numeric value expression > ( < concat_op > < numeric value expression > )* )
'a' || 'b'
numeric value expression ::=
- ( < term > ( < plus or minus > < term > )* )
1 + 2
plus or minus ::=
- < plus >
- < minus >
+
term ::=
- ( < value expression primary > ( < star or slash > < value expression primary > )* )
1 * 2
star or slash ::=
- < star >
- < slash >
/
value expression primary ::=
- < non numeric literal >
- ( < plus or minus > )? ( < unsigned numeric literal > | < unsigned value expression primary > )
+col1
unsigned value expression primary ::=
- < qmark >
- ( < dollar > < unsigned integer > )
- ( < escaped function > < function > < rbrace > )
- ( ( < text aggreate function > | < standard aggregate function > | < ordered aggreate function > ) ( < filter clause > )? ( < window specification > )? )
- ( < analytic aggregate function > ( < filter clause > )? < window specification > )
- ( < function > ( < window specification > )? )
- ( ( < identifier > | < non-reserved identifier > ) ( < lsbrace > < common value expression > < rsbrace > )? )
- < subquery >
- ( < lparen > < expression > < rparen > ( < lsbrace > < common value expression > < rsbrace > )? )
- < searched case expression >
- < case expression >
col1
window specification ::=
- OVER < lparen > ( PARTITION BY < expression list > )? ( < order by clause > )? < rparen >
OVER (PARTION BY col1)
case expression ::=
- CASE < expression > ( WHEN < expression > THEN < expression > )+ ( ELSE < expression > )? END
CASE col1 WHEN 'a' THEN 1 ELSE 2
searched case expression ::=
- CASE ( WHEN < condition > THEN < expression > )+ ( ELSE < expression > )? END
CASE WHEN x = 'a' THEN 1 WHEN y = 'b' THEN 2
function ::=
- ( CONVERT < lparen > < expression > < comma > < data type > < rparen > )
- ( CAST < lparen > < expression > AS < data type > < rparen > )
- ( SUBSTRING < lparen > < expression > ( ( FROM < expression > ( FOR < expression > )? ) | ( < comma > < expression list > ) ) < rparen > )
- ( EXTRACT < lparen > ( YEAR | MONTH | DAY | HOUR | MINUTE | SECOND ) FROM < expression > < rparen > )
- ( TRIM < lparen > ( ( ( ( LEADING | TRAILING | BOTH ) ( < expression > )? ) | < expression > ) FROM )? < expression > < rparen > )
- ( ( TO_CHARS | TO_BYTES ) < lparen > < expression > < comma > < string > < rparen > )
- ( ( TIMESTAMPADD | TIMESTAMPDIFF ) < lparen > < time interval > < comma > < expression > < comma > < expression > < rparen > )
- < querystring function >
- ( ( LEFT | RIGHT | CHAR | USER | YEAR | MONTH | HOUR | MINUTE | SECOND | XMLCONCAT | XMLCOMMENT ) < lparen > ( < expression list > )? < rparen > )
- ( ( TRANSLATE | INSERT ) < lparen > ( < expression list > )? < rparen > )
- < xml parse >
- < xml element >
- ( XMLPI < lparen > ( ( NAME )? < identifier > ) ( < comma > < expression > )? < rparen > )
- < xml forest >
- < json object >
- < xml serialize >
- < xml query >
- ( < identifier > < lparen > ( ALL | DISTINCT )? ( < expression list > )? ( < order by clause > )? < rparen > ( < filter clause > )? )
func('1', col1)
xml parse ::=
- XMLPARSE < lparen > ( DOCUMENT | CONTENT ) < expression > ( WELLFORMED )? < rparen >
XMLPARSE(DOCUMENT doc WELLFORMED)
querystring function ::=
- QUERYSTRING < lparen > < expression > ( < comma > < derived column > )* < rparen >
QUERYSTRING(col1 AS opt, col2 AS val)
xml element ::=
- XMLELEMENT < lparen > ( ( NAME )? < identifier > ) ( < comma > < xml namespaces > )? ( < comma > < xml attributes > )? ( < comma > < expression > )* < rparen >
XMLELEMENT(NAME "root", child)
xml attributes ::=
- XMLATTRIBUTES < lparen > < derived column > ( < comma > < derived column > )* < rparen >
XMLATTRIBUTES(col1 AS attr1, col2 AS attr2)
json object ::=
- JSONOBJECT < lparen > < derived column list > < rparen >
JSONOBJECT(col1 AS val1, col2 AS val2)
derived column list ::=
- < derived column > ( < comma > < derived column > )*
col1 AS val1, col2 AS val2
xml forest ::=
- XMLFOREST < lparen > ( < xml namespaces > < comma > )? < derived column list > < rparen >
XMLFOREST(col1 AS ELEM1, col2 AS ELEM2)
xml namespaces ::=
- XMLNAMESPACES < lparen > < xml namespace element > ( < comma > < xml namespace element > )* < rparen >
XMLNAMESPACES('http://foo' AS foo)
xml namespace element ::=
- ( < string > AS < identifier > )
- ( NO DEFAULT )
- ( DEFAULT < string > )
NO DEFAULT
data type ::=
- ( STRING ( < lparen > < unsigned integer > < rparen > )? )
- ( VARCHAR ( < lparen > < unsigned integer > < rparen > )? )
- BOOLEAN
- BYTE
- TINYINT
- SHORT
- SMALLINT
- ( CHAR ( < lparen > < unsigned integer > < rparen > )? )
- INTEGER
- LONG
- BIGINT
- ( BIGINTEGER ( < lparen > < unsigned integer > < rparen > )? )
- FLOAT
- REAL
- DOUBLE
- ( BIGDECIMAL ( < lparen > < unsigned integer > ( < comma > < unsigned integer > )? < rparen > )? )
- ( DECIMAL ( < lparen > < unsigned integer > ( < comma > < unsigned integer > )? < rparen > )? )
- DATE
- TIME
- TIMESTAMP
- OBJECT
- ( BLOB ( < lparen > < unsigned integer > < rparen > )? )
- ( CLOB ( < lparen > < unsigned integer > < rparen > )? )
- ( VARBINARY ( < lparen > < unsigned integer > < rparen > )? )
- XML
STRING
time interval ::=
- SQL_TSI_FRAC_SECOND
- SQL_TSI_SECOND
- SQL_TSI_MINUTE
- SQL_TSI_HOUR
- SQL_TSI_DAY
- SQL_TSI_WEEK
- SQL_TSI_MONTH
- SQL_TSI_QUARTER
- SQL_TSI_YEAR
SQL_TSI_HOUR
non numeric literal ::=
- < string >
- < binary string literal >
- FALSE
- TRUE
- UNKNOWN
- NULL
- ( < escaped type > < string > < rbrace > )
'a'
unsigned numeric literal ::=
- < unsigned integer literal >
- < approximate numeric literal >
- < decimal numeric literal >
1.234
ddl statement ::=
- ( < create table > | < create procedure > | < option namespace > | < alter options > | < create trigger > ) ( < semicolon > )?
CREATE FOREIGN TABLE X (Y STRING)
option namespace ::=
- SET NAMESPACE < string > AS < identifier >
SET NAMESPACE 'http://foo' AS foo
create procedure ::=
- 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
procedure parameter ::=
- ( IN | OUT | INOUT | VARIADIC )? < identifier > < data type > ( NOT NULL )? ( RESULT )? ( DEFAULT < string > )? ( < options clause > )?
OUT x INTEGER
procedure result column ::=
- < identifier > < data type > ( NOT NULL )? ( < options clause > )?
x INTEGER
create table ::=
- CREATE ( FOREIGN TABLE | ( VIRTUAL )? VIEW ) < identifier > ( < create table body > | ( < options clause > )? ) ( AS < query expression > )?
CREATE VIEW vw AS SELECT 1
create foreign temp table ::=
- CREATE FOREIGN TEMPORARY TABLE < identifier > < create table body > ON < identifier >
CREATE FOREIGN TEMPORARY TABLE t (x string) ON z
create table body ::=
- ( < 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)
foreign key ::=
- FOREIGN KEY < column list > REFERENCES < identifier > ( < column list > )?
FOREIGN KEY (a, b) REFERENCES tbl (x, y)
primary key ::=
- PRIMARY KEY < column list >
PRIMARY KEY (a, b)
other constraints ::=
- ( ( UNIQUE | ACCESSPATTERN ) < column list > )
- ( INDEX < lparen > < expression list > < rparen > )
UNIQUE (a)
column list ::=
- < lparen > < identifier > ( < comma > < identifier > )* < rparen >
(a, b)
table element ::=
- < identifier > < data type > ( NOT NULL )? ( AUTO_INCREMENT )? ( ( PRIMARY KEY ) | ( ( UNIQUE )? ( INDEX )? ) ) ( DEFAULT < string > )? ( < options clause > )?
x INTEGER NOT NULL
options clause ::=
- OPTIONS < lparen > < option pair > ( < comma > < option pair > )* < rparen >
OPTIONS ('x' 'y', 'a' 'b')
option pair ::=
- < identifier > ( < non numeric literal > | ( < plus or minus > )? < unsigned numeric literal > )
'key' 'value'
alter options ::=
- ALTER ( VIRTUAL | FOREIGN )? ( TABLE | VIEW | PROCEDURE ) < identifier > ( < alter options list > | < alter column options > )
ALTER FOREIGN TABLE foo OPTIONS (ADD cardinality 100)
alter options list ::=
- OPTIONS < lparen > ( < add set option > | < drop option > ) ( < comma > ( < add set option > | < drop option > ) )* < rparen >
OPTIONS (ADD updatable true)
drop option ::=
- DROP < identifier >
DROP updatable
add set option ::=
- ( ADD | SET ) < option pair >
ADD updatable true
alter column options ::=
- ALTER ( COLUMN | PARAMETER )? < identifier > < alter options list >
ALTER COLUMN bar OPTIONS (ADD updatable true)