Fix cte with subquery failed.

This commit is contained in:
totaj
2023-01-14 16:28:50 +08:00
parent eee21b1180
commit 2313bec17e
4 changed files with 82 additions and 4 deletions

View File

@ -1904,9 +1904,9 @@ void SS_process_ctes(PlannerInfo* root)
Query* subquery = NULL;
/*
* Ignore SELECT CTEs that are not actually referenced anywhere.
* Ignore SELECT CTEs that are not actually referenced anywhere or already inlined.
*/
if (cte->cterefcount == 0 && cmdType == CMD_SELECT) {
if ((cte->cterefcount == 0 && cmdType == CMD_SELECT) || cte->cterefcount == -1) {
/* Make a dummy entry in cte_plan_ids */
root->cte_plan_ids = lappend_int(root->cte_plan_ids, -1);
continue;

View File

@ -25,6 +25,77 @@ WHERE
------
(0 rows)
with alias11 as(select 1 alias1 from fulljoin_test),
alias25 as(select * from (with alias19 as (select rownum from fulljoin_test2)select * from alias19)alias18)
select * from alias11,alias25 full join fulljoin_test3 on 1=1 full join fulljoin_test4 on 1=1 where 1=1;
alias1 | rownum | d_id | w_id | w_ytd
--------+--------+------+------+-------
(0 rows)
explain (costs off) with alias11 as(select 1 alias1 from fulljoin_test),
alias25 as(select * from (with alias19 as (select rownum from fulljoin_test2)select * from alias19)alias18)
select * from alias11,alias25 full join fulljoin_test3 on 1=1 full join fulljoin_test4 on 1=1 where 1=1;
QUERY PLAN
--------------------------------------------------------------------------------------
Nested Loop
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> Result
-> Append
-> Nested Loop Left Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> Result
-> Append
-> Nested Loop Left Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> CTE Scan on alias25
-> Materialize
-> Seq Scan on fulljoin_test3
-> Nested Loop Left Anti Full Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> Seq Scan on fulljoin_test3
-> CTE Scan on alias25
-> Materialize
-> Seq Scan on fulljoin_test4
-> Nested Loop Left Anti Full Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> Seq Scan on fulljoin_test4
-> Materialize
-> Result
-> Append
-> Nested Loop Left Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> CTE Scan on alias25
-> Materialize
-> Seq Scan on fulljoin_test3
-> Nested Loop Left Anti Full Join
CTE alias25
-> CTE Scan on alias19
CTE alias19
-> Seq Scan on fulljoin_test2
-> Seq Scan on fulljoin_test3
-> CTE Scan on alias25
-> Materialize
-> Seq Scan on fulljoin_test
(57 rows)
drop table fulljoin_test;
drop table fulljoin_test2;
drop table fulljoin_test3;

View File

@ -1004,7 +1004,7 @@ test: cost_model
test: base_update
test: seqscan_fusion
test: union_null_01
test: union_null_01 fulljoin_rewrite
# var selectivity
test: var_eq_const_selectivity
@ -1022,7 +1022,6 @@ test: rename_table
# debug instrument
test: test_debug5
test: fulljoin_rewrite
# fix echo infos
test: gstrace_options

View File

@ -26,6 +26,14 @@ WHERE
alias9.alias8 = 2
OR alias9.alias7 = 2;
with alias11 as(select 1 alias1 from fulljoin_test),
alias25 as(select * from (with alias19 as (select rownum from fulljoin_test2)select * from alias19)alias18)
select * from alias11,alias25 full join fulljoin_test3 on 1=1 full join fulljoin_test4 on 1=1 where 1=1;
explain (costs off) with alias11 as(select 1 alias1 from fulljoin_test),
alias25 as(select * from (with alias19 as (select rownum from fulljoin_test2)select * from alias19)alias18)
select * from alias11,alias25 full join fulljoin_test3 on 1=1 full join fulljoin_test4 on 1=1 where 1=1;
drop table fulljoin_test;
drop table fulljoin_test2;