#############################################################################
##                                                                         ##
##  This is an automatically generated syntax of ATSQL2 and only meant to  ##
##  show the basic ideas for the time being.                               ##
##                                                                         ##
##  Andreas Steiner, December 12, 1995                                     ##
##                                                                         ##
#############################################################################


sql ::= 'quit',';'.
sql ::= status_control,';'.
sql ::= data_control,';'.
sql ::= data_manipulation,';'.
sql ::= data_definition,';'.
sql ::= query_language,';'.

valid_exp ::= scalar_exp.
valid_exp ::= [].

time_flag ::= 'nonsequenced','valid',valid_exp,'and','nonsequenced','transaction'.
time_flag ::= 'nonsequenced','transaction','and','nonsequenced','valid',valid_exp.
time_flag ::= 'nonsequenced','valid',valid_exp,'and','transaction'.
time_flag ::= 'transaction','and','nonsequenced','valid',valid_exp.
time_flag ::= 'valid','and','nonsequenced','transaction'.
time_flag ::= 'nonsequenced','transaction','and','valid'.
time_flag ::= 'transaction','and','valid'.
time_flag ::= 'valid','and','transaction'.
time_flag ::= 'nonsequenced','valid',valid_exp.
time_flag ::= 'nonsequenced','transaction'.
time_flag ::= 'transaction'.
time_flag ::= 'valid'.
time_flag ::= [].

query_language ::= time_flag,table_set_expression.

subquery_select_statement ::= table_set_expression.

table_set_expression ::= table_set_term,table_set_expression2.
table_set_expression2 ::= 'union',table_set_term,table_set_expression2.
table_set_expression2 ::= 'except',table_set_term,table_set_expression2.
table_set_expression2 ::= [].

table_set_term ::= table_set_faktor,table_set_term2.
table_set_term2 ::= 'intersect',table_set_faktor,table_set_term2.
table_set_term2 ::= [].

table_set_faktor ::= select_expression.
table_set_faktor ::= '(',time_flag,table_set_expression,')',period.
table_set_faktor ::= '(',time_flag,table_set_expression,')',period.

period ::= '(','period',')'.
period ::= [].

ordering_clause ::= 'order','by',order_spec.
order_spec ::= order_item,order_spec2.
order_spec2 ::= ',',order_spec.
order_spec2 ::= [].
order_item ::= ordering_column,order_item2.
order_item2 ::= 'asc'.
order_item2 ::= 'desc'.
order_item2 ::= [].
ordering_column ::= column_reference.
ordering_column ::= integer.

select_expression ::= select_clause,from_clause,select_expression2.
select_expression2 ::= where_clause,select_expression3.
select_expression2 ::= select_expression3.
select_expression3 ::= [].
select_expression4 ::= having_clause.
select_expression4 ::= [].

select_clause ::= 'select',select_clause2.
select_clause ::= 'select',select_clause2.
select_clause ::= 'select',select_clause2.
select_clause2 ::= 'all',select_clause3.
select_clause2 ::= 'distinct',select_clause3.
select_clause2 ::= select_clause3.
select_clause3 ::= select_spec.

select_spec ::= select_item,select_spec2.
select_spec2 ::= ',',select_item,select_spec2.
select_spec2 ::= [].

select_item ::= '*'.
select_item ::= range_variable,'.','*'.
select_item ::= scalar_exp,select_item2.
select_item2 ::= 'as',ident.
select_item2 ::= ident.
select_item2 ::= [].

period ::= '(','period',')'.

table_coal ::= [].
table_coal ::= period.


from_clause ::= 'from',table_ref,from_clause2.
from_clause2 ::= ',',table_ref,from_clause2.
from_clause2 ::= [].

table_ref ::= '(',query_language,')',table_coal,table_ref2,derived_column_list.
table_ref ::= table_name,table_coal,table_ref3.
table_ref2 ::= 'as',range_variable.
table_ref2 ::= range_variable.
table_ref3 ::= 'as',range_variable.
table_ref3 ::= range_variable.
table_ref3 ::= [].

derived_column_list ::= '(',column_list,')'.
derived_column_list ::= [].

where_clause ::= 'where',predicate_exp.

grouping_clause ::= 'group','by',column_reference,grouping_clause2.
grouping_clause2 ::= ',',column_reference,grouping_clause2.
grouping_clause2 ::= [].

having_clause ::= 'having',predicate_exp.


predicate_exp ::= predicate_term,predicate_exp2.
predicate_exp2 ::= 'or',predicate_term,predicate_exp2.
predicate_exp2 ::= [].

predicate_term ::= predicate_factor,predicate_term2.
predicate_term2 ::= 'and',predicate_factor,predicate_term2.
predicate_term2 ::= [].

predicate_factor ::= 'not',condition.
predicate_factor ::= condition.

condition ::= compare_condition.
condition ::= in_condition.
condition ::= exists_condition.
condition ::= '(',predicate_exp,')'.
condition ::= between_condition.

compare_condition ::= scalar_exp,compare_condition2.
compare_condition2 ::= compare_op,compare_condition4.
compare_condition2 ::= 'is',compare_condition3.
compare_condition3 ::= 'not','null'.
compare_condition3 ::= 'null'.
compare_condition4 ::= scalar_exp.
compare_condition4 ::= '(',subquery_select_statement,')'.

in_condition ::= scalar_exp,in_condition2.
in_condition2 ::= 'not',in_condition3.
in_condition2 ::= in_condition3.
in_condition3 ::= 'in','(',set_of_scalars,')'.

set_of_scalars ::= subquery_select_statement.
set_of_scalars ::= constant,set_of_scalars2.
set_of_scalars2 ::= ',',constant,set_of_scalars2.
set_of_scalars2 ::= [].

exists_condition ::= 'exists','(',subquery_select_statement,')'.

between_condition ::= column_reference,between_condition2.
between_condition2 ::= 'not',between_condition3.
between_condition2 ::= between_condition3.
between_condition3 ::= 'between',scalar_exp,'and',scalar_exp.

like_condition ::= column_reference,like_condition2.
like_condition2 ::= 'not','like',scalar_exp.
like_condition2 ::= 'like',scalar_exp.

compare_op ::= '='.
compare_op ::= '<>'.
compare_op ::= '<'.
compare_op ::= '>'.
compare_op ::= '<='.
compare_op ::= '>='.
compare_op ::= 'precedes'.
compare_op ::= 'overlaps'.
compare_op ::= 'meets'.
compare_op ::= 'contains'.

scalar_exp ::= '+',scalar_term,scalar_exp2.
scalar_exp ::= '-',scalar_term,scalar_exp2.
scalar_exp ::= scalar_term,scalar_exp2.
scalar_exp2 ::= '+',scalar_term,scalar_exp2.
scalar_exp2 ::= '-',scalar_term,scalar_exp2.
scalar_exp2 ::= [].

scalar_term ::= scalar_value,scalar_term2.
scalar_term2 ::= '/',scalar_value,scalar_term2.
scalar_term2 ::= '*',scalar_value,scalar_term2.
scalar_term2 ::= [].

scalar_value ::= column_reference.
scalar_value ::= interval_primary.
scalar_value ::= event_primary.
scalar_value ::= span_primary.
scalar_value ::= constant.
scalar_value ::= 'greatest','(',scalar_exp_list,')'.
scalar_value ::= 'least','(',scalar_exp_list,')'.
scalar_value ::= set_function_reference.
scalar_value ::= 'abs','(',scalar_exp,')'.
scalar_value ::= '(',scalar_exp,')'.

scalar_exp_list ::= scalar_exp,scalar_exp_list2.
scalar_exp_list2 ::= ',',scalar_exp,scalar_exp_list2.
scalar_exp_list2 ::= [].

set_function_reference ::= 'count','(','*',')'.
set_function_reference ::= set_function_name,'(',set_function_reference2,')'.
set_function_reference2 ::= scalar_exp.
set_function_reference2 ::= 'distinct',column_reference.

set_function_name ::= 'count'.
set_function_name ::= 'sum'.
set_function_name ::= 'avg'.
set_function_name ::= 'max'.
set_function_name ::= 'min'.

interval_primary ::= interval_literal.
interval_primary ::= 'valid','(',table_name,')'.
interval_primary ::= 'transaction','(',table_name,')'.
interval_primary ::= interval_value_function.
interval_literal ::= 'period',interval_to_internal.
interval_value_function ::= 'period','(',scalar_exp,',',scalar_exp,')'.
interval_value_function ::= 'intersect','(',scalar_exp,',',scalar_exp,')'.

event_primary ::= event_literal.
event_primary ::= event_value_function.
event_literal ::= 'timestamp',event_literal2.
event_literal ::= 'date',event_literal2.
event_literal2 ::= event_to_internal.
event_value_function ::= 'begin','(',scalar_exp,')'.
event_value_function ::= 'end','(',scalar_exp,')'.
event_value_function ::= 'first','(',scalar_exp,',',scalar_exp,')'.
event_value_function ::= 'last','(',scalar_exp,',',scalar_exp,')'.
event_value_function ::= 'present'.

span_primary ::= span_literal.
span_primary ::= span_value_function.
span_literal ::= 'interval','+',string,qualifier.
span_literal ::= 'interval','-',string,qualifier.
span_literal ::= 'interval',string,qualifier.
span_value_function ::= 'interval','(',scalar_exp,')'.
span_value_function ::= 'absolute','(',scalar_exp,')'.

qualifier ::= 'year'.
qualifier ::= 'month'.
qualifier ::= 'day'.
qualifier ::= 'hour'.
qualifier ::= 'minute'.
qualifier ::= 'second'.
qualifier ::= [].

manip_time_flag ::= 'nonsequenced','valid',valid_exp.
manip_time_flag ::= 'valid'.
manip_time_flag ::= [].

data_manipulation ::= manip_time_flag,insert_statement.
data_manipulation ::= manip_time_flag,delete_statement.
data_manipulation ::= manip_time_flag,update_statement.

insert_statement ::= 'insert','into',table_name,insert_statement1.
insert_statement1 ::= source_values.

source_values ::= subquery_select_statement.
source_values ::= 'values','(',insert_item,source_values2,')'.
source_values2 ::= ',',insert_item,source_values2.
source_values2 ::= [].

insert_item ::= constant.

delete_statement ::= 'delete','from',table_ref,delete_statement1.
delete_statement1 ::= where_clause.
delete_statement1 ::= [].

update_statement ::= 'update',table_ref,'set',column_assignment,update_statement1.
update_statement1 ::= where_clause.
update_statement1 ::= [].

column_assignment ::= '(',column_list,')','=',subquery_select_statement.
column_assignment ::= column_reference,'=',constant,column_assignment1.
column_assignment1 ::= ',',column_reference,'=',constant,column_assignment1.
column_assignment1 ::= [].

table_ref ::= table_name,range_variable.
table_ref ::= table_name.

data_definition ::= create.
data_definition ::= drop.
data_definition ::= alter.

create ::= 'create',base_table_def.
create ::= 'create',view_def.
create ::= 'create',create_assertion.
create ::= 'create'.

drop ::= 'drop',table_drop.
drop ::= 'drop',view_drop.
drop ::= 'drop',assertion_drop.
drop ::= 'drop'.

base_table_def ::= 'table',table_name,base_table_def1,temp_spec.
base_table_def1 ::= '(',column_list,')','as',query_language.
base_table_def1 ::= '(',base_table_element_spec,')'.
base_table_def1 ::= 'as',query_language.

base_table_element_spec ::= column_def,base_table_element_spec2.
base_table_element_spec ::= column_def,base_table_element_spec2.
base_table_element_spec2 ::= ',',column_def,base_table_element_spec2.
base_table_element_spec2 ::= ',',column_def,base_table_element_spec2.
base_table_element_spec2 ::= [].

column_def ::= column_name,column_def1.
column_def1 ::= data_type,column_constraint_def.

column_constraint_def ::= column_constraint,column_constraint_def.
column_constraint_def ::= [].
column_constraint ::= 'not','null'.
column_constraint ::= 'primary','key'.
column_constraint ::= 'unique'.
column_constraint ::= 'valid','references',ident,'(',ident,')'.
column_constraint ::= 'references',ident,'(',ident,')'.
column_constraint ::= 'valid','check','(',predicate_exp,')'.
column_constraint ::= 'check','(',predicate_exp,')'.

temp_spec ::= 'as','valid',time_granularity,'and','transaction'.
temp_spec ::= 'as','transaction','and','valid'.
temp_spec ::= 'as','valid',time_granularity.
temp_spec ::= 'as','transaction'.
temp_spec ::= [].

table_drop ::= 'table',table_name.

view_def ::= 'view',table_name,view_def1.
view_def1 ::= '(',column_list,')','as',query_language.
view_def1 ::= 'as',query_language.

view_drop ::= 'view',table_name.

create_assertion ::= 'assertion',ident,'check','(',assertion_query,')'.

assertion_query ::= 'exists','(',subquery_select_statement,')'.
assertion_query ::= 'valid','exists','(',subquery_select_statement,')'.
assertion_query ::= 'not','exists','(',subquery_select_statement,')'.
assertion_query ::= 'valid','not','exists','(',subquery_select_statement,')'.
assertion_drop ::= 'assertion',table_name.

alter ::= 'alter','table',table_name,alter_action.

alter_action ::= 'add',table_constraint.
alter_action ::= 'add','valid',time_granularity.
alter_action ::= 'add','transaction'.
alter_action ::= 'add',column_def.
alter_action ::= 'drop','valid'.
alter_action ::= 'drop','transaction'.
alter_action ::= 'drop',column_name.

time_granularity ::= 'year'.
time_granularity ::= 'month'.
time_granularity ::= 'day'.
time_granularity ::= 'hour'.
time_granularity ::= 'minute'.
time_granularity ::= 'second'.
time_granularity ::= [].

table_constraint ::= 'valid','check','(',predicate_exp,')'.
table_constraint ::= 'check','(',predicate_exp,')'.

data_control ::= 'commit'.
data_control ::= 'check'.
data_control ::= 'rollback'.
data_control ::= 'open',chk.
data_control ::= 'close'.
data_control ::= identifier.
data_control ::= 'batch',chk,chk.

status_control ::= 'status'.
status_control ::= 'trace'.
status_control ::= 'notrace'.
status_control ::= 'remove','clock'.
status_control ::= 'set','calendric','system',calendar.
status_control ::= 'set','clock','to',event_literal,granularity.

calendar ::= ident.
calendar ::= 'default'.

granularity ::= 'add','year'.
granularity ::= 'add','month'.
granularity ::= 'add','day'.
granularity ::= 'add','hour'.
granularity ::= 'add','minute'.
granularity ::= 'add','second'.
granularity ::= [].

table_name ::= ident.

column_reference ::= range_variable,'.',column_name.
column_reference ::= column_name.

column_name ::= identifier.

range_variable ::= identifier.

ident ::= identifier.

constant ::= integer.
constant ::= real.
constant ::= string.
constant ::= interval_literal.
constant ::= event_literal.
constant ::= span_literal.
constant ::= 'null'.

integer ::= '+',number.
integer ::= '-',number.
integer ::= number.

real ::= '+',number.
real ::= '-',number.
real ::= number.

string ::= string.

column_list ::= column_name,column_list2.
column_list2 ::= ',',column_name,column_list2.
column_list2 ::= [].

data_type ::= 'float'.
data_type ::= 'integer'.
data_type ::= 'number'.
data_type ::= 'period'.
data_type ::= 'timestamp'.
data_type ::= 'date'.
data_type ::= 'interval'.
data_type ::= 'char','(',integer,')'.
data_type ::= 'varchar','(',integer,')'.
