Skip to content

Commit 89ad7bb

Browse files
committed
fix(cubesql): Pushdown LIMIT 0 to CubeScan
1 parent c87098d commit 89ad7bb

File tree

2 files changed

+59
-3
lines changed

2 files changed

+59
-3
lines changed

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

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,13 +851,69 @@ mod tests {
851851
time_dimensions: None,
852852
order: Some(vec![]),
853853
limit: Some(0),
854-
offset: None,
854+
offset: Some(0),
855855
filters: None,
856856
ungrouped: Some(true),
857857
}
858858
);
859859
}
860860

861+
#[tokio::test]
862+
async fn test_pushdown_limit_0_grouped() {
863+
if !Rewriter::sql_push_down_enabled() {
864+
return;
865+
}
866+
init_testing_logger();
867+
868+
let logical_plan = convert_select_to_query_plan(
869+
"SELECT KibanaSampleDataEcommerce.customer_gender FROM \"public\".\"KibanaSampleDataEcommerce\" GROUP BY 1 LIMIT 0".to_string(),
870+
DatabaseProtocol::PostgreSQL
871+
).await.as_logical_plan();
872+
873+
assert_eq!(
874+
logical_plan.find_cube_scan().request,
875+
V1LoadRequestQuery {
876+
measures: Some(vec![]),
877+
dimensions: Some(vec!["KibanaSampleDataEcommerce.customer_gender".to_string()]),
878+
segments: Some(vec![]),
879+
time_dimensions: None,
880+
order: Some(vec![]),
881+
limit: Some(0),
882+
offset: None,
883+
filters: None,
884+
ungrouped: None,
885+
}
886+
)
887+
}
888+
889+
#[tokio::test]
890+
async fn test_pushdown_limit_0_ungrouped() {
891+
if !Rewriter::sql_push_down_enabled() {
892+
return;
893+
}
894+
init_testing_logger();
895+
896+
let logical_plan = convert_select_to_query_plan(
897+
"SELECT KibanaSampleDataEcommerce.customer_gender FROM \"public\".\"KibanaSampleDataEcommerce\" LIMIT 0".to_string(),
898+
DatabaseProtocol::PostgreSQL
899+
).await.as_logical_plan();
900+
901+
assert_eq!(
902+
logical_plan.find_cube_scan().request,
903+
V1LoadRequestQuery {
904+
measures: Some(vec![]),
905+
dimensions: Some(vec!["KibanaSampleDataEcommerce.customer_gender".to_string()]),
906+
segments: Some(vec![]),
907+
time_dimensions: None,
908+
order: Some(vec![]),
909+
limit: Some(0),
910+
offset: None,
911+
filters: None,
912+
ungrouped: Some(true),
913+
}
914+
)
915+
}
916+
861917
#[tokio::test]
862918
async fn tableau_projection_with_casts() {
863919
if !Rewriter::sql_push_down_enabled() {

rust/cubesql/cubesql/src/compile/rewrite/rules/members.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,14 +1573,14 @@ impl MemberRules {
15731573
move |egraph, subst| {
15741574
let mut skip_value = None;
15751575
for skip in var_iter!(egraph[subst[skip_var]], LimitSkip) {
1576-
if skip.unwrap_or_default() > 0 {
1576+
if skip.is_some() {
15771577
skip_value = *skip;
15781578
break;
15791579
}
15801580
}
15811581
let mut fetch_value = None;
15821582
for fetch in var_iter!(egraph[subst[fetch_var]], LimitFetch) {
1583-
if fetch.unwrap_or_default() > 0 {
1583+
if fetch.is_some() {
15841584
fetch_value = *fetch;
15851585
break;
15861586
}

0 commit comments

Comments
 (0)