Top level
|
| top |
: statement
| statement ';'
; |
| statement |
: alter
| blob
| commit
| create
| declare
| delete
| drop
| grant
| insert
| invoke_procedure
| revoke
| rollback
| select
| set
| update
| DEBUG signed_short_integer
; |
GRANT statement
|
| grant |
: GRANT privileges ON
prot_table_name TO user_grantee_list
grant_option
| GRANT proc_privileges ON PROCEDURE
simple_proc_name TO
user_grantee_list
grant_option
| GRANT privileges ON
prot_table_name TO grantee_list
| GRANT proc_privileges ON PROCEDURE
simple_proc_name TO
grantee_list
| GRANT role_name_list TO
role_grantee_list
role_admin_option
; |
| prot_table_name |
: simple_table_name
| TABLE simple_table_name
; |
| privileges |
: ALL
| ALL PRIVILEGES
| privilege_list
; |
| privilege_list |
: privilege
| privilege_list ','
privilege
; |
| proc_privileges |
: EXECUTE
; |
| privilege |
: SELECT
| INSERT
| DELETE
| UPDATE column_parens_opt
| REFERENCES column_parens_opt
; |
| grant_option |
: WITH GRANT OPTION
|
; |
| role_admin_option |
: WITH ADMIN OPTION
|
; |
| simple_proc_name |
: SYMBOL
; |
REVOKE statement
|
| revoke |
: REVOKE rev_grant_option
privileges ON
prot_table_name FROM user_grantee_list
| REVOKE rev_grant_option
proc_privileges ON PROCEDURE
simple_proc_name FROM
user_grantee_list
| REVOKE privileges ON
prot_table_name FROM user_grantee_list
| REVOKE proc_privileges ON PROCEDURE
simple_proc_name FROM
user_grantee_list
| REVOKE privileges ON
prot_table_name FROM grantee_list
| REVOKE proc_privileges ON PROCEDURE
simple_proc_name FROM
grantee_list
| REVOKE role_name_list FROM
role_grantee_list
; |
| rev_grant_option |
: GRANT OPTION FOR
; |
| grantee_list |
: grantee
| grantee_list ',' grantee
| grantee_list ','
user_grantee
| user_grantee_list ','
grantee
; |
| grantee |
: PROCEDURE SYMBOL
| TRIGGER SYMBOL
| VIEW SYMBOL
; |
| user_grantee_list |
: user_grantee
| user_grantee_list ','
user_grantee
; |
| user_grantee |
: SYMBOL
| USER SYMBOL
| GROUP SYMBOL
; |
| role_name_list |
: role_name
| role_name_list ','
role_name
; |
| role_name |
: SYMBOL
; |
| role_grantee_list |
: role_grantee
| role_grantee_list ','
role_grantee
; |
| role_grantee |
: SYMBOL
| USER SYMBOL
; |
DECLARE operations
|
| declare |
: DECLARE declare_clause
; |
| declare_clause |
: FILTER
filter_decl_clause
| EXTERNAL FUNCTION udf_decl_clause
; |
| udf_decl_clause |
: SYMBOL arg_desc_list1
RETURNS return_value1 ENTRY_POINT
sql_string MODULE_NAME
sql_string
; |
| udf_data_type |
: simple_type
| BLOB
| CSTRING '(' pos_short_integer ')'
charset_clause
; |
| arg_desc_list1 |
| arg_desc_list
| '(' arg_desc_list ')'
; |
| arg_desc_list |
: arg_desc
| arg_desc_list ','
arg_desc
; |
| arg_desc |
: init_data_type
udf_data_type
; |
| return_value1 |
: return_value
| '(' return_value ')'
; |
| return_value |
: init_data_type
udf_data_type
| init_data_type
udf_data_type FREE_IT
| init_data_type
udf_data_type BY KW_VALUE
| PARAMETER pos_short_integer
; |
| filter_decl_clause |
: SYMBOL INPUT_TYPE blob_subtype
OUTPUT_TYPE blob_subtype ENTRY_POINT
sql_string MODULE_NAME
sql_string
; |
CREATE metadata operations
|
| create |
: CREATE create_clause
; |
| create_clause |
: EXCEPTION SYMBOL sql_string
| unique_opt
order_direction INDEX SYMBOL ON
simple_table_name index_definition
| PROCEDURE procedure_clause
| TABLE table_clause
| TRIGGER def_trigger_clause
| VIEW view_clause
| GENERATOR generator_clause
| DATABASE db_clause
| DOMAIN domain_clause
| SHADOW shadow_clause
| ROLE role_clause
; |
CREATE INDEX
|
| unique_opt |
: UNIQUE
|
; |
| index_definition |
: column_list
| column_parens
| computed_by '('
begin_trigger value
end_trigger ')'
; |
CREATE SHADOW
|
| shadow_clause |
: pos_short_integer
manual_auto conditional
sql_string first_file_length
sec_shadow_files
; |
| manual_auto |
: MANUAL
| AUTO
| /* empty */
; |
| conditional |
| CONDITIONAL
; |
| first_file_length |
| LENGTH equals
long_integer page_noise
; |
| sec_shadow_files |
| db_file_list
; |
| db_file_list |
: db_file
| db_file_list db_file
; |
CREATE DOMAIN
|
| domain_clause |
: column_def_name
as_opt data_type
begin_trigger
domain_default_opt end_trigger
domain_constraint_clause
collate_clause
; |
| as_opt |
: AS
| /* empty */
; |
| domain_default_opt |
: DEFAULT begin_trigger
default_value
|
; |
| domain_constraint_clause |
| domain_constraint_list
; |
| domain_constraint_list
|
: domain_constraint_def
| domain_constraint_list
domain_constraint_def
; |
| domain_constraint_def
|
: domain_constraint
; |
| domain_constraint |
: null_constraint
| domain_check_constraint
; |
| null_constraint |
: NOT KW_NULL
; |
| domain_check_constraint
|
: begin_trigger CHECK '('
search_condition ')'
end_trigger
; |
CREATE GENERATOR
|
| generator_clause |
: SYMBOL
; |
CREATE ROLE
|
| role_clause |
: SYMBOL |
CREATE DATABASE
|
| db_clause |
db_name
db_initial_desc1 db_rem_desc1
; |
| equals |
| '='
; |
| db_name |
: sql_string
; |
| db_initial_desc1 |
| db_initial_desc
; |
| db_initial_desc |
: db_initial_option
| db_initial_desc
db_initial_option
; |
| db_initial_option |
: PAGE_SIZE equals
pos_short_integer
| LENGTH equals
long_integer page_noise
| USER sql_string
| PASSWORD sql_string
| SET NAMES sql_string
; |
| db_rem_desc1 |
| db_rem_desc
; |
| db_rem_desc |
: db_rem_option
| db_rem_desc
db_rem_option
; |
| db_rem_option |
: db_file
| db_log
| db_log_option
| DEFAULT CHARACTER SET character_set_name
; |
| db_log_option |
: GROUP_COMMIT_WAIT equals
long_integer
| CHECK_POINT_LEN equals
long_integer
| NUM_LOG_BUFS equals
pos_short_integer
| LOG_BUF_SIZE equals
unsigned_short_integer
; |
| db_log |
: db_default_log_spec
| db_rem_log_spec
; |
| db_rem_log_spec |
: LOGFILE '(' logfiles ')' OVERFLOW
logfile_desc
| LOGFILE BASENAME logfile_desc
; |
| db_default_log_spec |
: LOGFILE
; |
| db_file |
: file1
sql_string file_desc1
; |
| logfiles |
: logfile_desc
| logfiles ','
logfile_desc
; |
| logfile_desc |
: logfile_name
logfile_attrs
; |
| logfile_name |
: sql_string
; |
| logfile_attrs |
| logfile_attrs
logfile_attr
; |
| logfile_attr |
: SIZE equals
long_integer
; |
| file1 |
: KW_FILE
; |
| file_desc1 |
| file_desc
; |
| file_desc |
: file_clause
| file_desc file_clause
; |
| file_clause |
: STARTING
file_clause_noise long_integer
| LENGTH equals
long_integer page_noise
; |
| file_clause_noise |
| AT
| AT PAGE
; |
| page_noise |
| PAGE
| PAGES
; |
CREATE TABLE
|
| table_clause |
: simple_table_name
external_file '('
table_elements ')'
; |
| external_file |
: EXTERNAL KW_FILE sql_string
| EXTERNAL sql_string
|
; |
| table_elements |
: table_element
| table_elements ','
table_element
; |
| table_element |
: column_def
| table_constraint_definition
; |
COLUMN DEFINITION
|
| column_def |
: column_def_name
data_type_or_domain
default_opt end_trigger
column_constraint_clause
collate_clause
| column_def_name
non_array_type def_computed
| column_def_name
def_computed
; |
|
Value does allow parens around it, but there is a
problem getting the source text |
| def_computed |
: computed_by '('
begin_trigger value
end_trigger ')'
; |
| computed_by |
: COMPUTED BY
| COMPUTED
; |
| data_type_or_domain |
: data_type
begin_trigger
| simple_column_name begin_string
; |
| collate_clause |
: COLLATE collation_name
|
; |
| column_def_name |
: column_name
; |
| simple_column_def_name
|
: simple_column_name
; |
| data_type_descriptor |
: init_data_type
data_type |
| init_data_type |
; |
| default_opt |
: DEFAULT default_value
|
; |
| default_value |
: constant
| USER
| null_value
; |
| column_constraint_clause |
| column_constraint_list
; |
| column_constraint_list
|
: column_constraint_def
| column_constraint_list
column_constraint_def
; |
| column_constraint_def
|
: constraint_name_opt
column_constraint |
| column_constraint |
: NOT KW_NULL
| REFERENCES simple_table_name
column_parens_opt
referential_trigger_action
| check_constraint
| UNIQUE
| PRIMARY KEY
; |
TABLE CONSTRAINTS
|
| table_constraint_definition |
: constraint_name_opt
table_constraint
; |
| constraint_name_opt |
: CONSTRAINT SYMBOL
|
; |
| table_constraint |
: unique_constraint
| primary_constraint
| referential_constraint
| check_constraint
; |
| unique_constraint |
: UNIQUE column_parens
; |
| primary_constraint |
: PRIMARY KEY column_parens
; |
| referential_constraint
|
: FOREIGN KEY column_parens
REFERENCES simple_table_name
column_parens_opt
referential_trigger_action
; |
| check_constraint |
: begin_trigger CHECK '('
search_condition ')'
end_trigger
; |
| referential_trigger_action |
update_rule
| delete_rule
| delete_rule
update_rule
| update_rule
delete_rule
| /* empty */
; |
| update_rule |
: ON UPDATE
referential_action
; |
| delete_rule |
: ON DELETE
referential_action
; |
| referential_action |
: CASCADE
| SET DEFAULT
| SET KW_NULL
| NO ACTION
; |
CREATE PROCEDURE
|
| procedure_clause |
: SYMBOL input_parameters
output_parameters AS
begin_string var_declaration_list
full_proc_block
end_trigger
; |
| alter_procedure_clause
|
: SYMBOL input_parameters
output_parameters AS
begin_string var_declaration_list
full_proc_block
end_trigger
; |
| input_parameters |
'(' proc_parameters ')'
| /* empty */
; |
| output_parameters |
: RETURNS input_parameters
|
; |
| proc_parameters |
: proc_parameter
| proc_parameters ',' proc_parameter
; |
| proc_parameter |
:
simple_column_def_name non_array_type
; |
| var_declaration_list |
: var_declarations
|
; |
| var_declarations |
: var_declaration
| var_declarations
var_declaration
; |
| var_declaration |
: DECLARE VARIABLE
column_def_name non_array_type ';'
; |
| proc_block |
: proc_statement
| full_proc_block
; |
| full_proc_block |
: BEGIN proc_statements END
| BEGIN proc_statements
excp_statements END
; |
| proc_statements |
: proc_block
| proc_statements
proc_block
; |
| proc_statement |
: assignment ';'
| delete ';'
| EXCEPTION SYMBOL ';'
| exec_procedure
| for_select
| if_then_else
| insert ';'
| POST_EVENT value ';'
| singleton_select
| update ';'
| while
| SUSPEND ';'
| EXIT ';'
; |
| exec_procedure |
: EXECUTE PROCEDURE SYMBOL
proc_inputs proc_outputs ';'
; |
| for_select |
: FOR select INTO
variable_list
cursor_def DO proc_block
; |
| if_then_else |
: IF '(' search_condition
')' THEN proc_block ELSE
proc_block
| IF '(' search_condition ')' THEN
proc_block
; |
| singleton_select |
: select INTO variable_list ';'
; |
| variable |
':' SYMBOL
; |
| proc_inputs |
: var_const_list
| '(' var_const_list ')'
|
; |
| proc_outputs |
: RETURNING_VALUES
variable_list
| RETURNING_VALUES '(' variable_list ')'
|
; |
| var_const_list |
: variable
| constant
| column_name
| null_value
| var_const_list ','
variable
| var_const_list ','
constant
| var_const_list ','
column_name
| var_const_list ','
null_value
; |
| variable_list |
: variable
| column_name
| variable_list ','
column_name
| variable_list ','
variable
; |
| while |
: WHILE '(' search_condition
')' DO proc_block
; |
| cursor_def |
: AS CURSOR SYMBOL
|
; |
| excp_statements |
: excp_statement
| excp_statements
excp_statement
; |
| excp_statement |
: WHEN errors DO proc_block
; |
| errors |
: err
| errors ',' err
; |
| err |
: SQLCODE
signed_short_integer
| GDSCODE SYMBOL
| EXCEPTION SYMBOL
| ANY
; |
EXECUTE PROCEDURE
|
| invoke_procedure |
: EXECUTE PROCEDURE SYMBOL
prc_inputs
; |
| prc_inputs |
: prm_const_list
| '(' prm_const_list ')'
|
; |
| prm_const_list |
: parameter
| constant
| null_value
| prm_const_list ','
parameter
| prm_const_list ','
constant
| prm_const_list ','
null_value
; |
CREATE VIEW
|
| view_clause |
: SYMBOL column_parens_opt
AS begin_string
select_view check_opt
end_string
; |
| select_view |
: select_view_expr
; |
| select_view_expr |
: SELECT distinct_clause
select_list
from_view_clause where_clause
group_clause
having_clause plan_clause
; |
| from_view_clause |
: FROM from_view_list
; |
| from_view_list |
: view_table
| from_view_list ','
view_table
; |
| view_table |
: joined_view_table
| table_name
; |
| joined_view_table |
: view_table
join_type JOIN view_table ON
search_condition
| '(' joined_view_table ')'
; |
|
These rules will capture the input string for storage in
metadata |
| begin_string |
; |
| end_string |
; |
| begin_trigger |
; |
| end_trigger |
; |
| check_opt |
: WITH CHECK OPTION
|
; |
CREATE TRIGGER
|
| def_trigger_clause |
: SYMBOL FOR
simple_table_name trigger_active
trigger_type trigger_position begin_trigger trigger_action end_trigger
; |
| trigger_active |
: ACTIVE
| INACTIVE
|
; |
| trigger_type |
: BEFORE INSERT
| AFTER INSERT
| BEFORE UPDATE
| AFTER UPDATE
| BEFORE DELETE
| AFTER DELETE
; |
| trigger_position |
: POSITION
nonneg_short_integer
|
; |
| trigger_action |
: AS begin_trigger
var_declaration_list
full_proc_block
; |
ALTER statement
|
| alter |
: ALTER alter_clause
; |
| alter_clause |
: EXCEPTION SYMBOL sql_string
| TABLE simple_table_name
alter_ops
| TRIGGER alter_trigger_clause
| PROCEDURE alter_procedure_clause
| DATABASE init_alter_db
alter_db
| DOMAIN simple_column_name
alter_domain_ops
| INDEX alter_index_clause
; |
| alter_domain_ops |
: alter_domain_op
| alter_domain_ops
alter_domain_op
; |
| alter_domain_op |
: SET begin_string
default_opt end_trigger
| ADD CONSTRAINT
domain_check_constraint
| ADD domain_check_constraint
| DROP DEFAULT
| DROP CONSTRAINT
; |
| alter_ops |
: alter_op
| alter_ops ',' alter_op
; |
| alter_op |
: DROP simple_column_name
drop_behaviour
| DROP CONSTRAINT SYMBOL
| ADD column_def
| ADD table_constraint_definition
; |
| drop_behaviour |
: RESTRICT
| CASCADE
|
; |
| alter_index_clause |
: SYMBOL ACTIVE
| SYMBOL INACTIVE
; |
ALTER DATABASE
|
| init_alter_db |
; |
| alter_db |
: db_alter_clause
| alter_db
db_alter_clause
; |
| db_alter_clause |
: ADD db_file_list
| DROP LOGFILE
| SET db_log_option_list
| ADD db_log
; |
| db_log_option_list |
: db_log_option
| db_log_option_list ','
db_log_option
; |
ALTER TRIGGER
|
| alter_trigger_clause |
: SYMBOL trigger_active
new_trigger_type trigger_position begin_trigger new_trigger_action end_trigger
; |
| new_trigger_type |
: trigger_type
|
; |
| new_trigger_action |
: trigger_action
|
; |
DROP metadata operations
|
| drop |
: DROP drop_clause
; |
| drop_clause |
: EXCEPTION SYMBOL
| INDEX SYMBOL
| PROCEDURE SYMBOL
| TABLE SYMBOL
| TRIGGER SYMBOL
| VIEW SYMBOL
| FILTER SYMBOL
| DOMAIN SYMBOL
| EXTERNAL FUNCTION SYMBOL
| SHADOW pos_short_integer
| ROLE SYMBOL
; |
|
These are the allowable datatypes |
| data_type |
: non_array_type
| array_type
; |
| non_array_type |
: simple_type
| blob_type
; |
| array_type |
:
non_charset_simple_type '[' array_spec ']'
| character_type '['
array_spec ']' charset_clause
; |
| array_spec |
: array_range
| array_spec ','
array_range
; |
| array_range |
: signed_long_integer
| signed_long_integer ':'
signed_long_integer
; |
| simple_type |
:
non_charset_simple_type
| character_type
charset_clause
; |
| non_charset_simple_type
|
:
national_character_type
| numeric_type
| float_type
| integer_keyword
| SMALLINT
| DATE
; |
| integer_keyword |
: INTEGER
| KW_INT
; |
|
Allow a blob to be specified with any combination of
segment length and subtype |
| blob_type |
: BLOB blob_subtype
blob_segsize
charset_clause
| BLOB '(' unsigned_short_integer ')'
| BLOB '(' unsigned_short_integer ','
signed_short_integer ')'
| BLOB '(' ',' signed_short_integer ')'
; |
| blob_segsize |
: SEGMENT SIZE
unsigned_short_integer
|
; |
| blob_subtype |
: SUB_TYPE
signed_short_integer
| SUB_TYPE subtype_name
|
; |
| charset_clause |
: CHARACTER SET
character_set_name
|
; |
CHARACTER type
|
| national_character_type
|
:
national_character_keyword '('
pos_short_integer ')'
| national_character_keyword
| national_character_keyword VARYING
'(' pos_short_integer ')'
; |
| character_type |
: character_keyword '('
pos_short_integer ')'
| character_keyword
| varying_keyword '('
pos_short_integer ')'
; |
| varying_keyword |
: VARCHAR
| CHARACTER VARYING
| KW_CHAR VARYING
; |
| character_keyword |
: CHARACTER
| KW_CHAR
; |
| national_character_keyword |
: NCHAR
| NATIONAL CHARACTER
| NATIONAL KW_CHAR
; |
| character_set_name |
: SYMBOL
; |
| collation_name |
: SYMBOL
; |
| subtype_name |
: SYMBOL
; |
NUMERIC type
|
| numeric_type |
: KW_NUMERIC prec_scale
| decimal_keyword
prec_scale
; |
| ordinal |
: pos_short_integer
; |
| prec_scale |
| '(' pos_short_integer ')'
| '(' pos_short_integer ','
nonneg_short_integer ')'
; |
| decimal_keyword |
: DECIMAL
| KW_DEC
; |
FLOATING POINT type
|
| float_type |
: KW_FLOAT precision_opt
| KW_LONG KW_FLOAT precision_opt
| REAL
| KW_DOUBLE PRECISION
; |
| precision_opt |
'(' nonneg_short_integer
')'
|
; |
SET statements
|
| set |
: set_transaction
| set_generator
| set_statistics
; |
| set_generator |
: SET GENERATOR SYMBOL TO
signed_long_integer
; |
TRANSACTION statements
|
| commit |
: COMMIT optional_work
optional_retain
; |
| rollback |
: ROLLBACK optional_work
; |
| optional_work |
: WORK
|
; |
| optional_retain |
: RETAIN opt_snapshot
|
; |
| opt_snapshot |
: SNAPSHOT
|
; |
| set_transaction |
: SET TRANSACTION
tran_opt_list_m
; |
| tran_opt_list_m |
: tran_opt_list
|
; |
| tran_opt_list |
: tran_opt
| tran_opt_list tran_opt
; |
| tran_opt |
: access_mode
| lock_wait
| isolation_mode
| tbl_reserve_options
; |
| access_mode |
: READ ONLY
| READ WRITE
; |
| lock_wait |
: WAIT
| NO WAIT
; |
| isolation_mode |
: ISOLATION LEVEL iso_mode
| iso_mode
; |
| iso_mode |
: snap_shot
| READ UNCOMMITTED version_mode
| READ COMMITTED version_mode
; |
| snap_shot |
: SNAPSHOT
| SNAPSHOT TABLE
| SNAPSHOT TABLE STABILITY
; |
| version_mode |
: VERSION
| NO VERSION
|
; |
| tbl_reserve_options |
: RESERVING restr_list
; |
| lock_type |
: SHARED
| PROTECTED
|
; |
| lock_mode |
: READ
| WRITE
; |
| restr_list |
: restr_option
| restr_list ','
restr_option
; |
| restr_option |
: table_list table_lock
; |
| table_lock |
: FOR lock_type
lock_mode
|
; |
| table_list |
: simple_table_name
| table_list ','
simple_table_name
; |
| set_statistics |
: SET STATISTICS INDEX SYMBOL |
SELECT statement
|
| select |
: union_expr
order_clause
for_update_clause
; |
| union_expr |
: select_expr
| union_expr UNION
select_expr
| union_expr UNION ALL
select_expr
; |
| order_clause |
: ORDER BY order_list
|
; |
| order_list |
: order_item
| order_list ','
order_item
; |
| order_item |
: column_name
collate_clause
order_direction
| ordinal collate_clause
order_direction
; |
| order_direction |
: ASC
| DESC
|
; |
| for_update_clause |
: FOR UPDATE for_update_list
|
; |
| for_update_list |
: OF column_list
|
; |
SELECT expression
|
| select_expr |
: SELECT distinct_clause
select_list from_clause
where_clause
group_clause having_clause
plan_clause
; |
| distinct_clause |
: DISTINCT
| all_noise
; |
| select_list |
: select_items
| '*'
; |
| select_items |
: select_item
| select_items ','
select_item
; |
| select_item |
: rhs
| rhs SYMBOL
| rhs AS SYMBOL
; |
FROM clause
|
| from_clause |
: FROM from_list
; |
| from_list |
: table_reference
| from_list ','
table_reference
; |
| table_reference |
: joined_table
| table_proc
; |
| joined_table |
: table_reference
join_type JOIN
table_reference ON search_condition
| '(' joined_table ')'
; |
| table_proc |
: SYMBOL proc_table_inputs
SYMBOL
| SYMBOL proc_table_inputs
; |
| proc_table_inputs |
'(' null_or_value_list ')'
|
; |
| null_or_value_list |
: null_or_value
| null_or_value_list ','
null_or_value
; |
| null_or_value |
: null_value
| value
; |
| table_name |
: simple_table_name
| SYMBOL SYMBOL
; |
| simple_table_name |
: SYMBOL
; |
| join_type |
: INNER
| LEFT
| LEFT OUTER
| RIGHT
| RIGHT OUTER
| FULL
| FULL OUTER
|
; |
Other clauses in the
SELECT expression
|
| group_clause |
: GROUP BY grp_column_list
|
; |
| grp_column_list |
: grp_column_elem
| grp_column_list ','
grp_column_elem
; |
| grp_column_elem |
: column_name
| column_name COLLATE
collation_name
; |
| having_clause |
: HAVING search_condition
|
; |
| where_clause |
: WHERE search_condition
| /* empty */
; |
PLAN clause to specify an
access plan for a query
|
| plan_clause |
: PLAN plan_expression
|
; |
| plan_expression |
: plan_type '('
plan_item_list ')'
; |
|
For now, the SORT operator is a no-op; it does not
change the place where a sort happens, but is just intended to read the output
from a SET PLAN |
| plan_type |
: JOIN
| SORT MERGE
| MERGE
| SORT
|
; |
| plan_item_list |
: plan_item
| plan_item ','
plan_item_list
; |
| plan_item |
: table_or_alias_list
access_type
| plan_expression
; |
| table_or_alias_list |
: SYMBOL
| SYMBOL table_or_alias_list
; |
| access_type |
: NATURAL
| INDEX '(' index_list ')'
| ORDER SYMBOL
; |
| index_list |
: SYMBOL
| SYMBOL ',' index_list
; |
INSERT statement
|
| insert |
: INSERT INTO
simple_table_name column_parens_opt
VALUES '(' insert_value_list ')'
| INSERT INTO simple_table_name
column_parens_opt
select_expr
; |
| insert_value_list |
: rhs
| insert_value_list ','
rhs
; |
DELETE statement
|
| delete |
: delete_searched
| delete_positioned
; |
| delete_searched |
: DELETE FROM table_name
where_clause
; |
| delete_positioned |
: DELETE FROM table_name
cursor_clause
; |
| cursor_clause |
: WHERE CURRENT OF SYMBOL
; |
UPDATE statement
|
| update |
: update_searched
| update_positioned
; |
| update_searched |
: UPDATE table_name SET
assignments
where_clause
; |
| update_positioned |
: UPDATE table_name SET
assignments
cursor_clause
; |
| assignments |
: assignment
| assignments ','
assignment
; |
| assignment |
: column_name '='
rhs
; |
| rhs |
: value
| null_value
; |
BLOB get and put
|
| blob |
: READ BLOB
simple_column_name FROM simple_table_name
filter_clause
segment_clause
| INSERT BLOB simple_column_name INTO
simple_table_name
filter_clause segment_clause
; |
| filter_clause |
: FILTER FROM
blob_subtype_value TO blob_subtype_value
| FILTER TO blob_subtype_value
|
; |
| blob_subtype_value |
: blob_subtype
| parameter
; |
| blob_subtype |
: signed_short_integer
; |
| segment_clause |
: MAX_SEGMENT segment_length
|
; |
| segment_length |
:
unsigned_short_integer
| parameter
; |
Column specifications
|
| column_parens_opt |
: column_parens
|
; |
| column_parens |
'(' column_list ')'
; |
| column_list |
: column_name
| column_list ','
column_name
; |
| column_name |
: simple_column_name
| SYMBOL '.' SYMBOL
| SYMBOL '.' '*'
; |
| simple_column_name |
: SYMBOL
; |
Boolean expressions
|
| search_condition |
: predicate
| search_condition OR
search_condition
| search_condition AND
search_condition
| NOT search_condition
; |
| predicate |
: comparison_predicate
| between_predicate
| like_predicate
| in_predicate
| null_predicate
| quantified_predicate
| exists_predicate
| containing_predicate
| starting_predicate
| unique_predicate
| '(' search_condition ')'
; |
Cmparisons
|
| comparison_predicate |
: value '=' value
| value '<' value
| value '>' value
| value GEQ value
| value LEQ value
| value NOT_GTR value
| value NOT_LSS value
| value NEQ value
; |
Quantified comparisons
|
| quantified_predicate |
: value '=' ALL '('
column_select ')'
| value '<' ALL '('
column_select ')'
| value '>' ALL '('
column_select ')'
| value GEQ ALL '('
column_select ')'
| value LEQ ALL '('
column_select ')'
| value NOT_GTR ALL '('
column_select ')'
| value NOT_LSS ALL '('
column_select ')'
| value NEQ ALL '('
column_select ')'
| value '=' some '('
column_select ')'
| value '<' some '('
column_select ')'
| value '>' some '('
column_select ')'
| value GEQ some '('
column_select ')'
| value LEQ some '('
column_select ')'
| value NOT_GTR some '('
column_select ')'
| value NOT_LSS some '('
column_select ')'
| value NEQ some '('
column_select ')'
; |
| some |
: SOME
| ANY
; |
Other predicates
|
| between_predicate |
: value BETWEEN
value AND value
| value NOT BETWEEN value AND
value
; |
| like_predicate |
: value LIKE
value
| value NOT LIKE value
| value LIKE value ESCAPE
value
| value NOT LIKE value ESCAPE
value
; |
| in_predicate |
: value IN
scalar_set
| value NOT IN scalar_set
; |
| containing_predicate |
: value CONTAINING
value
| value NOT CONTAINING value
; |
| starting_predicate |
: value STARTING
value
| value NOT STARTING value
| value STARTING WITH value
| value NOT STARTING WITH value
; |
| exists_predicate |
: EXISTS '(' select_expr ')'
; |
| unique_predicate |
: SINGULAR '(' select_expr ')'
; |
| null_predicate |
: value IS KW_NULL
| value IS NOT KW_NULL
; |
Set values
|
| scalar_set |
'(' constant_list ')'
| '(' column_select ')'
; |
| column_select |
: SELECT distinct_clause
value from_clause
where_clause group_clause
having_clause plan_clause
; |
| column_singleton |
: SELECT distinct_clause
value from_clause
where_clause group_clause
having_clause plan_clause
; |
Value types
|
| value |
: column_name
| array_element
| function
| u_constant
| parameter
| variable
| udf
| '-' value
| '+' value
| value '+' value
| value CONCATENATE value
| value COLLATE
collation_name
| value '-' value
| value '*' value
| value '/' value
| '(' value ')'
| '(' column_singleton ')'
| USER
| DB_KEY
| SYMBOL '.'DB_KEY
| KW_VALUE
; |
| array_element |
: column_name '['
value_list ']'
; |
| value_list |
: value
| value_list ',' value
; |
| constant |
: u_constant
| '-' u_numeric_constant
; |
| u_numeric_constant |
: NUMERIC
| NUMBER
| FLOAT
; |
| u_constant |
: u_numeric_constant
| sql_string
; |
| constant_list |
: constant
| parameter
| current_user
| constant_list ','
constant
| constant_list ','
parameter
| constant_list ','
current_user
; |
| parameter |
'?'
; |
| current_user |
: USER
; |
| sql_string |
: STRING /* string in current charset */
| INTRODUCER STRING /* string in specific charset */
; |
| signed_short_integer |
: nonneg_short_integer
| '-' neg_short_integer
; |
| nonneg_short_integer |
: NUMBER
; |
| neg_short_integer |
: NUMBER
; |
| pos_short_integer |
: nonneg_short_integer
; |
| unsigned_short_integer
|
: NUMBER
; |
| signed_long_integer |
: long_integer
| '-' long_integer
; |
| long_integer |
: NUMBER
; |
| function |
: COUNT '(' '*' ')'
| COUNT '(' all_noise value ')'
| COUNT '(' DISTINCT value ')'
| SUM '(' all_noise value ')'
| SUM '(' DISTINCT value ')'
| AVG '(' all_noise value ')'
| AVG '(' DISTINCT value ')'
| MINIMUM '(' all_noise value
')'
| MINIMUM '(' DISTINCT value ')'
| MAXIMUM '(' all_noise value
')'
| MAXIMUM '(' DISTINCT value ')'
| CAST '(' rhs AS
data_type_descriptor ')'
| KW_UPPER '(' value ')'
| GEN_ID '(' SYMBOL ',' value ')'
; |
| udf |
: SYMBOL '(' value_list ')'
| SYMBOL '(' ')'
; |
| all_noise |
: ALL
|
; |
| null_value |
: KW_NULL
; |