Skip to content

Commit 7c06958

Browse files
committed
add/fix tests
1 parent 2466eec commit 7c06958

File tree

1 file changed

+94
-16
lines changed
  • rust/cubesql/cubesql/src/compile

1 file changed

+94
-16
lines changed

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

Lines changed: 94 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14624,21 +14624,46 @@ ORDER BY "source"."str0" ASC
1462414624
assert!(sql.contains("EXTRACT(EPOCH FROM"));
1462514625
}
1462614626

14627-
// redshift-dateadd-[literal-date32-]to-interval rewrites DATEADD to DATE_ADD
1462814627
#[tokio::test]
14629-
#[ignore]
1463014628
async fn test_dateadd_push_down() {
1463114629
if !Rewriter::sql_push_down_enabled() {
1463214630
return;
1463314631
}
1463414632
init_testing_logger();
1463514633

14636-
// BigQuery
14637-
let bq_templates = vec![("functions/DATE_ADD".to_string(), "{% if date_part|upper in ['YEAR', 'MONTH', 'QUARTER'] %}TIMESTAMP(DATETIME_ADD(DATETIME({{ args[2] }}), INTERVAL {{ interval }} {{ date_part }})){% else %}TIMESTAMP_ADD({{ args[2] }}, INTERVAL {{ interval }} {{ date_part }}){% endif %}".to_string())];
14634+
// Redshift function DATEADD
14635+
let query_plan = convert_select_to_query_plan(
14636+
"
14637+
SELECT DATEADD(DAY, 7, order_date) AS d
14638+
FROM KibanaSampleDataEcommerce AS k
14639+
WHERE LOWER(customer_gender) = 'test'
14640+
GROUP BY 1
14641+
ORDER BY 1 DESC
14642+
"
14643+
.to_string(),
14644+
DatabaseProtocol::PostgreSQL,
14645+
)
14646+
.await;
14647+
14648+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
14649+
println!(
14650+
"Physical plan: {}",
14651+
displayable(physical_plan.as_ref()).indent()
14652+
);
14653+
14654+
let logical_plan = query_plan.as_logical_plan();
14655+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14656+
// redshift-dateadd-[literal-date32-]to-interval rewrites DATEADD to DATE_ADD
14657+
assert!(sql.contains("DATE_ADD("));
14658+
assert!(sql.contains("INTERVAL '7 DAY')"));
14659+
14660+
// BigQuery + Postgres DATE_ADD + DAYS
14661+
let bq_templates = vec![("functions/DATE_ADD".to_string(), "{% if date_part|upper in ['YEAR', 'MONTH', 'QUARTER'] %}TIMESTAMP(DATETIME_ADD(DATETIME({{ args[0] }}), INTERVAL {{ interval }} {{ date_part }})){% else %}TIMESTAMP_ADD({{ args[0] }}, INTERVAL {{ interval }} {{ date_part }}){% endif %}".to_string())];
1463814662
let query_plan = convert_select_to_query_plan_customized(
1463914663
"
14640-
SELECT DATE_ADD(DAY, 7, order_date) AS d
14664+
SELECT DATE_ADD(order_date, INTERVAL '7 DAYS') AS d
1464114665
FROM KibanaSampleDataEcommerce AS k
14666+
WHERE LOWER(customer_gender) = 'test'
1464214667
GROUP BY 1
1464314668
ORDER BY 1 DESC
1464414669
"
@@ -14656,14 +14681,42 @@ ORDER BY "source"."str0" ASC
1465614681

1465714682
let logical_plan = query_plan.as_logical_plan();
1465814683
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14659-
println!("{}", sql);
1466014684
assert!(sql.contains("TIMESTAMP_ADD("));
14661-
assert!(sql.contains("INTERVAL 7 day)"));
14685+
assert!(sql.contains("INTERVAL 7 DAY)"));
1466214686

14687+
// BigQuery + Redshift DATEADD + DAYS
14688+
let bq_templates = vec![("functions/DATE_ADD".to_string(), "{% if date_part|upper in ['YEAR', 'MONTH', 'QUARTER'] %}TIMESTAMP(DATETIME_ADD(DATETIME({{ args[0] }}), INTERVAL {{ interval }} {{ date_part }})){% else %}TIMESTAMP_ADD({{ args[0] }}, INTERVAL {{ interval }} {{ date_part }}){% endif %}".to_string())];
1466314689
let query_plan = convert_select_to_query_plan_customized(
1466414690
"
14665-
SELECT DATE_ADD(MONTH, 7, order_date) AS d
14691+
SELECT DATEADD(DAY, 7, order_date) AS d
1466614692
FROM KibanaSampleDataEcommerce AS k
14693+
WHERE LOWER(customer_gender) = 'test'
14694+
GROUP BY 1
14695+
ORDER BY 1 DESC
14696+
"
14697+
.to_string(),
14698+
DatabaseProtocol::PostgreSQL,
14699+
bq_templates.clone(),
14700+
)
14701+
.await;
14702+
14703+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
14704+
println!(
14705+
"Physical plan: {}",
14706+
displayable(physical_plan.as_ref()).indent()
14707+
);
14708+
14709+
let logical_plan = query_plan.as_logical_plan();
14710+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14711+
assert!(sql.contains("TIMESTAMP_ADD("));
14712+
assert!(sql.contains("INTERVAL 7 DAY)"));
14713+
14714+
// BigQuery + Postgres DATE_ADD + MONTHS
14715+
let query_plan = convert_select_to_query_plan_customized(
14716+
"
14717+
SELECT DATE_ADD(order_date, INTERVAL '7 MONTHS') AS d
14718+
FROM KibanaSampleDataEcommerce AS k
14719+
WHERE LOWER(customer_gender) = 'test'
1466714720
GROUP BY 1
1466814721
ORDER BY 1 DESC
1466914722
"
@@ -14681,24 +14734,48 @@ ORDER BY "source"."str0" ASC
1468114734

1468214735
let logical_plan = query_plan.as_logical_plan();
1468314736
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14684-
println!("{}", sql);
1468514737
assert!(sql.contains("TIMESTAMP(DATETIME_ADD(DATETIME("));
1468614738
assert!(sql.contains("INTERVAL 7 MONTH)"));
1468714739

14688-
// Postgres
14740+
// BigQuery + Redshift DATEADD + MONTHS
14741+
let bq_templates = vec![("functions/DATE_ADD".to_string(), "{% if date_part|upper in ['YEAR', 'MONTH', 'QUARTER'] %}TIMESTAMP(DATETIME_ADD(DATETIME({{ args[0] }}), INTERVAL {{ interval }} {{ date_part }})){% else %}TIMESTAMP_ADD({{ args[0] }}, INTERVAL {{ interval }} {{ date_part }}){% endif %}".to_string())];
14742+
let query_plan = convert_select_to_query_plan_customized(
14743+
"
14744+
SELECT DATEADD(MONTH, 7, order_date) AS d
14745+
FROM KibanaSampleDataEcommerce AS k
14746+
WHERE LOWER(customer_gender) = 'test'
14747+
GROUP BY 1
14748+
ORDER BY 1 DESC
14749+
"
14750+
.to_string(),
14751+
DatabaseProtocol::PostgreSQL,
14752+
bq_templates.clone(),
14753+
)
14754+
.await;
14755+
14756+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
14757+
println!(
14758+
"Physical plan: {}",
14759+
displayable(physical_plan.as_ref()).indent()
14760+
);
14761+
14762+
let logical_plan = query_plan.as_logical_plan();
14763+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14764+
assert!(sql.contains("TIMESTAMP(DATETIME_ADD(DATETIME("));
14765+
assert!(sql.contains("INTERVAL 7 MONTH)"));
14766+
14767+
// Postgres DATE_ADD
1468914768
let query_plan = convert_select_to_query_plan_customized(
1469014769
"
14691-
SELECT DATE_ADD(DAY, 7, order_date) AS d
14770+
SELECT DATE_ADD(order_date, INTERVAL '7 DAYS') AS d
1469214771
FROM KibanaSampleDataEcommerce AS k
14772+
WHERE LOWER(customer_gender) = 'test'
1469314773
GROUP BY 1
1469414774
ORDER BY 1 DESC
1469514775
"
1469614776
.to_string(),
1469714777
DatabaseProtocol::PostgreSQL,
14698-
vec![(
14699-
"functions/DATE_ADD".to_string(),
14700-
"({{ args[2] }} + \'{{ interval }} {{ date_part }}\'::interval)".to_string(),
14701-
)],
14778+
vec![],
1470214779
)
1470314780
.await;
1470414781

@@ -14710,7 +14787,8 @@ ORDER BY "source"."str0" ASC
1471014787

1471114788
let logical_plan = query_plan.as_logical_plan();
1471214789
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
14713-
assert!(sql.contains("+ '7 day'::interval"));
14790+
assert!(sql.contains("DATE_ADD("));
14791+
assert!(sql.contains("INTERVAL '7 DAY'"));
1471414792
}
1471514793

1471614794
#[tokio::test]

0 commit comments

Comments
 (0)