[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:
mergify[bot] 2025-08-19 19:35:48 +08:00 committed by GitHub
parent 5b41a92084
commit 7b3f2789b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 43 additions and 0 deletions

View File

@ -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);
}
}