Skip to content
walter-weinmann edited this page May 29, 2020 · 12 revisions

Version 4.6.3

Release Date: 01.06.2020

Grammar changes

  • 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'}. 

Version 4.6.1

Release Date: 11.04.2019

Grammar changes

  • 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'}.

Version 4.6.0

Release Date: 18.03.2019

Grammar changes

  • 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'.

Modified features

  • At most places in the grammar, all keywords that are not reserved by Oracle are now allowed as identifiers.

Version 4.5.0

Release Date: 13.03.2019

Grammar changes

  • 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

Modified features

  • A forward slash at the beginning of a new line is ignored.

Version 4.4.0

Release Date: 04.03.2019

Grammar changes

  • 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'.

Version 4.2.0

Release Date: 03.05.2018

Grammar changes

  • 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'.

Version 4.0.0

Release Date: 01.04.2018

Grammar changes

  • 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 feature

  • new 'ad hoc' testing facility.

Modified features

  • 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.

Version 3.1.0

Release Date: 17.01.2018

Grammar changes

  • 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

Parse tree changes

  • 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')}.

New features

  • 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.

Modified features

Test Data Generator:
  • the scripts and the program code have been moved to the test directory,
  • for performance reasons, the disk-based term storage detshas been replaced by the built-in term storage ets,
  • 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_runand stress_test,
  • the scope of test data generation can now be determined using environment variables..

Version 3.0.0

Release Date: 15.11.2017

Grammar changes

  • 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.

Parse tree changes

  • 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'}.

New features

  • 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

Modified features

  • 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