Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/dialect-live-cloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@ jobs:
fail-fast: false
matrix:
include:
- { backend: snowflake, driver: snowflake }
# Disabled until Snowflake credentials are provisioned: without
# the GGSQL_TEST_URI_SNOWFLAKE secret the leg fails the
# missing-secret check on the origin repo.
# - { backend: snowflake, driver: snowflake }
- { backend: bigquery, driver: bigquery }
- { backend: databricks, driver: databricks }

Expand Down
2 changes: 1 addition & 1 deletion src/golden/databricks.sql
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ SELECT *, `id` AS `__ggsql_aes_pos1__`, `val` AS `__ggsql_aes_pos2__` FROM (SELE
-- case: binned_temporal
SELECT * FROM (SELECT * FROM ggsql_live_test) AS `__schema__` LIMIT 1;
WITH `__ggsql_source__` AS (SELECT *, `day` AS `__ggsql_aes_pos1__`, `val` AS `__ggsql_aes_pos2__` FROM (SELECT * FROM ggsql_live_test) AS `__ggsql_src__`) SELECT MIN(`id`) AS `__ggsql_min_id`, MAX(`id`) AS `__ggsql_max_id`, MIN(`val`) AS `__ggsql_min_val`, MAX(`val`) AS `__ggsql_max_val`, MIN(`grp`) AS `__ggsql_min_grp`, MAX(`grp`) AS `__ggsql_max_grp`, MIN(`day`) AS `__ggsql_min_day`, MAX(`day`) AS `__ggsql_max_day`, MIN(`mixed Case`) AS `__ggsql_min_mixed Case`, MAX(`mixed Case`) AS `__ggsql_max_mixed Case` FROM `__ggsql_source__`;
SELECT `id`, `val`, `grp`, `day`, `mixed Case`, (CASE WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19000 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) < 19000.2 THEN 19000.1 WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19000.2 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) < 19000.4 THEN 19000.300000000003 WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19000.4 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) < 19000.6 THEN 19000.5 WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19000.6 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) < 19000.8 THEN 19000.699999999997 WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19000.8 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) < 19001 THEN 19000.9 WHEN CAST(`__ggsql_aes_pos1__` AS DOUBLE) >= 19001 AND CAST(`__ggsql_aes_pos1__` AS DOUBLE) <= 19001.2 THEN 19001.1 ELSE NULL END) AS `__ggsql_aes_pos1__`, `__ggsql_aes_pos2__` FROM (SELECT *, `day` AS `__ggsql_aes_pos1__`, `val` AS `__ggsql_aes_pos2__` FROM (SELECT * FROM ggsql_live_test) AS `__ggsql_src__`) AS `__ggsql_pre__`;
SELECT `id`, `val`, `grp`, `day`, `mixed Case`, (CASE WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19000 AND UNIX_DATE(`__ggsql_aes_pos1__`) < 19000.2 THEN 19000.1 WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19000.2 AND UNIX_DATE(`__ggsql_aes_pos1__`) < 19000.4 THEN 19000.300000000003 WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19000.4 AND UNIX_DATE(`__ggsql_aes_pos1__`) < 19000.6 THEN 19000.5 WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19000.6 AND UNIX_DATE(`__ggsql_aes_pos1__`) < 19000.8 THEN 19000.699999999997 WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19000.8 AND UNIX_DATE(`__ggsql_aes_pos1__`) < 19001 THEN 19000.9 WHEN UNIX_DATE(`__ggsql_aes_pos1__`) >= 19001 AND UNIX_DATE(`__ggsql_aes_pos1__`) <= 19001.2 THEN 19001.1 ELSE NULL END) AS `__ggsql_aes_pos1__`, `__ggsql_aes_pos2__` FROM (SELECT *, `day` AS `__ggsql_aes_pos1__`, `val` AS `__ggsql_aes_pos2__` FROM (SELECT * FROM ggsql_live_test) AS `__ggsql_src__`) AS `__ggsql_pre__`;

-- case: binned_temporal_date
SELECT * FROM (SELECT * FROM ggsql_live_test) AS `__schema__` LIMIT 1;
Expand Down
19 changes: 19 additions & 0 deletions src/reader/dialects/databricks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,25 @@ impl SqlDialect for DatabricksDialect {
)
}

fn sql_temporal_as_number(
&self,
expr: &str,
kind: crate::plot::types::CastTargetType,
) -> String {
// Spark rejects temporal → numeric casts outright
// ([DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] and suggests the
// unix_* extractors instead).
use crate::plot::types::CastTargetType as C;
match kind {
C::Date => format!("UNIX_DATE({expr})"),
C::DateTime => format!("unix_micros({expr})"),
_ => {
let ty = self.type_names().number.unwrap_or("DOUBLE");
self.sql_cast(expr, ty)
}
}
}

fn temp_table_style(&self) -> crate::reader::TempTableStyle {
crate::reader::TempTableStyle::CreateOrReplaceTempView
}
Expand Down
Loading