mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 14:28:22 +00:00
Support basic CREATE PROCEDURE of MSSQL (#900)
Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
This commit is contained in:
parent
75f18ecfda
commit
f72b5a5d9b
5 changed files with 185 additions and 4 deletions
|
@ -55,6 +55,88 @@ fn parse_mssql_delimited_identifiers() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_create_procedure() {
|
||||
let sql = "CREATE OR ALTER PROCEDURE test (@foo INT, @bar VARCHAR(256)) AS BEGIN SELECT 1 END";
|
||||
|
||||
#[cfg(feature = "bigdecimal")]
|
||||
let one = Value::Number(bigdecimal::BigDecimal::from(1), false);
|
||||
|
||||
#[cfg(not(feature = "bigdecimal"))]
|
||||
let one = Value::Number("1".to_string(), false);
|
||||
|
||||
assert_eq!(
|
||||
ms().verified_stmt(sql),
|
||||
Statement::CreateProcedure {
|
||||
or_alter: true,
|
||||
body: vec![Statement::Query(Box::new(Query {
|
||||
with: None,
|
||||
limit: None,
|
||||
offset: None,
|
||||
fetch: None,
|
||||
locks: vec![],
|
||||
order_by: vec![],
|
||||
body: Box::new(SetExpr::Select(Box::new(Select {
|
||||
distinct: None,
|
||||
top: None,
|
||||
projection: vec![SelectItem::UnnamedExpr(Expr::Value(one))],
|
||||
into: None,
|
||||
from: vec![],
|
||||
lateral_views: vec![],
|
||||
selection: None,
|
||||
group_by: vec![],
|
||||
cluster_by: vec![],
|
||||
distribute_by: vec![],
|
||||
sort_by: vec![],
|
||||
having: None,
|
||||
named_window: vec![],
|
||||
qualify: None
|
||||
})))
|
||||
}))],
|
||||
params: Some(vec![
|
||||
ProcedureParam {
|
||||
name: Ident {
|
||||
value: "@foo".into(),
|
||||
quote_style: None
|
||||
},
|
||||
data_type: DataType::Int(None)
|
||||
},
|
||||
ProcedureParam {
|
||||
name: Ident {
|
||||
value: "@bar".into(),
|
||||
quote_style: None
|
||||
},
|
||||
data_type: DataType::Varchar(Some(CharacterLength {
|
||||
length: 256,
|
||||
unit: None
|
||||
}))
|
||||
}
|
||||
]),
|
||||
name: ObjectName(vec![Ident {
|
||||
value: "test".into(),
|
||||
quote_style: None
|
||||
}])
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_mssql_create_procedure() {
|
||||
let _ = ms_and_generic().verified_stmt("CREATE OR ALTER PROCEDURE foo AS BEGIN SELECT 1 END");
|
||||
let _ = ms_and_generic().verified_stmt("CREATE PROCEDURE foo AS BEGIN SELECT 1 END");
|
||||
let _ = ms().verified_stmt(
|
||||
"CREATE PROCEDURE foo AS BEGIN SELECT [myColumn] FROM [myschema].[mytable] END",
|
||||
);
|
||||
let _ = ms_and_generic().verified_stmt(
|
||||
"CREATE PROCEDURE foo (@CustomerName NVARCHAR(50)) AS BEGIN SELECT * FROM DEV END",
|
||||
);
|
||||
let _ = ms().verified_stmt("CREATE PROCEDURE [foo] AS BEGIN UPDATE bar SET col = 'test' END");
|
||||
// Test a statement with END in it
|
||||
let _ = ms().verified_stmt("CREATE PROCEDURE [foo] AS BEGIN SELECT [foo], CASE WHEN [foo] IS NULL THEN 'empty' ELSE 'notempty' END AS [foo] END");
|
||||
// Multiple statements
|
||||
let _ = ms().verified_stmt("CREATE PROCEDURE [foo] AS BEGIN UPDATE bar SET col = 'test'; SELECT [foo] FROM BAR WHERE [FOO] > 10 END");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_mssql_apply_join() {
|
||||
let _ = ms_and_generic().verified_only_select(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue