Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-14297

Lost name of a explicitly named CTE column used in a view created via prepared statement

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.2(EOL)
    • 10.2.14
    • Optimizer
    • None

    Description

      The following demonstrates the problem:

      MariaDB [test]> create view v1 as
          -> with cte(a) as (select 1 from dual) select * from cte;
      Query OK, 0 rows affected (0.01 sec)
       
      MariaDB [test]> select * from v1;
      +---+
      | a |
      +---+
      | 1 |
      +---+
      1 row in set (0.01 sec)
       
      MariaDB [test]> set @view_def = "
          "> create view v2 as with cte(a) as (select 1 from dual) select * from cte
          "> ";
      Query OK, 0 rows affected (0.00 sec)
       
      MariaDB [test]> PREPARE stmt FROM @view_def;
      Query OK, 0 rows affected (0.00 sec)
      Statement prepared
       
      MariaDB [test]> EXECUTE stmt;
      ERROR 1054 (42S22): Unknown column 'cte.a' in 'field list'
      

      Note that the definitions of v1 and v2 are identical.

      Attachments

        Activity

          The problem occurs as the With_element::rename_columns_of_derived_unit procedure doesn't allocate the CTE column names in a permanent MEMROOT for prepared statements and stored procedures.

          So the problem is more general and doesn't concern views only. The test below doesn't work also.

          MariaDB [test]> prepare stmt from "with cte(a) as (select 1) select * from cte";
          Query OK, 0 rows affected (0.00 sec)
          Statement prepared
           
          MariaDB [test]> execute stmt;
          ERROR 1054 (42S22): Unknown column 'cte.a' in 'field list'
          

          shagalla Galina Shalygina (Inactive) added a comment - The problem occurs as the With_element::rename_columns_of_derived_unit procedure doesn't allocate the CTE column names in a permanent MEMROOT for prepared statements and stored procedures. So the problem is more general and doesn't concern views only. The test below doesn't work also. MariaDB [test]> prepare stmt from "with cte(a) as (select 1) select * from cte"; Query OK, 0 rows affected (0.00 sec) Statement prepared   MariaDB [test]> execute stmt; ERROR 1054 (42S22): Unknown column 'cte.a' in 'field list'
          igor Igor Babaev added a comment -

          Ok to push into the 10.2 tree.

          igor Igor Babaev added a comment - Ok to push into the 10.2 tree.

          Pushed in 10.2

          shagalla Galina Shalygina (Inactive) added a comment - Pushed in 10.2

          People

            shagalla Galina Shalygina (Inactive)
            igor Igor Babaev
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.