[MDEV-14969] Non-recursive Common Table Expressions used in view caused an error Created: 2018-01-16  Updated: 2018-01-19  Resolved: 2018-01-19

Status: Closed
Project: MariaDB Server
Component/s: Optimizer - CTE
Affects Version/s: 10.2.12, 10.2
Fix Version/s: 10.2.13

Type: Bug Priority: Major
Reporter: David Hall (Inactive) Assignee: Igor Babaev
Resolution: Fixed Votes: 0
Labels: None
Environment:

Centos 7


Issue Links:
Blocks
blocks MCOL-782 Non-recursive Common Table Expression... Closed

 Description   

It works as a stand alone query, or in procedures, but failed in views.

This query worked:

select * from nation n ,region r where n.n_regionkey = r.r_regionkey and r.r_regionkey in (with t as (select * from region where r_regionkey <=3) select r_regionkey from t where r_name <> "ASIA");

This procedure worked:

DELIMITER //
CREATE PROCEDURE shownations ()
BEGIN
select * from nation n ,region r where n.n_regionkey = r.r_regionkey and r.r_regionkey in (with t as (select * from region where r_regionkey <=3) select r_regionkey from t where r_name <> "ASIA");
END //
DELIMITER ;
 
call shownations;

This view did not work:

 
MariaDB [mytest]> create view v as select * from nation n ,region r where n.n_regionkey = r.r_regionkey and r.r_regionkey in (with t as (select * from region where r_regionkey <=3) select r_regionkey from t where r_name <> "ASIA");
Query OK, 0 rows affected (0.01 sec)
 
MariaDB [mytest]> select * from v;
ERROR 1356 (HY000): View 'mytest.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them



 Comments   
Comment by Alice Sherepa [ 2018-01-17 ]

CREATE TABLE t1(i1 int);
SELECT * FROM t1 WHERE t1.i1 IN (WITH tt AS (SELECT 1) SELECT * FROM tt);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE t1.i1 IN (WITH tt AS (SELECT 1) SELECT * FROM tt);
SELECT * FROM v1;

MariaDB [test]> SELECT * FROM t1 WHERE t1.i1 IN (WITH tt AS (SELECT 1) SELECT * FROM tt);
Empty set (0.00 sec)
 
MariaDB [test]> CREATE VIEW v1 AS SELECT * FROM t1 WHERE t1.i1 IN (WITH tt AS (SELECT 1) SELECT * FROM tt);
Query OK, 0 rows affected (0.05 sec)
 
MariaDB [test]> SELECT * FROM v1;
ERROR 1356 (HY000): View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
Error (Code 1146): Table 'test.tt' doesn't exist

Comment by Igor Babaev [ 2018-01-19 ]

A fix for this bug was pushed into the 10.2 tree.

Generated at Thu Feb 08 08:17:42 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.