-
Notifications
You must be signed in to change notification settings - Fork 15
Release Notes
Release Date: 01.06.2020
- drop_table_def
New: n/a
Old: cluster_name -> identifier : '$1'.
cluster_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
New: n/a
Old: drop_cluster_def -> DROP CLUSTER cluster_name : {'drop cluster', '$3', {}}.
drop_cluster_def -> DROP CLUSTER cluster_name drop_cluster_extensions : {'drop cluster', '$3', '$4'}.
New: n/a
Old: drop_cluster_extensions -> INCLUDING TABLES : {'including tables'}.
drop_cluster_extensions -> INCLUDING TABLES CASCADE CONSTRAINTS : {'including tables cascade constraints'}.
New: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, {}, []}.
drop_table_def -> DROP TABLE table_list drop_table_extensions : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', {}, []}.
drop_table_def -> DROP TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP create_opts TABLE table_list : {'drop table', {'tables', '$4'}, {}, {}, '$2'}.
drop_table_def -> DROP create_opts TABLE table_list drop_table_extensions : {'drop table', {'tables', '$4'}, {}, '$5', '$2'}.
drop_table_def -> DROP create_opts TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', {}, '$2'}.
drop_table_def -> DROP create_opts TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$5'}, '$4', '$6', '$2'}.
Old: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, {}, []}.
drop_table_def -> DROP TABLE table_list drop_table_extensions : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', {}, []}.
drop_table_def -> DROP TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP identifier TABLE table_list : {'drop table', {'tables', '$4'}, {}, {}, binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE table_list drop_table_extensions : {'drop table', {'tables', '$4'}, {}, '$5', binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', {}, binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$5'}, '$4', '$6', binary_to_list('$2')}.
New: n/a
Old: truncate_cluster -> TRUNCATE CLUSTER cluster_name : {'truncate cluster', '$3', {}}.
truncate_cluster -> TRUNCATE CLUSTER cluster_name storage : {'truncate cluster', '$3', '$4'}.
Release Date: 11.04.2019
- data_type
New: data_type -> BFILE : unwrap_bin('$1').
data_type -> BINARY_DOUBLE : unwrap_bin('$1').
data_type -> BINARY_FLOAT : unwrap_bin('$1').
data_type -> BLOB : unwrap_bin('$1').
data_type -> CHAR : unwrap_bin('$1').
data_type -> CLOB : unwrap_bin('$1').
data_type -> DATE : unwrap_bin('$1').
data_type -> FLOAT : unwrap_bin('$1').
data_type -> LONG : unwrap_bin('$1').
data_type -> LONG RAW : list_to_binary([unwrap_bin('$1')," ",unwrap_bin('$2')]).
data_type -> NAME : unwrap_bin('$1').
data_type -> identifier '.' NAME : list_to_binary(['$1',".",unwrap_bin('$3')]).
data_type -> NCLOB : unwrap_bin('$1').
data_type -> NUMBER : unwrap_bin('$1').
data_type -> RAW : unwrap_bin('$1').
data_type -> ROWID : unwrap_bin('$1').
data_type -> STRING : unwrap_bin('$1').
data_type -> TIMESTAMP : unwrap_bin('$1').
data_type -> UROWID : unwrap_bin('$1').
data_type -> VARCHAR2 : unwrap_bin('$1').
data_type -> XMLTYPE : unwrap_bin('$1').
data_type -> CHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> FLOAT '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NCHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NUMBER '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NVARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> RAW '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> TIMESTAMP '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> UROWID '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> VARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
data_type -> NUMBER '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
Old: data_type -> BFILE : unwrap_bin('$1').
data_type -> BINARY_DOUBLE : unwrap_bin('$1').
data_type -> BINARY_FLOAT : unwrap_bin('$1').
data_type -> BLOB : unwrap_bin('$1').
data_type -> CHAR : unwrap_bin('$1').
data_type -> CLOB : unwrap_bin('$1').
data_type -> DATE : unwrap_bin('$1').
data_type -> FLOAT : unwrap_bin('$1').
data_type -> LONG : unwrap_bin('$1').
data_type -> LONG RAW : list_to_binary([unwrap_bin('$1')," ",unwrap_bin('$2')]).
data_type -> NAME : unwrap_bin('$1').
data_type -> identifier '.' NAME : list_to_binary(['$1',".",unwrap_bin('$3')]).
data_type -> NCLOB : unwrap_bin('$1').
data_type -> NUMBER : unwrap_bin('$1').
data_type -> RAW : unwrap_bin('$1').
data_type -> ROWID : unwrap_bin('$1').
data_type -> TIMESTAMP : unwrap_bin('$1').
data_type -> UROWID : unwrap_bin('$1').
data_type -> VARCHAR2 : unwrap_bin('$1').
data_type -> XMLTYPE : unwrap_bin('$1').
data_type -> CHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> FLOAT '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NCHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NUMBER '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NVARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> RAW '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> TIMESTAMP '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> UROWID '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> VARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
data_type -> NUMBER '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
Release Date: 18.03.2019
- alter_user_def
New: alter_user_def -> ALTER USER user_list proxy_clause : {'alter user', '$3', '$4'}.
alter_user_def -> ALTER USER identifier spec_list : {'alter user', '$3', {spec, '$4'}}.
alter_user_def -> ALTER USER identifier NAME NAME : {'alter user', '$3', {spec, [case {string:to_lower(unwrap('$4')), string:to_lower(unwrap('$5'))} of
Old: alter_user_def -> ALTER USER user_list proxy_clause : {'alter user', '$3', '$4'}.
alter_user_def -> ALTER USER NAME spec_list : {'alter user', unwrap_bin('$3'), {spec, '$4'}}.
alter_user_def -> ALTER USER NAME NAME NAME : {'alter user', unwrap_bin('$3'), {'spec', [case {string:to_lower(unwrap('$4')), string:to_lower(unwrap('$5'))} of
- cluster_name
New: cluster_name -> identifier : '$1'.
cluster_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: cluster_name -> NAME : unwrap_bin('$1').
cluster_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- column
New: column -> identifier : '$1'.
Old: column -> NAME : unwrap_bin('$1').
- column_def_opt
New: column_def_opt -> NOT NULLX : 'not null'.
column_def_opt -> NOT NULLX UNIQUE : 'not null unique'.
column_def_opt -> NOT NULLX PRIMARY KEY : 'not null primary key'.
column_def_opt -> DEFAULT function_ref : {default, '$2'}.
column_def_opt -> DEFAULT identifier : {default, '$2'}.
column_def_opt -> DEFAULT literal : {default, '$2'}.
column_def_opt -> DEFAULT NULLX : {default, 'null'}.
column_def_opt -> DEFAULT USER : {default, 'user'}.
column_def_opt -> CHECK '(' search_condition ')' : {check, '$3'}.
column_def_opt -> REFERENCES table : {ref, '$2'}.
column_def_opt -> REFERENCES table '(' column_commalist ')' : {ref, {'$2', '$4'}}.
Old: column_def_opt -> NOT NULLX : 'not null'.
column_def_opt -> NOT NULLX UNIQUE : 'not null unique'.
column_def_opt -> NOT NULLX PRIMARY KEY : 'not null primary key'.
column_def_opt -> DEFAULT function_ref : {default, '$2'}.
column_def_opt -> DEFAULT literal : {default, '$2'}.
column_def_opt -> DEFAULT NAME : {default, unwrap_bin('$2')}.
column_def_opt -> DEFAULT NULLX : {default, 'null'}.
column_def_opt -> DEFAULT USER : {default, 'user'}.
column_def_opt -> CHECK '(' search_condition ')' : {check, '$3'}.
column_def_opt -> REFERENCES table : {ref, '$2'}.
column_def_opt -> REFERENCES table '(' column_commalist ')' : {ref, {'$2', '$4'}}.
- column_ref
New: column_ref -> identifier : '$1'.
column_ref -> identifier '(' '+' ')' : list_to_binary(['$1',"(+)"]).
column_ref -> identifier JSON : jpparse(list_to_binary(['$1',unwrap('$2')])).
column_ref -> identifier '.' '*' : list_to_binary(['$1',".*"]).
column_ref -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
column_ref -> identifier '.' identifier '(' '+' ')' : list_to_binary(['$1',".",'$3',"(+)"]).
column_ref -> identifier '.' identifier JSON : jpparse(list_to_binary(['$1',".",'$3',unwrap('$4')])).
column_ref -> identifier '.' identifier '.' '*' : list_to_binary(['$1',".",'$3',".*"]).
column_ref -> identifier '.' identifier '.' identifier : list_to_binary(['$1',".",'$3',".",'$5']).
column_ref -> identifier '.' identifier '.' identifier '(' '+' ')' : list_to_binary(['$1',".",'$3',".",'$5',"(+)"]).
column_ref -> identifier '.' identifier '.' identifier JSON : jpparse(list_to_binary(['$1',".",'$3',".",'$5',unwrap('$6')])).
Old: column_ref -> NAME JSON : jpparse(list_to_binary([unwrap('$1'),unwrap('$2')])).
column_ref -> NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),unwrap('$4')])).
column_ref -> NAME '.' NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),unwrap('$6')])).
column_ref -> NAME : unwrap_bin('$1').
column_ref -> NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3')]).
column_ref -> NAME '.' NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5')]).
column_ref -> NAME '(' '+' ')' : list_to_binary([unwrap('$1'),"(+)"]).
column_ref -> NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),"(+)"]).
column_ref -> NAME '.' NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),"(+)"]).
column_ref -> NAME '.' '*' : list_to_binary([unwrap('$1'),".*"]).
column_ref -> NAME '.' NAME '.' '*' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".*"]).
- create_index_spec_column
New: create_index_spec_column -> identifier : '$1'.
create_index_spec_column -> identifier JSON : jpparse(list_to_binary(['$1',unwrap('$2')])).
Old: create_index_spec_column -> NAME : unwrap_bin('$1').
create_index_spec_column -> NAME JSON : jpparse(list_to_binary([unwrap('$1'),unwrap('$2')])).
- create_role_def
New: create_role_def -> CREATE ROLE identifier : {'create role', '$3'}.
Old: create_role_def -> CREATE ROLE NAME : {'create role', unwrap_bin('$3')}.
- create_user_def
New: create_user_def -> CREATE USER identifier identified : {'create user', '$3', '$4', []}.
create_user_def -> CREATE USER identifier identified user_opts_list : {'create user', '$3', '$4', '$5'}.
Old: create_user_def -> CREATE USER NAME identified : {'create user', unwrap_bin('$3'), '$4', []}.
create_user_def -> CREATE USER NAME identified user_opts_list : {'create user', unwrap_bin('$3'), '$4', '$5'}.
- cursor
New: cursor -> identifier : {cur, binary_to_list('$1')}.
Old: cursor -> NAME : {cur, unwrap('$1')}.
- data_type
New: data_type -> BFILE : unwrap_bin('$1').
data_type -> BINARY_DOUBLE : unwrap_bin('$1').
data_type -> BINARY_FLOAT : unwrap_bin('$1').
data_type -> BLOB : unwrap_bin('$1').
data_type -> CHAR : unwrap_bin('$1').
data_type -> CLOB : unwrap_bin('$1').
data_type -> DATE : unwrap_bin('$1').
data_type -> FLOAT : unwrap_bin('$1').
data_type -> LONG : unwrap_bin('$1').
data_type -> LONG RAW : list_to_binary([unwrap_bin('$1')," ",unwrap_bin('$2')]).
data_type -> NAME : unwrap_bin('$1').
data_type -> identifier '.' NAME : list_to_binary(['$1',".",unwrap_bin('$3')]).
data_type -> NCLOB : unwrap_bin('$1').
data_type -> NUMBER : unwrap_bin('$1').
data_type -> RAW : unwrap_bin('$1').
data_type -> ROWID : unwrap_bin('$1').
data_type -> TIMESTAMP : unwrap_bin('$1').
data_type -> UROWID : unwrap_bin('$1').
data_type -> VARCHAR2 : unwrap_bin('$1').
data_type -> XMLTYPE : unwrap_bin('$1').
data_type -> CHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> FLOAT '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NCHAR '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NUMBER '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NVARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> RAW '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> TIMESTAMP '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> UROWID '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> VARCHAR2 '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
data_type -> NUMBER '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
Old: data_type -> STRING : unwrap_bin('$1').
data_type -> NAME : unwrap_bin('$1').
data_type -> NAME '(' sgn_num ')' : {unwrap_bin('$1'), '$3'}.
data_type -> NAME '(' sgn_num ',' sgn_num ')' : {unwrap_bin('$1'), '$3', '$5'}.
- drop_context_def
New: drop_context_def -> DROP CONTEXT identifier : {'drop context', '$3'}.
Old: drop_context_def -> DROP CONTEXT NAME : {'drop context', unwrap_bin('$3')}.
- drop_directory_def
New: drop_directory_def -> DROP DIRECTORY identifier : {'drop directory', '$3'}.
Old: drop_directory_def -> DROP DIRECTORY NAME : {'drop directory', unwrap_bin('$3')}.
- drop_profile_def
New: drop_profile_def -> DROP PROFILE identifier : {'drop profile', '$3', {}}.
drop_profile_def -> DROP PROFILE identifier CASCADE : {'drop profile', '$3', cascade}.
Old: drop_profile_def -> DROP PROFILE NAME : {'drop profile', unwrap_bin('$3'), {}}.
drop_profile_def -> DROP PROFILE NAME CASCADE : {'drop profile', unwrap_bin('$3'), cascade}.
- drop_role_def
New: drop_role_def -> DROP ROLE identifier : {'drop role', '$3'}.
Old: drop_role_def -> DROP ROLE NAME : {'drop role', unwrap_bin('$3')}.
- drop_table_def
New: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, {}, []}.
drop_table_def -> DROP TABLE table_list drop_table_extensions : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', {}, []}.
drop_table_def -> DROP TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP identifier TABLE table_list : {'drop table', {'tables', '$4'}, {}, {}, binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE table_list drop_table_extensions : {'drop table', {'tables', '$4'}, {}, '$5', binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', {}, binary_to_list('$2')}.
drop_table_def -> DROP identifier TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$5'}, '$4', '$6', binary_to_list('$2')}.
Old: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, {}, []}.
drop_table_def -> DROP TABLE table_list drop_table_extensions : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', {}, []}.
drop_table_def -> DROP TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP NAME TABLE table_list : {'drop table', {'tables', '$4'}, {}, {}, unwrap('$2')}.
drop_table_def -> DROP NAME TABLE table_list drop_table_extensions : {'drop table', {'tables', '$4'}, {}, '$5', unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', {}, unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$5'}, '$4', '$6', unwrap('$2')}.
- drop_tablespace_def
New: drop_tablespace_def -> DROP TABLESPACE identifier : {'drop tablespace', '$3', {}}.
drop_tablespace_def -> DROP TABLESPACE identifier drop_tablespace_extensions : {'drop tablespace', '$3', '$4'}.
Old: drop_tablespace_def -> DROP TABLESPACE NAME : {'drop tablespace', unwrap_bin('$3'), {}}.
drop_tablespace_def -> DROP TABLESPACE NAME drop_tablespace_extensions : {'drop tablespace', unwrap_bin('$3'), '$4'}.
- drop_user_def
New: drop_user_def -> DROP USER identifier : {'drop user', '$3', []}.
drop_user_def -> DROP USER identifier CASCADE : {'drop user', '$3', ['cascade']}.
Old: drop_user_def -> DROP USER NAME : {'drop user', unwrap_bin('$3'), {}}.
drop_user_def -> DROP USER NAME CASCADE : {'drop user', unwrap_bin('$3'), cascade}.
- fun_arg_named
New: fun_arg_named -> identifier '=>' identifier : {'=>', '$1', '$3'}.
fun_arg_named -> identifier '=>' literal : {'=>', '$1', '$3'}.
fun_arg_named -> identifier '=>' parameter : {'=>', '$1', '$3'}.
Old: fun_arg_named -> NAME '=>' literal : {'=>', unwrap_bin('$1'), '$3'}.
fun_arg_named -> NAME '=>' NAME : {'=>', unwrap_bin('$1'), unwrap_bin('$3')}.
fun_arg_named -> NAME '=>' parameter : {'=>', unwrap_bin('$1'), '$3'}.
- function_name
New: function_name -> NAME : unwrap_bin('$1').
function_name -> identifier '.' NAME : list_to_binary(['$1',".",unwrap_bin('$3')]).
Old: function_name -> NAME : unwrap_bin('$1').
function_name -> NAME '.' NAME : list_to_binary([unwrap_bin('$1'),".",unwrap_bin('$3')]).
- function_ref
New: function_ref -> function_ref JSON : {'$1', jpparse(list_to_binary([unwrap('$2')])), []}.
function_ref -> FUNS : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' ')' : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' '*' ')' : {'fun', unwrap_bin('$1'), [<<"*">>]}.
function_ref -> FUNS '(' ALL scalar_exp ')' : {'fun', unwrap_bin('$1'), [{all, '$4'}]}.
function_ref -> FUNS '(' DISTINCT column_ref ')' : {'fun', unwrap_bin('$1'), [{distinct, '$4'}]}.
function_ref -> FUNS '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> FUNS '(' fun_args_named ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> identifier '(' ')' : {'fun', '$1', []}.
function_ref -> identifier '(' fun_args ')' : {'fun', '$1', make_list('$3')}.
function_ref -> identifier '(' fun_args_named ')' : {'fun', '$1', make_list('$3')}.
function_ref -> identifier '.' identifier '(' ')' : {'fun', list_to_binary(['$1', ".", '$3']), []}.
function_ref -> identifier '.' identifier '(' fun_args ')' : {'fun', list_to_binary(['$1', ".", '$3']), make_list('$5')}.
function_ref -> identifier '.' identifier '(' fun_args_named ')' : {'fun', list_to_binary(['$1', ".", '$3']), make_list('$5')}.
function_ref -> identifier '.' identifier '.' identifier '(' ')' : {'fun', list_to_binary(['$1', ".", '$3', ".", '$5']), []}.
function_ref -> identifier '.' identifier '.' identifier '(' fun_args ')' : {'fun', list_to_binary(['$1', ".", '$3', ".", '$5']), make_list('$7')}.
function_ref -> identifier '.' identifier '.' identifier '(' fun_args_named ')' : {'fun', list_to_binary(['$1', ".", '$3', ".", '$5']), make_list('$7')}.
Old: function_ref -> function_ref JSON : {'$1', jpparse(list_to_binary([unwrap('$2')])), []}.
function_ref -> FUNS : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' ')' : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' '*' ')' : {'fun', unwrap_bin('$1'), [<<"*">>]}.
function_ref -> FUNS '(' ALL scalar_exp ')' : {'fun', unwrap_bin('$1'), [{all, '$4'}]}.
function_ref -> FUNS '(' DISTINCT column_ref ')' : {'fun', unwrap_bin('$1'), [{distinct, '$4'}]}.
function_ref -> FUNS '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> FUNS '(' fun_args_named ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '(' ')' : {'fun', unwrap_bin('$1'), []}.
function_ref -> NAME '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '(' fun_args_named ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '.' NAME '(' ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), []}.
function_ref -> NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), make_list('$5')}.
function_ref -> NAME '.' NAME '(' fun_args_named ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), make_list('$5')}.
function_ref -> NAME '.' NAME '.' NAME '(' ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), []}.
function_ref -> NAME '.' NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), make_list('$7')}.
function_ref -> NAME '.' NAME '.' NAME '(' fun_args_named ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), make_list('$7')}.
- grantee_identified_by
New: grantee_identified_by -> identifier IDENTIFIED BY STRING : {'identified by', '$1', unwrap_bin('$4')}.
Old: grantee_identified_by -> NAME IDENTIFIED BY STRING : {'identified by', unwrap_bin('$1'), unwrap_bin('$4')}.
- grantee_revokee
New: grantee_revokee -> identifier : '$1'.
grantee_revokee -> PUBLIC : 'public'.
Old: grantee_revokee -> NAME : unwrap_bin('$1').
grantee_revokee -> PUBLIC : 'public'.
- identified
New: identified -> IDENTIFIED BY identifier : {'identified by', '$3'}.
identified -> IDENTIFIED EXTERNALLY : {'identified extern', {}}.
identified -> IDENTIFIED EXTERNALLY AS identifier : {'identified extern', '$4'}.
identified -> IDENTIFIED GLOBALLY : {'identified globally', {}}.
identified -> IDENTIFIED GLOBALLY AS identifier : {'identified globally', '$4'}.
Old: identified -> IDENTIFIED BY NAME : {'identified by', unwrap_bin('$3')}.
identified -> IDENTIFIED EXTERNALLY : {'identified extern', {}}.
identified -> IDENTIFIED EXTERNALLY AS NAME : {'identified extern', unwrap_bin('$4')}.
identified -> IDENTIFIED GLOBALLY : {'identified globally', {}}.
identified -> IDENTIFIED GLOBALLY AS NAME : {'identified globally', unwrap_bin('$4')}.
- identifier
New: identifier -> NAME : unwrap_bin('$1').
identifier -> ADMIN : unwrap_bin('$1').
% identifier -> ALL : unwrap_bin('$1'). Oracle reserved
% identifier -> ALTER : unwrap_bin('$1'). Oracle reserved
% identifier -> AND : unwrap_bin('$1'). Oracle reserved
% identifier -> ANY : unwrap_bin('$1'). Oracle reserved
% identifier -> APPROXNUM : unwrap_bin('$1'). reduce/reduce problem
% identifier -> AS : unwrap_bin('$1'). Oracle reserved
% identifier -> ASC : unwrap_bin('$1'). Oracle reserved
identifier -> AUTHENTICATION : unwrap_bin('$1').
identifier -> AUTHORIZATION : unwrap_bin('$1').
identifier -> BAG : unwrap_bin('$1').
identifier -> BEGIN : unwrap_bin('$1').
% identifier -> BETWEEN : unwrap_bin('$1'). Oracle reserved
identifier -> BFILE : unwrap_bin('$1').
identifier -> BINARY_DOUBLE : unwrap_bin('$1').
identifier -> BINARY_FLOAT : unwrap_bin('$1').
identifier -> BITMAP : unwrap_bin('$1').
identifier -> BLOB : unwrap_bin('$1').
identifier -> BODY : unwrap_bin('$1').
% identifier -> BY : unwrap_bin('$1'). Oracle reserved
identifier -> CALL : unwrap_bin('$1').
identifier -> CASCADE : unwrap_bin('$1').
% identifier -> CASE : unwrap_bin('$1'). syntax problem
% identifier -> CHAR : unwrap_bin('$1'). Oracle reserved
% identifier -> CHECK : unwrap_bin('$1'). Oracle reserved
identifier -> CLOB : unwrap_bin('$1').
identifier -> CLOSE : unwrap_bin('$1').
% identifier -> CLUSTER : unwrap_bin('$1'). Oracle reserved
identifier -> COMMIT : unwrap_bin('$1').
% identifier -> CONNECT : unwrap_bin('$1'). Oracle reserved
identifier -> COMPARISON : unwrap_bin('$1').
% identifier -> CONSTRAINT : unwrap_bin('$1'). syntax problem
identifier -> CONSTRAINTS : unwrap_bin('$1').
identifier -> CONTENTS : unwrap_bin('$1').
identifier -> CONTEXT : unwrap_bin('$1').
identifier -> CONTINUE : unwrap_bin('$1').
% identifier -> CREATE : unwrap_bin('$1'). Oracle reserved
identifier -> CROSS : unwrap_bin('$1').
identifier -> CURRENT : unwrap_bin('$1').
identifier -> CURSOR : unwrap_bin('$1').
identifier -> DATABASE : unwrap_bin('$1').
identifier -> DATAFILES : unwrap_bin('$1').
% identifier -> DATE : unwrap_bin('$1'). Oracle reserved
identifier -> DBLINK : unwrap_bin('$1').
% identifier -> DEFAULT : unwrap_bin('$1'). Oracle reserved
identifier -> DEFERRED : unwrap_bin('$1').
identifier -> DELEGATE : unwrap_bin('$1').
% identifier -> DELETE : unwrap_bin('$1'). Oracle reserved
% identifier -> DESC : unwrap_bin('$1'). Oracle reserved
identifier -> DIRECTORY : unwrap_bin('$1').
% identifier -> DISTINCT : unwrap_bin('$1'). Oracle reserved
% identifier -> DROP : unwrap_bin('$1'). Oracle reserved
% identifier -> ELSE : unwrap_bin('$1'). Oracle reserved
identifier -> END : unwrap_bin('$1').
identifier -> ENTERPRISE : unwrap_bin('$1').
identifier -> ESCAPE : unwrap_bin('$1').
identifier -> EXCEPT : unwrap_bin('$1').
identifier -> EXECUTE : unwrap_bin('$1').
% identifier -> EXISTS : unwrap_bin('$1'). Oracle reserved
identifier -> EXTERNALLY : unwrap_bin('$1').
identifier -> FETCH : unwrap_bin('$1').
identifier -> FILTER_WITH : unwrap_bin('$1').
% identifier -> FLOAT : unwrap_bin('$1'). Oracle reserved
identifier -> FORCE : unwrap_bin('$1').
identifier -> FOREIGN : unwrap_bin('$1').
identifier -> FOUND : unwrap_bin('$1').
% identifier -> FROM : unwrap_bin('$1'). Oracle reserved
identifier -> FULL : unwrap_bin('$1').
identifier -> FUNCTION : unwrap_bin('$1').
% identifier -> FUNS : unwrap_bin('$1'). reduce/reduce problem
identifier -> GLOBALLY : unwrap_bin('$1').
identifier -> GOTO : unwrap_bin('$1').
% identifier -> GRANT : unwrap_bin('$1'). Oracle reserved
% identifier -> GROUP : unwrap_bin('$1'). Oracle reserved
identifier -> HASHMAP : unwrap_bin('$1').
% identifier -> HAVING : unwrap_bin('$1'). Oracle reserved
identifier -> HIERARCHY : unwrap_bin('$1').
% identifier -> HINT : unwrap_bin('$1'). reduce/reduce problem
% identifier -> IDENTIFIED : unwrap_bin('$1'). Oracle reserved
identifier -> IF : unwrap_bin('$1').
identifier -> IMMEDIATE : unwrap_bin('$1').
% identifier -> IN : unwrap_bin('$1'). Oracle reserved
identifier -> INCLUDING : unwrap_bin('$1').
% identifier -> INDEX : unwrap_bin('$1'). Oracle reserved
identifier -> INDICATOR : unwrap_bin('$1').
identifier -> INNER : unwrap_bin('$1').
% identifier -> INSERT : unwrap_bin('$1'). Oracle reserved
% identifier -> INTERSECT : unwrap_bin('$1'). Oracle reserved
% identifier -> INTNUM : unwrap_bin('$1'). reduce/reduce problem
% identifier -> INTO : unwrap_bin('$1'). Oracle reserved
identifier -> INVALIDATION : unwrap_bin('$1').
% identifier -> IS : unwrap_bin('$1'). Oracle reserved
identifier -> JOIN : unwrap_bin('$1').
identifier -> JSON : unwrap_bin('$1').
identifier -> KEEP : unwrap_bin('$1').
identifier -> KEY : unwrap_bin('$1').
identifier -> KEYLIST : unwrap_bin('$1').
identifier -> LEFT : unwrap_bin('$1').
% identifier -> LIKE : unwrap_bin('$1'). Oracle reserved
identifier -> LINK : unwrap_bin('$1').
identifier -> LOCAL : unwrap_bin('$1').
identifier -> LOG : unwrap_bin('$1').
% identifier -> LONG : unwrap_bin('$1'). Oracle reserved
identifier -> MATERIALIZED : unwrap_bin('$1').
% identifier -> MINUS : unwrap_bin('$1'). Oracle reserved
identifier -> NATURAL : unwrap_bin('$1').
identifier -> NCHAR : unwrap_bin('$1').
identifier -> NCLOB : unwrap_bin('$1').
identifier -> NO : unwrap_bin('$1').
% identifier -> NOCYCLE : unwrap_bin('$1'). reduce/reduce problem
identifier -> NONE : unwrap_bin('$1').
identifier -> NORM_WITH : unwrap_bin('$1').
% identifier -> NOT : unwrap_bin('$1'). Oracle reserved
% identifier -> NULLX : unwrap_bin('$1'). reduce/reduce problem
% identifier -> NUMBER : unwrap_bin('$1'). Oracle reserved
identifier -> NVARCHAR2 : unwrap_bin('$1').
% identifier -> OF : unwrap_bin('$1'). Oracle reserved
% identifier -> ON : unwrap_bin('$1'). Oracle reserved
identifier -> ONLINE : unwrap_bin('$1').
identifier -> OPEN : unwrap_bin('$1').
% identifier -> OPTION : unwrap_bin('$1'). Oracle reserved
% identifier -> OR : unwrap_bin('$1'). Oracle reserved
% identifier -> ORDER : unwrap_bin('$1'). Oracle reserved
identifier -> ORDERED_SET : unwrap_bin('$1').
identifier -> OUTER : unwrap_bin('$1').
identifier -> PACKAGE : unwrap_bin('$1').
% identifier -> PARAMETER : unwrap_bin('$1'). reduce/reduce problem
identifier -> PARTITION : unwrap_bin('$1').
identifier -> PRESERVE : unwrap_bin('$1').
identifier -> PRIMARY : unwrap_bin('$1').
% identifier -> PRIO : unwrap_bin('$1'). Oracle reserved
identifier -> PRIVILEGES : unwrap_bin('$1').
identifier -> PROCEDURE : unwrap_bin('$1').
identifier -> PROFILE : unwrap_bin('$1').
% identifier -> PUBLIC : unwrap_bin('$1'). Oracle reserved
identifier -> PURGE : unwrap_bin('$1').
% identifier -> RAW : unwrap_bin('$1'). Oracle reserved
identifier -> ROWID : unwrap_bin('$1').
identifier -> QUOTA : unwrap_bin('$1').
identifier -> REFERENCES : unwrap_bin('$1').
identifier -> REQUIRED : unwrap_bin('$1').
identifier -> RETURN : unwrap_bin('$1').
identifier -> RETURNING : unwrap_bin('$1').
identifier -> REUSE : unwrap_bin('$1').
% identifier -> REVOKE : unwrap_bin('$1'). Oracle reserved
identifier -> RIGHT : unwrap_bin('$1').
identifier -> ROLE : unwrap_bin('$1').
identifier -> ROLES : unwrap_bin('$1').
identifier -> ROLLBACK : unwrap_bin('$1').
identifier -> SCHEMA : unwrap_bin('$1').
% identifier -> SELECT : unwrap_bin('$1'). Oracle reserved
identifier -> SEQUENCE : unwrap_bin('$1').
% identifier -> SET : unwrap_bin('$1'). Oracle reserved
% identifier -> SOME : unwrap_bin('$1'). reduce/reduce problem
identifier -> SQLERROR : unwrap_bin('$1').
% identifier -> START : unwrap_bin('$1'). Oracle reserved
identifier -> STORAGE : unwrap_bin('$1').
% identifier -> STRING : unwrap_bin('$1'). reduce/reduce problem
% identifier -> SYNONYM : unwrap_bin('$1'). Oracle reserved
% identifier -> TABLE : unwrap_bin('$1'). Oracle reserved
% identifier -> TABLES : unwrap_bin('$1'). reduce/reduce problem
% identifier -> TABLESPACE : unwrap_bin('$1'). reduce/reduce problem
% identifier -> TEMPORARY : unwrap_bin('$1'). reduce/reduce problem
% identifier -> THEN : unwrap_bin('$1'). Oracle reserved
% identifier -> THROUGH : unwrap_bin('$1'). reduce/reduce problem
identifier -> TIMESTAMP : unwrap_bin('$1').
% identifier -> TO : unwrap_bin('$1'). Oracle reserved
% identifier -> TRIGGER : unwrap_bin('$1'). Oracle reserved
% identifier -> TRUNCATE : unwrap_bin('$1'). reduce/reduce problem
identifier -> TYPE : unwrap_bin('$1').
% identifier -> UNION : unwrap_bin('$1'). Oracle reserved
% identifier -> UNIQUE : unwrap_bin('$1'). Oracle reserved
identifier -> UNLIMITED : unwrap_bin('$1').
% identifier -> UPDATE : unwrap_bin('$1'). Oracle reserved
identifier -> UROWID : unwrap_bin('$1').
% identifier -> USER : unwrap_bin('$1'). reduce/reduce problem
identifier -> USERS : unwrap_bin('$1').
identifier -> USING : unwrap_bin('$1').
identifier -> VALIDATE : unwrap_bin('$1').
% identifier -> VALUES : unwrap_bin('$1'). Oracle reserved
% identifier -> VARCHAR2 : unwrap_bin('$1'). Oracle reserved
% identifier -> VIEW : unwrap_bin('$1'). Oracle reserved
% identifier -> WHEN : unwrap_bin('$1'). syntax problem
identifier -> WHENEVER : unwrap_bin('$1').
% identifier -> WHERE : unwrap_bin('$1'). Oracle reserved
% identifier -> WITH : unwrap_bin('$1'). Oracle reserved
identifier -> WORK : unwrap_bin('$1').
identifier -> XMLTYPE : unwrap_bin('$1').
Old: n/a
- index_name
New: index_name -> identifier : '$1'.
index_name -> identifier '.' identifier : list_to_binary(['$1', ".", '$3']).
Old: index_name -> NAME : unwrap_bin('$1').
index_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- join_ref
New: join_ref -> table_dblink : '$1'.
join_ref -> query_term : '$1'.
join_ref -> query_term NAME : {as, '$1', unwrap_bin('$2')}.
Old: join_ref -> table_dblink : '$1'.
join_ref -> query_term : '$1'.
join_ref -> query_term NAME : {as, '$1', unwrap_bin('$2')}.
- materialized_view_name
New: materialized_view_name -> identifier : '$1'.
materialized_view_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: materialized_view_name -> NAME : unwrap_bin('$1').
materialized_view_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- on_obj_clause
New: on_obj_clause -> ON DIRECTORY identifier : {'on directory','$3'}.
on_obj_clause -> ON table : {on, '$2'}.
Old: on_obj_clause -> ON DIRECTORY NAME : {'on directory', unwrap_bin('$3')}.
on_obj_clause -> ON table : {on, '$2'}.
- package_name
New: package_name -> identifier : '$1'.
package_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: package_name -> NAME : unwrap_bin('$1').
package_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- procedure_name
New: procedure_name -> identifier : '$1'.
procedure_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: procedure_name -> NAME : unwrap_bin('$1').
procedure_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- quota
New: quota -> QUOTA UNLIMITED ON identifier : {'unlimited on', '$4'}.
quota -> QUOTA INTNUM ON identifier : {limited, unwrap_bin('$2'), <<"">>, '$4'}.
quota -> QUOTA INTNUM identifier ON identifier : {limited, unwrap_bin('$2'), '$3', '$5'}.
Old: quota -> QUOTA UNLIMITED ON NAME : {'unlimited on', unwrap_bin('$4')}.
quota -> QUOTA INTNUM ON NAME : {limited, unwrap_bin('$2'), <<"">>, unwrap_bin('$4')}.
quota -> QUOTA INTNUM NAME ON NAME : {limited, unwrap_bin('$2'), unwrap_bin('$3'), unwrap_bin('$5')}.
- schema
New: schema -> CREATE SCHEMA AUTHORIZATION identifier : {'create schema authorization', binary_to_list('$4'), []}.
schema -> CREATE SCHEMA AUTHORIZATION identifier schema_element_list : {'create schema authorization', binary_to_list('$4'), '$5'}.
Old: schema -> CREATE SCHEMA AUTHORIZATION NAME : {'create schema authorization', unwrap('$4'), []}.
schema -> CREATE SCHEMA AUTHORIZATION NAME schema_element_list : {'create schema authorization', unwrap('$4'), '$5'}.
- sequence_name
sequence_name -> identifier : '$1'.
sequence_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: sequence_name -> NAME : unwrap_bin('$1').
sequence_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- synonym_name
synonym_name -> identifier : '$1'.
synonym_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: synonym_name -> NAME : unwrap_bin('$1').
synonym_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- table
New: table -> identifier : '$1'.
table -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
table -> parameter : '$1'.
Old: table -> NAME : unwrap_bin('$1').
table -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
table -> parameter : '$1'.
- table_alias
New: table_alias -> identifier NAME : {as, '$1', unwrap_bin('$2')}.
table_alias -> identifier '.' identifier NAME : {as, list_to_binary(['$1',".",'$3']), unwrap_bin('$4')}.
table_alias -> parameter NAME : {as, '$1', unwrap_bin('$2')}.
table_alias -> table : '$1'.
Old: table_alias -> NAME NAME : {as, unwrap_bin('$1'), unwrap_bin('$2')}.
table_alias -> NAME '.' NAME NAME : {as, list_to_binary([unwrap('$1'),".",unwrap('$3')]), unwrap_bin('$4')}.
table_alias -> parameter NAME : {as, '$1', unwrap_bin('$2')}.
table_alias -> table : '$1'.
- table_constraint_def
New: table_constraint_def -> UNIQUE '(' column_commalist ')' : {unique, [], '$3'}.
table_constraint_def -> PRIMARY KEY '(' column_commalist ')' : {'primary key', [], '$4'}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', [], '$4', {'ref', '$7'}}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', [], '$4', {'ref', {'$7', '$9'}}}.
table_constraint_def -> CHECK '(' search_condition ')' : {check, [], '$3'}.
table_constraint_def -> CONSTRAINT identifier UNIQUE '(' column_commalist ')' : {unique, '$2', '$5'}.
table_constraint_def -> CONSTRAINT identifier PRIMARY KEY '(' column_commalist ')' : {'primary key', '$2', '$6'}.
table_constraint_def -> CONSTRAINT identifier FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', '$2', '$6', {'ref', '$9'}}.
table_constraint_def -> CONSTRAINT identifier FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', '$2', '$6', {'ref', {'$9', '$11'}}}.
table_constraint_def -> CONSTRAINT identifier CHECK '(' search_condition ')' : {check, '$2', '$5'}.
Old: table_constraint_def -> UNIQUE '(' column_commalist ')' : {unique, [], '$3'}.
table_constraint_def -> PRIMARY KEY '(' column_commalist ')' : {'primary key', [], '$4'}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', [], '$4', {'ref', '$7'}}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', [], '$4', {'ref', {'$7', '$9'}}}.
table_constraint_def -> CHECK '(' search_condition ')' : {check, [], '$3'}.
table_constraint_def -> CONSTRAINT NAME UNIQUE '(' column_commalist ')' : {unique, unwrap_bin('$2'), '$5'}.
table_constraint_def -> CONSTRAINT NAME PRIMARY KEY '(' column_commalist ')' : {'primary key', unwrap_bin('$2'), '$6'}.
table_constraint_def -> CONSTRAINT NAME FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', unwrap_bin('$2'), '$6', {'ref', '$9'}}.
table_constraint_def -> CONSTRAINT NAME FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', unwrap_bin('$2'), '$6', {'ref', {'$9', '$11'}}}.
table_constraint_def -> CONSTRAINT NAME CHECK '(' search_condition ')' : {check, unwrap_bin('$2'), '$5'}.
- table_dblink
New: table_dblink -> identifier DBLINK : { '$1', {dblink, unwrap_bin('$2')}}.
table_dblink -> identifier DBLINK NAME : {as, '$1', unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> identifier '.' identifier DBLINK : { list_to_binary(['$1',".",'$3']), {dblink, unwrap_bin('$4')}}.
table_dblink -> identifier '.' identifier DBLINK NAME : {as, list_to_binary(['$1',".",'$3']), unwrap_bin('$5'), {dblink, unwrap_bin('$4')}}.
table_dblink -> parameter DBLINK : { '$1', {dblink, unwrap_bin('$2')}}.
table_dblink -> parameter DBLINK NAME : {as, '$1', unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> table_alias : '$1'.
table_dblink -> table_coll_expr : '$1'.
Old: table_dblink -> NAME DBLINK : { unwrap_bin('$1'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME DBLINK NAME : {as, unwrap_bin('$1'), unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME '.' NAME DBLINK : { list_to_binary([unwrap('$1'), ".", unwrap('$3')]), {dblink, unwrap_bin('$4')}}.
table_dblink -> NAME '.' NAME DBLINK NAME : {as, list_to_binary([unwrap('$1'), ".", unwrap('$3')]), unwrap_bin('$5'), {dblink, unwrap_bin('$4')}}.
table_dblink -> parameter DBLINK : { '$1', {dblink, unwrap_bin('$2')}}.
table_dblink -> parameter DBLINK NAME : {as, '$1', unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> table_alias : '$1'.
table_dblink -> table_coll_expr : '$1'.
- table_ref
New: table_ref -> table_dblink : '$1'.
table_ref -> query_term : '$1'.
table_ref -> query_term NAME : {as, '$1', unwrap_bin('$2')}.
Old: table_ref -> table_dblink : '$1'.
table_ref -> query_term : '$1'.
table_ref -> query_term NAME : {as, '$1', unwrap_bin('$2')}.
- target
New: target -> identifier : '$1'.
target -> parameter_ref : '$1'.
Old: target -> NAME : unwrap_bin('$1').
target -> parameter_ref : '$1'.
- trigger_name
New: trigger_name -> identifier : '$1'.
trigger_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: trigger_name -> NAME : unwrap_bin('$1').
trigger_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- type_name
New: type_name -> identifier : '$1'.
type_name -> identifier '.' identifier : list_to_binary(['$1',".",'$3']).
Old: type_name -> NAME : unwrap_bin('$1').
type_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
- user_list
New: user_list -> identifier : ['$1'].
user_list -> identifier ',' user_list : ['$1' | '$3'].
Old: user_list -> NAME : [unwrap_bin('$1')].
user_list -> NAME ',' user_list : [unwrap_bin('$1') | '$3'].
- user_opt
New: user_opt -> DEFAULT TABLESPACE identifier : [{'default tablespace', '$3'}].
user_opt -> TEMPORARY TABLESPACE identifier : [{'temporary tablespace', '$3'}].
user_opt -> quota_list : [{quotas, '$1'}].
user_opt -> PROFILE identifier : [{profile, '$2'}].
Old: user_opt -> DEFAULT TABLESPACE NAME : [{'default tablespace', unwrap_bin('$3')}].
user_opt -> TEMPORARY TABLESPACE NAME : [{'temporary tablespace', unwrap_bin('$3')}].
user_opt -> quota_list : [{quotas, '$1'}].
user_opt -> PROFILE NAME : [{profile, unwrap_bin('$2')}].
- when_action
New: when_action -> GOTO identifier : {goto, binary_to_list('$2')}.
when_action -> CONTINUE : 'continue'.
Old: when_action -> GOTO NAME : {goto, unwrap('$2')}.
when_action -> CONTINUE : 'continue'.
- At most places in the grammar, all keywords that are not reserved by Oracle are now allowed as identifiers.
Release Date: 13.03.2019
- assignment_statement
New: assignment_statement -> parameter ':=' scalar_opt_as_exp_1 : {':=', '$1', '$3'}.
Old: assignment_statement -> parameter ':=' scalar_opt_as_exp : {':=', '$1', '$3'}.
- cluster_name
New: cluster_name -> NAME : unwrap_bin('$1').
cluster_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- column_ref
New: column_ref -> FUNCTION JSON : jpparse(list_to_binary(["FUNCTION",unwrap('$2')])).
column_ref -> NAME JSON : jpparse(list_to_binary([unwrap('$1'),unwrap('$2')])).
column_ref -> TYPE JSON : jpparse(list_to_binary(["TYPE",unwrap('$2')])).
column_ref -> NAME '.' FUNCTION JSON : jpparse(list_to_binary([unwrap('$1'),".","FUNCTION",unwrap('$4')])).
column_ref -> NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),unwrap('$4')])).
column_ref -> NAME '.' TYPE JSON : jpparse(list_to_binary([unwrap('$1'),".","TYPE",unwrap('$4')])).
column_ref -> NAME '.' NAME '.' FUNCTION JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".","FUNCTION",unwrap('$6')])).
column_ref -> NAME '.' NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),unwrap('$6')])).
column_ref -> NAME '.' NAME '.' TYPE JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".","TYPE",unwrap('$6')])).
column_ref -> FUNCTION : list_to_binary("FUNCTION").
column_ref -> NAME : unwrap_bin('$1').
column_ref -> TYPE : list_to_binary("TYPE").
column_ref -> NAME '.' FUNCTION : list_to_binary([unwrap('$1'),".","FUNCTION"]).
column_ref -> NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3')]).
column_ref -> NAME '.' TYPE : list_to_binary([unwrap('$1'),".","TYPE"]).
column_ref -> NAME '.' NAME '.' FUNCTION : list_to_binary([unwrap('$1'),".",unwrap('$3'),".","FUNCTION"]).
column_ref -> NAME '.' NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5')]).
column_ref -> NAME '.' NAME '.' TYPE : list_to_binary([unwrap('$1'),".",unwrap('$3'),".","TYPE"]).
column_ref -> FUNCTION '(' '+' ')' : list_to_binary(["FUNCTION","(+)"]).
column_ref -> NAME '(' '+' ')' : list_to_binary([unwrap('$1'),"(+)"]).
column_ref -> TYPE '(' '+' ')' : list_to_binary(["TYPE","(+)"]).
column_ref -> NAME '.' FUNCTION '(' '+' ')' : list_to_binary([unwrap('$1'),".","FUNCTION","(+)"]).
column_ref -> NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),"(+)"]).
column_ref -> NAME '.' TYPE '(' '+' ')' : list_to_binary([unwrap('$1'),".","TYPE","(+)"]).
column_ref -> NAME '.' NAME '.' FUNCTION '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".","FUNCTION","(+)"]).
column_ref -> NAME '.' NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),"(+)"]).
column_ref -> NAME '.' NAME '.' TYPE '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".","TYPE","(+)"]).
column_ref -> NAME '.' '*' : list_to_binary([unwrap('$1'),".*"]).
column_ref -> NAME '.' NAME '.' '*' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".*"]).
Old: column_ref -> NAME JSON : jpparse(list_to_binary([unwrap('$1'),unwrap('$2')])).
column_ref -> NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),unwrap('$4')])).
column_ref -> NAME '.' NAME '.' NAME JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),unwrap('$6')])).
column_ref -> NAME : unwrap_bin('$1').
column_ref -> NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3')]).
column_ref -> NAME '.' NAME '.' NAME : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5')]).
column_ref -> NAME '(' '+' ')' : list_to_binary([unwrap('$1'),"(+)"]).
column_ref -> NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),"(+)"]).
column_ref -> NAME '.' NAME '.' NAME '(' '+' ')' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5'),"(+)"]).
column_ref -> NAME '.' '*' : list_to_binary([unwrap('$1'),".*"]).
column_ref -> NAME '.' NAME '.' '*' : list_to_binary([unwrap('$1'),".",unwrap('$3'),".*"]).
- drop_cluster_def
New: drop_cluster_def -> DROP CLUSTER cluster_name : {'drop cluster', '$3', {}}.
drop_cluster_def -> DROP CLUSTER cluster_name drop_cluster_extensions : {'drop cluster', '$3', '$4'}.
Old: n/a
- drop_cluster_extensions
New: drop_cluster_extensions -> INCLUDING TABLES : {'including tables'}.
drop_cluster_extensions -> INCLUDING TABLES CASCADE CONSTRAINTS : {'including tables cascade constraints'}.
Old: n/a
- drop_context_def
New: drop_context_def -> DROP CONTEXT NAME : {'drop context', unwrap_bin('$3')}.
Old: n/a
- drop_database_def
New: drop_database_def -> DROP DATABASE : {'drop database'}.
Old: n/a
- drop_database_link_def
New: drop_database_link_def -> DROP DATABASE LINK NAME : {'drop database link', unwrap_bin('$4'), {}}.
drop_database_link_def -> DROP PUBLIC DATABASE LINK NAME : {'drop database link', unwrap_bin('$5'), public}.
Old: n/a
- drop_directory_def
New: drop_directory_def -> DROP DIRECTORY NAME : {'drop directory', unwrap_bin('$3')}.
Old: n/a
- drop_function_def
New: drop_function_def -> DROP FUNCTION function_name : {'drop function', '$3'}.
Old: n/a
- drop_index_def
New: drop_index_def -> DROP INDEX FROM table : {'drop index', {}, '$4'}.
drop_index_def -> DROP INDEX FROM table drop_index_extensions : {'drop index', {}, '$4', '$5'}.
drop_index_def -> DROP INDEX index_name : {'drop index', '$3', []}.
drop_index_def -> DROP INDEX index_name drop_index_extensions : {'drop index', '$3', [], '$4'}.
drop_index_def -> DROP INDEX index_name FROM table : {'drop index', '$3', '$5'}.
drop_index_def -> DROP INDEX index_name FROM table drop_index_extensions : {'drop index', '$3', '$5', '$6'}.
Old: drop_index_def -> DROP INDEX FROM table : {'drop index', {}, '$4'}.
drop_index_def -> DROP INDEX index_name : {'drop index', '$3', []}.
drop_index_def -> DROP INDEX index_name FROM table : {'drop index', '$3', '$5'}.
- drop_index_extensions
New: drop_index_extensions -> DEFERRED INVALIDATION : {'deferred invalidation'}.
drop_index_extensions -> IMMEDIATE INVALIDATION : {'immediate invalidation'}.
drop_index_extensions -> FORCE : {'force'}.
drop_index_extensions -> FORCE DEFERRED INVALIDATION : {'force deferred invalidation'}.
drop_index_extensions -> FORCE IMMEDIATE INVALIDATION : {'force immediate invalidation'}.
drop_index_extensions -> ONLINE : {'online'}.
drop_index_extensions -> ONLINE DEFERRED INVALIDATION : {'online deferred invalidation'}.
drop_index_extensions -> ONLINE IMMEDIATE INVALIDATION : {'online immediate invalidation'}.
drop_index_extensions -> ONLINE FORCE : {'online force'}.
drop_index_extensions -> ONLINE FORCE DEFERRED INVALIDATION : {'online force deferred invalidation'}.
drop_index_extensions -> ONLINE FORCE IMMEDIATE INVALIDATION : {'online force immediate invalidation'}.
Old: n/a
- drop_materialized_view_def
New: drop_materialized_view_def -> DROP MATERIALIZED VIEW materialized_view_name : {'drop materialized view', '$4', {}}.
drop_materialized_view_def -> DROP MATERIALIZED VIEW materialized_view_name PRESERVE TABLE : {'drop materialized view', '$4', 'preserve table'}.
Old: n/a
- drop_package_def
New: drop_package_def -> DROP PACKAGE package_name : {'drop package', {}, '$3'}.
drop_package_def -> DROP PACKAGE BODY package_name : {'drop package', body, '$4'}.
Old: n/a
- drop_procedure_def
New: drop_procedure_def -> DROP PROCEDURE procedure_name : {'drop procedure', '$3'}.
Old: n/a
- drop_profile_def
New: drop_profile_def -> DROP PROFILE NAME : {'drop profile', unwrap_bin('$3'), {}}.
drop_profile_def -> DROP PROFILE NAME CASCADE : {'drop profile', unwrap_bin('$3'), cascade}.
Old: n/a
- drop_sequence_def
New: drop_sequence_def -> DROP SEQUENCE sequence_name : {'drop sequence', '$3'}.
Old: n/a
- drop_synonym_def
New: drop_synonym_def -> DROP SYNONYM synonym_name : {'drop synonym', '$3', {}, {}}.
drop_synonym_def -> DROP SYNONYM synonym_name FORCE : {'drop synonym', '$3', {}, force}.
drop_synonym_def -> DROP PUBLIC SYNONYM synonym_name : {'drop synonym', '$4', public, {}}.
drop_synonym_def -> DROP PUBLIC SYNONYM synonym_name FORCE : {'drop synonym', '$4', public, force}.
Old: n/a
- drop_table_def
New: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, []}.
drop_table_def -> DROP TABLE table_list drop_table_extensions : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', []}.
drop_table_def -> DROP TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP NAME TABLE table_list : {'drop table', {'tables', '$4'}, {}, unwrap('$2')}.
drop_table_def -> DROP NAME TABLE table_list drop_table_extensions : {'drop table', {'tables', '$4'}, {}, '$5', unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list drop_table_extensions : {'drop table', {'tables', '$5'}, '$4', '$6', unwrap('$2')}.
Old: drop_table_def -> DROP TABLE table_list : {'drop table', {'tables', '$3'}, {}, {}, []}.
drop_table_def -> DROP TABLE table_list restrict_cascade : {'drop table', {'tables', '$3'}, {}, '$4', []}.
drop_table_def -> DROP TABLE exists table_list : {'drop table', {'tables', '$4'}, '$3', {}, []}.
drop_table_def -> DROP TABLE exists table_list restrict_cascade : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP NAME TABLE table_list : {'drop table', {'tables', '$4'}, {}, {}, unwrap('$2')}.
drop_table_def -> DROP NAME TABLE table_list restrict_cascade : {'drop table', {'tables', '$4'}, {}, '$5', unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list : {'drop table', {'tables', '$5'}, '$4', {}, unwrap('$2')}.
drop_table_def -> DROP NAME TABLE exists table_list restrict_cascade : {'drop table', {'tables', '$5'}, '$4', '$6', unwrap('$2')}.
- drop_table_extensions
New: drop_table_extensions -> PURGE : {'purge'}.
drop_table_extensions -> CASCADE CONSTRAINTS : {'cascade constraints'}.
drop_table_extensions -> CASCADE CONSTRAINTS PURGE : {'cascade constraints purge'}.
Old: n/a
- drop_tablespace_def
New: drop_tablespace_def -> DROP TABLESPACE NAME : {'drop tablespace', unwrap_bin('$3'), {}}.
drop_tablespace_def -> DROP TABLESPACE NAME drop_tablespace_extensions : {'drop tablespace', unwrap_bin('$3'), '$4'}.
Old: n/a
- drop_tablespace_extensions
New: drop_tablespace_extensions -> INCLUDING CONTENTS : {'including contents'}.
drop_tablespace_extensions -> INCLUDING CONTENTS CASCADE CONSTRAINTS : {'including contents cascade constraints'}.
drop_tablespace_extensions -> INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS : {'including contents and datafiles cascade constraints'}.
drop_tablespace_extensions -> INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS : {'including contents keep datafiles cascade constraints'}.
drop_tablespace_extensions -> DROP QUOTA : {'drop quota'}.
drop_tablespace_extensions -> DROP QUOTA INCLUDING CONTENTS : {'drop quota including contents'}.
drop_tablespace_extensions -> DROP QUOTA INCLUDING CONTENTS CASCADE CONSTRAINTS : {'drop quota including contents cascade constraints'}.
drop_tablespace_extensions -> DROP QUOTA INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS : {'drop quota including contents and datafiles cascade constraints'}.
drop_tablespace_extensions -> DROP QUOTA INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS : {'drop quota including contents keep datafiles cascade constraints'}.
drop_tablespace_extensions -> KEEP QUOTA : {'keep quota'}.
drop_tablespace_extensions -> KEEP QUOTA INCLUDING CONTENTS : {'keep quota including contents'}.
drop_tablespace_extensions -> KEEP QUOTA INCLUDING CONTENTS CASCADE CONSTRAINTS : {'keep quota including contents cascade constraints'}.
drop_tablespace_extensions -> KEEP QUOTA INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS : {'keep quota including contents and datafiles cascade constraints'}.
drop_tablespace_extensions -> KEEP QUOTA INCLUDING CONTENTS KEEP DATAFILES CASCADE CONSTRAINTS : {'keep quota including contents keep datafiles cascade constraints'}.
Old: n/a
- drop_trigger_def
New: drop_trigger_def -> DROP TRIGGER trigger_name : {'drop trigger', '$3'}.
Old: n/a
- drop_type_def
New: drop_type_def -> DROP TYPE type_name : {'drop type', '$3', {}}.
drop_type_def -> DROP TYPE type_name FORCE : {'drop type', '$3', force}.
drop_type_def -> DROP TYPE type_name VALIDATE : {'drop type', '$3', validate}.
Old: n/a
- drop_type_body_def
New: drop_type_body_def -> DROP TYPE BODY type_name : {'drop type body', '$4'}.
Old: n/a
- drop_view_def
New: drop_view_def -> DROP VIEW table : {'drop view', '$3', {}}.
drop_view_def -> DROP VIEW table CASCADE CONSTRAINTS : {'drop view', '$3', 'cascade constraints'}.
Old: n/a
- function_name
New: function_name -> NAME : unwrap_bin('$1').
function_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- manipulative_statement
New: manipulative_statement -> alter_user_def : '$1'.
manipulative_statement -> create_index_def : '$1'.
manipulative_statement -> create_role_def : '$1'.
manipulative_statement -> create_table_def : '$1'.
manipulative_statement -> create_user_def : '$1'.
manipulative_statement -> delete_statement_positioned : '$1'.
manipulative_statement -> delete_statement_searched : '$1'.
manipulative_statement -> drop_cluster_def : '$1'.
manipulative_statement -> drop_context_def : '$1'.
manipulative_statement -> drop_database_def : '$1'.
manipulative_statement -> drop_database_link_def : '$1'.
manipulative_statement -> drop_directory_def : '$1'.
manipulative_statement -> drop_function_def : '$1'.
manipulative_statement -> drop_index_def : '$1'.
manipulative_statement -> drop_materialized_view_def : '$1'.
manipulative_statement -> drop_package_def : '$1'.
manipulative_statement -> drop_procedure_def : '$1'.
manipulative_statement -> drop_profile_def : '$1'.
manipulative_statement -> drop_role_def : '$1'.
manipulative_statement -> drop_sequence_def : '$1'.
manipulative_statement -> drop_synonym_def : '$1'.
manipulative_statement -> drop_table_def : '$1'.
manipulative_statement -> drop_tablespace_def : '$1'.
manipulative_statement -> drop_trigger_def : '$1'.
manipulative_statement -> drop_type_def : '$1'.
manipulative_statement -> drop_type_body_def : '$1'.
manipulative_statement -> drop_user_def : '$1'.
manipulative_statement -> drop_view_def : '$1'.
manipulative_statement -> grant_def : '$1'.
manipulative_statement -> insert_statement : '$1'.
manipulative_statement -> revoke_def : '$1'.
manipulative_statement -> select_statement : '$1'.
manipulative_statement -> truncate_cluster : '$1'.
manipulative_statement -> truncate_table : '$1'.
manipulative_statement -> update_statement_positioned : '$1'.
manipulative_statement -> update_statement_searched : '$1'.
manipulative_statement -> view_def : '$1'.
Old: manipulative_statement -> alter_user_def : '$1'.
manipulative_statement -> create_index_def : '$1'.
manipulative_statement -> create_role_def : '$1'.
manipulative_statement -> create_table_def : '$1'.
manipulative_statement -> create_user_def : '$1'.
manipulative_statement -> delete_statement_positioned : '$1'.
manipulative_statement -> delete_statement_searched : '$1'.
manipulative_statement -> drop_index_def : '$1'.
manipulative_statement -> drop_role_def : '$1'.
manipulative_statement -> drop_table_def : '$1'.
manipulative_statement -> drop_user_def : '$1'.
manipulative_statement -> grant_def : '$1'.
manipulative_statement -> insert_statement : '$1'.
manipulative_statement -> revoke_def : '$1'.
manipulative_statement -> select_statement : '$1'.
manipulative_statement -> truncate_table : '$1'.
manipulative_statement -> update_statement_positioned : '$1'.
manipulative_statement -> update_statement_searched : '$1'.
manipulative_statement -> view_def : '$1'.
- materialized_view_name
New: materialized_view_name -> NAME : unwrap_bin('$1').
materialized_view_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- package_name
New: package_name -> NAME : unwrap_bin('$1').
package_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- procedure_name
New: procedure_name -> NAME : unwrap_bin('$1').
procedure_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- restrict_cascade
New: n/a
Old: restrict_cascade -> RESTRICT : restrict.
restrict_cascade -> CASCADE : cascade.
- scalar_opt_as_exp
New: scalar_opt_as_exp -> scalar_opt_as_exp_1 : '$1'.
scalar_opt_as_exp -> scalar_opt_as_exp_2 : '$1'.
Old: scalar_opt_as_exp -> scalar_exp : '$1'.
scalar_opt_as_exp -> scalar_exp '=' scalar_exp : {'=', '$1', '$3'}.
scalar_opt_as_exp -> scalar_exp COMPARISON scalar_exp : {unwrap('$2'), '$1', '$3'}.
scalar_opt_as_exp -> scalar_exp NAME : {as, '$1', unwrap_bin('$2')}.
scalar_opt_as_exp -> scalar_exp AS NAME : {as, '$1', unwrap_bin('$3')}.
- scalar_opt_as_exp_1
New: scalar_opt_as_exp_1 -> scalar_exp : '$1'.
scalar_opt_as_exp_1 -> scalar_exp '=' scalar_exp : {'=', '$1', '$3'}.
scalar_opt_as_exp_1 -> scalar_exp COMPARISON scalar_exp : {unwrap('$2'), '$1', '$3'}.
Old: n/a
- scalar_opt_as_exp_2
New: scalar_opt_as_exp_2 -> scalar_exp NAME : {as, '$1', unwrap_bin('$2')}.
scalar_opt_as_exp_2 -> scalar_exp AS NAME : {as, '$1', unwrap_bin('$3')}.
Old: n/a
- sequence_name
New: sequence_name -> NAME : unwrap_bin('$1').
sequence_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- storage
New: storage -> DROP STORAGE : {storage, drop}.
storage -> DROP ALL STORAGE : {storage, 'drop all'}.
storage -> REUSE STORAGE : {storage, reuse}.
Old: storage -> DROP STORAGE : {storage, drop}.
storage -> REUSE STORAGE : {storage, reuse}.
- synonym_name
New: synonym_name -> NAME : unwrap_bin('$1').
synonym_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')])..
Old: n/a
- table
New: table -> NAME : unwrap_bin('$1').
table -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
table -> parameter : '$1'.
Old: table -> NAME : unwrap_bin('$1').
table -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
table -> parameter : '$1'.
table -> STRING : unwrap_bin('$1').
- table_alias
New: table_alias -> NAME NAME : {as, unwrap_bin('$1'), unwrap_bin('$2')}.
table_alias -> NAME '.' NAME NAME : {as, list_to_binary([unwrap('$1'),".",unwrap('$3')]), unwrap_bin('$4')}.
table_alias -> parameter NAME : {as, '$1', unwrap_bin('$2')}.
table_alias -> table : '$1'.
Old: table_alias -> NAME NAME : {as, unwrap_bin('$1'), unwrap_bin('$2')}.
table_alias -> NAME '.' NAME NAME : {as, list_to_binary([unwrap('$1'),".",unwrap('$3')]), unwrap_bin('$4')}.
table_alias -> parameter NAME : {as, '$1', unwrap_bin('$2')}.
table_alias -> STRING NAME : {as, unwrap_bin('$1'), unwrap_bin('$2')}.
table_alias -> table : '$1'.
- trigger_name
New: trigger_name -> NAME : unwrap_bin('$1').
trigger_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- truncate_cluster
New: truncate_cluster -> TRUNCATE CLUSTER cluster_name : {'truncate cluster', '$3', {}}.
truncate_cluster -> TRUNCATE CLUSTER cluster_name storage : {'truncate cluster', '$3', '$4'}.
Old: n/a
- truncate_table
New: truncate_table -> TRUNCATE TABLE table : {'truncate table', '$3', {}, {}}.
truncate_table -> TRUNCATE TABLE table CASCADE : {'truncate table', '$3', {}, {}, cascade}.
truncate_table -> TRUNCATE TABLE table storage : {'truncate table', '$3', {}, '$4'}.
truncate_table -> TRUNCATE TABLE table storage CASCADE : {'truncate table', '$3', {}, '$4', cascade}.
truncate_table -> TRUNCATE TABLE table materialized : {'truncate table', '$3', '$4', {}}.
truncate_table -> TRUNCATE TABLE table materialized CASCADE : {'truncate table', '$3', '$4', {}, cascade}.
truncate_table -> TRUNCATE TABLE table materialized storage : {'truncate table', '$3', '$4', '$5'}.
truncate_table -> TRUNCATE TABLE table materialized storage CASCADE : {'truncate table', '$3', '$4', '$5', cascade}.
Old: truncate_table -> TRUNCATE TABLE table : {'truncate table', '$3', {}, {}}.
truncate_table -> TRUNCATE TABLE table storage : {'truncate table', '$3', {}, '$4'}.
truncate_table -> TRUNCATE TABLE table materialized : {'truncate table', '$3', '$4', {}}.
truncate_table -> TRUNCATE TABLE table materialized storage : {'truncate table', '$3', '$4', '$5'}.
- type_name
New: type_name -> NAME : unwrap_bin('$1').
type_name -> NAME '.' NAME : list_to_binary([unwrap('$1'), ".", unwrap('$3')]).
Old: n/a
- A forward slash at the beginning of a new line is ignored.
Release Date: 04.03.2019
- assign_statement
New: n/a
Old: assign_statement -> parameter ':=' scalar_opt_as_exp ';' : {':=', '$1', '$3'}.
- assignment_statement
New: assignment_statement -> parameter ':=' scalar_opt_as_exp : {':=', '$1', '$3'}.
Old: n/a
- fun_arg_named
New: fun_arg_named -> NAME '=>' literal : {'=>', unwrap_bin('$1'), '$3'}.
fun_arg_named -> NAME '=>' NAME : {'=>', unwrap_bin('$1'), unwrap_bin('$3')}.
fun_arg_named -> NAME '=>' parameter : {'=>', unwrap_bin('$1'), '$3'}.
Old: n/a
- fun_args_named
New: fun_args_named -> fun_arg_named : ['$1'].
fun_args_named -> fun_arg_named ',' fun_args_named : ['$1' | '$3'].
Old: n/a
- function_ref
New: function_ref -> function_ref JSON : {'$1', jpparse(list_to_binary([unwrap('$2')])), []}.
function_ref -> FUNS : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' ')' : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' '*' ')' : {'fun', unwrap_bin('$1'), [<<"*">>]}.
function_ref -> FUNS '(' ALL scalar_exp ')' : {'fun', unwrap_bin('$1'), [{all, '$4'}]}.
function_ref -> FUNS '(' DISTINCT column_ref ')' : {'fun', unwrap_bin('$1'), [{distinct, '$4'}]}.
function_ref -> FUNS '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> FUNS '(' fun_args_named ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '(' ')' : {'fun', unwrap_bin('$1'), []}.
function_ref -> NAME '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '(' fun_args_named ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '.' NAME '(' ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), []}.
function_ref -> NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), make_list('$5')}.
function_ref -> NAME '.' NAME '(' fun_args_named ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), make_list('$5')}.
function_ref -> NAME '.' NAME '.' NAME '(' ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), []}.
function_ref -> NAME '.' NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), make_list('$7')}.
function_ref -> NAME '.' NAME '.' NAME '(' fun_args_named ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), make_list('$7')}.
Old: function_ref -> function_ref JSON : {'$1', jpparse(list_to_binary([unwrap('$2')])), []}.
function_ref -> FUNS : {'fun', unwrap_bin('$1'), []}.
function_ref -> FUNS '(' '*' ')' : {'fun', unwrap_bin('$1'), [<<"*">>]}.
function_ref -> FUNS '(' ALL scalar_exp ')' : {'fun', unwrap_bin('$1'), [{all, '$4'}]}.
function_ref -> FUNS '(' DISTINCT column_ref ')' : {'fun', unwrap_bin('$1'), [{distinct, '$4'}]}.
function_ref -> FUNS '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '(' fun_args ')' : {'fun', unwrap_bin('$1'), make_list('$3')}.
function_ref -> NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3')]), make_list('$5')}.
function_ref -> NAME '.' NAME '.' NAME '(' fun_args ')' : {'fun', list_to_binary([unwrap('$1'), ".", unwrap('$3'), ".", unwrap('$5')]), make_list('$7')}.
- plsql_block
New: manipulative_statement -> delete_statement_positioned : '$1'.
manipulative_statement -> delete_statement_searched : '$1'.
manipulative_statement -> insert_statement : '$1'.
manipulative_statement -> select_statement : '$1'.
manipulative_statement -> update_statement_positioned : '$1'.
manipulative_statement -> update_statement_searched : '$1'.
manipulative_statement -> create_table_def : '$1'.
manipulative_statement -> create_role_def : '$1'.
manipulative_statement -> create_index_def : '$1'.
manipulative_statement -> create_user_def : '$1'.
manipulative_statement -> drop_role_def : '$1'.
manipulative_statement -> drop_table_def : '$1'.
manipulative_statement -> drop_index_def : '$1'.
manipulative_statement -> alter_user_def : '$1'.
manipulative_statement -> drop_user_def : '$1'.
manipulative_statement -> view_def : '$1'.
manipulative_statement -> truncate_table : '$1'.
manipulative_statement -> grant_def : '$1'.
manipulative_statement -> revoke_def : '$1'.
Old: manipulative_statement -> close_statement : '$1'.
manipulative_statement -> commit_statement : '$1'.
manipulative_statement -> delete_statement_positioned : '$1'.
manipulative_statement -> delete_statement_searched : '$1'.
manipulative_statement -> fetch_statement : '$1'.
manipulative_statement -> insert_statement : '$1'.
manipulative_statement -> open_statement : '$1'.
manipulative_statement -> rollback_statement : '$1'.
manipulative_statement -> select_statement : '$1'.
manipulative_statement -> update_statement_positioned : '$1'.
manipulative_statement -> update_statement_searched : '$1'.
manipulative_statement -> create_table_def : '$1'.
manipulative_statement -> create_role_def : '$1'.
manipulative_statement -> create_index_def : '$1'.
manipulative_statement -> create_user_def : '$1'.
manipulative_statement -> drop_role_def : '$1'.
manipulative_statement -> drop_table_def : '$1'.
manipulative_statement -> drop_index_def : '$1'.
manipulative_statement -> alter_user_def : '$1'.
manipulative_statement -> drop_user_def : '$1'.
manipulative_statement -> view_def : '$1'.
manipulative_statement -> truncate_table : '$1'.
manipulative_statement -> grant_def : '$1'.
manipulative_statement -> revoke_def : '$1'.
- plsql_block
New: plsql_block -> plsql_body : '$1'.
Old: n/a
- plsql_block_sql_list
New: plsql_block_sql_list -> plsql_block : '$1'.
plsql_block_sql_list -> sql_list : '$1'.
Old: n/a
- plsql_body
New: plsql_body -> BEGIN statement_pragma_list END ';' : {'plsql_body', '$2'}.
Old: n/a
- procedure_call
New: procedure_call -> CALL function_ref : {'call procedure', '$2'}.
Old: procedure_call -> BEGIN function_ref_list END : {'begin procedure', '$2'}.
procedure_call -> BEGIN sql_list END : {'begin procedure', '$2'}.
procedure_call -> CALL function_ref : {'call procedure', '$2'}.
- sql
New: sql -> manipulative_statement : '$1'.
sql -> schema : '$1'.
Old: sql -> cursor_def : '$1'.
sql -> manipulative_statement : '$1'.
sql -> procedure_call : '$1'.
sql -> schema : '$1'.
sql -> WHENEVER NOT FOUND when_action : {when_not_found, '$4'}.
sql -> WHENEVER SQLERROR when_action : {when_sql_err, '$3'}.
- statement_pragma
New: statement_pragma -> assignment_statement : '$1'.
statement_pragma -> close_statement : '$1'.
statement_pragma -> commit_statement : '$1'.
statement_pragma -> cursor_def : '$1'.
statement_pragma -> delete_statement_positioned : '$1'.
statement_pragma -> delete_statement_searched : '$1'.
statement_pragma -> fetch_statement : '$1'.
statement_pragma -> function_ref : '$1'.
statement_pragma -> insert_statement : '$1'.
statement_pragma -> open_statement : '$1'.
statement_pragma -> procedure_call : '$1'.
statement_pragma -> rollback_statement : '$1'.
statement_pragma -> select_statement : '$1'.
statement_pragma -> update_statement_positioned : '$1'.
statement_pragma -> update_statement_searched : '$1'.
statement_pragma -> WHENEVER NOT FOUND when_action : {when_not_found, '$4'}.
statement_pragma -> WHENEVER SQLERROR when_action : {when_sql_err, '$3'}.
Old: statement_pragma -> assignm_statement : '$1'.
- statement_pragma_list
New: statement_pragma_list -> statement_pragma ';' : [{'$1', ';'}].
statement_pragma_list -> statement_pragma_list statement_pragma ';' : '$1' ++ [{'$2', ';'}].
Old: n/a
- table_coll_expr
New: table_constraint_def -> UNIQUE '(' column_commalist ')' : {unique, [], '$3'}.
table_constraint_def -> PRIMARY KEY '(' column_commalist ')' : {'primary key', [], '$4'}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', [], '$4', {'ref', '$7'}}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', [], '$4', {'ref', {'$7', '$9'}}}.
table_constraint_def -> CHECK '(' search_condition ')' : {check, [], '$3'}.
table_constraint_def -> CONSTRAINT NAME UNIQUE '(' column_commalist ')' : {unique, '$2', '$5'}.
table_constraint_def -> CONSTRAINT NAME PRIMARY KEY '(' column_commalist ')' : {'primary key', '$2', '$6'}.
table_constraint_def -> CONSTRAINT NAME FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', '$2', '$6', {'ref', '$9'}}.
table_constraint_def -> CONSTRAINT NAME FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', '$2', '$6', {'ref', {'$9', '$11'}}}.
table_constraint_def -> CONSTRAINT NAME CHECK '(' search_condition ')' : {check, '$2', '$5'}.
Old: table_constraint_def -> UNIQUE '(' column_commalist ')' : {unique, '$3'}.
table_constraint_def -> PRIMARY KEY '(' column_commalist ')' : {'primary key', '$4'}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table : {'foreign key', '$4', {'ref', '$7'}}.
table_constraint_def -> FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' : {'foreign key', '$4', {'ref', {'$7', '$9'}}}.
table_constraint_def -> CHECK '(' search_condition ')' : {check, '$3'}.
- values_or_query_spec
New: values_or_query_spec -> VALUES '(' insert_atom_commalist ')' : {values, '$3'}.
values_or_query_spec -> query_spec : '$1'.
values_or_query_spec -> '(' query_spec ')' : '$2'.
Old: values_or_query_spec -> VALUES '(' insert_atom_commalist ')' : {values, '$3'}.
values_or_query_spec -> query_spec : '$1'.
Release Date: 03.05.2018
- table_coll_expr
New: table_coll_expr -> TABLE '(' collection_expression ')' : {table_coll_expr, '$3'}.
Old: n/a
- table_dblink
New: table_dblink -> NAME DBLINK : { unwrap_bin('$1'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME DBLINK NAME : {as, unwrap_bin('$1'), unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME '.' NAME DBLINK : { list_to_binary([unwrap('$1'), ".", unwrap('$3')]), {dblink, unwrap_bin('$4')}}.
table_dblink -> NAME '.' NAME DBLINK NAME : {as, list_to_binary([unwrap('$1'), ".", unwrap('$3')]), unwrap_bin('$5'), {dblink, unwrap_bin('$4')}}.
table_dblink -> parameter DBLINK : { '$1', {dblink, unwrap_bin('$2')}}.
table_dblink -> parameter DBLINK NAME : {as, '$1', unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> table_alias : '$1'.
table_dblink -> table_coll_expr : '$1'.
Old: table_dblink -> NAME DBLINK : { unwrap_bin('$1'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME DBLINK NAME : {as, unwrap_bin('$1'), unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> NAME '.' NAME DBLINK : { list_to_binary([unwrap('$1'), ".", unwrap('$3')]), {dblink, unwrap_bin('$4')}}.
table_dblink -> NAME '.' NAME DBLINK NAME : {as, list_to_binary([unwrap('$1'), ".", unwrap('$3')]), unwrap_bin('$5'), {dblink, unwrap_bin('$4')}}.
table_dblink -> parameter DBLINK : { '$1', {dblink, unwrap_bin('$2')}}.
table_dblink -> parameter DBLINK NAME : {as, '$1', unwrap_bin('$3'), {dblink, unwrap_bin('$2')}}.
table_dblink -> table_alias : '$1'.
Release Date: 01.04.2018
- create_index_def
New: query_term -> query_spec : '$1'.
query_term -> '(' query_exp ')' : '$2'.
query_term -> '(' query_exp ')' JSON : {'$2', jpparse(list_to_binary([unwrap('$4')])), '('}.
Old: query_term -> query_spec : '$1'.
query_term -> query_spec JSON : {'$1', jpparse(list_to_binary([unwrap('$2')])), []}.
query_term -> '(' query_exp ')' : '$2'.
query_term -> '(' query_exp ')' JSON : {'$2', jpparse(list_to_binary([unwrap('$4')])), '('}.
- new 'ad hoc' testing facility.
- refactoring of the code with a separation of folder functionality and layout functionality - new custom fold extensions
- restructuring of the project` directory - new 'include' folder, new 'src' folder in the 'test' directory and adding adding 'eunit' as a prefix to the eunit file names.
Release Date: 17.01.2018
- create_index_def
New: create_index_def -> CREATE INDEX ON table_alias
create_index_def -> CREATE INDEX ON table_alias create_index_filter
create_index_def -> CREATE INDEX ON table_alias create_index_norm
create_index_def -> CREATE INDEX ON table_alias create_index_norm create_index_filter
create_index_def -> CREATE INDEX ON table_alias create_index_spec
create_index_def -> CREATE INDEX ON table_alias create_index_spec create_index_filter
create_index_def -> CREATE INDEX ON table_alias create_index_spec create_index_norm
create_index_def -> CREATE INDEX ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table_alias
create_index_def -> CREATE INDEX index_name ON table_alias create_index_filter
create_index_def -> CREATE INDEX index_name ON table_alias create_index_norm
create_index_def -> CREATE INDEX index_name ON table_alias create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table_alias create_index_spec
create_index_def -> CREATE INDEX index_name ON table_alias create_index_spec create_index_filter
create_index_def -> CREATE INDEX index_name ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table_alias create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table_alias
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_spec
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table_alias create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_norm
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_spec
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX index_name ON table_alias create_index_spec create_index_norm create_index_filter
Old: create_index_def -> CREATE INDEX ON table
create_index_def -> CREATE INDEX ON table create_index_filter
create_index_def -> CREATE INDEX ON table create_index_norm
create_index_def -> CREATE INDEX ON table create_index_norm create_index_filter
create_index_def -> CREATE INDEX ON table create_index_spec
create_index_def -> CREATE INDEX ON table create_index_spec create_index_filter
create_index_def -> CREATE INDEX ON table create_index_spec create_index_norm
create_index_def -> CREATE INDEX ON table create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table
create_index_def -> CREATE INDEX index_name ON table create_index_filter
create_index_def -> CREATE INDEX index_name ON table create_index_norm
create_index_def -> CREATE INDEX index_name ON table create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table create_index_spec
create_index_def -> CREATE INDEX index_name ON table create_index_spec create_index_filter
create_index_def -> CREATE INDEX index_name ON table create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE INDEX index_name ON table create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table
create_index_def -> CREATE create_index_opts INDEX ON table create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table create_index_spec
create_index_def -> CREATE create_index_opts INDEX ON table create_index_spec create_index_filter
create_index_def -> CREATE create_index_opts INDEX ON table create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX ON table create_index_spec create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_norm
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_norm create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_spec
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_spec create_index_filter
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_spec create_index_norm
create_index_def -> CREATE create_index_opts INDEX index_name ON table create_index_spec create_index_norm create_index_filter
- cursor_def
New: cursor_def -> CURSOR cursor IS query_exp
Old: cursor_def -> DECLARE cursor CURSOR FOR query_exp
cursor_def -> DECLARE cursor CURSOR FOR query_exp order_by_clause
- delete_statement_positioned
New: delete_statement_positioned -> DELETE FROM table_dblink WHERE CURRENT OF cursor
delete_statement_positioned -> DELETE FROM table_dblink WHERE CURRENT OF cursor returning
Old: delete_statement_positioned -> DELETE FROM table WHERE CURRENT OF cursor
delete_statement_positioned -> DELETE FROM table WHERE CURRENT OF cursor returning
- delete_statement_searched
New: delete_statement_searched -> DELETE FROM table_dblink
delete_statement_searched -> DELETE FROM table_dblink returning
delete_statement_searched -> DELETE FROM table_dblink where_clause
delete_statement_searched -> DELETE FROM table_dblink where_clause returning
Old: delete_statement_searched -> DELETE FROM table
delete_statement_searched -> DELETE FROM table returning
delete_statement_searched -> DELETE FROM table where_clause
delete_statement_searched -> DELETE FROM table where_clause returning
- drop_index_def
New: drop_index_def -> DROP INDEX FROM table
drop_index_def -> DROP INDEX index_name
drop_index_def -> DROP INDEX index_name FROM table
Old: drop_index_def -> DROP INDEX FROM table
drop_index_def -> DROP INDEX index_name FROM table
- fun_arg
New: fun_arg -> '(' fun_arg ')'
fun_arg -> function_ref
fun_arg -> column_ref
fun_arg -> fun_arg '+' fun_arg
fun_arg -> fun_arg '-' fun_arg
fun_arg -> fun_arg '*' fun_arg
fun_arg -> fun_arg '/' fun_arg
fun_arg -> fun_arg 'div' fun_arg
fun_arg -> fun_arg '||' fun_arg
fun_arg -> unary_add_or_subtract fun_arg
fun_arg -> NULLX
fun_arg -> atom
fun_arg -> subquery
fun_arg -> fun_arg NAME
fun_arg -> fun_arg AS NAME
fun_arg -> fun_arg '=' fun_arg
fun_arg -> fun_arg COMPARISON fun_arg
fun_arg -> case_when_exp
Old: fun_arg -> '(' fun_arg ')'
fun_arg -> function_ref
fun_arg -> column_ref
fun_arg -> fun_arg '+' fun_arg
fun_arg -> fun_arg '-' fun_arg
fun_arg -> fun_arg '*' fun_arg
fun_arg -> fun_arg '/' fun_arg
fun_arg -> fun_arg 'div' fun_arg
fun_arg -> fun_arg '||' fun_arg
fun_arg -> unary_add_or_subtract fun_arg
fun_arg -> NULLX
fun_arg -> atom
fun_arg -> subquery
fun_arg -> fun_arg NAME
fun_arg -> fun_arg AS NAME
fun_arg -> fun_arg '=' fun_arg
fun_arg -> fun_arg COMPARISON fun_arg
- function_ref
New: function_ref -> NAME '.' NAME '.' NAME '(' fun_args ')'
function_ref -> NAME '.' NAME '(' fun_args ')'
function_ref -> NAME '(' fun_args ')'
function_ref -> FUNS
function_ref -> FUNS '(' fun_args ')'
function_ref -> FUNS '(' '*' ')'
function_ref -> FUNS '(' DISTINCT column_ref ')'
function_ref -> FUNS '(' ALL scalar_exp ')'
function_ref -> function_ref JSON
function_ref -> '(' function_ref ')' JSON
Old: function_ref -> NAME '.' NAME '.' NAME '(' fun_args ')'
function_ref -> NAME '.' NAME '(' fun_args ')'
function_ref -> NAME '(' fun_args ')'
function_ref -> FUNS
function_ref -> FUNS '(' fun_args ')'
function_ref -> FUNS '(' '*' ')'
function_ref -> FUNS '(' DISTINCT column_ref ')'
function_ref -> FUNS '(' ALL scalar_exp ')'
- grant_def
New: grant_def -> GRANT ALL PRIVILEGES on_obj_clause TO grantee_revokee_commalist
grant_def -> GRANT object_privilege_list on_obj_clause TO grantee_revokee_commalist
grant_def -> GRANT ALL PRIVILEGES on_obj_clause TO grantee_identified_by
grant_def -> GRANT object_privilege_list on_obj_clause TO grantee_identified_by
grant_def -> GRANT ALL PRIVILEGES on_obj_clause TO grantee_revokee_commalist object_with_grant_option
grant_def -> GRANT object_privilege_list on_obj_clause TO grantee_revokee_commalist object_with_grant_option
grant_def -> GRANT ALL PRIVILEGES on_obj_clause TO grantee_identified_by object_with_grant_option
grant_def -> GRANT object_privilege_list on_obj_clause TO grantee_identified_by object_with_grant_option
grant_def -> GRANT ALL PRIVILEGES TO grantee_revokee_commalist
grant_def -> GRANT system_privilege_list TO grantee_revokee_commalist
grant_def -> GRANT ALL PRIVILEGES TO grantee_identified_by
grant_def -> GRANT system_privilege_list TO grantee_identified_by
grant_def -> GRANT ALL PRIVILEGES TO grantee_revokee_commalist system_with_grant_option
grant_def -> GRANT system_privilege_list TO grantee_revokee_commalist system_with_grant_option
grant_def -> GRANT ALL PRIVILEGES TO grantee_identified_by system_with_grant_option
grant_def -> GRANT system_privilege_list TO grantee_identified_by system_with_grant_option
Old: grant_def -> GRANT TO grantee_commalist
grant_def -> GRANT TO grantee_commalist with_grant_option
grant_def -> GRANT on_obj_clause TO grantee_commalist
grant_def -> GRANT on_obj_clause TO grantee_commalist with_grant_option
grant_def -> GRANT system_privilege_list TO grantee_commalist
grant_def -> GRANT system_privilege_list TO grantee_commalist with_grant_option
grant_def -> GRANT system_privilege_list on_obj_clause TO grantee_commalist
grant_def -> GRANT system_privilege_list on_obj_clause TO grantee_commalist with_grant_option
- grantee
New: see grantee_revokee
Old: grantee -> NAME
grantee -> NAME IDENTIFIED BY NAME
grantee -> PUBLIC
- grantee_commalist
New: see grantee_revokee_commalist
Old: grantee_commalist -> grantee
grantee_commalist -> grantee_commalist ',' grantee
- grantee_identified_by
New: grantee_identified_by -> NAME IDENTIFIED BY STRING
Old: see grantee
- grantee_revokee
New: grantee_revokee -> NAME
grantee_revokee -> PUBLIC
Old: see grantee
- grantee_revokee_commalist
New: grantee_revokee_commalist -> grantee_revokee
grantee_revokee_commalist -> grantee_revokee_commalist ',' grantee_revokee
Old: see grantee_commalist
- insert_statement
New: insert_statement -> INSERT INTO table_dblink
insert_statement -> INSERT INTO table_dblink returning
insert_statement -> INSERT INTO table_dblink values_or_query_spec
insert_statement -> INSERT INTO table_dblink values_or_query_spec returning
insert_statement -> INSERT INTO table_dblink '(' column_commalist ')' values_or_query_spec
insert_statement -> INSERT INTO table_dblink '(' column_commalist ')' values_or_query_spec returning
Old: insert_statement -> INSERT INTO table
insert_statement -> INSERT INTO table returning
insert_statement -> INSERT INTO table values_or_query_spec
insert_statement -> INSERT INTO table values_or_query_spec returning
insert_statement -> INSERT INTO table '(' column_commalist ')' values_or_query_spec
insert_statement -> INSERT INTO table '(' column_commalist ')' values_or_query_spec returning
- into
New: into -> INTO target_commalist
Old: into -> INTO target_commalist
into -> INTO target_commalist IN NAME
- join_ref
New: join_ref -> table_dblink
join_ref -> query_term
join_ref -> query_term NAME
Old: join_ref -> table
join_ref -> query_term
join_ref -> query_term NAME
- object_privilege
New: object_privilege -> ALL
object_privilege -> ALL PRIVILEGES
object_privilege -> ALTER
object_privilege -> DELETE
object_privilege -> INDEX
object_privilege -> INSERT
object_privilege -> REFERENCES
object_privilege -> SELECT
object_privilege -> UPDATE
Old: n/a
- object_privilege_list
New: object_privilege_list -> object_privilege
object_privilege_list -> object_privilege ',' object_privilege_list
Old: n/a
- object_with_grant_option
New: object_with_grant_option -> WITH GRANT OPTION
object_with_grant_option -> WITH HIERARCHY OPTION
Old: see with_grant_option
- object_with_revoke_option
New: object_with_revoke_option -> CASCADE CONSTRAINTS
object_with_revoke_option -> FORCE
Old: see with_revoke_option
- on_obj_clause
New: on_obj_clause -> ON DIRECTORY NAME
on_obj_clause -> ON table
Old: on_obj_clause -> ON DIRECTORY NAME
on_obj_clause -> ON JAVA SOURCE table
on_obj_clause -> ON JAVA RESOURCE table
on_obj_clause -> ON table
- procedure_call
New: procedure_call -> DECLARE BEGIN function_ref_list END
procedure_call -> DECLARE BEGIN sql_list END
procedure_call -> BEGIN function_ref_list END
procedure_call -> BEGIN sql_list END
procedure_call -> CALL function_ref
Old: procedure_call -> BEGIN function_ref_list END
procedure_call -> BEGIN sql_list END
procedure_call -> CALL function_ref
- query_term
New: query_term -> query_spec
query_term -> query_spec JSON
query_term -> '(' query_exp ')'
query_term -> '(' query_exp ')' JSON
Old: query_term -> query_spec
query_term -> '(' query_exp ')'
- revoke_def
New: revoke_def -> REVOKE ALL PRIVILEGES on_obj_clause FROM grantee_revokee_commalist
revoke_def -> REVOKE object_privilege_list on_obj_clause FROM grantee_revokee_commalist
revoke_def -> REVOKE ALL PRIVILEGES on_obj_clause FROM grantee_revokee_commalist object_with_revoke_option
revoke_def -> REVOKE object_privilege_list on_obj_clause FROM grantee_revokee_commalist object_with_revoke_option
revoke_def -> REVOKE ALL PRIVILEGES FROM grantee_revokee_commalist
revoke_def -> REVOKE system_privilege_list FROM grantee_revokee_commalist
Old: revoke_def -> REVOKE FROM grantee_commalist
revoke_def -> REVOKE FROM grantee_commalist with_revoke_option
revoke_def -> REVOKE on_obj_clause FROM grantee_commalist
revoke_def -> REVOKE on_obj_clause FROM grantee_commalist with_revoke_option
revoke_def -> REVOKE system_privilege_list FROM grantee_commalist
revoke_def -> REVOKE system_privilege_list FROM grantee_commalist with_revoke_option
revoke_def -> REVOKE system_privilege_list on_obj_clause FROM grantee_commalist
revoke_def -> REVOKE system_privilege_list on_obj_clause FROM grantee_commalist with_revoke_option
- scalar_sub_exp
New: scalar_sub_exp -> scalar_sub_exp '+' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '-' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '*' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '/' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp 'div' scalar_sub_exp
scalar_sub_exp -> unary_add_or_subtract scalar_sub_exp
scalar_sub_exp -> NULLX
scalar_sub_exp -> atom
scalar_sub_exp -> subquery
scalar_sub_exp -> column_ref
scalar_sub_exp -> function_ref
scalar_sub_exp -> '(' scalar_sub_exp ')'
scalar_sub_exp -> '(' scalar_sub_exp ')' JSON
Old: scalar_sub_exp -> scalar_sub_exp '+' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '-' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '*' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp '/' scalar_sub_exp
scalar_sub_exp -> scalar_sub_exp 'div' scalar_sub_exp
scalar_sub_exp -> unary_add_or_subtract scalar_sub_exp
scalar_sub_exp -> NULLX
scalar_sub_exp -> atom
scalar_sub_exp -> subquery
scalar_sub_exp -> column_ref
scalar_sub_exp -> function_ref
scalar_sub_exp -> '(' scalar_sub_exp ')'
- schema_element
New: schema_element -> create_role_def
schema_element -> create_table_def
schema_element -> create_index_def
schema_element -> create_user_def
schema_element -> view_def
Old: schema_element -> create_table_def
schema_element -> view_def
schema_element -> grant_def
- system_privilege
New: system_privilege -> ADMIN
system_privilege -> ALL
system_privilege -> ALL PRIVILEGES
system_privilege -> ALTER ANY INDEX
system_privilege -> ALTER ANY MATERIALIZED VIEW
system_privilege -> ALTER ANY TABLE
system_privilege -> ALTER ANY VIEW
system_privilege -> CREATE ANY INDEX
system_privilege -> CREATE ANY MATERIALIZED VIEW
system_privilege -> CREATE ANY TABLE
system_privilege -> CREATE ANY VIEW
system_privilege -> CREATE MATERIALIZED VIEW
system_privilege -> CREATE TABLE
system_privilege -> CREATE VIEW
system_privilege -> DELETE ANY TABLE
system_privilege -> DROP ANY INDEX
system_privilege -> DROP ANY MATERIALIZED VIEW
system_privilege -> DROP ANY TABLE
system_privilege -> DROP ANY VIEW
system_privilege -> INSERT ANY TABLE
system_privilege -> SELECT ANY TABLE
system_privilege -> UPDATE ANY TABLE
system_privilege -> NAME
Old: system_privilege -> SELECT
system_privilege -> UPDATE
system_privilege -> DELETE
system_privilege -> INSERT
system_privilege -> DROP
system_privilege -> NAME
system_privilege -> NAME NAME
system_privilege -> NAME NAME NAME
system_privilege -> NAME NAME NAME NAME
system_privilege -> NAME NAME NAME NAME NAME
- system_privilege_list
New: system_privilege_list -> system_privilege
system_privilege_list -> system_privilege ',' system_privilege_list
Old: system_privilege_list -> ALL
system_privilege_list -> ALL PRIVILEGES
system_privilege_list -> system_privilege
system_privilege_list -> system_privilege ',' system_privilege_list
- system_with_grant_option
New: system_with_grant_option -> WITH ADMIN OPTION
system_with_grant_option -> WITH DELEGATE OPTION
Old: see with_grant_option**
- table
New: table -> NAME
table -> NAME '.' NAME
table -> parameter
table -> STRING
Old: table -> NAME
table -> NAME NAME
table -> STRING
table -> NAME '.' NAME
table -> NAME '.' NAME NAME
table -> parameter
table -> parameter NAME
- table_alias
New: table_alias -> NAME NAME
table_alias -> NAME '.' NAME NAME
table_alias -> parameter NAME
table_alias -> STRING NAME
table_alias -> table
Old: n/a
- table_dblink
New: table_dblink -> NAME DBLINK
table_dblink -> NAME DBLINK NAME
table_dblink -> NAME '.' NAME DBLINK
table_dblink -> NAME '.' NAME DBLINK NAME
table_dblink -> parameter DBLINK
table_dblink -> parameter DBLINK NAME
table_dblink -> table_alias
Old: n/a
- table_name
New: n/a
Old: table_name -> NAME
table_name -> NAME '.' NAME
table_name -> NAME '.' NAME '.' NAME
- table_ref
New: table_ref -> table_dblink
table_ref -> query_term
table_ref -> query_term NAME
Old: table_ref -> table
table_ref -> query_term
table_ref -> query_term NAME
- truncate_table
New: truncate_table -> TRUNCATE TABLE table
truncate_table -> TRUNCATE TABLE table storage
truncate_table -> TRUNCATE TABLE table materialized
truncate_table -> TRUNCATE TABLE table materialized storage
Old: truncate_table -> TRUNCATE TABLE table_name
truncate_table -> TRUNCATE TABLE table_name storage
truncate_table -> TRUNCATE TABLE table_name materialized
truncate_table -> TRUNCATE TABLE table_name materialized storage
- update_statement_positioned
New: update_statement_positioned -> UPDATE table_dblink SET assignment_commalist WHERE CURRENT OF cursor
update_statement_positioned -> UPDATE table_dblink SET assignment_commalist WHERE CURRENT OF cursor returning
Old: update_statement_positioned -> UPDATE table SET assignment_commalist WHERE CURRENT OF cursor
update_statement_positioned -> UPDATE table SET assignment_commalist WHERE CURRENT OF cursor returning
- update_statement_searched
New: update_statement_searched -> UPDATE table_dblink SET assignment_commalist
update_statement_searched -> UPDATE table_dblink SET assignment_commalist returning
update_statement_searched -> UPDATE table_dblink SET assignment_commalist where_clause
update_statement_searched -> UPDATE table_dblink SET assignment_commalist where_clause returning
Old: update_statement_searched -> UPDATE table SET assignment_commalist
update_statement_searched -> UPDATE table SET assignment_commalist returning
update_statement_searched -> UPDATE table SET assignment_commalist where_clause
update_statement_searched -> UPDATE table SET assignment_commalist where_clause returning
- view_def
New: view_def -> CREATE VIEW table AS query_spec
view_def -> CREATE VIEW table AS query_spec WITH CHECK OPTION
view_def -> CREATE VIEW table '(' column_commalist ')' AS query_spec
view_def -> CREATE VIEW table '(' column_commalist ')' AS query_spec WITH CHECK OPTION
Old: view_def -> CREATE VIEW table
view_def -> CREATE VIEW table '(' column_commalist ')'
view_def -> AS query_spec
view_def -> AS query_spec WITH CHECK OPTION
- with_grant_option
New: see object_with_grant_option and system_with_grant_option
Old: with_grant_option -> WITH GRANT OPTION
with_grant_option -> WITH HIERARCHY OPTION
with_grant_option -> WITH NAME OPTION
- with_revoke_option
New: see object_with_revoke_option
Old: with_revoke_option -> CASCADE CONSTRAINTS
with_revoke_option -> FORCE
- quota
New: quota -> QUOTA UNLIMITED ON NAME : {'unlimited on', unwrap_bin('$4')}.
quota -> QUOTA INTNUM ON NAME : {limited, unwrap_bin('$2'), <<"">>, unwrap_bin('$4')}.
quota -> QUOTA INTNUM NAME ON NAME : {limited, unwrap_bin('$2'), unwrap_bin('$3'), unwrap_bin('$5')}.
Old: quota -> QUOTA UNLIMITED ON NAME : {'unlimited on', unwrap_bin('$4')}.
quota -> QUOTA INTNUM ON NAME : {limited, unwrap_bin('$2'), unwrap_bin('$4')}.
quota -> QUOTA INTNUM NAME ON NAME : {limited, list_to_binary([unwrap('$2'),unwrap('$3')]),unwrap_bin('$5')}.
- formatting tool: the new formatting tool is derived from the formatting tool used with Oracle's SQL Developer.
- geas (Guess Erlang Application Scattering): integration of the geas tool for automatic detection the runnable official Erlang release window.
- Script files: all script files are now for both Unix and Windows available.
- the scripts and the program code have been moved to the
test
directory, - for performance reasons, the disk-based term storage
dets
has been replaced by the built-in term storageets
, - the performance of the test data generation can now be further improved by increasing the size of the heap memory in the generator scripts
gen_tests
,gen_tests_and_run
andstress_test
, - the scope of test data generation can now be determined using environment variables..
Release Date: 15.11.2017
- all_or_any_predicate
New: all_or_any_predicate -> scalar_exp '=' any_all_some subquery
all_or_any_predicate -> scalar_exp COMPARISON any_all_some subquery
Old: all_or_any_predicate -> scalar_exp COMPARISON any_all_some subquery
- APPROXNUM
New: ((([\.][0-9]+)|([0-9]+[\.]?[0-9]*))([eE][+-]?[0-9]+)?[fFdD]?)
Old: (([0-9]+\.[0-9]+([eE][\+\-]?[0-9]+)*))
Remark: The new rule covers the Oracle definition of NUMBER and Floating-Point Literals
.
- assignment
New: assignment -> column '=' scalar_opt_as_exp
Old: assignment -> column COMPARISON scalar_opt_as_exp
- column_ref
New: column_ref -> NAME JSON
column_ref -> NAME '.' NAME JSON
column_ref -> NAME '.' NAME '.' NAME JSON
Old: column_ref -> JSON
column_ref -> NAME '.' JSON
column_ref -> NAME '.' NAME '.' JSON
- COMPARISON
New: (!=|\^=|<>|<|>|<=|>=)
Old: (:=|=|<>|<|>|<=|>=)
- comparison_predicate
New: comparison_predicate -> scalar_exp '=' PRIOR scalar_exp
comparison_predicate -> scalar_exp COMPARISON PRIOR scalar_exp
comparison_predicate -> PRIOR scalar_exp '=' scalar_exp
comparison_predicate -> PRIOR scalar_exp COMPARISON scalar_exp
Old: comparison_predicate -> PRIOR scalar_exp COMPARISON scalar_exp
comparison_predicate -> scalar_exp COMPARISON PRIOR scalar_exp
comparison_predicate -> scalar_exp COMPARISON subquery
- create_index_spec_column
New: create_index_spec_column -> NAME
create_index_spec_column -> NAME JSON
Old: n/a
- create_index_spec_items
New: create_index_spec_items -> create_index_spec_column
create_index_spec_items -> create_index_spec_column ',' create_index_spec_items
Old: create_index_spec_items -> NAME
create_index_spec_items -> NAME '|' create_index_spec_items
create_index_spec_items -> JSON
create_index_spec_items -> JSON '|' create_index_spec_items
- drop_table_def
New: drop_table_def -> DROP TABLE opt_exists table_list opt_restrict_cascade
drop_table_def -> DROP NAME TABLE opt_exists table_list opt_restrict_cascade
Old: drop_table_def -> DROP tbl_type TABLE opt_exists table_list opt_restrict_cascade
Remark: Any Oracle identifier can be used as a table type in the DROP TABLE
statement.
- db_user_proxy
New: n/a
Old: db_user_proxy -> '$empty'
Remark: The old rule incorrectly allowed the definition of "REVOKE CONNECT THROUGH" without an argument.
- fun_arg
New: fun_arg -> fun_arg -> fun_arg NAME
fun_arg -> fun_arg '=' fun_arg
fun_arg -> fun_arg COMPARISON fun_arg
Old: fun_arg -> '+' literal
fun_arg -> '-' literal
fun_arg -> fun_arg COMPARISON fun_arg
Remark: This rule is redundant since literals are contained in atoms.
- in_predicate
New: n/a
Old: in_predicate -> scalar_exp NOT IN scalar_exp_commalist
in_predicate -> scalar_exp IN scalar_exp_commalist
Remark: The candidate set of values must be surrounded by parentheses.
- JSON
New: (\|[:{\[#]([^\|]*)+\|)
Old: ([A-Za-z0-9_\.]+([:#\[\{]+|([\s\t\n\r]*[#\[\{]+))[A-Za-z0-9_\.\:\(\)\[\]\{\}\#\,\|\-\+\*\/\\%\s\t\n\r]*)
Remark: JSONPath expressions are now delimited by a pair of vertical bars.
- NAME
New: [A-Za-z][A-Za-z0-9_@\$~]*
Old: [A-Za-z][A-Za-z0-9_@:#\$]*
Remark: May not contain any JSONPath specific characters due to jpparse integration. The character ~
is not included in the Oracle standard and the character #
is missing from the Oracle standard.
- scalar_opt_as_exp
New: scalar_opt_as_exp -> scalar_exp '=' scalar_exp
scalar_opt_as_exp -> scalar_exp COMPARISON scalar_exp
Old: scalar_opt_as_exp -> scalar_exp COMPARISON scalar_exp
- scalar_sub_exp
New: n/a
Old: scalar_sub_exp -> '+' literal
scalar_sub_exp -> '-' literal
Remark: This rule is redundant since literals are contained in atoms.
- table
New: n/a
Old: table -> NAME AS NAME
table -> NAME '.' NAME AS NAME
table -> parameter AS NAME
Remark: A table alias may not contain the AS
token.
- table_ref
New: n/a
Old: table_ref -> table range_variable
table_ref -> '(' query_exp ')' AS NAME
Remark: A table alias may not contain the AS
token.
- column_ref
New: column_ref -> JSON : {jp, jpparse('$1')}.
column_ref -> NAME JSON : {jp, list_to_binary(unwrap('$1')), jpparse('$2')}.
column_ref -> NAME '.' NAME JSON : {jp, list_to_binary([unwrap('$1'),".",unwrap('$3')]), jpparse('$4')}.
Old: column_ref -> JSON : jpparse('$1').
column_ref -> NAME '.' JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3')])).
column_ref -> NAME '.' NAME '.' JSON : jpparse(list_to_binary([unwrap('$1'),".",unwrap('$3'),".",unwrap('$5')])).
- create_index_spec_items
New: create_index_spec_items -> JSON : [{jp, jpparse('$1')}].
create_index_spec_items -> JSON '|' create_index_spec_items : [{jp, jpparse('$1')} | '$3'].
Old: create_index_spec_items -> JSON : [jpparse('$1')].
create_index_spec_items -> JSON '|' create_index_spec_items : [jpparse('$1') | '$3'].
- drop_table_def
New: drop_table_def -> DROP TABLE opt_exists table_list opt_restrict_cascade : {'drop table', {'tables', '$4'}, '$3', '$5', []}.
drop_table_def -> DROP NAME TABLE opt_exists table_list opt_restrict_cascade : {'drop table', {'tables', '$5'}, '$4', '$6', unwrap('$2')}.
Old: drop_table_def -> DROP tbl_type TABLE opt_exists table_list opt_restrict_cascade : {'drop table', {'tables', '$5'}, '$4', '$6', '$2'}.
- opt_on_obj_clause
New: opt_on_obj_clause -> ON JAVA SOURCE table : {'on java source', '$4'}.
opt_on_obj_clause -> ON JAVA RESOURCE table : {'on java resource', '$4'}.
Old: opt_on_obj_clause -> ON JAVA SOURCE table : {'on java source', unwrap_bin('$4')}.
opt_on_obj_clause -> ON JAVA RESOURCE table : {'on java resource', unwrap_bin('$4')}.
- quota
New: quota -> QUOTA UNLIMITED ON NAME : {'unlimited on', unwrap_bin('$4')}.
quota -> QUOTA INTNUM ON NAME : {limited, unwrap_bin('$2'), <<"">>, unwrap_bin('$4')}.
quota -> QUOTA INTNUM NAME ON NAME : {limited, unwrap_bin('$2'), unwrap_bin('$3'), unwrap_bin('$5')}.
Old: quota -> QUOTA UNLIMITED ON NAME : {'unlimited on', unwrap_bin('$4')}.
quota -> QUOTA INTNUM ON NAME : {limited, unwrap_bin('$2'), unwrap_bin('$4')}.
quota -> QUOTA INTNUM NAME ON NAME : {limited, list_to_binary([unwrap('$2'),unwrap('$3')]),unwrap_bin('$5')}.
- schema
New: schema -> CREATE SCHEMA AUTHORIZATION NAME opt_schema_element_list : {'create schema authorization', unwrap('$4'), '$5'}.
Old: schema -> CREATE SCHEMA AUTHORIZATION user opt_schema_element_list : {'create schema authorization', '$4', '$5'}.
- BNFC (BNF Converter): grammar in LBNF (Labelled BNF grammar) format to enable the BNFC tools
- Generating test data: module and scripts to generate test data covering the whole grammar definition for common test and eunit test
- Railroad diagrams: grammar definition in EBNF format to create railroad diagrams with the online application Railroad Diagram Generator
- Wiki documentation: extending the documentation via GitHub Wiki
- Code coverage: 100% code coverage in folder module sqlparse_fold.erl
- Debugging refined: eunit debugging messages at the start and the end of every fold function
- Grammar cleanup: removing dead grammar rules and reduce/reduce conflicts
- JSONPath: embedding JSONPath expressions in SQL grammar rules between two vertical bars
- Test driver: adding common test support and refactoring the eunit support