Skip to content

Commit a97ddb5

Browse files
committed
switch to = syntax, add test for bug in DEFAULT
1 parent b95f91a commit a97ddb5

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

datafusion/core/tests/user_defined/user_defined_scalar_functions.rs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)