mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-22 21:52:28 +00:00
Cleanup CREATE FUNCTION tests (#1203)
This commit is contained in:
parent
3bf40485c5
commit
05af4e049c
1 changed files with 9 additions and 93 deletions
|
@ -804,9 +804,7 @@ Kwara & Kogi
|
||||||
PHP ₱ USD $
|
PHP ₱ USD $
|
||||||
\N Some other value
|
\N Some other value
|
||||||
\\."#;
|
\\."#;
|
||||||
let ast = pg_and_generic().one_statement_parses_to(sql, "");
|
pg_and_generic().one_statement_parses_to(sql, "");
|
||||||
println!("{ast:#?}");
|
|
||||||
//assert_eq!(sql, ast.to_string());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -3304,98 +3302,16 @@ fn parse_create_function() {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let sql = "CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL RESTRICTED RETURN a + b";
|
|
||||||
assert_eq!(
|
|
||||||
pg_and_generic().verified_stmt(sql),
|
|
||||||
Statement::CreateFunction {
|
|
||||||
or_replace: true,
|
|
||||||
temporary: false,
|
|
||||||
name: ObjectName(vec![Ident::new("add")]),
|
|
||||||
args: Some(vec![
|
|
||||||
OperateFunctionArg::with_name("a", DataType::Integer(None)),
|
|
||||||
OperateFunctionArg {
|
|
||||||
mode: Some(ArgMode::In),
|
|
||||||
name: Some("b".into()),
|
|
||||||
data_type: DataType::Integer(None),
|
|
||||||
default_expr: Some(Expr::Value(Value::Number("1".parse().unwrap(), false))),
|
|
||||||
}
|
|
||||||
]),
|
|
||||||
return_type: Some(DataType::Integer(None)),
|
|
||||||
params: CreateFunctionBody {
|
|
||||||
language: Some("SQL".into()),
|
|
||||||
behavior: Some(FunctionBehavior::Immutable),
|
|
||||||
called_on_null: Some(FunctionCalledOnNull::ReturnsNullOnNullInput),
|
|
||||||
parallel: Some(FunctionParallel::Restricted),
|
|
||||||
return_: Some(Expr::BinaryOp {
|
|
||||||
left: Box::new(Expr::Identifier("a".into())),
|
|
||||||
op: BinaryOperator::Plus,
|
|
||||||
right: Box::new(Expr::Identifier("b".into())),
|
|
||||||
}),
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
let sql = "CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL STABLE CALLED ON NULL INPUT PARALLEL UNSAFE RETURN a + b";
|
|
||||||
assert_eq!(
|
|
||||||
pg_and_generic().verified_stmt(sql),
|
|
||||||
Statement::CreateFunction {
|
|
||||||
or_replace: true,
|
|
||||||
temporary: false,
|
|
||||||
name: ObjectName(vec![Ident::new("add")]),
|
|
||||||
args: Some(vec![
|
|
||||||
OperateFunctionArg::with_name("a", DataType::Integer(None)),
|
|
||||||
OperateFunctionArg {
|
|
||||||
mode: Some(ArgMode::In),
|
|
||||||
name: Some("b".into()),
|
|
||||||
data_type: DataType::Integer(None),
|
|
||||||
default_expr: Some(Expr::Value(Value::Number("1".parse().unwrap(), false))),
|
|
||||||
}
|
|
||||||
]),
|
|
||||||
return_type: Some(DataType::Integer(None)),
|
|
||||||
params: CreateFunctionBody {
|
|
||||||
language: Some("SQL".into()),
|
|
||||||
behavior: Some(FunctionBehavior::Stable),
|
|
||||||
called_on_null: Some(FunctionCalledOnNull::CalledOnNullInput),
|
|
||||||
parallel: Some(FunctionParallel::Unsafe),
|
|
||||||
return_: Some(Expr::BinaryOp {
|
|
||||||
left: Box::new(Expr::Identifier("a".into())),
|
|
||||||
op: BinaryOperator::Plus,
|
|
||||||
right: Box::new(Expr::Identifier("b".into())),
|
|
||||||
}),
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
let sql = r#"CREATE OR REPLACE FUNCTION increment(i INTEGER) RETURNS INTEGER LANGUAGE plpgsql AS $$ BEGIN RETURN i + 1; END; $$"#;
|
|
||||||
assert_eq!(
|
|
||||||
pg().verified_stmt(sql),
|
|
||||||
Statement::CreateFunction {
|
|
||||||
or_replace: true,
|
|
||||||
temporary: false,
|
|
||||||
name: ObjectName(vec![Ident::new("increment")]),
|
|
||||||
args: Some(vec![OperateFunctionArg::with_name(
|
|
||||||
"i",
|
|
||||||
DataType::Integer(None)
|
|
||||||
)]),
|
|
||||||
return_type: Some(DataType::Integer(None)),
|
|
||||||
params: CreateFunctionBody {
|
|
||||||
language: Some("plpgsql".into()),
|
|
||||||
behavior: None,
|
|
||||||
called_on_null: None,
|
|
||||||
parallel: None,
|
|
||||||
return_: None,
|
|
||||||
as_: Some(FunctionDefinition::DoubleDollarDef(
|
|
||||||
" BEGIN RETURN i + 1; END; ".into()
|
|
||||||
)),
|
|
||||||
using: None
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_create_function_detailed() {
|
||||||
|
pg_and_generic().verified_stmt("CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL IMMUTABLE PARALLEL RESTRICTED RETURN a + b");
|
||||||
|
pg_and_generic().verified_stmt("CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL RESTRICTED RETURN a + b");
|
||||||
|
pg_and_generic().verified_stmt("CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL STABLE PARALLEL UNSAFE RETURN a + b");
|
||||||
|
pg_and_generic().verified_stmt("CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL STABLE CALLED ON NULL INPUT PARALLEL UNSAFE RETURN a + b");
|
||||||
|
pg_and_generic().verified_stmt(r#"CREATE OR REPLACE FUNCTION increment(i INTEGER) RETURNS INTEGER LANGUAGE plpgsql AS $$ BEGIN RETURN i + 1; END; $$"#);
|
||||||
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_incorrect_create_function_parallel() {
|
fn parse_incorrect_create_function_parallel() {
|
||||||
let sql = "CREATE FUNCTION add(INTEGER, INTEGER) RETURNS INTEGER LANGUAGE SQL PARALLEL BLAH AS 'select $1 + $2;'";
|
let sql = "CREATE FUNCTION add(INTEGER, INTEGER) RETURNS INTEGER LANGUAGE SQL PARALLEL BLAH AS 'select $1 + $2;'";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue