[MDEV-10030] sql_yacc.yy: Split table_expression and remove PROCEDURE from create_select, select_paren_derived, select_derived2, query_specification Created: 2016-05-05  Updated: 2016-05-06  Resolved: 2016-05-06

Status: Closed
Project: MariaDB Server
Component/s: Parser
Fix Version/s: 10.2.1

Type: Task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Blocks
blocks MDEV-8909 union parser cleanup Closed
Sprint: 10.2.1-1

 Description   

The "table_expression" rule currently looks like this:

 table_expression:
          opt_from_clause
           opt_where_clause
           opt_group_clause
           opt_having_clause
           opt_window_clause
          opt_order_clause
          opt_limit_clause
          opt_procedure_clause
          opt_select_lock_type
         ;

We'll do the following refactoring:

1. Remove the extra parts (opt_order_clause, opt_limit_clause, opt_procedure_clause, opt_select_lock_type parts), and make the "from_clause" non-optional:

 table_expression:
          from_clause
           opt_where_clause
           opt_group_clause
           opt_having_clause
           opt_window_clause
         ;

After this change table_expression will match the SQL Standard <table expression> production.

2. Add the "opt_table_expression" rule

3. Move the extra parts of the ex-table_expression to the "caller" rules, and remove the opt_procedure_clause from non-relevant places.

It will change these queries using subselects and derived table:

SELECT * FROM (SELECT * FROM t1 PROCEDURE ANALYSE());
SELECT * FROM t1 NATURAL JOIN (SELECT * FROM t2 PROCEDURE ANALYSE());
SELECT (SELECT 1 FROM t1 PROCEDURE ANALYSE()) FROM t2;
SELECT ((SELECT 1 FROM t1 PROCEDURE ANALYSE())) FROM t2;

as well as:

CREATE TABLE t2 SELECT  * FROMt1 PROCEDURE ANALYSE();

to return "syntax error" instead of "Incorrect usage".


Generated at Thu Feb 08 07:39:09 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.