From 284215b3401eac95b2a6c0a77bfc00480b5fa4b6 Mon Sep 17 00:00:00 2001 From: Mikhail Cheshkov Date: Thu, 7 Nov 2024 23:18:07 +0200 Subject: [PATCH] test(cubesql): More tests for LIMIT 0 --- .../src/compile/test/test_cube_scan.rs | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs b/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs index 0b6143ff0cc1a..0ae105880b048 100644 --- a/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs +++ b/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs @@ -224,3 +224,120 @@ async fn cubescan_limit_offset_limit_offset() { ); } } + +/// Test that LIMIT 0 is pushed to grouped CubeScan +#[tokio::test] +async fn cubescan_limit_zero() { + init_testing_logger(); + + let query_plan = convert_select_to_query_plan( + // language=PostgreSQL + r#" + SELECT + customer_gender + FROM + KibanaSampleDataEcommerce + GROUP BY + 1 + LIMIT 0 + "# + .to_string(), + DatabaseProtocol::PostgreSQL, + ) + .await; + + let logical_plan = query_plan.as_logical_plan(); + assert_eq!( + logical_plan.find_cube_scan().request, + V1LoadRequestQuery { + measures: Some(vec![]), + dimensions: Some(vec!["KibanaSampleDataEcommerce.customer_gender".to_string()]), + segments: Some(vec![]), + order: Some(vec![]), + limit: Some(0), + ..Default::default() + } + ); +} + +/// Test that LIMIT 0 is pushed to ungrouped CubeScan +#[tokio::test] +async fn cubescan_ungrouped_limit_zero() { + init_testing_logger(); + + let query_plan = convert_select_to_query_plan( + // language=PostgreSQL + r#" + SELECT + customer_gender + FROM + KibanaSampleDataEcommerce + LIMIT 0 + "# + .to_string(), + DatabaseProtocol::PostgreSQL, + ) + .await; + + let logical_plan = query_plan.as_logical_plan(); + assert_eq!( + logical_plan.find_cube_scan().request, + V1LoadRequestQuery { + measures: Some(vec![]), + dimensions: Some(vec!["KibanaSampleDataEcommerce.customer_gender".to_string()]), + segments: Some(vec![]), + order: Some(vec![]), + limit: Some(0), + ungrouped: Some(true), + ..Default::default() + } + ); +} + +/// Test that LIMIT 0 is pushed to CubeScan for SELECT * +#[tokio::test] +async fn cubescan_star_limit_zero() { + init_testing_logger(); + + let query_plan = convert_select_to_query_plan( + // language=PostgreSQL + r#" + SELECT + * + FROM + KibanaSampleDataEcommerce + LIMIT 0 + "# + .to_string(), + DatabaseProtocol::PostgreSQL, + ) + .await; + + let logical_plan = query_plan.as_logical_plan(); + assert_eq!( + logical_plan.find_cube_scan().request, + V1LoadRequestQuery { + measures: Some(vec![ + "KibanaSampleDataEcommerce.count".to_string(), + "KibanaSampleDataEcommerce.maxPrice".to_string(), + "KibanaSampleDataEcommerce.sumPrice".to_string(), + "KibanaSampleDataEcommerce.minPrice".to_string(), + "KibanaSampleDataEcommerce.avgPrice".to_string(), + "KibanaSampleDataEcommerce.countDistinct".to_string(), + ]), + dimensions: Some(vec![ + "KibanaSampleDataEcommerce.order_date".to_string(), + "KibanaSampleDataEcommerce.last_mod".to_string(), + "KibanaSampleDataEcommerce.customer_gender".to_string(), + "KibanaSampleDataEcommerce.notes".to_string(), + "KibanaSampleDataEcommerce.taxful_total_price".to_string(), + "KibanaSampleDataEcommerce.has_subscription".to_string(), + ]), + segments: Some(vec![]), + order: Some(vec![]), + limit: Some(0), + ungrouped: Some(true), + ..Default::default() + } + ); +}