Skip to content

Commit 09d3b95

Browse files
authored
fix(cubesql): Fix columns referencing outer context in subqueries (#9924)
1 parent aa3708d commit 09d3b95

File tree

6 files changed

+62
-25
lines changed

6 files changed

+62
-25
lines changed

packages/cubejs-backend-native/Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubenativeutils/Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/cubesql/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ homepage = "https://cube.dev"
1010

1111
[dependencies]
1212
arc-swap = "1"
13-
datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "e3bb7fe5b16461893234db44950f539c58081bfe", default-features = false, features = [
13+
datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "0ba29ac12e2b13444bd536e1cbe4f73411383521", default-features = false, features = [
1414
"regex_expressions",
1515
"unicode_expressions",
1616
] }

rust/cubesql/cubesql/src/compile/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17549,4 +17549,41 @@ LIMIT {{ limit }}{% endif %}"#.to_string(),
1754917549
displayable(physical_plan.as_ref()).indent()
1755017550
);
1755117551
}
17552+
17553+
#[tokio::test]
17554+
async fn test_subquery_inner_context() {
17555+
if !Rewriter::sql_push_down_enabled() {
17556+
return;
17557+
}
17558+
init_testing_logger();
17559+
17560+
let query_plan = convert_select_to_query_plan(
17561+
r#"
17562+
SELECT customer_gender
17563+
FROM KibanaSampleDataEcommerce
17564+
WHERE customer_gender IN (
17565+
SELECT customer_gender
17566+
FROM KibanaSampleDataEcommerce
17567+
WHERE KibanaSampleDataEcommerce.order_date > '2025-01-01'
17568+
GROUP BY 1
17569+
)
17570+
GROUP BY 1
17571+
"#
17572+
.to_string(),
17573+
DatabaseProtocol::PostgreSQL,
17574+
)
17575+
.await;
17576+
17577+
let logical_plan = query_plan.as_logical_plan();
17578+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
17579+
println!("Generated SQL: {}", sql);
17580+
assert!(sql.contains("2025-01-01"));
17581+
assert!(sql.contains("customer_gender} IN (SELECT"));
17582+
17583+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
17584+
println!(
17585+
"Physical plan: {}",
17586+
displayable(physical_plan.as_ref()).indent()
17587+
);
17588+
}
1755217589
}

rust/cubesqlplanner/Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)