[BugFix] fail to calculate nested cte's statistics outside memo in table pruning (backport #62070) (#62094)
Signed-off-by: satanson <ranpanf@gmail.com> Co-authored-by: satanson <ranpanf@gmail.com>
This commit is contained in:
parent
5b41a92084
commit
7b3f2789b9
|
|
@ -359,4 +359,47 @@ public class TablePruningCTETest extends TablePruningTestBase {
|
|||
Assertions.assertFalse(plan.contains("NESTLOOP"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNestedCte() {
|
||||
String sql = "with cte0 as(\n" +
|
||||
"select distinct l_orderkey,l_quantity, l_partkey, l_suppkey, l_linenumber\n" +
|
||||
"from lineitem\n" +
|
||||
"),\n" +
|
||||
"cte1 as(\n" +
|
||||
"select count(distinct l_linenumber) as n, l_orderkey, l_partkey, l_suppkey\n" +
|
||||
"from cte0\n" +
|
||||
"group by l_orderkey, l_partkey, l_suppkey\n" +
|
||||
"),\n" +
|
||||
"cte2 as(\n" +
|
||||
"select count(distinct l_quantity) as n, l_orderkey, l_partkey, l_suppkey\n" +
|
||||
"from cte0\n" +
|
||||
"group by l_orderkey, l_partkey, l_suppkey\n" +
|
||||
"),\n" +
|
||||
"cte3 as(\n" +
|
||||
"select l_orderkey,l_partkey, l_suppkey, sum(n) over(partition by l_orderkey,l_partkey) as sum0\n" +
|
||||
"from cte1\n" +
|
||||
"),\n" +
|
||||
"cte4 as(\n" +
|
||||
"select l_orderkey,l_partkey, l_suppkey, sum(n) over(partition by l_orderkey,l_suppkey) as sum1\n" +
|
||||
"from cte2\n" +
|
||||
"),\n" +
|
||||
"cte5 as(\n" +
|
||||
"select l_orderkey,l_partkey, l_suppkey, sum(n) over(partition by l_partkey) as sum2\n" +
|
||||
"from cte1\n" +
|
||||
"),\n" +
|
||||
"cte6 as(\n" +
|
||||
"select l_orderkey,l_partkey, l_suppkey, sum(n) over(partition by l_suppkey) as sum3\n" +
|
||||
"from cte2\n" +
|
||||
")\n" +
|
||||
"select /*+SET_VAR(cbo_cte_reuse_rate=0)*/ a.l_orderkey, a.l_partkey, a.l_suppkey, sum0, sum1,sum2,sum3\n" +
|
||||
"from cte3 a \n" +
|
||||
"inner join cte4 b on \n" +
|
||||
" a.l_orderkey = b.l_orderkey and a.l_partkey = a.l_partkey and a.l_suppkey = b.l_suppkey\n" +
|
||||
"inner join cte5 c on \n" +
|
||||
" a.l_orderkey = c.l_orderkey and a.l_partkey = c.l_partkey and a.l_suppkey = c.l_suppkey\n" +
|
||||
"inner join cte6 d on \n" +
|
||||
" a.l_orderkey = d.l_orderkey and a.l_partkey = d.l_partkey and a.l_suppkey = d.l_suppkey;";
|
||||
checkHashJoinCountWithBothRBOAndCBO(sql, 3);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue