Skip to content

Commit 67da8c3

Browse files
committed
fix(cubesql): SQL push down for limit and offset for ungrouped queries
1 parent 2295fe0 commit 67da8c3

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,15 @@ impl CubeScanWrapperNode {
577577
} else {
578578
None
579579
};
580-
// TODO time dimensions, filters, segments, order, limit, offset
580+
581+
if let Some(limit) = limit {
582+
load_request.limit = Some(limit as i32);
583+
}
584+
585+
if let Some(offset) = offset {
586+
load_request.offset = Some(offset as i32);
587+
}
588+
// TODO time dimensions, filters, segments
581589

582590
let sql_response = transport
583591
.sql(

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18825,6 +18825,42 @@ ORDER BY \"COUNT(count)\" DESC"
1882518825
.contains("ORDER BY \"case_when"));
1882618826
}
1882718827

18828+
#[tokio::test]
18829+
async fn test_case_wrapper_with_internal_limit() {
18830+
if !Rewriter::sql_push_down_enabled() {
18831+
return;
18832+
}
18833+
init_logger();
18834+
18835+
let query_plan = convert_select_to_query_plan(
18836+
"SELECT CASE WHEN customer_gender = 'female' THEN 'f' ELSE 'm' END, AVG(avgPrice) mp FROM KibanaSampleDataEcommerce a GROUP BY 1 LIMIT 1123"
18837+
.to_string(),
18838+
DatabaseProtocol::PostgreSQL,
18839+
)
18840+
.await;
18841+
18842+
let logical_plan = query_plan.as_logical_plan();
18843+
assert!(logical_plan
18844+
.find_cube_scan_wrapper()
18845+
.wrapped_sql
18846+
.unwrap()
18847+
.sql
18848+
.contains("CASE WHEN"));
18849+
18850+
assert!(logical_plan
18851+
.find_cube_scan_wrapper()
18852+
.wrapped_sql
18853+
.unwrap()
18854+
.sql
18855+
.contains("1123"));
18856+
18857+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
18858+
println!(
18859+
"Physical plan: {}",
18860+
displayable(physical_plan.as_ref()).indent()
18861+
);
18862+
}
18863+
1882818864
#[tokio::test]
1882918865
async fn test_case_wrapper_with_limit() {
1883018866
if !Rewriter::sql_push_down_enabled() {

0 commit comments

Comments
 (0)