@@ -1192,7 +1192,7 @@ async fn create_scalar_function_from_sql_statement_default_arguments() -> Result
11921192 let ctx = SessionContext :: new ( ) . with_function_factory ( function_factory. clone ( ) ) ;
11931193
11941194 let sql = r#"
1195- CREATE FUNCTION better_add(a DOUBLE DEFAULT 2.0, b DOUBLE DEFAULT 2.0)
1195+ CREATE FUNCTION better_add(a DOUBLE = 2.0, b DOUBLE = 2.0)
11961196 RETURNS DOUBLE
11971197 RETURN $a + $b
11981198 "# ;
@@ -1244,10 +1244,32 @@ async fn create_scalar_function_from_sql_statement_default_arguments() -> Result
12441244 ) ;
12451245
12461246 assert ! ( ctx. sql( "select better_add(2.0, 2.0, 2.0)" ) . await . is_err( ) ) ;
1247+ assert ! ( ctx. sql( "drop function better_add" ) . await . is_ok( ) ) ;
1248+
1249+ // works with positional style
1250+ let sql = r#"
1251+ CREATE FUNCTION better_add(DOUBLE, DOUBLE = 2.0)
1252+ RETURNS DOUBLE
1253+ RETURN $1 + $2
1254+ "# ;
1255+ assert ! ( ctx. sql( sql) . await . is_ok( ) ) ;
1256+
1257+ assert ! ( ctx. sql( "select better_add()" ) . await . is_err( ) ) ;
1258+ let result = ctx. sql ( "select better_add(2.0)" ) . await ?. collect ( ) . await ?;
1259+ assert_batches_eq ! (
1260+ & [
1261+ "+------------------------+" ,
1262+ "| better_add(Float64(2)) |" ,
1263+ "+------------------------+" ,
1264+ "| 4.0 |" ,
1265+ "+------------------------+" ,
1266+ ] ,
1267+ & result
1268+ ) ;
12471269
12481270 // non-default argument cannot follow default argument
12491271 let bad_expression_sql = r#"
1250- CREATE FUNCTION bad_expression_fun(a DOUBLE DEFAULT 2.0, b DOUBLE)
1272+ CREATE FUNCTION bad_expression_fun(a DOUBLE = 2.0, b DOUBLE)
12511273 RETURNS DOUBLE
12521274 RETURN $a + $b
12531275 "# ;
@@ -1258,6 +1280,20 @@ async fn create_scalar_function_from_sql_statement_default_arguments() -> Result
12581280 let expected =
12591281 "Error during planning: Non-default arguments cannot follow default arguments." ;
12601282 assert ! ( expected. starts_with( & err. strip_backtrace( ) ) ) ;
1283+
1284+ // FIXME: The `DEFAULT` syntax does not work with positional params
1285+ let bad_expression_sql = r#"
1286+ CREATE FUNCTION bad_expression_fun(DOUBLE, DOUBLE DEFAULT 2.0)
1287+ RETURNS DOUBLE
1288+ RETURN $1 + $2
1289+ "# ;
1290+ let err = ctx
1291+ . sql ( bad_expression_sql)
1292+ . await
1293+ . expect_err ( "sqlparser error" ) ;
1294+ let expected =
1295+ "SQL error: ParserError(\" Expected: ), found: 2.0 at Line: 2, Column: 63\" )" ;
1296+ assert ! ( expected. starts_with( & err. strip_backtrace( ) ) ) ;
12611297 Ok ( ( ) )
12621298}
12631299
0 commit comments