Skip to content

Commit 6efddc6

Browse files
krinartJeadie
authored andcommitted
Implement timestamp_cast_dtype for SqliteDialect (#99)
* Use text for sqlite timestamp * Add test
1 parent e7ee0bb commit 6efddc6

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

datafusion/sql/src/unparser/dialect.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,14 @@ impl Dialect for SqliteDialect {
487487
false
488488
}
489489

490+
fn timestamp_cast_dtype(
491+
&self,
492+
_time_unit: &TimeUnit,
493+
tz: &Option<Arc<str>>,
494+
) -> ast::DataType {
495+
ast::DataType::Text
496+
}
497+
490498
fn scalar_function_to_sql_overrides(
491499
&self,
492500
unparser: &Unparser,

datafusion/sql/src/unparser/expr.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3152,4 +3152,30 @@ mod tests {
31523152

31533153
Ok(())
31543154
}
3155+
3156+
#[test]
3157+
fn test_cast_timestamp_sqlite() -> Result<()> {
3158+
let sqlite_dialect: Arc<dyn Dialect> = Arc::new(SqliteDialect {});
3159+
3160+
for (dialect, expected) in [
3161+
(sqlite_dialect, "CAST(`a` AS TEXT)"),
3162+
] {
3163+
let unparser = Unparser::new(dialect.as_ref());
3164+
let expr = Expr::Cast(Cast {
3165+
expr: Box::new(col("a")),
3166+
data_type: DataType::Timestamp(
3167+
TimeUnit::Nanosecond,
3168+
None,
3169+
),
3170+
});
3171+
3172+
let ast = unparser.expr_to_sql(&expr)?;
3173+
3174+
let actual = ast.to_string();
3175+
let expected = expected.to_string();
3176+
3177+
assert_eq!(actual, expected);
3178+
}
3179+
Ok(())
3180+
}
31553181
}

0 commit comments

Comments
 (0)