Fix cte with subquery failed.
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user