[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Reduce-Reduce errors in SQL92 grammar
I am building a SQL92 parser with SableCC. However, I am getting
multiple reduce/reduce errors ..... Can anyone suggest how I could
resolve these issues?
Sometimes, I get an exception from org.sablecc.sablecc.SableCC.main
(more specifically a call to append from Inlining.inline)
Any ideas?
- T
The sepcification file is
------------------------------
Package com.ibm.hippo.SQL92Parser;
Helpers
all = [0 .. 127];
cr = 13;
lf = 10;
eol = cr | lf | cr lf;
tab = 9;
sq = ''';
non_eol = [all - [cr + lf] ];
not_db = [all-'"'];
not_sb = [all-sq];
doublequoted = '"' not_db* '"';
singlequoted = sq not_sb* sq;
ucase = ['A'-'Z'];
lcase = ['a'-'z'];
digit = ['0'-'9'];
sign = ('+' | '-');
bits = ('0' | '1')+;
hex = ( ['0'..'9'] | ['a'-'f'] | ['A'-'F'] )+;
binary_literal = 'B' sq bits sq;
hex_literal = 'X' sq hex sq;
unsigned_numeric = digit+ ('.' digit* )?;
signed_numeric = sign digit+ ( '.' digit* )?;
year = (digit digit digit digit);
month = ('0' |'1') ['0'-'2'];
day = ['0'-'3'] digit;
date = year '-' month '-' day;
hours = ['0'-'2'] digit;
mins = ['0'-'5'] digit;
secs = ['0'-'5'] digit;
nano = digit digit digit digit digit digit;
time = hours ':' mins ':' secs ( '.' nano )?;
timezone_displacement = sign hours ':' mins;
h_comment = '--' non_eol* eol;
Tokens
/****************/
/* White Spaces */
/****************/
comments = h_comment;
blanks = ( eol | tab | ' ')+;
/****************/
/* Time Tokenss */
/****************/
year_int = year;
month_int = month;
time_int = time;
date_int = date;
day_int = day;
hour_int = hours;
min_int = mins;
sec_int = secs;
nano_int = nano;
timestamp_int = date time;
timezone_int = timezone_displacement;
/**************/
/* Delimiters */
/**************/
/* A Character String literal */
character_string_literal = singlequoted;
/* a delimited identifier */
delimited_identifier = doublequoted;
/* sql special characters */
dbl_quote = '"';
percent = '%';
ampersand = '&';
single_quote = sq;
openbr = '(';
closebr = ')';
star = '*';
plus = '+';
comma = ',';
dash = '-';
dot = '.';
slash = '/';
colon = ':';
semi_colon = ';';
lt = '<';
eq = '=';
gt = '>';
qmark = '?';
underscore = '_';
log_or = '|';
/* extra symbols */
neq = '<>';
lteq = '<=';
gteq = '>=';
concat = '||';
dotdot = '..';
opensqbr = '(';
closesqbr = ')?';
/*****************/
/* nondelimiters */
/*****************/
/* reserved key words */
absolute = 'ABSOLUTE' | 'absolute';
action = 'ACTION' | 'action';
add = 'ADD' | 'add';
all = 'ALL' | 'all';
allocate = 'ALLOCATE' | 'allocate';
alter = 'ALTER' | 'alter';
and = 'AND' | 'and';
any = 'ANY' | 'any';
are = 'ARE' | 'are';
as = 'AS' | 'as';
asc = 'ASC' | 'asc';
assertion = 'ASSERTION' | 'assertion';
at = 'AT' | 'at';
authorization = 'AUTHORIZATION' | 'authorization';
avg = 'AVG' | 'avg';
begin = 'BEGIN' | 'begin';
between = 'BETWEEN' | 'between';
bit = 'BIT' | 'bit';
bit_length = 'BIT_LENGTH' | 'bit_length';
both = 'BOTH' | 'both';
by = 'BY' | 'by';
cascade = 'CASCADE' | 'cascade';
cascaded = 'CASCADED' | 'cascaded';
case = 'CASE' | 'case';
cast = 'CAST' | 'cast';
catalog = 'CATALOG' | 'catalog';
char = 'CHAR' | 'char';
character = 'CHARACTER' | 'character';
char_length = 'CHAR_LENGTH' | 'char_length';
character_length = 'CHARACTER_LENGTH' | 'character_length';
check = 'CHECK' | 'check';
close = 'CLOSE' | 'close';
coalesce = 'COALESCE' | 'coalesce';
collate = 'COLLATE' | 'collate';
collation = 'COLLATION' | 'collation';
column = 'COLUMN' | 'column';
commit = 'COMMIT' | 'commit';
connect = 'CONNECT' | 'connect';
connection = 'CONNECTION' | 'connection';
constraint = 'CONSTRAINT' | 'constraint';
constraints = 'CONSTRAINTS' | 'constraints';
continue = 'CONTINUE' | 'continue';
convert = 'CONVERT' | 'convert';
corresponding = 'CORRESPONDING' | 'corresponding';
count = 'COUNT' | 'count';
create = 'CREATE' | 'create';
cross = 'CROSSS' | 'cross';
current = 'CURRENT' | 'current';
current_date = 'CURRENT_DATE' | 'current_date';
current_time = 'CURRENT_TIME' | 'current_time';
current_timestamp = 'CURRENT_TIMESTAMP' | 'current_timestamp';
current_user = 'CURRENT_USER' | 'current_user';
cursor = 'CURSOR' | 'cursor';
date = 'DATE' | 'date';
day = 'DAY' | 'day';
deallocate = 'DEALLOCATE' | 'deallocate';
dec = 'DEC' | 'dec';
decimal = 'DECIMAL' | 'decimal';
declare = 'DECLARE' | 'declare';
default = 'DEFAULT' | 'default';
deferrable = 'DEFERRABLE' | 'deferrable';
deferred = 'DEFERRED' | 'deferred';
delete = 'DELETE' | 'delete';
desc = 'DESC' | 'desc';
describe = 'DESCRIBE' | 'describe';
descriptor = 'DESCRIPTOR' | 'descriptor';
diagnostics = 'DIAGNOSTICS' | 'diagnostics';
disconnect = 'DISCONNECT' | 'disconnect';
distinct = 'DISTINCT' | 'distinct';
domain = 'DOMAIN' | 'domain';
double = 'DOUBLE' | 'double';
drop = 'DROP' | 'drop';
else = 'ELSE' | 'else';
end = 'END' | 'end';
end_exec = 'END-EXEC' | 'end-exec';
escape = 'ESCAPE' | 'escape';
except = 'EXCEPT' | 'except';
exception = 'EXCEPTION' | 'exception';
exec = 'EXEC' | 'exec';
execute = 'EXECUTE' | 'execute';
exists = 'EXISTS' | 'exists';
external = 'EXTERNAL' | 'external';
extract = 'EXTRACT' | 'extract';
false = 'FALSE' | 'false';
fetch = 'FETCH' | 'fetch';
first = 'FIRST' | 'first';
float = 'FLOAT' | 'float';
for = 'FOR' | 'for';
foreign = 'FOREIGN' | 'foreign';
found = 'FOUND' | 'found';
from = 'FROM' | 'from';
full = 'FULL' | 'full';
get = 'GET' | 'get';
global = 'GLOBAL' | 'global';
go = 'GO' | 'go';
goto = 'GOTO' | 'goto';
grant = 'GRANT' | 'grant';
group = 'GROUP' | 'group';
having = 'HAVING' | 'having';
hour = 'HOUR' | 'hour';
identity = 'IDENTITY' | 'identity';
immediate = 'IMMEDIATE' | 'immediate';
in = 'IN' | 'in';
indicator = 'INDICATOR' | 'indicator';
initially = 'INITIALLY' | 'initially';
inner = 'INNER' | 'inner';
input = 'INPUT' | 'input';
insensitive = 'INSENSITIVE' | 'insensitive';
insert = 'INSERT' | 'insert';
int = 'INT' | 'int';
integer = 'INTEGER' | 'integer';
intersect = 'INTERSECT' | 'intersect';
interval = 'INTERVAL' | 'interval';
into = 'INTO' | 'into';
is = 'IS' | 'is';
isolation = 'ISOLATION' | 'isolation';
join = 'JOIN' | 'join';
key = 'KEY' | 'key';
language = 'LANGUAGE' | 'language';
last = 'LAST' | 'last';
leading = 'LEADING' | 'leading';
left = 'LEFT' | 'left';
level = 'LEVEL' | 'level';
like = 'LIKE' | 'like';
local = 'LOCAL' | 'local';
lower = 'LOWER' | 'lower';
match = 'MATCH' | 'match';
max = 'MAX' | 'max';
min = 'MIN' | 'min';
minute = 'MINUTE' | 'minute';
module = 'MODULE' | 'module';
month = 'MONTH' | 'month';
names = 'NAMES' | 'names';
national = 'NATIONAL' | 'national';
natural = 'NATURAL' | 'natural';
nchar = 'NCHAR' | 'nchar';
next = 'NEXT' | 'next';
no = 'NO' | 'no';
not = 'NOT' | 'not';
null = 'NULL' | 'null';
nullif = 'NULLIF' | 'nullif';
numeric = 'NUMERIC' | 'numeric';
octet_length = 'OCTET_LENGTH' | 'octet_length';
of = 'OF' | 'of';
on = 'ON' | 'on';
only = 'ONLY' | 'only';
open = 'OPEN' | 'open';
option = 'OPTION' | 'option';
or = 'OR' | 'or';
order = 'ORDER' | 'order';
outer = 'OUTER' | 'outer';
output = 'OUTPUT' | 'output';
overlaps = 'OVERLAPS' | 'overlaps';
pad = 'PAD' | 'pad';
partial = 'PARTIAL' | 'partial';
position = 'POSITION' | 'position';
precision = 'PRECISION' | 'precision';
prepare = 'PREPARE' | 'prepare';
preserve = 'PRESERVE' | 'preserve';
primary = 'PRIMARY' | 'primary';
prior = 'PRIOR' | 'prior';
privileges = 'PRIVILEGES' | 'privileges';
procedure = 'PROCEDURE' | 'procedure';
public = 'PUBLIC' | 'public';
read = 'READ' | 'read';
real = 'REAL' | 'real';
references = 'REFERENCES' | 'references';
relative = 'RELATIVE' | 'relative';
restrict = 'RESTRICT' | 'restrict';
revoke = 'REVOKE' | 'revoke';
right = 'RIGHT' | 'right';
rollback = 'ROLLBACK' | 'rollback';
rows = 'ROWS' | 'rows';
schema = 'SCHEMA' | 'schema';
scroll = 'SCROLL' | 'scroll';
second = 'SECOND' | 'second';
section = 'SECTION' | 'section';
select = 'SELECT' | 'select';
session = 'SESSION' | 'session';
session_user = ' SESSION_USER' | 'session_user';
set = 'SET' | 'set';
size = 'SIZE' | 'size';
smallint = 'SMALLINT' | 'smallint';
some = 'SOME' | 'some';
space = 'SPACE' | 'space';
sql = 'SQL' | 'sql';
sqlcode = 'SQLCODE' | 'sqlcode';
sqlerror = 'SQLERROR' | 'sqlerror';
sqlstate = 'SQLSTATE' | 'sqlstate';
substring = 'SUBSTRING' | 'substring';
sum = 'SUM' | 'sum';
system_user = 'SYSTEM_USER' | 'system_user';
table = 'TABLE' | 'table';
temporary = 'TEMPORARY' | 'temporary';
then = 'THEN' | 'then';
time = 'TIME' | 'time';
timestamp = 'TIMESTAMP' | 'timestamp';
timezone_hour = 'TIMEZINE_HOUR' | 'timezone_hour';
timezone_minute = 'TIMEZONE_MINUTE' | 'timezone_minute';
to = 'TO' | 'to';
trailing = 'TRAILING' | 'trailing';
transaction = 'TRANSACTION' | 'transaction';
translate = 'TRANSLATE' | 'translate';
translation = 'TRANSLATION' | 'translation';
trim = 'TRIM' | 'trim';
true = 'TRUE' | 'true';
union = 'UNION' | 'union';
unique = 'UNIQUE' | 'unique';
unknown = 'UNKNOWN' | 'unknown';
update = 'UPDATE' | 'update';
upper = 'UPPER' | 'upper';
usage = 'USAGE' | 'usage';
user = 'USER' | 'user';
using = 'USING' | 'using';
value = 'VALUE' | 'value';
values = 'VALUES' | 'values';
varchar = 'VARCHAR' | 'varchar';
varying = 'VARYING' | 'varying';
view = 'VIEW' | 'view';
when = 'WHEN' | 'when';
whenever = 'WHENEVER' | 'whenever';
where = 'WHERE' | 'where';
with = 'WITH' | 'with';
work = 'WORK' | 'work';
write = 'WRITE' | 'write';
year = 'YEAR' | 'year';
zone = 'ZONE' | 'zone';
/* semi-reserved key words */
ada = 'ADA' | 'ada';
c = 'C' | 'c';
catalog_name = 'CATALOG_NAME' | 'catalog_name';
character_set_catalog = 'CHARACTER_SET_CATALOG' |
'character_set_catalog';
character_set_name = 'CHARACTER_SET_NAME' |
'character_set_name';
character_set_schema = ' CHARACTER_SET_SCHEMA' |
'character_set_schema';
class_origin = 'CLASS_ORIGIN' | 'class_origin';
cobol = 'COBOL' | 'cobol';
collation_catalog = 'COLLATION_CATALOG' | 'collation_catalog';
collation_name = 'COLLATION_NAME' | 'collation_name';
collation_schema = 'COLLATION_SCHEMA' | 'collation_schema';
column_name = 'COLUMN_NAME' | 'column_name';
command_function = 'COMMAND_FUNCTION' | 'command_function';
committed = 'COMMITTED' | 'committed';
condition_number = 'CONDITION_NUMBER' | 'condition_number';
connection_name = 'CONNECTION_NAME' | 'connection_name';
constraint_catalog = 'CONSTRAINT_CATALOG' |
'constraint_catalog';
constraint_name = 'CONSTRAINT_NAME' | 'constraint_name';
constraint_schema = ' CONSTRAINT_SCHEMA' | 'constraint_schema';
cursor_name = 'CURSOR_NAME' | 'cursor_name';
data = 'DATA' | 'data';
datetime_interval_code = 'DATETIME_INTERVAL_CODE' |
'datetime_interval_code';
datetime_interval_precision = ' DATETIME_INTERVAL_PRECISION' |
'datetime_interval_precision';
dynamic_function = 'DYNAMIC_FUNCTION' | 'dynamic_function';
fortran = 'FORTRAN' | 'FORTRAN';
length = 'LENGTH' | 'length';
message_length = 'MESSAGE_LENGTH' | 'message_length';
message_octet_length = ' MESSAGE_OCTET_LENGTH' |
'message_octet_length';
message_text = 'MESSAGE_TEXT' | 'message_text';
more = 'MORE' | 'more';
mumps = 'MUMPS' | 'mumps';
name = 'NAME' | 'name';
nullable = 'NULLABLE' | 'nullable';
number = 'NUMBER' | 'number';
pascal = 'PASCAL' | 'pascal';
pli = 'PLI' | 'pli';
repeatable = 'REPEATABLE' | 'repeatable';
returned_length = 'RETURNED_LENGTH' | 'returned_length';
returned_octet_length = ' RETURNED_OCTET_LENGTH' |
'returned_octet_length';
returned_sqlstate = ' RETURNED_SQLSTATE' | 'returned_sqlstate';
row_count = 'ROW_COUNT' | 'row_count';
scale = 'SCALE' | 'scale';
schema_name = 'SCHEMA_NAME' | 'schema_name';
serializable = 'SERIALIZABLE' | 'serializable';
server_name = 'SERVER_NAME' | 'server_name';
subclass_origin = 'SUBCLASS_ORIGIN' | 'subclass_origin';
table_name = 'TABLE_NAME' | 'table_name';
type = 'TYPE' | 'type';
uncommitted = 'UNCOMMITTED' | 'uncommitted';
unnamed = 'UNNAMED' | 'unnamed';
/* a literal of type unsigned numeric, national character string
or bit string (inc hexademical string) */
bit_string_literal_both_rep = binary_literal | hex_literal;
exact_numeric_literal = unsigned_numeric | signed_numeric;
approx_numeric_literal = (unsigned_numeric | signed_numeric) 'e'
('-')? digit+;
/* a regular identifier */
identifier = ( ucase | lcase ) ( ucase | lcase | digit | '_')*;
integer_def = digit+;
bit_string_literal_bit = binary_literal;
Ignored Tokens
blanks,
comments;
Productions
sql_program = sql_statements+;
sql_statements =
sql_statement semi_colon;
sql_statement =
{schema_st} schema_st |
{data_st} data_st |
{transaction_st} transaction_st |
{connection_st} connection_st |
{session_st} session_st |
{diagnostics_st} diagnostics_st |
{exception_st} exception_st |
{dynamic_st} dynamic_st ;
schema_st =
{create_schema} schema_def |
{drop_schema} schema_drop |
{create_domain} domain_def |
{alter_domain} domain_alteration |
{drop_domain} domain_drop |
{create_table} base_table_def |
{alter_table} base_table_alteration |
{drop_table} base_table_drop |
{create_view} view_def |
{drop_view} view_drop |
{create_character_set} character_set_def |
{drop_character_set} character_set_drop |
{create_collation} collation_def |
{drop_collation} collation_drop |
{create_translation} translation_def |
{drop_translation} translation_drop |
{create_assertion} general_constraint_def |
{drop_assertion} general_constraint_drop |
{grant_authorization} authorization_def |
{revoke_authorization} authorization_drop;
data_st =
{declare_cursor} cursor_def |
{declare_local_temp_table} temporary_table_def |
{open_cursor} open_cursor |
{close_cursor} close_cursor |
{fetch_cursor} fetch_cursor |
{positioned_update} positioned_update |
{positioned_delete} positioned_delete |
{select_single_row} single_row_select |
{select_general} select_exp |
{insert} insert_stat |
{searched_update} searched_update |
{searched_delete} searched_delete;
transaction_st =
{set_transaction} set_transaction |
{set_constraints} set_constraints |
{commit} commit_statement |
{rollback} rollback_statement;
connection_st =
{connect} connect_statement |
{disconnect} disconnect_statement |
{set_connection} set_connection ;
session_st =
{set_session_authorization} set_authorization |
{set_catalog} set_catalog |
{set_schema} set_schema |
{set_time_zone} set_time_zone |
{set_names} set_names ;
diagnostics_st =
{get_diagnostics} get_diagnostics;
exception_st =
{whenever_stat} whenever_stat;
dynamic_st =
{execute_immediate} execute_immediate |
{execute_general} execute_stat |
{prepare} prepare_stat |
{describe_input} describe_input |
{dyn_positioned_update} dynamic_positioned_update |
{dyn_positioned_delete} dynamic_positioned_delete |
{deallocate_prepare} deallocate_prepare |
{allocate_cursor} allocate_cursor |
{define_dyn_cursor} dynamic_cursor_def |
{open_dyn_cursor} dynamic_open |
{close_dyn_cursor} dynamic_close |
{fetch_dyn_cursor} dynamic_fetch |
{allocate_descriptor} allocate_descriptor |
{set_descriptor} set_descriptor |
{get_descriptor} get_descriptor |
{deallocate_descriptor} deallocate_descriptor |
{define_module} module_def |
{define_procedure} procedure_def;
/* sessions, connections and transactions */
connect_statement =
connect to connect_db;
connect_db =
{default} default |
{named_db} lit_param_or_var as_clause? user_clause? ;
as_clause =
as lit_param_or_var;
user_clause =
user lit_param_or_var;
set_connection =
set connection connected_db_name;
connected_db_name =
{default} default |
{names_db} lit_param_or_var;
disconnect_statement =
disconnect disconnect_db;
disconnect_db =
{default} default |
{current} current |
{all} all |
{named_db} lit_param_or_var;
set_catalog =
set catalog resource_name_def;
set_schema =
set schema resource_name_def;
set_names =
set names resource_name_def;
set_authorization =
set session authorization resource_name_def;
resource_name_def =
{named} lit_param_or_var |
{system_defined} authid_function_ref;
set_time_zone =
set time zone timezone_name;
timezone_name =
{interval_exp} interval_exp |
{local} local ;
commit_statement =
commit work?;
rollback_statement =
rollback work?;
set_transaction =
set transaction trans_option_commalist;
trans_option_commalist =
trans_option next_trans_option*;
next_trans_option =
comma trans_option;
trans_option =
{diagnostics} diagnostics size integer_def |
{read} read_type |
{isolation} isolation level isolation_type ;
read_type =
{read_only} read only |
{read_write} read write;
isolation_type =
{read_uncommitted} read uncommitted |
{read_committed} read committed |
{repeatable_read} repeatable read |
{serializable} serializable;
/* data definition */
schema_def =
create schema schema_name_def? auth_user?
schema_character_set? schema_element_list?;
auth_user =
authorization user_name_def;
user_name_def =
{system_ref} authid_function_ref |
{actual_name} identifier;
schema_character_set =
default character set character_set;
schema_element_list =
schema_element+;
schema_element =
{domain} domain_def |
{base_table} base_table_def |
{view} view_def |
{authorization} authorization_def |
{gen_constr} general_constraint_def |
{char_set} character_set_def |
{collation} collation_def |
{translation} translation_def;
domain_def =
create domain domain_name_def as? data_type
default_def? domain_constraint_def?;
data_type =
{smallint} smallint |
{integer} integer |
{decimal} decimal openbr integer_def decimal_scale?
closebr |
{real} real |
{double} double |
{size} size |
{char} char char_quantifier? |
{varchar} varchar openbr integer_def closebr |
{date} date |
{time} time |
{timestamp} timestamp;
decimal_scale =
comma integer_def;
char_quantifier =
openbr integer_def closebr;
default_def =
default def_choices;
def_choices =
{literal} literal |
{niladic_func} niladic_function_ref |
{null} null;
base_table_def =
create table_decl? table base_table openbr
base_table_element_commalist closebr commit_action?;
table_decl =
table_scope temporary;
table_scope =
{global} global |
{local} local;
commit_action =
on commit create_commit_act rows;
create_commit_act =
{delete} delete |
{preserve} preserve;
base_table_element_commalist =
base_table_element more_base_table_element*;
more_base_table_element =
comma base_table_element;
base_table_element =
{column} column_def |
{base_table_constr} base_table_constraint_def;
column_def =
column_name_def column_type default_def?
column_constraint_def_list?;
column_type =
{data_type} data_type |
{domain} domain_name_def;
column_constraint_def_list =
column_constraint_def+;
view_def =
create view view_name_def
bracketed_comma_column_list? as table_exp view_opts?;
bracketed_comma_column_list =
openbr column_commalist closebr;
column_commalist =
column_name_def more_columns*;
more_columns =
comma column_name_def;
column_name_def =
table_name_qualifer? identifier;
table_name_qualifer =
table_or_view_def dot;
view_opts =
with cascading_opt? check option;
cascading_opt =
{cascaded} cascaded |
{local} local;
authorization_def =
grant priv_list on accessible_object to
grantee_commalist grant_opt?;
priv_list =
{privileges} privilege_commalist |
{all} all privileges ;
privilege_commalist =
privilege more_privilege*;
more_privilege =
comma privilege;
grantee_commalist =
grantee more_grantee*;
more_grantee =
comma grantee;
grant_opt =
with grant option;
general_constraint_def =
create assertion constraint_name_def check
openbr cond_exp closebr deferrability?;
deferrability =
initially deferrability_opts not? deferrable;
deferrability_opts =
{deferred} deferred |
{immediate} immediate;
privilege =
{select} select |
{insert} insert bracketed_comma_column_list? |
{update} update bracketed_comma_column_list? |
{delete} delete |
{references} references bracketed_comma_column_list? |
{usage} usage;
accessible_object =
{domain} domain domain_name_def |
{table} table? table_or_view_def |
{char_set} character set character_set |
{collation} collation collation_name_def |
{translation} translation translation_name_def;
grantee =
{user} user_name_def |
{public} public;
character_set_def =
create character set [c1]:character_set as? get
[c2]:character_set collate_opts?;
collate_opts =
{collate} collate collation_name_def |
{collation_source} collation from collation_source;
collation_source =
{external} external openbr [s1]:single_quote
collation_name_def [s2]:single_quote closebr |
{collation} collation_name_def |
{desc_collation} desc openbr collation_name_def closebr |
{default} default |
{translation} translation translation_name_def
translation_collation_opts?;
translation_collation_opts =
then collation collation_name_def;
collation_def =
create collation collation_name_def for
character_set from collation_source;
translation_def =
create translation translation_name_def for
[c1]:character_set
to [c2]:character_set from translation_source;
translation_source =
{external} external openbr [s1]:single_quote
translation_name_def [s2]:single_quote closebr |
{identity} identity |
{translation} translation_name_def;
domain_alteration =
alter domain domain_name_def
domain_alteration_action;
domain_alteration_action =
{default} domain_default_alteration_action |
{constraint} domain_constraint_alteration_action;
domain_default_alteration_action =
{set} set default_def |
{drop} drop default;
domain_constraint_alteration_action =
{add} add domain_constraint_def |
{drop} drop constr_def;
base_table_alteration =
alter table base_table
base_table_alteration_action;
base_table_alteration_action =
{column} column_alteration_action |
{base_table} base_table_constraint_alteration_action;
column_alteration_action =
{add} add column? column_def |
{alter} alter column? column_name_def alter_def_action
|
{drop} drop column? column_name_def drop_opts ;
alter_def_action =
{set} set default_def |
{drop} drop default;
drop_opts =
{restrict} restrict |
{cascade} cascade;
base_table_constraint_alteration_action =
{add} add base_table_constraint_def |
{drop} drop constr_def drop_opts;
schema_drop =
drop schema schema_name_def drop_opts;
domain_drop =
drop domain domain_name_def drop_opts;
base_table_drop =
drop table base_table drop_opts;
view_drop =
drop view view_name_def drop_opts;
authorization_drop =
revoke auth_grant_opt? privilege_commalist on
accessible_object
from grantee_commalist drop_opts;
auth_grant_opt =
grant option for;
general_constraint_drop =
drop assertion constraint_name_def;
character_set_drop =
drop character set character_set;
collation_drop =
drop collation collation_name_def;
translation_drop =
drop translation translation_name_def;
/* modules */
module_def =
module module_name_def? names_opt? language
language_opts module_schema_opts? auth_user?
temporary_table_def_list? module_element_list;
names_opt =
names are character_set;
language_opts =
{ada} ada |
{c} c |
{cobol} cobol |
{fortran} fortran |
{mumps} mumps |
{pascal} pascal |
{pli} pli;
module_schema_opts =
schema schema_name_def;
temporary_table_def_list =
temporary_table_def+;
module_element_list =
module_element+;
temporary_table_def =
declare local temporary table module dot
base_table
openbr base_table_element_commalist closebr
commit_action?;
module_element =
{cursor} cursor_def |
{dynamic_cursor} dynamic_cursor_def |
{procedure} procedure_def;
procedure_def =
procedure procedure_name_def procedure_params
[sc1]:semi_colon
sql_statement [sc2]:semi_colon;
procedure_params =
{param_def_list} parameter_def_list |
{comma_param_def_list} openbr parameter_def_commalist closebr;
parameter_def_list =
parameter_def+;
parameter_def_commalist =
parameter_def more_parameter_def*;
more_parameter_def =
comma parameter_def;
parameter_def =
{param_data_type} parameter_name_def data_type |
{sqlcode} sqlcode |
{sqlstate} sqlstate;
parameter_name_def =
colon identifier param_data_type;
param_data_type =
{char} character openbr integer_def closebr |
{varchar} character varying openbr integer_def closebr|
{bit} bit openbr integer_def closebr|
{bitvar} bit varying openbr integer_def closebr|
{decimal} decimal openbr integer_def closebr|
{integer} integer |
{smallint} smallint |
{float} float openbr integer_def closebr;
/* data manipulation */
single_row_select =
select sel_opts? select_item_commalist
into target_commalist from table_ref_commalist
where_clause? group_by_clause? having_clause?;
sel_opts =
{all} all |
{distinct} distinct;
where_clause =
where cond_exp;
group_by_clause =
group by column_ref_commalist;
having_clause =
having cond_exp;
target_commalist =
target more_target*;
more_target =
comma target;
table_ref_commalist =
table_ref more_table_ref*;
more_table_ref =
comma table_ref;
column_ref_commalist =
column_ref more_column_ref*;
more_column_ref =
comma column_ref;
insert_stat =
insert into table_or_view_def insert_values;
insert_values =
{columns} bracketed_comma_column_list? table_exp |
{default} default values;
searched_update =
update table_or_view_def set
update_assignment_commalist where_clause?;
update_assignment_commalist =
update_assignment more_update_assignment*;
more_update_assignment =
comma update_assignment;
update_assignment =
column_name_def eq update_value;
update_value =
{scalar_exp} scalar_exp |
{default} default |
{null} null;
searched_delete =
delete from table_or_view_def where_clause? ;
cursor_def =
declare cursor_name_def insensitive? scroll?
cursor for table_exp
order_by_clause? for_clause?;
order_by_clause =
order by order_item_commalist;
order_item_commalist =
order_item more_order_item*;
more_order_item =
comma order_item;
order_item =
o_item o_order?;
o_item =
{column_name} column_name_def |
{integer} integer_def;
o_order =
{ascending} asc |
{descending} desc;
for_clause =
for for_purpose_list ;
for_purpose_list =
{read_only} read only |
{update} update for_upd_cols?;
for_upd_cols =
of column_commalist;
open_cursor =
open cursor_name_def;
fetch_cursor =
fetch opt_fetch_selector_clause? cursor_name_def
into target_commalist;
opt_fetch_selector_clause =
row_selector? from;
row_selector =
{next} next |
{prior} prior |
{first} first |
{last} last |
{absolute} absolute number_def |
{relative} relative number_def;
positioned_update =
update table_or_view_def
set update_assignment_commalist
where current of cursor_name_def;
positioned_delete =
delete from table_or_view_def
where current of cursor_name_def;
close_cursor =
close cursor_name_def;
/* table expressions */
table_exp =
{join} join_table_exp |
{nonjoin} nonjoin_table_exp;
join_table_exp =
{cross_join} [t1]:table_ref cross join [t2]:table_ref |
{natural_join} [t1]:table_ref natural? join_type? join
[t2]:table_ref join_cond? |
{compound} openbr join_table_exp closebr;
join_cond =
{condition} on cond_exp |
{column} using bracketed_comma_column_list;
table_ref =
{join_table_exp} join_table_exp |
{base_table_range} table_or_view_def as_option? |
{table_exp_range} openbr table_exp closebr as_option;
as_option =
as? range_variable bracketed_comma_column_list?;
join_type =
{inner} inner |
{left} left outer? |
{right} right outer? |
{full} full outer? |
{union} union;
nonjoin_table_exp =
{nonjoin_table_term} nonjoin_table_term |
{union_exc_table_exp} table_exp union_exc_opts all?
corresponding_by_clause? table_term;
union_exc_opts =
{union} union |
{except} except;
corresponding_by_clause =
corresponding optional_by?;
optional_by =
by bracketed_comma_column_list;
nonjoin_table_term =
{basic_nonjoin_table} nonjoin_table_primary |
{table_intersect_term} table_term intersect all?
corresponding_by_clause? table_primary;
table_term =
{join_table_exp} join_table_exp |
{nonjoin_table_term} nonjoin_table_term;
table_primary =
{join_table} join_table_exp |
{nonjoin_table} nonjoin_table_primary;
nonjoin_table_primary =
{nonjoin_table_exp} openbr nonjoin_table_exp closebr |
{select} select_exp |
{table} table table_or_view_def |
{table_constructor} table_constructor;
table_constructor =
values row_constructor_commalist;
row_constructor_commalist =
row_constructor more_row_constructor*;
more_row_constructor =
comma row_constructor;
row_constructor =
{scalar} scalar_exp |
{scalar_list} openbr scalar_exp_commalist closebr |
{table_exp} openbr table_exp closebr;
scalar_exp_commalist =
scalar_exp more_scalar_exp*;
more_scalar_exp =
comma scalar_exp;
select_exp =
select sel_opts? select_item_commalist from
table_ref_commalist
where_clause? group_by_clause? having_clause?;
select_item_commalist =
select_item more_select_item*;
more_select_item =
comma select_item;
select_item =
{scalar} scalar_exp select_as_opt? |
{all} range_qualifier? star ;
select_as_opt =
as? column_ref;
range_qualifier =
range_variable dot;
/* Condiitonal Expressions */
cond_exp =
{simple} cond_term |
{compound} compound_exp;
compound_exp =
cond_exp or cond_term;
cond_term =
{simple} cond_factor |
{compound} compound_term;
compound_term =
cond_term and cond_factor;
cond_factor =
not? cond_test;
cond_test =
cond_primary is_test? ;
is_test =
is not? is_test_values;
is_test_values =
{true} true |
{false} false |
{unknown} unknown;
cond_primary =
{simple} simple_cond |
{coumpound} openbr cond_exp closebr;
simple_cond =
{comparison} comparison_cond |
{between} between_cond |
{like} like_cond |
{in} in_cond |
{match} match_cond |
{all_or_any} all_or_any_cond |
{exists} exists_cond |
{unique} unique_cond |
{overlaps} overlaps_cond |
{test_for_null} test_for_null;
comparison_cond =
[r1]:row_constructor comparison_operator
[r2]:row_constructor;
comparison_operator =
{equals} eq |
{less_than} lt |
{less_than_or_eq} lteq |
{gr_than} gt |
{gr_than_or_eq} gteq |
{not_equal_to} neq;
between_cond =
[r1]:row_constructor not? between
[r2]:row_constructor and [r3]:row_constructor;
like_cond =
[c1]:character_string_exp not? like
[c2]:character_string_exp escape_opt?;
escape_opt =
escape character_string_exp;
in_cond =
{row} row_constructor not? in openbr table_exp closebr
|
{scalar} scalar_exp not? in openbr scalar_exp_commalist
closebr;
match_cond =
row_constructor match unique? match_cond_opt?
openbr table_exp closebr;
match_cond_opt =
{partial} partial |
{full} full;
all_or_any_cond =
row_constructor comparison_operator
all_or_any_opts openbr table_exp closebr;
all_or_any_opts =
{all} all |
{any} any |
{some} some ;
exists_cond =
exists openbr table_exp closebr;
unique_cond =
unique openbr table_exp closebr;
overlaps_cond =
[o1]:openbr [s1]:scalar_exp [c1]:comma
[s2]:scalar_exp [cb1]:closebr overlaps
[o2]:openbr [s3]:scalar_exp [c2]:comma
[s4]:scalar_exp [cb2]:closebr;
test_for_null =
row_constructor is not? null;
/* constraints */
domain_constraint_def =
constr_def? check openbr cond_exp closebr
deferrability?;
constr_def =
constraint constraint_name_def;
base_table_constraint_def =
{cand_key} constr_def? candidate_key_def deferrability? |
{for_key} constr_def? foreign_key_def deferrability? |
{check_constr} constr_def? check_constraint_def deferrability?
;
candidate_key_def =
key_opts bracketed_comma_column_list;
key_opts =
{primary} primary key |
{unique} unique;
foreign_key_def =
foreign key bracketed_comma_column_list
references_def;
references_def =
references base_table
bracketed_comma_column_list?
match_opt? on_delete_opt?
on_update_opt?;
match_opt =
match match_choices;
match_choices =
{full} full |
{partial} partial;
on_delete_opt =
on delete referential_action;
on_update_opt =
on update referential_action;
referential_action =
{no_action} no action |
{cascade} cascade |
{set_default} set default |
{set_null} set null;
check_constraint_def =
check openbr cond_exp closebr;
column_constraint_def =
{not_null} constr_def? not null deferrability? |
{prim_key} constr_def? key_opts? deferrability? |
{references} constr_def? references_def deferrability? |
{cond_exp} constr_def? check openbr cond_exp closebr
deferrability?;
set_constraints =
set constraints set_constr_list set_constr_opts
;
set_constr_list =
{constraint_list} constraint_commalist |
{all} all;
set_constr_opts =
{deferred} deferred |
{immediate} immediate;
constraint_commalist =
constraint_name_def more_constraint_name_def*;
more_constraint_name_def =
comma constraint_name_def;
/* dynamic sql */
execute_immediate =
execute immediate param_or_var;
prepare_stat =
prepare prepared from param_or_var;
prepared =
{prepped_stat} prepped_statement_container |
{param_or_var} param_or_var;
prepped_statement_container =
{parameter} parameter_def |
{host_variable} host_variable;
deallocate_prepare =
deallocate prepare prepared;
execute_stat =
execute prepared places_opt? args_opt?;
places_opt =
into places;
args_opt =
using arguments;
places =
{target_list} target_commalist |
{sql_descriptor} sql descriptor descriptor_name;
arguments =
{target_list} target_commalist |
{sql_descriptor} sql descriptor descriptor_name;
descriptor_name =
lit_param_or_var;
allocate_descriptor =
allocate descriptor descriptor_name
max_desc_opt?;
max_desc_opt =
with max lit_param_or_var;
deallocate_descriptor =
deallocate descriptor descriptor_name;
describe_input =
describe input prepared using sql descriptor
descriptor_name;
get_descriptor =
{simple} get descriptor descriptor_name target eq count |
{compound} get descriptor descriptor_name value number_def
get_assignment_commalist;
get_assignment_commalist =
get_assignment more_get_assignment*;
more_get_assignment =
comma get_assignment;
get_assignment =
target eq item_descriptor_component;
item_descriptor_component =
{name} name |
{unnamed} unnamed |
{type} type |
{length} length |
{returned_length} returned_length |
{returned_octet_length} returned_octet_length |
{precision} precision |
{scale} scale |
{data} data |
{indicator} indicator ;
set_descriptor =
{simple} set descriptor descriptor_name count eq
lit_param_or_var |
{compound} set descriptor descriptor_name value number_def
set_assignment_commalist;
set_assignment_commalist =
set_assignment more_set_assignment*;
more_set_assignment =
comma set_assignment;
set_assignment =
item_descriptor_component eq lit_param_or_var;
dynamic_cursor_def =
declare [c1]:cursor_name_def insensitive?
scroll? [c2]:cursor_name_def for prepared;
allocate_cursor =
allocate param_or_var insensitive? scroll?
cursor_name_def for prepared;
dynamic_open =
open dynamic_cursor args_opt?;
dynamic_cursor =
{cursor} cursor_name_def |
{param_or_var} param_or_var;
dynamic_close =
close dynamic_cursor;
dynamic_fetch =
fetch opt_fetch_selector_clause? dynamic_cursor
into places;
dynamic_positioned_delete =
delete from_table_opt? where current of
dynamic_cursor;
from_table_opt =
from table_or_view_def;
dynamic_positioned_update =
update table_or_view_def? set
update_assignment_commalist where current of dynamic_cursor;
/* scalar expressions */
scalar_exp =
{numeric} numeric_exp |
{char_string} character_string_exp |
{bit_string} bit_string_exp |
{datetime} datetime_exp |
{interval} interval_exp;
numeric_exp =
{simple} numeric_term |
{compound} comp_numeric_exp;
comp_numeric_exp =
numeric_exp additive_ops numeric_term;
additive_ops =
{plus} plus |
{minus} dash;
numeric_term =
{simple} numeric_factor |
{compound} comp_numeric_term;
comp_numeric_term =
numeric_term multiplicative_ops numeric_factor;
multiplicative_ops =
{multiply} star |
{divide} slash;
numeric_factor =
additive_ops? numeric_primary;
numeric_primary =
{column} column_ref |
{param_or_var} lit_param_or_var |
{scalar_func} scalar_function_ref |
{agg_func} aggregate_function_ref |
{table_exp} openbr table_exp closebr |
{numeric_exp} openbr numeric_exp closebr;
scalar_function_ref =
{bit_length} bit_length openbr bit_length_arg closebr
|
{case_stat} case case_when_clause else scalar_exp
end |
{cast_stat} cast scalar_exp as new_cast_type |
{ch_length} ch_length_stat |
{collate_stat} character_string_literal collate
collation_name_def |
{convert_stat} convert openbr character_string_exp
using conversion |
{current_date} current_date |
{current_time} current_time |
{current_timestamp} current_timestamp |
{current_user} current_user |
{extract_stat} extract openbr extract_field from
extract_scalar_exp closebr |
{low_up} string_case_convert_stat |
{octet_length} octet_length openbr
character_string_literal closebr |
{position} position openbr
[s2]:character_string_literal in [s1]:character_string_literal closebr |
{session_user} session_user |
{substring} substring openbr char_or_bit_string_exp
from [no_from]:numeric_exp
to [no_to]:numeric_exp closebr |
{system_user} system_user |
{translate_stat} translate openbr character_string_exp
using translation_name_def |
{trim_stat} trim openbr ltb_pad from
character_string_exp |
{user} user;
bit_length_arg =
{charstring} character_string_literal |
{bitstring} bit_string_literal_bit;
case_when_clause =
when cond_exp then scalar_exp;
new_cast_type =
{sql_data_type} data_type |
{domain_tyep} domain_name_def;
ch_length_stat =
{character_length} character_length openbr
character_string_literal closebr |
{char_length} char_length openbr
character_string_literal closebr ;
string_case_convert_stat =
{lower} lower openbr character_string_literal closebr |
{upper} upper openbr character_string_literal closebr;
extract_field =
{year} year |
{month} month |
{day} day |
{hour} hour |
{minute} minute |
{second} second |
{timezone_hour} timezone_hour |
{timezone_min} timezone_minute;
extract_scalar_exp =
{datetime} datetime_exp |
{interval} interval_exp;
char_or_bit_string_exp =
{char_exp} character_string_exp |
{bit_exp} bit_string_exp;
ltb_pad =
{leading} leading |
{trailing} trailing |
{both} both;
aggregate_function_ref =
{count} count openbr star closebr |
{other} agg_funcs? openbr sel_opts scalar_exp closebr;
agg_funcs =
{avg} avg |
{max} max |
{min} min |
{sum} sum |
{count} count;
character_string_exp =
{compound} character_string_concatenation |
{simple} character_string_primary;
character_string_concatenation =
character_string_exp concat
character_string_primary;
character_string_primary =
{column} column_ref |
{param_or_var} lit_param_or_var |
{authid} authid_function_ref |
{scalar_func} scalar_function_ref |
{agg_func} aggregate_function_ref |
{table_exp} openbr table_exp closebr |
{char_str_exp} openbr character_string_exp closebr ;
bit_string_exp =
{coumpound} bit_string_concatenation |
{simple} bit_string_primary;
bit_string_concatenation =
bit_string_exp concat bit_string_primary;
bit_string_primary =
{column} column_ref |
{param_or_var} lit_param_or_var |
{scalar_func} scalar_function_ref |
{agg_func} aggregate_function_ref |
{table_exp} openbr table_exp closebr |
{bit_str_exp} openbr bit_string_exp closebr ;
datetime_exp =
{datetime_term} datetime_term |
{simple_inter} interval_exp plus datetime_term |
{coumpound_inter} compound_datetime_exp;
compound_datetime_exp = datetime_exp additive_ops interval_term;
datetime_term =
datetime_primary datetime_opt?;
datetime_opt =
at datetime_position;
datetime_position =
{local} local |
{time_zone} time zone interval_primary;
datetime_primary =
{column} column_ref |
{param_or_var} lit_param_or_var |
{datetime_func} datetime_function_ref |
{scalar_func} scalar_function_ref |
{agg_func} aggregate_function_ref |
{table_exp} openbr table_exp closebr |
{datetime_exp} openbr datetime_exp closebr ;
interval_exp =
{simple} interval_term |
{coumpound} comp_interval_exp |
{date_time} openbr datetime_exp dash datetime_term closebr
interval_start_end;
comp_interval_exp =
interval_exp additive_ops interval_term;
interval_start_end =
datetime_interval date_time_end?;
date_time_end =
to datetime_interval;
datetime_interval =
{d} day_int |
{dh} day_int hour_int |
{dhm} day_int hour_int colon min_int |
{dhms} day_int hour_int [c1]:colon min_int [c2]:colon
sec_int |
{dhmsn} day_int hour_int [c1]:colon min_int [c2]:colon
sec_int nano_opt? ;
nano_opt =
dot nano_int;
interval_term =
{simple} interval_factor |
{compound} comp_interval_term |
{comp_int_num_term} numeric_term star interval_factor;
comp_interval_term =
interval_term multiplicative_ops numeric_factor;
interval_factor =
additive_ops? interval_primary
interval_start_end?;
interval_primary =
{column} column_ref |
{param_or_var} lit_param_or_var |
{scalar_func} scalar_function_ref |
{agg_func} aggregate_function_ref |
{table_exp} openbr table_exp closebr |
{char_string} openbr interval_exp closebr ;
/* get diagnostics */
get_diagnostics =
{simple} get diagnostics diagnostics_one_assignment
more_diagnostics_one_assignment* |
{compound} get diagnostics exception exception_name_def
diagnostics_two_assignment
more_diagnostics_two_assignment*;
more_diagnostics_one_assignment =
comma diagnostics_one_assignment;
diagnostics_one_assignment =
target eq diags_one_source;
diags_one_source =
{number} number |
{more} more |
{command_func} command_function |
{dynamic_func} dynamic_function |
{row_count} row_count;
exception_name_def =
{literal} literal |
{parameter} parameter_def |
{host_variable} host_variable;
more_diagnostics_two_assignment =
comma diagnostics_two_assignment;
diagnostics_two_assignment =
target eq diags_two_source;
diags_two_source =
{condition_number} condition_number |
{returned_sqlstate} returned_sqlstate |
{class_origin} class_origin |
{subclass_origin} subclass_origin |
{server_name} server_name |
{connection_name} connection_name |
{constraint_catalog} constraint_catalog |
{constraint_schema} constraint_schema |
{constraint_name} constraint_name |
{catalog_name} catalog_name |
{schema_name} schema_name |
{table_name} table_name |
{column_name} column_name |
{cursor_name} cursor_name |
{message_text} message_text |
{message_length} message_length |
{message_octet_length} message_octet_length;
/* Exceptions */
whenever_stat =
exec sql whenever when_cond when_action when_terminator;
when_cond =
{sqlerror} sqlerror |
{not_found} not found;
when_action =
{continue} continue |
{goto} go to sql_statement;
when_terminator =
{ada_c_pascal_pli} semi_colon |
{cobol} end_exec |
{mumps} closebr;
/* base definitions */
schema_name_def =
catalog_prefix? identifier;
catalog_prefix =
catalog_def dot;
catalog_def =
identifier;
schema_qualifier =
schema_name_def dot;
domain_name_def =
schema_qualifier? identifier;
base_table =
schema_qualifier? identifier;
view_name_def =
schema_qualifier? identifier;
table_or_view_def =
{table} base_table |
{view} view_name_def;
module_name_def =
identifier;
procedure_name_def =
identifier;
cursor_name_def =
identifier;
constraint_name_def =
schema_qualifier? identifier;
character_set =
schema_qualifier? identifier;
collation_name_def =
schema_qualifier? identifier;
translation_name_def =
schema_qualifier? identifier;
conversion =
schema_qualifier? identifier;
column_ref =
column_prefix? identifier;
column_prefix =
column_qualifier dot;
column_qualifier =
{table} base_table |
{range_var} range_variable;
param_or_var =
{parameter} parameter_def more_parameter? |
{variable} host_variable more_host_variable?;
more_parameter = indicator? parameter_def ;
more_host_variable = indicator? host_variable;
/* place holder . unsure of this */ range_variable = identifier;
host_variable =
colon star? identifier;
lit_param_or_var =
{literal} literal |
{param_or_var} param_or_var;
target =
param_or_var;
number_def =
lit_param_or_var;
niladic_function_ref =
{authid} authid_function_ref |
{datetime} datetime_function_ref;
authid_function_ref =
{user} user_name_def |
{cur_user} current_user |
{sess_user} session_user |
{sys_user} system_user;
datetime_function_ref =
{cur_date} current_date |
{cur_time} current_time cur_time? |
{cur_timestamp} current_timestamp cur_time_stamp?;
cur_time =
openbr time_int closebr;
cur_time_stamp =
openbr timestamp_int closebr;
literal =
{character_string} character_string_literal |
{bit_string} bit_string_literal_both_rep |
{datetime} datetime_literal |
{exact_numeric} exact_numeric_literal |
{approx_numeric} approx_numeric_literal;
datetime_literal =
{date} date_literal |
{time} time_literal |
{timestamp} timestamp_literal |
{interval} interval_literal;
/* A date, time, timestamp or interval string */
date_literal =
date [s1]:single_quote date_int [s2]:single_quote;
time_literal =
time [s1]:single_quote time_int timezone_int?
[s2]:single_quote;
timestamp_literal =
timestamp [s1]:single_quote date_int time_int
timezone_int? [s2]:single_quote;
interval_literal =
{year_month} interval [s1]:single_quote additive_ops?
interval_st
[s2]:single_quote ym_interval_tag |
{day_time} interval [s1]:single_quote additive_ops?
datetime_interval
[s3]:single_quote interval_dt end_interval_dt?;
interval_st =
{year} year_int |
{month} month_int |
{year_month} year_int dash month_int;
ym_interval_tag =
{year} year |
{month} month |
{year_month} year to month;
interval_dt =
{second} second |
{minute} minute |
{hour} hour |
{day} day;
end_interval_dt =
to interval_dt;
------------------------------