@@ -1636,7 +1636,7 @@ mod tests {
16361636
16371637 use crate :: unparser:: dialect:: {
16381638 CharacterLengthStyle , CustomDialect , CustomDialectBuilder , DateFieldExtractStyle ,
1639- Dialect , PostgreSqlDialect ,
1639+ Dialect , DuckDBDialect , PostgreSqlDialect , ScalarFnToSqlHandler ,
16401640 } ;
16411641
16421642 use super :: * ;
@@ -2722,4 +2722,31 @@ mod tests {
27222722
27232723 Ok ( ( ) )
27242724 }
2725+
2726+ #[ test]
2727+ fn test_custom_scalar_overrides_duckdb ( ) -> Result < ( ) > {
2728+ let duckdb_default = DuckDBDialect :: new ( ) ;
2729+ let duckdb_extended = DuckDBDialect :: new ( ) . with_custom_scalar_overrides ( vec ! [ (
2730+ "dummy_udf" ,
2731+ Box :: new( |unparser: & Unparser , args: & [ Expr ] | {
2732+ unparser. scalar_function_to_sql( "smart_udf" , args) . map( Some )
2733+ } ) as ScalarFnToSqlHandler ,
2734+ ) ] ) ;
2735+
2736+ for ( dialect, expected) in [
2737+ ( duckdb_default, r#"dummy_udf("a", "b")"# ) ,
2738+ ( duckdb_extended, r#"smart_udf("a", "b")"# ) ,
2739+ ] {
2740+ let unparser = Unparser :: new ( & dialect) ;
2741+ let expr =
2742+ ScalarUDF :: new_from_impl ( DummyUDF :: new ( ) ) . call ( vec ! [ col( "a" ) , col( "b" ) ] ) ;
2743+ let ast = unparser. expr_to_sql ( & expr) ?;
2744+
2745+ let actual = format ! ( "{}" , ast) ;
2746+
2747+ assert_eq ! ( actual, expected) ;
2748+ }
2749+
2750+ Ok ( ( ) )
2751+ }
27252752}
0 commit comments