SQL Grammar Definitions
This page provides the formal Java CUP definitions of the SQL grammar used by BBj and PRO/5.
For more information about the BASIS SQL engine, see SQL — Grammar and SQL Grammar
statement_list
statement_list ::=
statement:s1
| statement_list SEMI_COLON statement:s2
| error
;
statement
statement ::=
SELECT select_union:s
| UPDATE update:u
| INSERT insert:i
| INSERT INTO insert:i
| REPLACE insert:i
| REPLACE INTO insert:i
| CREATE SEQUENCE create_sequence:c
| DROP SEQUENCE drop_sequence:d
| ALTER SEQUENCE alter_sequence:a
| CREATE DATABASE create_database_legacy:db
| CREATE DATABASE LEGACY create_database_legacy:db
| CREATE DATABASE ENHANCED create_database_enhanced:db
| DROP DATABASE drop_database:d
| CREATE TABLE create_table:c
| CREATE VIEW create_view:c with_check_option:o
| EXPLAIN explain:e
| CREATE INDEX create_index:c
| CREATE FULLTEXT INDEX ON id_list:i2 OPEN_PAREN index_col_list:c CLOSE_PAREN
| CREATE FULLTEXT INDEX ON id_list:i2 OPEN_PAREN index_col_list:c CLOSE_PAREN ANALYZER EQ STRING:analyzer STOPWORDS_LANG EQ STRING:stopwords
| CREATE UNIQUE INDEX create_index:c
| CREATE PROCEDURE create_procedure:p
| ALTER PROCEDURE alter_procedure:p
| CREATE TRIGGER create_trigger:t
| DELETE del:d
| DROP TABLE drop_table:d
| DROP PROCEDURE drop_procedure:d
| DROP TRIGGER drop_trigger:d
| DROP VIEW drop_view:d
| DROP INDEX drop_index:d
| DROP FULLTEXT INDEX ON id_list:t
| RENAME id_list:o TO id:n
| GRANT privilege_list:p ON grant_object:o TO user_list:u with_grant_option:w
| GRANT privilege_list:p ON grant_object:o TO id_list_for_revoke:role with_grant_option:w
| GRANT id_list_for_revoke:r TO user_list:u with_grant_option:w
| REVOKE grant_option_for:g privilege_list:p ON id_list_for_revoke:l FROM user_list:u revoke_qual:q
| REVOKE grant_option_for:g id_list_for_revoke:r FROM user_list:u revoke_qual:q
| REVOKE grant_option_for:g privilege_list:p ON id_list_for_revoke:l FROM id_list_for_revoke:r revoke_qual:q
| CREATE ROLE id_list_for_revoke:l
| DROP ROLE id_list_for_revoke:l
| ALTER TABLE alter_table:a
| ALTER TRIGGER alter_trigger:a
| CLONE DATABASE clone_database:c
| GET TABLE INFO FOR id_list:i
| GET TABLE INFO FOR id_list:i NO ATTRIBUTES
| ANALYZE DATABASE
| ANALYZE TABLE id_list:i
| CALL id_list:p call_params:v
| QUESTION EQ CALL id_list:p call_params:v
| OPEN_CURLY CALL id_list:p call_params:v CLOSE_CURLY
| OPEN_CURLY QUESTION EQ CALL id_list:p call_params:v CLOSE_CURLY
| RECOVER id_list:l
| BEGIN TRANSACTION
| CREATE SAVEPOINT id:i
| ROLLBACK id:i
| ROLLBACK
| COMMIT
| SET READ_ONLY boolean_value:b
| SET TRANSACTION_ISOLATION isolation:i
;
boolean_value
boolean_value ::=
TRUE
| FALSE
;
isolation
isolation ::=
READ_COMMITTED
| READ_UNCOMMITTED
| REPEATABLE_READ
| SERIALIZABLE
;
call_params
call_params ::=
/* Nothing */
| OPEN_PAREN value_list:v CLOSE_PAREN
;
top
top ::=
| TOP TYPE_INTEGER:i
;
limit_select
limit_select ::=
| LIMIT TYPE_INTEGER:first COMMA TYPE_INTEGER:count
;
alter_table
alter_table ::=
id_list:l ADD COLUMN table_col_list:c
| id_list:t ADD INDEX id_list:idx OPEN_PAREN index_col_list:c CLOSE_PAREN
| id_list:l ADD COLUMN OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l ADD table_col_list:c
| id_list:l ADD OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l WITH NOCHECK ADD table_col_list:c
| id_list:l WITH NOCHECK ADD OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l WITH CHECK ADD table_col_list:c
| id_list:l WITH CHECK ADD OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l RENAME COLUMN id:o TO id:n
| id_list:l ALTER COLUMN table_col_list:c
| id_list:l ALTER COLUMN OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l ALTER table_col_list:c
| id_list:l ALTER OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:l DROP COLUMN col_list:c
| id_list:t DROP INDEX id_list:idx
| id_list:l DROP col_list:c
| id_list:l DROP CONSTRAINT id:i
;
alter_table_constraint
alter_table_constraint ::=
CONSTRAINT id:i alter_table_constraint_type:t
| ADD CONSTRAINT id:i alter_table_constraint_type:t
;
alter_table_constraint_type
alter_table_constraint_type ::=
PRIMARY KEY OPEN_PAREN col_list:c CLOSE_PAREN
| UNIQUE OPEN_PAREN col_list:c CLOSE_PAREN
| FOREIGN KEY OPEN_PAREN col_list:r CLOSE_PAREN REFERENCES id_list:i references_col_list:l references_match:m references_on_clause:o deferred:d
| FOREIGN KEY col_list:r REFERENCES id_list:i references_col_list:l references_match:m references_on_clause:o deferred:d
;
references_col_list
references_col_list ::=
| OPEN_PAREN col_list:c CLOSE_PAREN
;
references_match
references_match ::=
| MATCH FULL
| MATCH PARTIAL
;
on_update
on_update ::=
ON UPDATE CASCADE
| ON UPDATE SET OP_NULL
| ON UPDATE SET DEFAULT
| ON UPDATE NO ACTION
;
on_delete
on_delete ::=
ON DELETE CASCADE
| ON DELETE SET OP_NULL
| ON DELETE SET DEFAULT
| ON DELETE NO ACTION
;
references_on_clause
references_on_clause ::=
| on_update:u
| on_delete:d
| on_update:u on_delete:d
| on_delete:d on_update:u
;
deferred
deferred ::=
| INITIALLY DEFERRED DEFERRABLE
| INITIALLY DEFERRED NOT DEFERRABLE
| INITIALLY IMMEDIATE DEFERRABLE
| INITIALLY IMMEDIATE NOT DEFERRABLE
| NOT DEFERRABLE INITIALLY DEFERRED
| DEFERRABLE INITIALLY DEFERRED
| NOT DEFERRABLE INITIALLY IMMEDIATE
| DEFERRABLE INITIALLY IMMEDIATE
;
select_union
select_union ::=
select:s
| select:s UNION union_qual:q SELECT select_union:u
;
union_qual
union_qual ::=
| ALL
;
select
select ::=
select_cols:c
| select_cols:c FROM table_list:t where:w group_by:g having:h order_by:o limit_select:l for_update:f
| select_cols:c INTO id_list:i FROM table_list:t where:w group_by:g having:h order_by:o limit_select:l
;
update
update ::=
id_list_for_update:i SET set_list:s where:w
| id_list_for_update:i SET set_list:s FROM table_list:t where:w
;
insert
insert ::=
id_list:i OPEN_PAREN col_list:c CLOSE_PAREN VALUES insert_values_list:v
| id_list:i OPEN_PAREN col_list:c CLOSE_PAREN insert_values_list:v
| id_list:i VALUES insert_values_list:v
| id_list:i OPEN_PAREN col_list:c CLOSE_PAREN VALUES OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| id_list:i OPEN_PAREN col_list:c CLOSE_PAREN OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| id_list:i OPEN_PAREN col_list:c CLOSE_PAREN VALUES SELECT select_union:s
| id_list:i OPEN_PAREN col_list:c CLOSE_PAREN SELECT select_union:s
| id_list:i VALUES OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| id_list:i OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| id_list:i VALUES SELECT select_union:s
| id_list:i SELECT select_union:s
;
insert_values_list
insert_values_list ::=
OPEN_PAREN value_list:v CLOSE_PAREN
| insert_values_list:l COMMA OPEN_PAREN value_list:v CLOSE_PAREN
;
create_sequence
create_sequence ::=
id_list:i cs_increment:inc cs_start_with:start cs_max_value:max cs_min_value:min cs_cycle:cycle cs_cache:cache
;
drop_sequence
drop_sequence ::=
id_list:i
;
cs_increment
cs_increment ::=
/* Nothing */
| INCREMENT BY TYPE_INTEGER:i
;
cs_start_with
cs_start_with ::=
/* Nothing */
| START WITH TYPE_INTEGER:i
;
cs_max_value
cs_max_value ::=
/* Nothing */
| MAXVALUE TYPE_INTEGER:i
| NOMAXVALUE
;
cs_min_value
cs_min_value ::=
/* Nothing */
| MINVALUE TYPE_INTEGER:i
| NOMINVALUE
;
cs_cycle
cs_cycle ::=
/* Nothing */
| CYCLE
| NOCYCLE
;
cs_cache
cs_cache ::=
/* Nothing */
| CACHE TYPE_INTEGER:i
| NOCACHE
;
create_table
create_table ::=
id_list:i OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:i STRING:s OPEN_PAREN table_col_list:c CLOSE_PAREN
| id_list:i OPEN_PAREN table_col_list:c CLOSE_PAREN create_table_supplement:supplement
| id_list:i STRING:s OPEN_PAREN table_col_list:c CLOSE_PAREN create_table_supplement:supplement
| id_list:i OPEN_PAREN table_col_list:c CLOSE_PAREN file_type_and_mode:create_file_type
| id_list:i STRING:s OPEN_PAREN table_col_list:c CLOSE_PAREN file_type_and_mode:create_file_type
| id_list:i OPEN_PAREN table_col_list:c CLOSE_PAREN file_type_and_mode:create_file_type boolean_value:err_if_file
| id_list:i STRING:s OPEN_PAREN table_col_list:c CLOSE_PAREN file_type_and_mode:create_file_type boolean_value:err_if_file
;
create_trigger
create_trigger ::=
ON id_list:tableName trigger_type:tt STRING:filename CODE_BLOCK:code
| ON STRING:dataFile trigger_type:tt STRING:filename CODE_BLOCK:code
| ON id_list:tableName trigger_type:tt STRING:filename
| ON STRING:dataFile trigger_type:tt STRING:filename
| ON id_list:tableName trigger_type:tt CODE_BLOCK:code
| ON STRING:dataFile trigger_type:tt CODE_BLOCK:code
| ON id_list:tableName trigger_type:tt
| ON STRING:dataFile trigger_type:tt
;
alter_trigger
alter_trigger ::=
ON id_list:tableName trigger_type:tt STRING:filename trigger_state:state CODE_BLOCK:code
| ON STRING:dataFile trigger_type:tt STRING:filename trigger_state:state CODE_BLOCK:code
| ON id_list:tableName trigger_type:tt STRING:filename trigger_state:state
| ON STRING:dataFile trigger_type:tt STRING:filename trigger_state:state
| ON id_list:tableName trigger_type:tt trigger_state:state CODE_BLOCK:code
| ON STRING:dataFile trigger_type:tt trigger_state:state CODE_BLOCK:code
| ON id_list:tableName trigger_type:tt trigger_state:state
| ON STRING:dataFile trigger_type:tt trigger_state:state
| ON id_list:tableName trigger_state:state
| ON STRING:dataFile trigger_state:state
;
drop_trigger
drop_trigger ::=
ON id_list:tableName trigger_type:tt
| ON STRING:dataFile trigger_type:tt
| ON id_list:tableName trigger_type:tt DELETE
| ON STRING:dataFile trigger_type:tt DELETE
;
trigger_state
trigger_state ::=
ENABLED
| DISABLED
;
trigger_type
trigger_type ::=
BEFORE_READ
| AFTER_READ
| INSTEADOF_READ
| BEFORE_WRITE
| AFTER_WRITE
| INSTEADOF_WRITE
| BEFORE_KEY
| AFTER_KEY
| INSTEADOF_KEY
| BEFORE_REMOVE
| AFTER_REMOVE
| INSTEADOF_REMOVE
| BEFORE_ERASE
| AFTER_ERASE
| INSTEADOF_ERASE
| BEFORE_OPEN
| AFTER_OPEN
| BEFORE_CLOSE
| AFTER_CLOSE
;
create_procedure
create_procedure ::=
id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN proc_return_type:rt CODE_BLOCK:code
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:src STRING:cfg proc_return_type:rt CODE_BLOCK:code
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:src STRING:cfg proc_return_type:rt
| id_list:i proc_return_type:rt CODE_BLOCK:code
| id_list:i STRING:src STRING:cfg proc_return_type:rt CODE_BLOCK:code
| id_list:i STRING:src STRING:cfg proc_return_type:rt
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:src STRING:cfg proc_return_type:rt CODE_BLOCK:code STRING:description
;
alter_procedure
alter_procedure ::=
id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN proc_return_type:rt CODE_BLOCK:code STRING:description
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:src STRING:cfg proc_return_type:rt CODE_BLOCK:code STRING:description
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN proc_return_type:rt STRING:description
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:description
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN
| id_list:i proc_return_type:rt STRING:description
| id_list:i OPEN_PAREN proc_param_list:p CLOSE_PAREN STRING:src STRING:cfg proc_return_type:rt STRING:description
| id_list:i proc_return_type:rt CODE_BLOCK:code STRING:description
| id_list:i STRING:src STRING:cfg proc_return_type:rt CODE_BLOCK:code STRING:description
| id_list:i STRING:src STRING:cfg proc_return_type:rt STRING:description
;
proc_return_type
proc_return_type ::=
NONE:t
| RESULT_SET:t
| col_type:t
| col_type:t OPEN_PAREN TYPE_INTEGER:ti CLOSE_PAREN
| col_type:t OPEN_PAREN TYPE_INTEGER:t1 COMMA TYPE_INTEGER:t2 CLOSE_PAREN
;
proc_param_list
proc_param_list ::=
| proc_param:p
| proc_param_list:l COMMA proc_param:p
;
proc_param
proc_param ::=
id:i col_type:t param_dir:d
| id:i col_type:t OPEN_PAREN TYPE_INTEGER:ti CLOSE_PAREN param_dir:d
| id:i col_type:t OPEN_PAREN TYPE_INTEGER:t1 COMMA TYPE_INTEGER:t2 CLOSE_PAREN param_dir:d
;
param_dir
param_dir ::=
IN
| OUT
| IN_OUT
;
explain
explain ::=
SELECT select_union:s
create_view
create_view ::=
id_list:i OPEN_PAREN col_list:c CLOSE_PAREN AS SELECT select_union:s
| id_list:i AS SELECT select_union:s
;
with_check_option
with_check_option ::=
| WITH CHECK OPTION
| WITH LOCAL CHECK OPTION
| WITH CASCADE CHECK OPTION
;
create_index
create_index ::=
id_list:i1 ON id_list:i2 OPEN_PAREN index_col_list:c CLOSE_PAREN
;
del
del ::=
FROM id_list:l where:w
;
drop_table
drop_table ::=
id_list:l
| id_list:l CASCADE
| id_list:l CASCADE CONSTRAINTS
;
drop_procedure
drop_procedure ::=
id_list:l
| id_list:l DELETE
;
clone_database
clone_database ::=
id:new_db_name STRING:db_dir
;
drop_database
drop_database ::=
STRING:db_name
| STRING:db_name DELETE
;
create_database_legacy
create_database_legacy ::=
STRING:db_name STRING:data STRING:dictionary
| STRING:db_name STRING:data STRING:dictionary STRING:date_format STRING:date_suffix
| STRING:db_name STRING:data STRING:dictionary file_type:create_file_type
| STRING:db_name STRING:data STRING:dictionary file_type:create_file_type STRING:date_format STRING:date_suffix
;
create_database_enhanced
create_database_enhanced ::=
STRING:db_name STRING:data STRING:dictionary
| STRING:db_name STRING:data STRING:dictionary STRING:date_format STRING:date_suffix
| STRING:db_name STRING:data STRING:dictionary file_type:create_file_type
| STRING:db_name STRING:data STRING:dictionary file_type:create_file_type STRING:date_format STRING:date_suffix
;
create_table_supplement
create_table_supplement ::=
AUTO_INCREMENT EQ TYPE_INTEGER:i
;
file_type_and_mode
file_type_and_mode ::=
file_type:type
| file_type:type COMMA MODE EQ STRING:m
;
file_type
file_type ::=
MKEYED
| XKEYED
| MKEYED_R
| XKEYED_R
| VKEYED
| ESQL
| DEFAULT
;
drop_view
drop_view ::=
id_list:l
;
drop_index
drop_index ::=
id_list:l
;
index_col_list
index_col_list ::=
index_col:c
| index_col_list:l COMMA index_col:c
;
index_col
index_col ::=
id_list:i asc:a
;
table_col_list
table_col_list ::=
table_col:c
| table_col_list:l COMMA table_col:c
;
table_col
table_col ::=
id:i col_type:t col_qual:q
| id:i ENUM OPEN_PAREN value_list:e CLOSE_PAREN col_qual:q
| id:i SET OPEN_PAREN value_list:e CLOSE_PAREN col_qual:q
| id:i col_type:t OPEN_PAREN TYPE_INTEGER:ti CLOSE_PAREN col_qual:q
| id:i col_type:t OPEN_PAREN TYPE_INTEGER:t1 COMMA TYPE_INTEGER:t2 CLOSE_PAREN col_qual:q
| id:i AS expression:e
| alter_table_constraint:c
| PRIMARY OPEN_PAREN col_list:l CLOSE_PAREN
| PRIMARY KEY OPEN_PAREN col_list:l CLOSE_PAREN
| INDEX OPEN_PAREN col_list:l CLOSE_PAREN
| KEY OPEN_PAREN col_list:l CLOSE_PAREN
| PRIMARY KEY OPEN_PAREN col_list:l CLOSE_PAREN id_list:name
| INDEX OPEN_PAREN col_list:l CLOSE_PAREN id_list:name
| KEY OPEN_PAREN col_list:l CLOSE_PAREN id_list:name
| KEY id_list:name OPEN_PAREN col_list:l CLOSE_PAREN
| FULLTEXT KEY OPEN_PAREN col_list:l CLOSE_PAREN id_list:name
| FULLTEXT KEY id_list:name OPEN_PAREN col_list:l CLOSE_PAREN
| UNIQUE INDEX OPEN_PAREN col_list:l CLOSE_PAREN id_list:name
| UNIQUE INDEX OPEN_PAREN col_list:l CLOSE_PAREN
| FOREIGN OPEN_PAREN col_list:l CLOSE_PAREN
| FOREIGN KEY OPEN_PAREN col_list:l CLOSE_PAREN
| FOREIGN KEY OPEN_PAREN col_list:r CLOSE_PAREN REFERENCES id_list:i references_col_list:l references_match:m references_on_clause:o deferred:d
| UNIQUE OPEN_PAREN col_list:l CLOSE_PAREN
| UNIQUE KEY OPEN_PAREN col_list:l CLOSE_PAREN
| UNIQUE KEY id_list:name OPEN_PAREN col_list:l CLOSE_PAREN
| NOT OP_NULL OPEN_PAREN col_list:l CLOSE_PAREN
| CHECK OPEN_PAREN boolean_exp:b CLOSE_PAREN
;
col_type
col_type ::=
CHAR
| CHARACTER
| CHARACTER VARYING
| CHAR VARYING
| VARCHAR
| TINYTEXT
| MEDIUMTEXT
| LONGVARCHAR
| LONGTEXT
| LONG VARCHAR
| LONG CHAR VARYING
| BINARY
| BINARY VARYING
| VARBINARY
| LONGVARBINARY
| BLOB
| LONGBLOB
| LONG VARBINARY
| LONG BINARY VARYING
| FLOAT
| DOUBLE
| REAL
| BYTE
| TINYINT
| SMALLINT
| INT
| MEDIUMINT
| INTEGER
| BIGINT
| UNSIGNED BYTE
| UNSIGNED TINYINT
| UNSIGNED SMALLINT
| UNSIGNED INT
| UNSIGNED INTEGER
| UNSIGNED BIGINT
| UNSIGNED REAL
| UNSIGNED FLOAT
| UNSIGNED DOUBLE
| UNSIGNED DECIMAL
| UNSIGNED NUMERIC
| TIMESTAMP
| TIME
| BIT
| BOOLEAN
| DECIMAL
| NUMERIC
| DATE
| DATETIME
;
col_qual
col_qual ::=
/* Nothing */
| col_val:v col_const_list:l
| col_const_list:l col_val:v
| col_const_list:l
| col_val:v
;
col_val
col_val ::=
DEFAULT OP_NULL
| DEFAULT expression:e
| AUTO_INCREMENT
| AUTO_INCREMENT OPEN_PAREN TYPE_INTEGER:s COMMA TYPE_INTEGER:i CLOSE_PAREN
| IDENTITY
| IDENTITY OPEN_PAREN TYPE_INTEGER:s COMMA TYPE_INTEGER:i CLOSE_PAREN
;
col_const_list
col_const_list ::=
col_const:c
| col_const_list:l col_const:c
| col_const_list:l CONSTRAINT id:i col_const:c
;
col_const
col_const ::=
PRIMARY
| PRIMARY KEY
| FOREIGN
| FOREIGN KEY
| INDEX
| UNIQUE
| UNIQUE KEY
| NOT OP_NULL
| OP_NULL
| CHECK OPEN_PAREN boolean_exp:b CLOSE_PAREN
| REFERENCES id_list:i references_col_list:l references_match:m references_on_clause:o /* deferred:d */
;
col_list
col_list ::=
id_list:i
| id_list:i OPEN_PAREN TYPE_INTEGER:l CLOSE_PAREN
| col_list:c COMMA id_list:i
;
set_list
set_list ::=
set:s
| set_list:l COMMA set:s
;
set
set ::=
id_list:i EQ OP_NULL
| id_list:i EQ expression:e
;
select_cols
select_cols ::=
select_qual:q top:t select_list:l
| select_qual:q top:t ASTERISK
;
select_qual
select_qual ::=
/* Nothing */
| ALL
| DISTINCT
;
select_list
select_list ::=
select_item:i
| select_list:l COMMA select_item:i
;
select_item
select_item ::=
expression:e
| expression:e id_for_select:i
| expression:e AS id:i
| expression:e AS OPEN_BRACE id:i CLOSE_BRACE
| expression:e AS STRING:s
| expression:e STRING:s
;
expression
expression ::=
expression:e PLUS times:t
| expression:e MINUS times:t
| times:t
;
times
times ::=
times:t ASTERISK neg:n
| times:t DIV neg:n
| times:t POWER neg:n
| neg:n
;
neg
neg ::=
term:t
| PLUS term:t
| MINUS term:t
;
term
term ::=
OPEN_PAREN expression:e CLOSE_PAREN
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| db_item_ref:r
| simple_term:t
| scalar:s
;
db_item_ref
db_item_ref ::=
id_list_for_db_item:l
| id_list_for_db_item:l OPEN_BRACE expression:e CLOSE_BRACE
| id_for_func:i OPEN_PAREN func_qual:q func_arg:a CLOSE_PAREN
| IFF OPEN_PAREN boolean_exp:b COMMA expression:e1 COMMA expression:e2 CLOSE_PAREN
| CAST OPEN_PAREN expression:e1 AS id_for_cast:t1 CLOSE_PAREN
| CAST OPEN_PAREN OP_NULL AS id_for_cast:t1 CLOSE_PAREN
| CONVERT OPEN_PAREN expression:e1 COMMA id:t1 CLOSE_PAREN
| CONVERT OPEN_PAREN OP_NULL COMMA id:t1 CLOSE_PAREN
| NULLIF OPEN_PAREN expression:e1 COMMA expression:e2 CLOSE_PAREN
| NULLIF OPEN_PAREN OP_NULL COMMA expression:e2 CLOSE_PAREN
| COALESCE OPEN_PAREN func_arg:a CLOSE_PAREN
| CASE when_list:w END
| CASE when_list:w ELSE expression:e END
| CASE expression:e1 when_expression_list:w END
| CASE expression:e1 when_expression_list:w ELSE expression:e2 END
;
when_list
when_list ::=
WHEN boolean_exp:b THEN expression:e
| when_list:w WHEN boolean_exp:b THEN expression:e
;
when_expression_list
when_expression_list ::=
WHEN expression:e1 THEN expression:e2
| when_expression_list:w WHEN expression:e1 THEN expression:e2
;
func_qual
func_qual ::=
/* Nothing */
| ALL
| DISTINCT
;
simple_term
simple_term ::=
real:r
| HEX_VALUE:h
| STRING:s
| QUESTION
| DATABASE OPEN_PAREN CLOSE_PAREN
| DATABASE
| USER OPEN_PAREN CLOSE_PAREN
| USER
| TRUE
| FALSE
| date:d
;
real
real ::=
TYPE_INTEGER:i
| TYPE_FLOAT:f
| TYPE_BIG_INT:b
;
scalar
scalar ::=
func:f
;
func
func ::=
OPEN_CURLY FN fn:f CLOSE_CURLY
;
fn
fn ::=
id:i OPEN_PAREN func_arg:a CLOSE_PAREN
;
func_arg
func_arg ::=
/* Nothing */
| ASTERISK
| func_args:a
;
func_args
func_args ::=
expression:e
| func_args:a COMMA expression:e
;
date
date ::=
OPEN_CURLY OP_D STRING:s CLOSE_CURLY
| OPEN_CURLY OP_TS STRING:s CLOSE_CURLY
| OPEN_CURLY OP_T STRING:s CLOSE_CURLY
;
for_update
for_update ::=
/* Nothing */
| FOR UPDATE
| FOR UPDATE OF for_update_column_list:l
| FOR READ ONLY
;
for_update_column_list
for_update_column_list ::=
id_list:l
| for_update_column_list:l1 COMMA id_list:l2
;
table_list
table_list ::=
table_list_item:i
| table_list:l COMMA table_list_item:i
;
table_list_item
table_list_item ::=
table_ref:r
| outer_join:o
| oj:o
| OPEN_PAREN table_list:o CLOSE_PAREN
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN id_for_table:i
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN OPEN_BRACE id:i CLOSE_BRACE
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN AS id_for_table:i
| OPEN_PAREN SELECT select_union:s CLOSE_PAREN AS OPEN_BRACE id:i CLOSE_BRACE
| OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN
| OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN id_for_table:i
| OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN OPEN_BRACE id_for_table:i CLOSE_BRACE
| OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN AS id_for_table:i
| OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN AS OPEN_BRACE id_for_table:i CLOSE_BRACE
;
table_ref
table_ref ::=
id_list:l
| id_list:l id_for_table:i
| id_list:l OPEN_BRACE id:i CLOSE_BRACE
| id_list:l AS id_for_table:i
| id_list:l AS OPEN_BRACE id:i CLOSE_BRACE
;
outer_join
outer_join ::=
OPEN_CURLY OJ oj:o CLOSE_CURLY
;
oj
oj ::=
table_list_item:t1 LEFT OUTER JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 RIGHT OUTER JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 LEFT JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 RIGHT JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 FULL OUTER JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 FULL JOIN table_list_item:t2 ON boolean_exp:b
| table_list_item:t1 INNER JOIN table_list_item:t2 ON boolean_exp:b
;
where
where ::=
/* Nothing */
| WHERE boolean_exp:b
| WHERE CURRENT OF id:i
;
group_by
group_by ::=
/* Nothing */
| GROUP BY group_by_list:g
;
group_by_list
group_by_list ::=
expression:e
| group_by_list:g COMMA expression:e
;
having
having ::=
/* Nothing */
| HAVING boolean_exp:b
;
order_by
order_by ::=
/* Nothing */
| ORDER BY order_by_list:l
;
order_by_list
order_by_list ::=
order_by_item:i
| order_by_list:l COMMA order_by_item:i
;
order_by_item
order_by_item ::=
expression:e asc:a
;
asc
asc ::=
/* Nothing */
| ASC
| DESC
;
boolean_exp
boolean_exp ::=
and:a
| and:a OR boolean_exp:b
;
and
and ::=
not:n
| not:n AND and:a
;
not
not ::=
comparison:c
| NOT comparison:c
;
comparison
comparison ::=
OPEN_PAREN boolean_exp:b CLOSE_PAREN
| db_item_ref:r IS OP_NULL
| db_item_ref:r IS NOT OP_NULL
| expression:e1 LIKE expression:e2
| expression:e1 NOT LIKE expression:e2
| expression:e1 REGEXP expression:e2
| expression:e1 NOT REGEXP expression:e2
| expression:e IN OPEN_PAREN value_list:v CLOSE_PAREN
| expression:e NOT IN OPEN_PAREN value_list:v CLOSE_PAREN
| expression:e1 op:o expression:e2
| expression:e1 op:o OPEN_PAREN boolean_exp:e2 CLOSE_PAREN
| OPEN_PAREN boolean_exp:e1 CLOSE_PAREN op:o expression:e2
| OPEN_PAREN boolean_exp:e1 CLOSE_PAREN op:o OPEN_PAREN boolean_exp:e2 CLOSE_PAREN
| EXISTS OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| EXISTS OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN
| expression:e op:o1 select_op:o2 OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| expression:e op:o1 select_op:o2 OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN
| expression:e IN OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| expression:e NOT IN OPEN_PAREN SELECT select_union:s CLOSE_PAREN
| expression:e IN OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN
| expression:e NOT IN OPEN_PAREN CALL id_list:p call_params:v CLOSE_PAREN
| expression:e1 BETWEEN expression:e2 AND expression:e3
| expression:e1 NOT BETWEEN expression:e2 AND expression:e3
;
select_op
select_op ::=
ALL
| SOME
| ANY
;
op
op ::=
GREATER_THAN
| GREATER_THAN_EQ
| LESS_THAN
| LESS_THAN_EQ
| EQ
| NOT_EQ
;
value_list
value_list ::=
OP_NULL
| expression:e
| value_list:l COMMA OP_NULL
| value_list:l COMMA expression:e
;
id_common
id_common ::=
ID:i
| NO
| INFO
| GET
| RESULT_SET
| BY
| ASC
| MAXVALUE
| DESC
| OJ
| OUTER
| JOIN
| FN
| OR
| AND
| OP_D
| OP_TS
| OP_T
| UPDATE
| INSERT
| REPLACE
| VALUES
| CREATE
| CHAR
| VARYING
| VARCHAR
| LONGVARCHAR
| BINARY
| VARBINARY
| LONGVARBINARY
| BLOB
| LONGTEXT
| FLOAT
| DOUBLE
| REAL
| BYTE
| SMALLINT
| INT
| INTEGER
| UNSIGNED
| DATETIME
| TIMESTAMP
| VIEW
| DELETE
| DROP
| PRIMARY
| FOREIGN
| UNIQUE
| BETWEEN
| LONG
| THEN
| ELSE
| END
| CURRENT
| OF
| ACTION
| PARTIAL
| MATCH
| IDENTITY
| LEGACY
| ENHANCED
| AUTO_INCREMENT
| BIGINT
| TINYINT
| BOOLEAN
| TIME
| READ
| ONLY
| RECOVER
| NOCHECK
| CHECK
| BEGIN
| TRANSACTION
| SAVEPOINT
| ROLLBACK
| COMMIT
| READ_ONLY
| SEQUENCE
| MODE
;
id_for_func
id_for_func ::=
id_common:i
| DATE
| TABLE
| AS
| FROM
| WHERE
| HAVING
| ORDER
| LEFT
| RIGHT
| INNER
| FULL
| ON
| GROUP
| SET
| UNION
| INTO
| KEY
;
id_for_db_item
id_for_db_item ::=
id_for_func:i
| IFF
| CONVERT
| CAST
| NULLIF
| COALESCE
;
id_for_table
id_for_table ::=
id_common:i
| TABLE
| AS
| FROM
| ALL
| SOME
| DISTINCT
| USER
| NOT
| IS
| LIKE
| REGEXP
| IN
| SELECT
| OP_NULL
| EXISTS
| ANY
| SET
| INTO
| TRUE
| FALSE
;
id_for_select
id_for_select ::=
id_common:i
| TABLE
| WHERE
| ALL
| SOME
| DISTINCT
| USER
| HAVING
| ORDER
| LEFT
| RIGHT
| INNER
| FULL
| ON
| GROUP
| NOT
| IS
| LIKE
| REGEXP
| IN
| SELECT
| OP_NULL
| EXISTS
| ANY
| SET
| IFF
| CONVERT
| CAST
| NULLIF
| COALESCE
| CASE
| WHEN
| TRUE
| FALSE
;
id_for_update
id_for_update ::=
id_common:i
| TABLE
| AS
| FROM
| WHERE
| ALL
| SOME
| DISTINCT
| USER
| HAVING
| ORDER
| LEFT
| RIGHT
| INNER
| FULL
| ON
| GROUP
| NOT
| IS
| LIKE
| REGEXP
| IN
| SELECT
| OP_NULL
| EXISTS
| ANY
| UNION
| IFF
| CONVERT
| CAST
| NULLIF
| COALESCE
| CASE
| WHEN
| INTO
| TRUE
| FALSE
;
id
id ::=
id_common:i
| TABLE
| AS
| FROM
| WHERE
| ALL
| SOME
| DISTINCT
| USER
| HAVING
| ORDER
| LEFT
| RIGHT
| INNER
| FULL
| ON
| GROUP
| NOT
| IS
| LIKE
| REGEXP
| IN
| OP_NULL
| EXISTS
| ANY
| SET
| UNION
| IFF
| CONVERT
| CAST
| NULLIF
| COALESCE
| CASE
| WHEN
| TRUE
| FALSE
;
id_for_cast
id_for_cast ::=
id_common:i
| NUMERIC
| DECIMAL
| BIT
| INTO
| TRUE
| FALSE
;
id_for_revoke
id_for_revoke ::=
id_common:i
| INTO
| TRUE
| FALSE
;
id_list
id_list ::=
id:i
| OPEN_BRACE id:i CLOSE_BRACE
| DATE
| OPEN_BRACE DATE CLOSE_BRACE
| id_list:l DOT DATE
| id_list:l DOT OPEN_BRACE DATE CLOSE_BRACE
| id_list:l DOT id:i
| id_list:l DOT OPEN_BRACE id:i CLOSE_BRACE
;
id_list_for_db_item
id_list_for_db_item ::=
id_for_db_item:i
| OPEN_BRACE id:i CLOSE_BRACE
| id_list_for_db_item:l DOT id_for_db_item:i
| id_list_for_db_item:l DOT OPEN_BRACE id:i CLOSE_BRACE
| id_list_for_db_item:l DOT ASTERISK
;
id_list_for_update
id_list_for_update ::=
id_for_update:i
| OPEN_BRACE id:i CLOSE_BRACE
| id_list_for_update:l DOT id_for_update:i
| id_list_for_update:l DOT OPEN_BRACE id:i CLOSE_BRACE
;
id_list_for_revoke
id_list_for_revoke ::=
id_for_revoke:i
| OPEN_BRACE id:i CLOSE_BRACE
| id_list_for_revoke:l DOT id_for_revoke:i
| id_list_for_revoke:l DOT OPEN_BRACE id:i CLOSE_BRACE
;
privilege_list
privilege_list ::=
privilege:p
| privilege_list:l COMMA privilege:p
;
privilege
privilege ::=
SELECT
| UPDATE
| INSERT
| DELETE
| CALL
| CREATE TABLE
| CREATE VIEW
| CREATE SEQUENCE
| CREATE PROCEDURE
| CREATE TRIGGER
| ALTER TABLE
| ALTER VIEW
| ALTER SEQUENCE
| ALTER PROCEDURE
| ALTER TRIGGER
| CREATE ROLE
| DROP TABLE
| DROP VIEW
| DROP SEQUENCE
| DROP PROCEDURE
| DROP TRIGGER
| DROP ROLE
| REFERENCES
| USAGE
| ALL
;
grant_object
grant_object ::=
id_list_for_revoke:i
| TABLE id_list:i
| VIEW id_list:i
| PROCEDURE id_list:i
| TRIGGER id_list:i
| SEQUENCE id_list:i
| ROLE id_list:i
| DOMAIN id_list:i
| CHARACTER SET id_list:i
| COLLATION id_list:i
| TRANSLATION id_list:i
| DATABASE
;
grant_option_for
grant_option_for ::=
| GRANT OPTION FOR
;
with_grant_option
with_grant_option ::=
| WITH GRANT OPTION
;
revoke_qual
revoke_qual ::=
| RESTRICT
| CASCADE
;
user_list
user_list ::=
STRING:u
| user_list:l COMMA STRING:u
;