Skip to content

Commit

Permalink
[plsql] Fix for #2589 -- performance improvements (#3653)
Browse files Browse the repository at this point in the history
* Fix for #2589

* Update general_element_part ambiguity with callers. Only 10% improvement.

* Remaster test with corrected tree.

* Fix format and links to latest.

* Delete commented out syntax.
  • Loading branch information
kaby76 authored Aug 30, 2023
1 parent 222722b commit 81e5ebe
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 10 deletions.
12 changes: 5 additions & 7 deletions sql/plsql/PlSqlParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -6205,13 +6205,11 @@ case_else_part
;

atom
: table_element outer_join_sign
| bind_variable
: bind_variable
| constant
| general_element
| general_element outer_join_sign?
| '(' subquery ')' subquery_operation_part*
| '(' expressions ')'
| quoted_string
;

quantified_expression
Expand Down Expand Up @@ -6900,7 +6898,7 @@ general_element
;

general_element_part
: (INTRODUCER char_set_name)? id_expression ('.' id_expression)* ('@' link_name)? function_argument?
: (INTRODUCER char_set_name)? id_expression ('@' link_name)? function_argument?
;

table_element
Expand Down Expand Up @@ -7061,10 +7059,10 @@ numeric_negative
;

quoted_string
: variable_name
| CHAR_STRING
: CHAR_STRING
//| CHAR_STRING_PERL
| NATIONAL_CHAR_STRING_LIT
| DELIMITED_ID
;

identifier
Expand Down
22 changes: 21 additions & 1 deletion sql/plsql/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,21 @@
Oracle SQL Language Reference: https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Introduction-to-Oracle-SQL.html
# PL/SQL grammar

This grammar is for recognizing the latest version of PL/SQL.

## Authors

Various

## Links

Oracle® Database; Database PL/SQL Language Reference [html](https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/index.html) [pdf](https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/database-pl-sql-language-reference.pdf)

SQL Language Reference [html](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/index.html) [pdf](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/sql-language-reference.pdf)

Oracle's SQL*Plus®
User's Guide and Reference [html](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/index.html#SQL*Plus%C2%AE)

[wikipedia](https://en.wikipedia.org/wiki/PL/SQL)

[pldb](https://pldb.pub/concepts/pl-sql.html)

2 changes: 1 addition & 1 deletion sql/plsql/examples/json_query.sql.tree
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(sql_script (unit_statement (data_manipulation_language_statements (select_statement (select_only_statement (subquery (subquery_basic_elements (query_block select (selected_list (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (constant (quoted_string (variable_name (id_expression (regular_id custid)))))))))))))))) , (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (constant (quoted_string (variable_name (id_expression (regular_id custname)))))))))))))))) , (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (standard_function (json_function json_query ( (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (constant (quoted_string (variable_name (id_expression (regular_id (non_reserved_keywords_in_12c metadata)))))))))))))))) , '$' json_query_returning_clause )))))))))))) (column_alias (identifier (id_expression (regular_id json_metadata)))))) (from_clause from (table_ref_list (table_ref (table_ref_aux (table_ref_aux_internal (dml_table_expression_clause (tableview_name (identifier (id_expression (regular_id customer))))))))))))))))) ; <EOF>)
(sql_script (unit_statement (data_manipulation_language_statements (select_statement (select_only_statement (subquery (subquery_basic_elements (query_block select (selected_list (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (general_element (general_element_part (id_expression (regular_id custid))))))))))))))) , (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (general_element (general_element_part (id_expression (regular_id custname))))))))))))))) , (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (standard_function (json_function json_query ( (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (general_element (general_element_part (id_expression (regular_id (non_reserved_keywords_in_12c metadata))))))))))))))) , '$' json_query_returning_clause )))))))))))) (column_alias (identifier (id_expression (regular_id json_metadata)))))) (from_clause from (table_ref_list (table_ref (table_ref_aux (table_ref_aux_internal (dml_table_expression_clause (tableview_name (identifier (id_expression (regular_id customer))))))))))))))))) ; <EOF>)
2 changes: 1 addition & 1 deletion sql/plsql/examples/timing.sql.tree
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(sql_script (sql_plus_command (timing_command TIMING)) ; (sql_plus_command (timing_command TIMING START)) ; (sql_plus_command (timing_command TIMING START (id_expression (regular_id one_word)))) ; (sql_plus_command (timing_command TIMING START (id_expression (regular_id more_than_one_word)))) ; (sql_plus_command (timing_command TIMING SHOW)) ; (sql_plus_command (timing_command TIMING STOP)) ; (unit_statement (data_manipulation_language_statements (select_statement (select_only_statement (subquery (subquery_basic_elements (query_block SELECT (selected_list (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (constant (quoted_string (variable_name (id_expression (regular_id (non_reserved_keywords_pre12c timing)))))))))))))))))) (from_clause FROM (table_ref_list (table_ref (table_ref_aux (table_ref_aux_internal (dml_table_expression_clause (tableview_name (identifier (id_expression (regular_id some_table))))))))))))))))) ; <EOF>)
(sql_script (sql_plus_command (timing_command TIMING)) ; (sql_plus_command (timing_command TIMING START)) ; (sql_plus_command (timing_command TIMING START (id_expression (regular_id one_word)))) ; (sql_plus_command (timing_command TIMING START (id_expression (regular_id more_than_one_word)))) ; (sql_plus_command (timing_command TIMING SHOW)) ; (sql_plus_command (timing_command TIMING STOP)) ; (unit_statement (data_manipulation_language_statements (select_statement (select_only_statement (subquery (subquery_basic_elements (query_block SELECT (selected_list (select_list_elements (expression (logical_expression (unary_logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (general_element (general_element_part (id_expression (regular_id (non_reserved_keywords_pre12c timing))))))))))))))))) (from_clause FROM (table_ref_list (table_ref (table_ref_aux (table_ref_aux_internal (dml_table_expression_clause (tableview_name (identifier (id_expression (regular_id some_table))))))))))))))))) ; <EOF>)

0 comments on commit 81e5ebe

Please sign in to comment.