MXS-1248: Add CTE tests
All cte tests from the server
This commit is contained in:
parent
d060320b36
commit
f7bd195e9f
@ -48,8 +48,12 @@ if (BUILD_QC_MYSQLEMBEDDED)
|
||||
add_test(TestQC_version_sensitivity version_sensitivity)
|
||||
|
||||
if(NOT (MYSQL_EMBEDDED_VERSION VERSION_LESS 10.2))
|
||||
add_test(TestQC_cte_simple compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/cte_simple.test)
|
||||
add_test(TestQC_cte_simple compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/cte_simple.test)
|
||||
add_test(TestQC_cte_grant compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/cte_grant.test)
|
||||
add_test(TestQC_cte_nonrecursive compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/cte_nonrecursive.test)
|
||||
add_test(TestQC_cte_recursive compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/cte_recursive.test)
|
||||
endif()
|
||||
|
||||
if(NOT (MYSQL_EMBEDDED_VERSION VERSION_LESS 10.3))
|
||||
add_test(TestQC_Oracle-binlog_stm_ps compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/oracle/binlog_stm_ps.test)
|
||||
add_test(TestQC_Oracle-binlog_stm_sp compare -v 2 ${CMAKE_CURRENT_SOURCE_DIR}/oracle/binlog_stm_sp.test)
|
||||
|
79
query_classifier/test/cte_grant.test
Normal file
79
query_classifier/test/cte_grant.test
Normal file
@ -0,0 +1,79 @@
|
||||
# Can't test with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
connect (root,localhost,root,,test);
|
||||
connection root;
|
||||
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create user mysqltest_1@localhost;
|
||||
connect (user1,localhost,mysqltest_1,,test);
|
||||
connection user1;
|
||||
|
||||
connection root;
|
||||
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
insert into mysqltest.t1 values (2,10), (1,30);
|
||||
create table mysqltest.t2 (c int, d char(32));
|
||||
insert into mysqltest.t2 values (1,'xxx'), (1,'zzz');
|
||||
|
||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||
grant select (c) on mysqltest.t2 to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
with t as (select c from mysqltest.t2 where c < 2)
|
||||
select t.c,t1.b from t,mysqltest.t1 where t.c=t1.a;
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
select t.c,t.d,t1.b
|
||||
from (select c,d from mysqltest.t2 where c < 2) as t, mysqltest.t1
|
||||
where t.c=t1.a;
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
with t as (select c,d from mysqltest.t2 where c < 2)
|
||||
select t.c,t.d,t1.b from t,mysqltest.t1 where t.c=t1.a;
|
||||
|
||||
connection root;
|
||||
|
||||
create view mysqltest.v1(f1,f2) as
|
||||
with t as (select c from mysqltest.t2 where c < 2)
|
||||
select t.c,t1.b from t,mysqltest.t1 where t.c=t1.a;
|
||||
create view mysqltest.v2(c,d) as
|
||||
with t as (select a from mysqltest.t1 where a>=3)
|
||||
select t.a,b from t,mysqltest.t1 where mysqltest.t1.a = t.a;
|
||||
|
||||
grant select on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select (c) on mysqltest.v2 to mysqltest_1@localhost;
|
||||
grant create view on mysqltest.* to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
|
||||
create view mysqltest.v3(c,d) as
|
||||
with t as (select c from mysqltest.t2 where c < 2)
|
||||
select t.c,t1.b from t,mysqltest.t1 where t.c=t1.a;
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
create view mysqltest.v4(f1,f2,f3) as
|
||||
with t as (select c,d from mysqltest.t2 where c < 2)
|
||||
select t.c,t.d,t1.b from t,mysqltest.t1 where t.c=t1.a;
|
||||
|
||||
select * from mysqltest.v1;
|
||||
|
||||
select c from mysqltest.v2;
|
||||
# there are no privileges on column 'd'
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
select d from mysqltest.v2;
|
||||
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
select * from mysqltest.v3;
|
||||
connection root;
|
||||
grant select on mysqltest.v3 to mysqltest_1@localhost;
|
||||
connection user1;
|
||||
select * from mysqltest.v3;
|
||||
|
||||
connection root;
|
||||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
683
query_classifier/test/cte_nonrecursive.test
Normal file
683
query_classifier/test/cte_nonrecursive.test
Normal file
@ -0,0 +1,683 @@
|
||||
create table t1 (a int, b varchar(32));
|
||||
insert into t1 values
|
||||
(4,'aaaa' ), (7,'bb'), (1,'ccc'), (4,'dd');
|
||||
insert into t1 values
|
||||
(3,'eee'), (7,'bb'), (1,'fff'), (4,'ggg');
|
||||
create table t2 (c int);
|
||||
insert into t2 values
|
||||
(2), (4), (5), (3);
|
||||
|
||||
--echo # select certain field in the specification of t
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
select * from t2, (select a from t1 where b >= 'c') as t
|
||||
where t2.c=t.a;
|
||||
explain
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
explain
|
||||
select * from t2, (select a from t1 where b >= 'c') as t
|
||||
where t2.c=t.a;
|
||||
|
||||
--echo # select '*' in the specification of t
|
||||
with t as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
select * from t2, (select * from t1 where b >= 'c') as t
|
||||
where t2.c=t.a;
|
||||
explain
|
||||
with t as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
explain
|
||||
select * from t2, (select * from t1 where b >= 'c') as t
|
||||
where t2.c=t.a;
|
||||
|
||||
--echo # rename fields returned by the specication when defining t
|
||||
with t(f1,f2) as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.f1;
|
||||
explain
|
||||
with t(f1,f2) as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.f1;
|
||||
|
||||
--echo # materialized query specifying t
|
||||
with t as (select a, count(*) from t1 where b >= 'c' group by a)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
select * from t2, (select a, count(*) from t1 where b >= 'c' group by a) as t
|
||||
where t2.c=t.a;
|
||||
explain
|
||||
with t as (select a, count(*) from t1 where b >= 'c' group by a)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
explain
|
||||
select * from t2, (select a, count(*) from t1 where b >= 'c' group by a) as t
|
||||
where t2.c=t.a;
|
||||
|
||||
--echo # specivication of t contains having
|
||||
with t as (select a, count(*) from t1 where b >= 'c'
|
||||
group by a having count(*)=1 )
|
||||
select * from t2,t where t2.c=t.a;
|
||||
select * from t2, (select a, count(*) from t1 where b >= 'c'
|
||||
group by a having count(*)=1) t
|
||||
where t2.c=t.a;
|
||||
|
||||
--echo # main query contains having
|
||||
with t as (select * from t2 where c <= 4)
|
||||
select a, count(*) from t1,t where t1.a=t.c group by a having count(*)=1;
|
||||
select a, count(*) from t1, (select * from t2 where c <= 4) t
|
||||
where t1.a=t.c group by a having count(*)=1;
|
||||
|
||||
--echo # main query contains group by + order by
|
||||
with t as (select * from t2 where c <= 4 )
|
||||
select a, count(*) from t1,t where t1.a=t.c group by a order by count(*);
|
||||
select a, count(*) from t1, (select * from t2 where c <= 4 ) t
|
||||
where t1.a=t.c group by a order by count(*);
|
||||
|
||||
--echo # main query contains group by + order by + limit
|
||||
with t as (select * from t2 where c <= 4 )
|
||||
select a, count(*) from t1,t
|
||||
where t1.a=t.c group by a order by count(*) desc limit 1;
|
||||
select a, count(*) from t1, (select * from t2 where c <= 4 ) t
|
||||
where t1.a=t.c group by a order by count(*) desc limit 1;
|
||||
|
||||
|
||||
--echo # t is used in a subquery
|
||||
with t as (select a from t1 where a<5)
|
||||
select * from t2 where c in (select a from t);
|
||||
select * from t2
|
||||
where c in (select a from (select a from t1 where a<5) as t);
|
||||
explain
|
||||
with t as (select a from t1 where a<5)
|
||||
select * from t2 where c in (select a from t);
|
||||
explain
|
||||
select * from t2
|
||||
where c in (select a from (select a from t1 where a<5) as t);
|
||||
|
||||
--echo # materialized t is used in a subquery
|
||||
with t as (select count(*) as c from t1 where b >= 'c' group by a)
|
||||
select * from t2 where c in (select c from t);
|
||||
select * from t2
|
||||
where c in (select c from (select count(*) as c from t1
|
||||
where b >= 'c' group by a) as t);
|
||||
explain
|
||||
with t as (select count(*) as c from t1 where b >= 'c' group by a)
|
||||
select * from t2 where c in (select c from t);
|
||||
explain
|
||||
select * from t2
|
||||
where c in (select c from (select count(*) as c from t1
|
||||
where b >= 'c' group by a) as t);
|
||||
|
||||
--echo # two references to t specified by a query
|
||||
--echo # selecting a field: both in main query
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
select * from (select a from t1 where b >= 'c') as r1,
|
||||
(select a from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
explain
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
explain
|
||||
select * from (select a from t1 where b >= 'c') as r1,
|
||||
(select a from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
|
||||
--echo # two references to materialized t: both in main query
|
||||
with t as (select distinct a from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
select * from (select distinct a from t1 where b >= 'c') as r1,
|
||||
(select distinct a from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
explain
|
||||
with t as (select distinct a from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
explain
|
||||
select * from (select distinct a from t1 where b >= 'c') as r1,
|
||||
(select distinct a from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
|
||||
--echo # two references to t specified by a query
|
||||
--echo # selecting all fields: both in main query
|
||||
with t as (select * from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
select * from (select * from t1 where b >= 'c') as r1,
|
||||
(select * from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
explain
|
||||
with t as (select * from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
explain
|
||||
select * from (select * from t1 where b >= 'c') as r1,
|
||||
(select * from t1 where b >= 'c') as r2
|
||||
where r1.a=r2.a;
|
||||
|
||||
--echo # two references to t specifying explicitly column names
|
||||
with t(c) as (select a from t1 where b >= 'c')
|
||||
select * from t r1, t r2 where r1.c=r2.c;
|
||||
|
||||
--echo # t two references of t used in different parts of a union
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t where a < 2
|
||||
union
|
||||
select * from t where a >= 4;
|
||||
select * from (select a from t1 where b >= 'c') as t
|
||||
where t.a < 2
|
||||
union
|
||||
select * from (select a from t1 where b >= 'c') as t
|
||||
where t.a >= 4;
|
||||
explain
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t where a < 2
|
||||
union
|
||||
select * from t where a >= 4;
|
||||
explain
|
||||
select * from (select a from t1 where b >= 'c') as t
|
||||
where t.a < 2
|
||||
union
|
||||
select * from (select a from t1 where b >= 'c') as t
|
||||
where t.a >= 4;
|
||||
|
||||
--echo # specification of t contains union
|
||||
with t as (select a from t1 where b >= 'f'
|
||||
union
|
||||
select c as a from t2 where c < 4)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
select * from t2,
|
||||
(select a from t1 where b >= 'f'
|
||||
union
|
||||
select c as a from t2 where c < 4) as t
|
||||
where t2.c=t.a;
|
||||
explain
|
||||
with t as (select a from t1 where b >= 'f'
|
||||
union
|
||||
select c as a from t2 where c < 4)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
explain
|
||||
select * from t2,
|
||||
(select a from t1 where b >= 'f'
|
||||
union
|
||||
select c as a from t2 where c < 4) as t
|
||||
where t2.c=t.a;
|
||||
|
||||
--echo # t is defined in the with clause of a subquery
|
||||
select t1.a,t1.b from t1,t2
|
||||
where t1.a>t2.c and
|
||||
t2.c in (with t as (select * from t1 where t1.a<5)
|
||||
select t2.c from t2,t where t2.c=t.a);
|
||||
select t1.a,t1.b from t1,t2
|
||||
where t1.a>t2.c and
|
||||
t2.c in (select t2.c
|
||||
from t2,(select * from t1 where t1.a<5) as t
|
||||
where t2.c=t.a);
|
||||
explain
|
||||
select t1.a,t1.b from t1,t2
|
||||
where t1.a>t2.c and
|
||||
t2.c in (with t as (select * from t1 where t1.a<5)
|
||||
select t2.c from t2,t where t2.c=t.a);
|
||||
explain
|
||||
select t1.a,t1.b from t1,t2
|
||||
where t1.a>t2.c and
|
||||
t2.c in (select t2.c
|
||||
from t2,(select * from t1 where t1.a<5) as t
|
||||
where t2.c=t.a);
|
||||
|
||||
--echo # two different definitions of t: one in the with clause of the main query,
|
||||
--echo # the other in the with clause of a subquery
|
||||
with t as (select c from t2 where c >= 4)
|
||||
select t1.a,t1.b from t1,t
|
||||
where t1.a=t.c and
|
||||
t.c in (with t as (select * from t1 where t1.a<5)
|
||||
select t2.c from t2,t where t2.c=t.a);
|
||||
select t1.a,t1.b from t1, (select c from t2 where c >= 4) as t
|
||||
where t1.a=t.c and
|
||||
t.c in (select t2.c from t2, (select * from t1 where t1.a<5) as t
|
||||
where t2.c=t.a);
|
||||
explain
|
||||
with t as (select c from t2 where c >= 4)
|
||||
select t1.a,t1.b from t1,t
|
||||
where t1.a=t.c and
|
||||
t.c in (with t as (select * from t1 where t1.a<5)
|
||||
select t2.c from t2,t where t2.c=t.a);
|
||||
explain
|
||||
select t1.a,t1.b from t1, (select c from t2 where c >= 4) as t
|
||||
where t1.a=t.c and
|
||||
t.c in (select t2.c from t2, (select * from t1 where t1.a<5) as t
|
||||
where t2.c=t.a);
|
||||
|
||||
--echo # another with table tt is defined in the with clause of a subquery
|
||||
--echo # from the specification of t
|
||||
with t as (select * from t1
|
||||
where a>2 and
|
||||
b in (with tt as (select * from t2 where t2.c<5)
|
||||
select t1.b from t1,tt where t1.a=tt.c))
|
||||
select t.a, count(*) from t1,t where t1.a=t.a group by t.a;
|
||||
select t.a, count(*)
|
||||
from t1,
|
||||
(select * from t1
|
||||
where a>2 and
|
||||
b in (select t1.b
|
||||
from t1,
|
||||
(select * from t2 where t2.c<5) as tt
|
||||
where t1.a=tt.c)) as t
|
||||
where t1.a=t.a group by t.a;
|
||||
explain
|
||||
with t as (select * from t1
|
||||
where a>2 and
|
||||
b in (with tt as (select * from t2 where t2.c<5)
|
||||
select t1.b from t1,tt where t1.a=tt.c))
|
||||
select t.a, count(*) from t1,t where t1.a=t.a group by t.a;
|
||||
explain
|
||||
select t.a, count(*)
|
||||
from t1,
|
||||
(select * from t1
|
||||
where a>2 and
|
||||
b in (select t1.b
|
||||
from t1,
|
||||
(select * from t2 where t2.c<5) as tt
|
||||
where t1.a=tt.c)) as t
|
||||
where t1.a=t.a group by t.a;
|
||||
|
||||
--echo # with clause in the specification of a derived table
|
||||
select *
|
||||
from t1,
|
||||
(with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a) as tt
|
||||
where t1.b > 'f' and tt.a=t1.a;
|
||||
select *
|
||||
from t1,
|
||||
(select * from t2,
|
||||
(select a from t1 where b >= 'c') as t
|
||||
where t2.c=t.a) as tt
|
||||
where t1.b > 'f' and tt.a=t1.a;
|
||||
explain
|
||||
select *
|
||||
from t1,
|
||||
(with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a) as tt
|
||||
where t1.b > 'f' and tt.a=t1.a;
|
||||
explain
|
||||
select *
|
||||
from t1,
|
||||
(select * from t2,
|
||||
(select a from t1 where b >= 'c') as t
|
||||
where t2.c=t.a) as tt
|
||||
where t1.b > 'f' and tt.a=t1.a;
|
||||
|
||||
--echo # with claused in the specification of a view
|
||||
create view v1 as
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
explain
|
||||
select * from v1;
|
||||
|
||||
--echo # with claused in the specification of a materialized view
|
||||
create view v2 as
|
||||
with t as (select a, count(*) from t1 where b >= 'c' group by a)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
show create view v2;
|
||||
select * from v2;
|
||||
explain
|
||||
select * from v2;
|
||||
|
||||
--echo # with clause in the specification of a view that whose definition
|
||||
--echo # table alias for a with table
|
||||
create view v3 as
|
||||
with t(c) as (select a from t1 where b >= 'c')
|
||||
select * from t r1 where r1.c=4;
|
||||
show create view v3;
|
||||
select * from v3;
|
||||
|
||||
--echo # with clause in the specification of a view that whose definition
|
||||
--echo # two table aliases for for the same with table
|
||||
create view v4(c,d) as
|
||||
with t(c) as (select a from t1 where b >= 'c')
|
||||
select * from t r1, t r2 where r1.c=r2.c and r2.c=4;
|
||||
show create view v4;
|
||||
select * from v4;
|
||||
explain
|
||||
select * from v4;
|
||||
|
||||
drop view v1,v2,v3,v4;
|
||||
|
||||
|
||||
--echo # currently any views containing with clause are not updatable
|
||||
create view v1(a) as
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select t.a from t2,t where t2.c=t.a;
|
||||
--error ER_NON_UPDATABLE_TABLE
|
||||
update v1 set a=0 where a > 4;
|
||||
drop view v1;
|
||||
|
||||
|
||||
--echo # prepare of a query containing a definition of a with table t
|
||||
prepare stmt1 from "
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.a;
|
||||
";
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
|
||||
--echo # prepare of a query containing a definition of a materialized t
|
||||
prepare stmt1 from "
|
||||
with t as (select a, count(*) from t1 where b >= 'c' group by a)
|
||||
select * from t2,t where t2.c=t.a;
|
||||
";
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
|
||||
--echo # prepare of a query containing two references to with table t
|
||||
prepare stmt1 from "
|
||||
with t as (select * from t1 where b >= 'c')
|
||||
select * from t as r1, t as r2 where r1.a=r2.a;
|
||||
";
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
|
||||
--ERROR ER_WITH_COL_WRONG_LIST
|
||||
with t(f) as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.f1;
|
||||
|
||||
--ERROR ER_DUP_FIELDNAME
|
||||
with t(f1,f1) as (select * from t1 where b >= 'c')
|
||||
select * from t2,t where t2.c=t.f1;
|
||||
|
||||
--ERROR ER_DUP_QUERY_NAME
|
||||
with t as (select * from t2 where c>3),
|
||||
t as (select a from t1 where a>2)
|
||||
select * from t,t1 where t1.a=t.c;
|
||||
|
||||
--ERROR ER_NO_SUCH_TABLE
|
||||
with t as (select a from s where a<5),
|
||||
s as (select a from t1 where b>='d')
|
||||
select * from t,s where t.a=s.a;
|
||||
|
||||
with recursive
|
||||
t as (select a from s where a<5),
|
||||
s as (select a from t1 where b>='d')
|
||||
select * from t,s where t.a=s.a;
|
||||
|
||||
--ERROR ER_RECURSIVE_WITHOUT_ANCHORS
|
||||
with recursive t as (select * from s where a>2),
|
||||
s as (select a from t1,r where t1.a>r.c),
|
||||
r as (select c from t,t2 where t.a=t2.c)
|
||||
select * from r where r.c<7;
|
||||
|
||||
--ERROR ER_RECURSIVE_WITHOUT_ANCHORS
|
||||
with recursive
|
||||
t as (select * from s where a>2),
|
||||
s as (select a from t1,r where t1.a>r.c),
|
||||
r as (select c from t,t2 where t.a=t2.c)
|
||||
select * from r where r.c<7;
|
||||
|
||||
--ERROR ER_RECURSIVE_WITHOUT_ANCHORS
|
||||
with recursive
|
||||
t as (select * from t1
|
||||
where a in (select c from s where b<='ccc') and b>'b'),
|
||||
s as (select * from t1,t2
|
||||
where t1.a=t2.c and t1.c in (select a from t where a<5))
|
||||
select * from s where s.b>'aaa';
|
||||
|
||||
--ERROR ER_RECURSIVE_WITHOUT_ANCHORS
|
||||
with recursive
|
||||
t as (select * from t1 where b>'aaa' and b <='d')
|
||||
select t.b from t,t2
|
||||
where t.a=t2.c and
|
||||
t2.c in (with recursive
|
||||
s as (select t1.a from s,t1 where t1.a=s.a and t1.b<'c')
|
||||
select * from s);
|
||||
--echo #erroneous definition of unreferenced with table t
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
with t as (select count(*) from t1 where d>='f' group by a)
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
with t as (select count(*) from t1 where b>='f' group by a)
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
--echo #erroneous definition of s referring to unreferenced t
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
with t(d) as (select count(*) from t1 where b<='ccc' group by b),
|
||||
s as (select * from t1 where a in (select t2.d from t2,t where t2.c=t.d))
|
||||
select t1.b from t1,t2 where t1.a=t2.c;
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
with t(d) as (select count(*) from t1 where b<='ccc' group by b),
|
||||
s as (select * from t1 where a in (select t2.c from t2,t where t2.c=t.c))
|
||||
select t1.b from t1,t2 where t1.a=t2.c;
|
||||
|
||||
with t(d) as (select count(*) from t1 where b<='ccc' group by b),
|
||||
s as (select * from t1 where a in (select t2.c from t2,t where t2.c=t.d))
|
||||
select t1.b from t1,t2 where t1.a=t2.c;
|
||||
|
||||
--echo #erroneous definition of unreferenced with table t
|
||||
--ERROR ER_WITH_COL_WRONG_LIST
|
||||
with t(f) as (select * from t1 where b >= 'c')
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
--echo #erroneous definition of unreferenced with table t
|
||||
--ERROR ER_DUP_FIELDNAME
|
||||
with t(f1,f1) as (select * from t1 where b >= 'c')
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
--echo # explain for query with unreferenced with table
|
||||
|
||||
explain
|
||||
with t as (select a from t1 where b >= 'c')
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
explain
|
||||
with t as (select a, count(*) from t1 where b >= 'c' group by a)
|
||||
select t1.b from t2,t1 where t1.a = t2.c;
|
||||
|
||||
--echo # too many with elements in with clause
|
||||
let $m= 65;
|
||||
let $i= $m;
|
||||
dec $i;
|
||||
let $q= with s$m as (select * from t1);
|
||||
while ($i)
|
||||
{
|
||||
let $q= $q, s$i as (select * from t1) ;
|
||||
dec $i;
|
||||
}
|
||||
let $q= $q select * from s$m;
|
||||
--ERROR ER_TOO_MANY_DEFINITIONS_IN_WITH_CLAUSE
|
||||
eval $q;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-9937: View used in the specification of with table
|
||||
--echo # refers to the base table with the same name
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (20), (30), (10);
|
||||
create view v1 as select * from t1 where a > 10;
|
||||
|
||||
with t1 as (select * from v1) select * from t1;
|
||||
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-10058: Invalid derived table with WITH clause
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
CREATE TABLE t3 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
INSERT INTO t3 VALUES (1),(2),(3);
|
||||
|
||||
--ERROR ER_PARSE_ERROR
|
||||
SELECT * FROM (WITH a AS (SELECT * FROM t1) (t2 NATURAL JOIN t3));
|
||||
|
||||
SELECT * FROM (WITH a AS (SELECT * FROM t1) SELECT * FROM t2 NATURAL JOIN t3) AS d1;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-10344: the WITH clause of the query refers to a view that uses
|
||||
--echo # a base table with the same name as a CTE table from the clause
|
||||
--echo #
|
||||
|
||||
|
||||
create table ten(a int primary key);
|
||||
insert into ten values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
|
||||
create table one_k(a int primary key);
|
||||
insert into one_k select A.a + B.a* 10 + C.a * 100 from ten A, ten B, ten C;
|
||||
|
||||
create view v1 as select * from ten;
|
||||
|
||||
select * from v1;
|
||||
|
||||
drop view v1;
|
||||
drop table ten, one_k;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10057 : Crash with EXPLAIN + WITH + constant query
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM (WITH a AS (SELECT * FROM t1) SELECT 1) AS t1;
|
||||
EXPLAIN SELECT * FROM (WITH a AS (SELECT * FROM t1) SELECT 1) AS t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10058: Suspicious EXPLAIN output for a derived table + WITH + joined table
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
CREATE TABLE t3 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
INSERT INTO t3 VALUES (1),(2),(3);
|
||||
--error ER_PARSE_ERROR
|
||||
EXPLAIN SELECT * FROM (WITH a AS (SELECT * FROM t1) (t2 NATURAL JOIN t3));
|
||||
explain SELECT * FROM (WITH a AS (SELECT * FROM t1) SELECT * FROM t2 NATURAL JOIN t3) AS d1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10729: Server crashes in st_select_lex::set_explain_type
|
||||
--echo #
|
||||
CREATE TABLE t1 (i1 INT, KEY(i1)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (4),(8);
|
||||
|
||||
CREATE TABLE t2 (a2 INT, b2 INT, KEY(b2)) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (8,7);
|
||||
|
||||
CREATE TABLE t3 (i3 INT) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES (2),(6);
|
||||
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
UNION
|
||||
SELECT * FROM t1, t2 WHERE a2 = i1 and b2 >= i1 AND i1 IN ( SELECT i3 FROM t3 )
|
||||
;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10923: mergeable CTE used twice in the query
|
||||
--echo #
|
||||
|
||||
create table employees (
|
||||
name varchar(32),
|
||||
dept varchar(32),
|
||||
country varchar(8)
|
||||
);
|
||||
|
||||
insert into employees
|
||||
values
|
||||
('Sergei Golubchik', 'Development', 'DE'),
|
||||
('Claudio Nanni', 'Support', 'ES'),
|
||||
('Sergei Petrunia', 'Development', 'RU');
|
||||
|
||||
with eng as
|
||||
(
|
||||
select * from employees
|
||||
where dept in ('Development','Support')
|
||||
),
|
||||
eu_eng as
|
||||
(
|
||||
select * from eng where country IN ('DE','ES','RU')
|
||||
)
|
||||
select * from eu_eng T1
|
||||
where
|
||||
not exists (select 1 from eu_eng T2
|
||||
where T2.country=T1.country
|
||||
and T2.name <> T1.name);
|
||||
|
||||
drop table employees;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11818: EXPLAIN EXTENDED for a query with optimized away CTE table
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (i INT, c VARCHAR(3));
|
||||
INSERT INTO t1 VALUES (1,'foo');
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
WITH cte AS ( SELECT * FROM t1 ) SELECT i FROM cte;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-12185: view defintion contains WITH clause with
|
||||
--echo # several specifications of CTE
|
||||
--echo #
|
||||
|
||||
with
|
||||
alias1 as (select 1 as one),
|
||||
alias2 as (select 2 as two)
|
||||
select one, two from alias1, alias2;
|
||||
|
||||
create view v1 as
|
||||
with
|
||||
alias1 as (select 1 as one),
|
||||
alias2 as (select 2 as two)
|
||||
select one, two from alias1, alias2;
|
||||
|
||||
select * from v1;
|
||||
show create view v1;
|
||||
|
||||
drop view v1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-12440: the same CTE table is used twice
|
||||
--echo #
|
||||
|
||||
create table t1 (a int, b varchar(32));
|
||||
insert into t1 values
|
||||
(4,'aaaa' ), (7,'bb'), (1,'ccc'), (4,'dd');
|
||||
|
||||
--echo # cte2 is used in the main query and in the spec for ct3
|
||||
with
|
||||
cte1 as (select * from t1 where b >= 'c'),
|
||||
cte2 as (select * from cte1 where a < 7),
|
||||
cte3 as (select * from cte2 where a > 1)
|
||||
select * from cte2, cte3 where cte2.a = cte3.a;
|
||||
|
||||
--echo # cte2 is used twice in the spec for ct3
|
||||
with
|
||||
cte1 as (select * from t1 where b >= 'b'),
|
||||
cte2 as (select * from cte1 where b > 'c'),
|
||||
cte3 as (select * from cte2 where a > 1 union select * from cte2 where a > 1)
|
||||
select * from cte3;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-12558: CTE with the same name as temporary table
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t ENGINE=MyISAM AS SELECT 1 AS i;
|
||||
CREATE TEMPORARY TABLE cte ENGINE=MyISAM AS SELECT 2 AS f;
|
||||
|
||||
WITH cte AS ( SELECT i FROM t ) SELECT * FROM cte;
|
||||
WITH cte AS ( SELECT i FROM t GROUP BY i) SELECT * FROM cte;
|
||||
|
||||
SELECT * FROM cte;
|
||||
|
||||
DROP TABLE cte;
|
||||
DROP TABLE t;
|
1930
query_classifier/test/cte_recursive.test
Normal file
1930
query_classifier/test/cte_recursive.test
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user