Skip to content

Commit 8ec80e8

Browse files
committed
fix(cubesql): column does not exist in case of ORDER BY is called on CASE column
1 parent 745ae38 commit 8ec80e8

File tree

2 files changed

+50
-8
lines changed

2 files changed

+50
-8
lines changed

rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -437,15 +437,28 @@ impl CubeScanWrapperNode {
437437
.chain(group_expr.iter())
438438
.chain(aggr_expr.iter())
439439
.map(|e| {
440-
Ok((
441-
Column {
442-
relation: alias.clone(),
443-
name: expr_name(&e, &schema)?,
444-
},
445-
e.clone(),
446-
))
440+
let name = expr_name(&e, &schema)?;
441+
Ok(vec![
442+
(
443+
Column {
444+
relation: alias.clone(),
445+
name: name.clone(),
446+
},
447+
e.clone(),
448+
),
449+
(
450+
Column {
451+
relation: None,
452+
name: name,
453+
},
454+
e.clone(),
455+
),
456+
])
447457
})
448-
.collect::<Result<HashMap<_, _>>>()?;
458+
.collect::<Result<Vec<_>>>()?
459+
.into_iter()
460+
.flatten()
461+
.collect::<HashMap<_, _>>();
449462

450463
let (order, mut sql) = Self::generate_column_expr(
451464
plan.clone(),

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18570,6 +18570,35 @@ ORDER BY \"COUNT(count)\" DESC"
1857018570
);
1857118571
}
1857218572

18573+
#[tokio::test]
18574+
async fn test_case_wrapper_alias_with_order() {
18575+
if !Rewriter::sql_push_down_enabled() {
18576+
return;
18577+
}
18578+
init_logger();
18579+
18580+
let query_plan = convert_select_to_query_plan(
18581+
"SELECT CASE WHEN customer_gender = 'female' THEN 'f' ELSE 'm' END AS \"f822c516-3515-11c2-8464-5d4845a02f73\", AVG(avgPrice) mp FROM KibanaSampleDataEcommerce a GROUP BY CASE WHEN customer_gender = 'female' THEN 'f' ELSE 'm' END ORDER BY CASE WHEN customer_gender = 'female' THEN 'f' ELSE 'm' END NULLS FIRST LIMIT 500"
18582+
.to_string(),
18583+
DatabaseProtocol::PostgreSQL,
18584+
)
18585+
.await;
18586+
18587+
let logical_plan = query_plan.as_logical_plan();
18588+
assert!(logical_plan
18589+
.find_cube_scan_wrapper()
18590+
.wrapped_sql
18591+
.unwrap()
18592+
.sql
18593+
.contains("ORDER BY \"case_when_a_cust\""));
18594+
18595+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
18596+
println!(
18597+
"Physical plan: {}",
18598+
displayable(physical_plan.as_ref()).indent()
18599+
);
18600+
}
18601+
1857318602
#[tokio::test]
1857418603
async fn test_case_wrapper_ungrouped() {
1857518604
if !Rewriter::sql_push_down_enabled() {

0 commit comments

Comments
 (0)