Fix: outer CTEs should be available in subqueries

This commit is contained in:
Jussi Saurio
2025-10-15 15:15:55 +03:00
parent 4e6f373e3d
commit d7a719418e
2 changed files with 30 additions and 1 deletions

View File

@@ -317,11 +317,26 @@ fn parse_from_clause_table(
)
}
ast::SelectTable::Select(subselect, maybe_alias) => {
let outer_query_refs_for_subquery = table_references
.outer_query_refs()
.iter()
.cloned()
.chain(
ctes.iter()
.cloned()
.map(|t: JoinedTable| OuterQueryReference {
identifier: t.identifier,
internal_id: t.internal_id,
table: t.table,
col_used_mask: ColumnUsedMask::default(),
}),
)
.collect::<Vec<_>>();
let Plan::Select(subplan) = prepare_select_plan(
subselect,
resolver,
program,
table_references.outer_query_refs(),
&outer_query_refs_for_subquery,
QueryDestination::placeholder_for_subquery(),
connection,
)?

View File

@@ -433,3 +433,17 @@ do_execsql_test subquery-count-all {
where u.id < 100
);
} {1089}
do_execsql_test_on_specific_db {:memory:} subquery-cte-available-in-arbitrary-depth {
with cte as (select 1 as one)
select onehundredandeleven+1 as onehundredandtwelve
from (
with cte2 as (select 10 as ten)
select onehundredandone+ten as onehundredandeleven
from (
with cte3 as (select 100 as hundred)
select one+hundred as onehundredandone
from cte join cte3
) join cte2
);
} {112}