@@ -7248,49 +7248,88 @@ ORDER BY
72487248 displayable(physical_plan.as_ref()).indent()
72497249 );
72507250
7251+ fn trivial_member_expr(cube: &str, member: &str, alias: &str) -> String {
7252+ json!({
7253+ "cube_name": cube,
7254+ "alias": alias,
7255+ "cube_params": [cube],
7256+ "expr": format!("${{{cube}.{member}}}"),
7257+ "grouping_set": null,
7258+ })
7259+ .to_string()
7260+ }
7261+
72517262 assert_eq!(
7252- query_plan.as_logical_plan().find_cube_scan().request,
7263+ query_plan
7264+ .as_logical_plan()
7265+ .find_cube_scan_wrapper()
7266+ .request
7267+ .unwrap(),
72537268 V1LoadRequestQuery {
72547269 measures: Some(vec![
7255- "WideCube.measure1".to_string(),
7256- "WideCube.measure2".to_string(),
7257- "WideCube.measure3".to_string(),
7258- "WideCube.measure4".to_string(),
7270+ json!({
7271+ "cube_name": "WideCube",
7272+ "alias": "max_source_measu",
7273+ "cube_params": ["WideCube"],
7274+ "expr": "${WideCube.measure1}",
7275+ "grouping_set": null,
7276+ })
7277+ .to_string(),
7278+ json!({
7279+ "cube_name": "WideCube",
7280+ "alias": "max_source_measu_1",
7281+ "cube_params": ["WideCube"],
7282+ "expr": "${WideCube.measure2}",
7283+ "grouping_set": null,
7284+ })
7285+ .to_string(),
7286+ json!({
7287+ "cube_name": "WideCube",
7288+ "alias": "sum_source_measu",
7289+ "cube_params": ["WideCube"],
7290+ "expr": "${WideCube.measure3}",
7291+ "grouping_set": null,
7292+ })
7293+ .to_string(),
7294+ json!({
7295+ "cube_name": "WideCube",
7296+ "alias": "max_source_measu_2",
7297+ "cube_params": ["WideCube"],
7298+ "expr": "${WideCube.measure4}",
7299+ "grouping_set": null,
7300+ })
7301+ .to_string(),
72597302 ]),
72607303 dimensions: Some(vec![
7261- "WideCube.dim1".to_string(),
7262- "WideCube.dim2".to_string(),
7263- "WideCube.dim3".to_string(),
7264- "WideCube.dim4".to_string(),
7304+ trivial_member_expr("WideCube", "dim2", "dim2"),
7305+ trivial_member_expr("WideCube", "dim3", "dim3"),
7306+ trivial_member_expr("WideCube", "dim4", "dim4"),
7307+ json!({
7308+ "cube_name": "WideCube",
7309+ "alias": "pivot_grouping",
7310+ "cube_params": ["WideCube"],
7311+ "expr": "0",
7312+ "grouping_set": null,
7313+ })
7314+ .to_string()
72657315 ]),
72667316 segments: Some(vec![]),
7267- order: Some(vec![]),
7317+ order: Some(vec![
7318+ vec!["dim2".to_string(), "asc".to_string(),],
7319+ vec!["dim3".to_string(), "asc".to_string(),],
7320+ vec!["dim4".to_string(), "asc".to_string(),],
7321+ vec!["pivot_grouping".to_string(), "asc".to_string(),],
7322+ ]),
72687323 filters: Some(vec![V1LoadRequestQueryFilterItem {
72697324 member: Some("WideCube.dim1".to_string()),
72707325 operator: Some("equals".to_string()),
72717326 values: Some(vec!["foo".to_string()]),
72727327 or: None,
72737328 and: None,
7274- }]),
7275- ungrouped: Some(true),
7329+ },]),
72767330 ..Default::default()
72777331 }
72787332 );
7279- assert!(!query_plan
7280- .as_logical_plan()
7281- .find_cube_scan_wrapper()
7282- .wrapped_sql
7283- .unwrap()
7284- .sql
7285- .contains("ungrouped"));
7286-
7287- assert!(query_plan
7288- .as_logical_plan()
7289- .find_cube_scan_wrapper()
7290- .wrapped_sql
7291- .unwrap()
7292- .sql
7293- .contains("[\"dim2\",\"asc\"]"));
72947333 }
72957334
72967335 #[tokio::test]
@@ -11614,15 +11653,39 @@ ORDER BY "source"."str0" ASC
1161411653 .await
1161511654 .as_logical_plan();
1161611655
11617- let sql = logical_plan
11618- .find_cube_scan_wrapper()
11619- .wrapped_sql
11620- .unwrap()
11621- .sql;
11622-
11623- assert!(sql.contains("LOWER("));
11624- assert!(sql.contains("GROUP BY "));
11625- assert!(sql.contains("ORDER BY "));
11656+ assert_eq!(
11657+ logical_plan
11658+ .find_cube_scan_wrapper()
11659+ .request
11660+ .unwrap(),
11661+ V1LoadRequestQuery {
11662+ measures: Some(vec![]),
11663+ dimensions: Some(vec![
11664+ json!({
11665+ "cube_name": "KibanaSampleDataEcommerce",
11666+ "alias": "ta_1_order_date_",
11667+ "cube_params": ["KibanaSampleDataEcommerce", "Logs"],
11668+ "expr": "((${KibanaSampleDataEcommerce.order_date} = DATE('1994-05-01')) OR (${KibanaSampleDataEcommerce.order_date} = DATE('1996-05-03')))",
11669+ "grouping_set": null,
11670+ }).to_string(),
11671+ ]),
11672+ segments: Some(vec![
11673+ json!({
11674+ "cube_name": "KibanaSampleDataEcommerce",
11675+ "alias": "lower_ta_2_conte",
11676+ "cube_params": ["KibanaSampleDataEcommerce", "Logs"],
11677+ "expr": "(LOWER(${Logs.content}) = $0$)",
11678+ "grouping_set": null,
11679+ }).to_string(),
11680+ ]),
11681+ time_dimensions: None,
11682+ order: Some(vec![]),
11683+ limit: None,
11684+ offset: None,
11685+ filters: None,
11686+ ungrouped: None,
11687+ }
11688+ );
1162611689 }
1162711690
1162811691 #[tokio::test]
@@ -11876,20 +11939,46 @@ ORDER BY "source"."str0" ASC
1187611939 );
1187711940
1187811941 assert_eq!(
11879- query_plan.as_logical_plan().find_cube_scan().request,
11942+ query_plan
11943+ .as_logical_plan()
11944+ .find_cube_scan_wrapper()
11945+ .request
11946+ .unwrap(),
1188011947 V1LoadRequestQuery {
1188111948 measures: Some(vec![]),
11882- dimensions: Some(vec![]),
11883- segments: Some(vec![]),
11949+ dimensions: Some(vec![
11950+ json!({
11951+ "cube_name": "KibanaSampleDataEcommerce",
11952+ "alias": "customer_gender",
11953+ "cube_params": ["KibanaSampleDataEcommerce"],
11954+ "expr": "${KibanaSampleDataEcommerce.customer_gender}",
11955+ "grouping_set": null,
11956+ }).to_string(),
11957+ json!({
11958+ "cube_name": "KibanaSampleDataEcommerce",
11959+ "alias": "cast_dateadd_utf",
11960+ "cube_params": ["KibanaSampleDataEcommerce"],
11961+ "expr": "CAST(DATE_ADD(${KibanaSampleDataEcommerce.order_date}, INTERVAL '2 DAY') AS DATE)",
11962+ "grouping_set": null,
11963+ }).to_string(),
11964+ json!({
11965+ "cube_name": "KibanaSampleDataEcommerce",
11966+ "alias": "dateadd_utf8__se",
11967+ "cube_params": ["KibanaSampleDataEcommerce"],
11968+ "expr": "DATE_ADD(${KibanaSampleDataEcommerce.order_date}, INTERVAL '2000000 MILLISECOND')",
11969+ "grouping_set": null,
11970+ }).to_string(),
11971+ ]),
11972+ segments: Some(vec![
11973+ json!({
11974+ "cube_name": "KibanaSampleDataEcommerce",
11975+ "alias": "dateadd_utf8__da",
11976+ "cube_params": ["KibanaSampleDataEcommerce"],
11977+ "expr": "(DATE_ADD(${KibanaSampleDataEcommerce.order_date}, INTERVAL '2 DAY') < DATE('2014-06-02'))",
11978+ "grouping_set": null,
11979+ }).to_string(),
11980+ ]),
1188411981 order: Some(vec![]),
11885- filters: Some(vec![V1LoadRequestQueryFilterItem {
11886- member: Some("KibanaSampleDataEcommerce.order_date".to_string(),),
11887- operator: Some("beforeDate".to_string(),),
11888- values: Some(vec!["2014-05-31T00:00:00.000Z".to_string()]),
11889- or: None,
11890- and: None,
11891- }]),
11892- ungrouped: Some(true),
1189311982 ..Default::default()
1189411983 }
1189511984 )
@@ -12674,53 +12763,39 @@ ORDER BY "source"."str0" ASC
1267412763 .await
1267512764 .as_logical_plan();
1267612765
12677- let end_date = chrono::Utc::now().date_naive() - chrono::Duration::days(1) ;
12678- let start_date = end_date - chrono::Duration::days(29 );
12766+ let end_date = chrono::Utc::now().date_naive();
12767+ let start_date = end_date - chrono::Duration::days(30 );
1267912768 assert_eq!(
12680- logical_plan.find_cube_scan ().request,
12769+ logical_plan.find_cube_scan_wrapper ().request.unwrap() ,
1268112770 V1LoadRequestQuery {
12682- measures: Some(vec![]),
12683- dimensions: Some(vec![]),
12684- segments: Some(vec![]),
12685- time_dimensions: Some(vec![V1LoadRequestQueryTimeDimension {
12686- dimension: "KibanaSampleDataEcommerce.order_date".to_string(),
12687- granularity: None,
12688- date_range: Some(json!(vec![
12689- format!("{}T00:00:00.000Z", start_date),
12690- format!("{}T23:59:59.999Z", end_date),
12691- ]))
12692- }]),
12771+ measures: Some(vec![
12772+ json!({
12773+ "cube_name": "KibanaSampleDataEcommerce",
12774+ "alias": "avg_kibanasample",
12775+ "cube_params": ["KibanaSampleDataEcommerce"],
12776+ "expr": "${KibanaSampleDataEcommerce.avgPrice}",
12777+ "grouping_set": null,
12778+ }).to_string(),
12779+ ]),
12780+ dimensions: Some(vec![
12781+ json!({
12782+ "cube_name": "KibanaSampleDataEcommerce",
12783+ "alias": "cast_kibanasampl",
12784+ "cube_params": ["KibanaSampleDataEcommerce"],
12785+ "expr": "CAST(${KibanaSampleDataEcommerce.order_date} AS DATE)",
12786+ "grouping_set": null,
12787+ }).to_string(),
12788+ ]),
12789+ segments: Some(vec![
12790+ json!({
12791+ "cube_name": "KibanaSampleDataEcommerce",
12792+ "alias": "kibanasampledata",
12793+ "cube_params": ["KibanaSampleDataEcommerce"],
12794+ "expr": format!("(((${{KibanaSampleDataEcommerce.order_date}} >= DATE('{start_date}')) AND (${{KibanaSampleDataEcommerce.order_date}} < DATE('{end_date}'))) AND (((${{KibanaSampleDataEcommerce.notes}} = $0$) OR (${{KibanaSampleDataEcommerce.notes}} = $1$)) OR (${{KibanaSampleDataEcommerce.notes}} = $2$)))"),
12795+ "grouping_set": null,
12796+ }).to_string(),
12797+ ]),
1269312798 order: Some(vec![]),
12694- filters: Some(vec![V1LoadRequestQueryFilterItem {
12695- member: None,
12696- operator: None,
12697- values: None,
12698- or: Some(vec![
12699- json!(V1LoadRequestQueryFilterItem {
12700- member: Some("KibanaSampleDataEcommerce.notes".to_string()),
12701- operator: Some("equals".to_string()),
12702- values: Some(vec!["note1".to_string()]),
12703- or: None,
12704- and: None,
12705- }),
12706- json!(V1LoadRequestQueryFilterItem {
12707- member: Some("KibanaSampleDataEcommerce.notes".to_string()),
12708- operator: Some("equals".to_string()),
12709- values: Some(vec!["note2".to_string()]),
12710- or: None,
12711- and: None,
12712- }),
12713- json!(V1LoadRequestQueryFilterItem {
12714- member: Some("KibanaSampleDataEcommerce.notes".to_string()),
12715- operator: Some("equals".to_string()),
12716- values: Some(vec!["note3".to_string()]),
12717- or: None,
12718- and: None,
12719- }),
12720- ]),
12721- and: None
12722- }]),
12723- ungrouped: Some(true),
1272412799 ..Default::default()
1272512800 }
1272612801 )
0 commit comments