@@ -55,8 +55,8 @@ use self::{
5555 create_pg_truetypid_udf, create_pg_truetypmod_udf, create_pg_type_is_visible_udf,
5656 create_position_udf, create_quarter_udf, create_regexp_substr_udf, create_second_udf,
5757 create_session_user_udf, create_str_to_date_udf, create_time_format_udf,
58- create_timediff_udf, create_to_char_udf, create_ucase_udf, create_unnest_udtf ,
59- create_user_udf, create_version_udf, create_year_udf,
58+ create_timediff_udf, create_to_char_udf, create_to_date_udf, create_ucase_udf ,
59+ create_unnest_udtf, create_user_udf, create_version_udf, create_year_udf,
6060 },
6161 },
6262 parser::parse_sql_to_statement,
@@ -1166,6 +1166,7 @@ WHERE `TABLE_SCHEMA` = '{}'",
11661166 ctx.register_udf(create_ends_with_udf());
11671167 ctx.register_udf(create_position_udf());
11681168 ctx.register_udf(create_date_to_timestamp_udf());
1169+ ctx.register_udf(create_to_date_udf());
11691170
11701171 // udaf
11711172 ctx.register_udaf(create_measure_udaf());
@@ -2620,7 +2621,7 @@ mod tests {
26202621 dimensions: Some(vec![]),
26212622 time_dimensions: Some(vec![V1LoadRequestQueryTimeDimension {
26222623 dimension: "KibanaSampleDataEcommerce.order_date".to_string(),
2623- granularity: Some("month ".to_string()),
2624+ granularity: Some("day ".to_string()),
26242625 date_range: None,
26252626 }]),
26262627 order: None,
@@ -11044,7 +11045,7 @@ ORDER BY \"COUNT(count)\" DESC"
1104411045 segments: Some(vec![]),
1104511046 time_dimensions: Some(vec![V1LoadRequestQueryTimeDimension {
1104611047 dimension: "KibanaSampleDataEcommerce.order_date".to_owned(),
11047- granularity: Some("month ".to_owned()),
11048+ granularity: Some("day ".to_owned()),
1104811049 date_range: None
1104911050 }]),
1105011051 order: None,
@@ -16143,4 +16144,45 @@ ORDER BY \"COUNT(count)\" DESC"
1614316144 }
1614416145 )
1614516146 }
16147+
16148+ #[tokio::test]
16149+ async fn test_thoughtspot_datediff_to_date() {
16150+ init_logger();
16151+
16152+ let logical_plan = convert_select_to_query_plan(
16153+ r#"
16154+ WITH "qt_0" AS (
16155+ SELECT
16156+ DATEDIFF(day, min("ta_1"."order_date"), TO_DATE('2020-02-20','YYYY-MM-DD')) "ca_1",
16157+ min("ta_1"."order_date") "ca_2"
16158+ FROM KibanaSampleDataEcommerce "ta_1"
16159+ HAVING DATEDIFF(day, min("ta_1"."order_date"), TO_DATE('2020-02-20','YYYY-MM-DD')) > 4
16160+ )
16161+ SELECT DATEDIFF(day, min("ta_2"."ca_2"), TO_DATE('2020-02-20','YYYY-MM-DD')) "ca_3"
16162+ FROM "qt_0" "ta_2"
16163+ "#
16164+ .to_string(),
16165+ DatabaseProtocol::PostgreSQL,
16166+ )
16167+ .await
16168+ .as_logical_plan();
16169+
16170+ assert_eq!(
16171+ logical_plan.find_cube_scan().request,
16172+ V1LoadRequestQuery {
16173+ measures: Some(vec![]),
16174+ dimensions: Some(vec![]),
16175+ segments: Some(vec![]),
16176+ time_dimensions: Some(vec![V1LoadRequestQueryTimeDimension {
16177+ dimension: "KibanaSampleDataEcommerce.order_date".to_owned(),
16178+ granularity: Some("day".to_owned()),
16179+ date_range: None
16180+ }]),
16181+ order: None,
16182+ limit: None,
16183+ offset: None,
16184+ filters: None,
16185+ }
16186+ )
16187+ }
1614616188}
0 commit comments