mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-08 01:15:00 +00:00
Support postgres CREATE FUNCTION
(#722)
* support basic pg CREATE FUNCTION Signed-off-by: Runji Wang <wangrunji0408@163.com> * support function argument Signed-off-by: Runji Wang <wangrunji0408@163.com> * fix display and use verify in test Signed-off-by: Runji Wang <wangrunji0408@163.com> * support OR REPLACE Signed-off-by: Runji Wang <wangrunji0408@163.com> * fix compile error in bigdecimal Signed-off-by: Runji Wang <wangrunji0408@163.com> * unify all `CreateFunctionBody` to a structure Signed-off-by: Runji Wang <wangrunji0408@163.com> Signed-off-by: Runji Wang <wangrunji0408@163.com>
This commit is contained in:
parent
f621142f89
commit
5b53df97c4
5 changed files with 331 additions and 29 deletions
|
@ -2234,3 +2234,57 @@ fn parse_similar_to() {
|
|||
chk(false);
|
||||
chk(true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_create_function() {
|
||||
let sql = "CREATE FUNCTION add(INTEGER, INTEGER) RETURNS INTEGER LANGUAGE SQL IMMUTABLE AS 'select $1 + $2;'";
|
||||
assert_eq!(
|
||||
pg().verified_stmt(sql),
|
||||
Statement::CreateFunction {
|
||||
or_replace: false,
|
||||
temporary: false,
|
||||
name: ObjectName(vec![Ident::new("add")]),
|
||||
args: Some(vec![
|
||||
CreateFunctionArg::unnamed(DataType::Integer(None)),
|
||||
CreateFunctionArg::unnamed(DataType::Integer(None)),
|
||||
]),
|
||||
return_type: Some(DataType::Integer(None)),
|
||||
params: CreateFunctionBody {
|
||||
language: Some("SQL".into()),
|
||||
behavior: Some(FunctionBehavior::Immutable),
|
||||
as_: Some("select $1 + $2;".into()),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
let sql = "CREATE OR REPLACE FUNCTION add(a INTEGER, IN b INTEGER = 1) RETURNS INTEGER LANGUAGE SQL IMMUTABLE RETURN a + b";
|
||||
assert_eq!(
|
||||
pg().verified_stmt(sql),
|
||||
Statement::CreateFunction {
|
||||
or_replace: true,
|
||||
temporary: false,
|
||||
name: ObjectName(vec![Ident::new("add")]),
|
||||
args: Some(vec![
|
||||
CreateFunctionArg::with_name("a", DataType::Integer(None)),
|
||||
CreateFunctionArg {
|
||||
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),
|
||||
return_: Some(Expr::BinaryOp {
|
||||
left: Box::new(Expr::Identifier("a".into())),
|
||||
op: BinaryOperator::Plus,
|
||||
right: Box::new(Expr::Identifier("b".into())),
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue