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

Reusing CTE inside a function fails with table doesn't exist

Details

    Description

      When I try to use a single CTE multiple times inside a stored function, the function fails with
      ERROR 1146 (42S02): Table 'test.testtab' doesn't exist

      DROP TABLE IF EXISTS testtab;
      CREATE TABLE testtab (c1 int(11) );
      INSERT INTO testtab VALUES (1),(2),(6);
       
      DROP FUNCTION IF EXISTS TESTFUN;
      DELIMITER |
      CREATE FUNCTION TESTFUN() RETURNS INT DETERMINISTIC BEGIN
      RETURN (
          WITH
              cte1 as (select c1 from testtab)
      -- here
          SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1
      );
      END|
      DELIMITER ;
      SELECT TESTFUN();

      Returns -> ERROR 1146 (42S02): Table 'test.testtab' doesn't exist
      Expected -> 18

      Running the same query without wrapping it in a function works fine:

          WITH
              cte1 as (select c1 from testtab)
      -- here
          SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1;
      

      Returns -> 18

      The same error occurs when:

      • CTE is self-joined in a query - inside a stored function
      • multiple branches of a CASE ... END use it in tests: WHEN EXISTS (SELECT NULL FROM CTE WHERE X=Y) THEN "result 1" WHEN EXISTS ( SELECT NULL FROM CTE ) THEN "result 2" END - inside a stored function

      Attachments

        Issue Links

          Activity

            szatox Szatox created issue -
            szatox Szatox made changes -
            Field Original Value New Value
            Description When I try to use a single CTE multiple times inside a stored function, the function fails with
            ERROR 1146 (42S02): Table 'test.testtab' doesn't exist

            {code}DROP TABLE IF EXISTS testtab;
            CREATE TABLE testtab (c1 int(11) );
            INSERT INTO testtab VALUES (1),(2),(6);
             
            DROP FUNCTION IF EXISTS TESTFUN;
            DELIMITER |
            CREATE FUNCTION TESTFUN() RETURNS INT DETERMINISTIC BEGIN
            RETURN (
                WITH
                    cte1 as (select c1 from testtab)
            -- here
                SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1
            );
            END|
            DELIMITER ;
            SELECT TESTFUN();{code}
            Returns -> ERROR 1146 (42S02): Table 'test.testtab' doesn't exist
            Expected -> 18

            Running the same query _without_ wrapping it in a function works fine:
            {code} WITH
                    cte1 as (select c1 from testtab)
            -- here
                SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1;
            {code}
            Returns -> 18
            When I try to use a single CTE multiple times inside a stored function, the function fails with
            ERROR 1146 (42S02): Table 'test.testtab' doesn't exist

            {code}DROP TABLE IF EXISTS testtab;
            CREATE TABLE testtab (c1 int(11) );
            INSERT INTO testtab VALUES (1),(2),(6);
             
            DROP FUNCTION IF EXISTS TESTFUN;
            DELIMITER |
            CREATE FUNCTION TESTFUN() RETURNS INT DETERMINISTIC BEGIN
            RETURN (
                WITH
                    cte1 as (select c1 from testtab)
            -- here
                SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1
            );
            END|
            DELIMITER ;
            SELECT TESTFUN();{code}
            Returns -> ERROR 1146 (42S02): Table 'test.testtab' doesn't exist
            Expected -> 18

            Running the same query _without_ wrapping it in a function works fine:
            {code} WITH
                    cte1 as (select c1 from testtab)
            -- here
                SELECT SUM(c1) FROM ( SELECT * FROM cte1 UNION ALL SELECT * FROM cte1 ) as u1;
            {code}
            Returns -> 18


            The same error occurs when:
            * CTE is self-joined in a query - inside a stored function
            * multiple branches of a CASE ... END use it in tests: WHEN EXISTS (SELECT NULL FROM CTE WHERE X=Y) THEN "result 1" WHEN EXISTS ( SELECT NULL FROM CTE ) THEN "result 2" END - inside a stored function
            alice Alice Sherepa made changes -
            Component/s Optimizer - CTE [ 13513 ]
            alice Alice Sherepa made changes -
            Affects Version/s 10.2 [ 14601 ]
            Affects Version/s 10.3 [ 22126 ]
            Affects Version/s 10.4 [ 22408 ]
            Affects Version/s 10.5 [ 23123 ]
            alice Alice Sherepa made changes -
            Fix Version/s 10.2 [ 14601 ]
            Fix Version/s 10.3 [ 22126 ]
            Fix Version/s 10.4 [ 22408 ]
            Fix Version/s 10.5 [ 23123 ]
            alice Alice Sherepa made changes -
            Status Open [ 1 ] Confirmed [ 10101 ]
            alice Alice Sherepa made changes -
            Assignee Igor Babaev [ igor ]
            igor Igor Babaev (Inactive) made changes -
            Status Confirmed [ 10101 ] In Progress [ 3 ]
            igor Igor Babaev (Inactive) made changes -
            Priority Major [ 3 ] Critical [ 2 ]
            Roel Roel Van de Paar made changes -
            alice Alice Sherepa made changes -
            igor Igor Babaev (Inactive) made changes -
            igor Igor Babaev (Inactive) made changes -
            Assignee Igor Babaev [ igor ] Oleksandr Byelkin [ sanja ]
            Status In Progress [ 3 ] In Review [ 10002 ]
            sanja Oleksandr Byelkin made changes -
            Assignee Oleksandr Byelkin [ sanja ] Igor Babaev [ igor ]
            Status In Review [ 10002 ] Stalled [ 10000 ]
            igor Igor Babaev (Inactive) made changes -
            Fix Version/s 10.6.2 [ 25800 ]
            Fix Version/s 10.2.39 [ 25731 ]
            Fix Version/s 10.3.30 [ 25732 ]
            Fix Version/s 10.4.20 [ 25733 ]
            Fix Version/s 10.5.11 [ 25734 ]
            Fix Version/s 10.2 [ 14601 ]
            Fix Version/s 10.3 [ 22126 ]
            Fix Version/s 10.4 [ 22408 ]
            Fix Version/s 10.5 [ 23123 ]
            Resolution Fixed [ 1 ]
            Status Stalled [ 10000 ] Closed [ 6 ]
            elenst Elena Stepanova made changes -
            alice Alice Sherepa made changes -
            alice Alice Sherepa made changes -
            alice Alice Sherepa made changes -
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 114183 ] MariaDB v4 [ 158437 ]

            People

              igor Igor Babaev (Inactive)
              szatox Szatox
              Votes:
              1 Vote for this issue
              Watchers:
              9 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.