mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-08 01:15:00 +00:00
Add CREATE TRIGGER
support for SQL Server (#1810)
This commit is contained in:
parent
728645fb31
commit
a497358c3a
7 changed files with 255 additions and 41 deletions
|
@ -273,6 +273,16 @@ fn parse_create_function() {
|
|||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(create_or_alter_function);
|
||||
|
||||
let create_function_with_return_expression = "\
|
||||
CREATE FUNCTION some_scalar_udf(@foo INT, @bar VARCHAR(256)) \
|
||||
RETURNS INT \
|
||||
AS \
|
||||
BEGIN \
|
||||
RETURN CONVERT(INT, 1) + 2; \
|
||||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(create_function_with_return_expression);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2199,6 +2209,101 @@ fn parse_mssql_merge_with_output() {
|
|||
ms_and_generic().verified_stmt(stmt);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_create_trigger() {
|
||||
let create_trigger = "\
|
||||
CREATE OR ALTER TRIGGER reminder1 \
|
||||
ON Sales.Customer \
|
||||
AFTER INSERT, UPDATE \
|
||||
AS RAISERROR('Notify Customer Relations', 16, 10);\
|
||||
";
|
||||
let create_stmt = ms().verified_stmt(create_trigger);
|
||||
assert_eq!(
|
||||
create_stmt,
|
||||
Statement::CreateTrigger {
|
||||
or_alter: true,
|
||||
or_replace: false,
|
||||
is_constraint: false,
|
||||
name: ObjectName::from(vec![Ident::new("reminder1")]),
|
||||
period: TriggerPeriod::After,
|
||||
events: vec![TriggerEvent::Insert, TriggerEvent::Update(vec![]),],
|
||||
table_name: ObjectName::from(vec![Ident::new("Sales"), Ident::new("Customer")]),
|
||||
referenced_table_name: None,
|
||||
referencing: vec![],
|
||||
trigger_object: TriggerObject::Statement,
|
||||
include_each: false,
|
||||
condition: None,
|
||||
exec_body: None,
|
||||
statements: Some(ConditionalStatements::Sequence {
|
||||
statements: vec![Statement::RaisError {
|
||||
message: Box::new(Expr::Value(
|
||||
(Value::SingleQuotedString("Notify Customer Relations".to_string()))
|
||||
.with_empty_span()
|
||||
)),
|
||||
severity: Box::new(Expr::Value(
|
||||
(Value::Number("16".parse().unwrap(), false)).with_empty_span()
|
||||
)),
|
||||
state: Box::new(Expr::Value(
|
||||
(Value::Number("10".parse().unwrap(), false)).with_empty_span()
|
||||
)),
|
||||
arguments: vec![],
|
||||
options: vec![],
|
||||
}],
|
||||
}),
|
||||
characteristics: None,
|
||||
}
|
||||
);
|
||||
|
||||
let multi_statement_as_trigger = "\
|
||||
CREATE TRIGGER some_trigger ON some_table FOR INSERT \
|
||||
AS \
|
||||
DECLARE @var INT; \
|
||||
RAISERROR('Trigger fired', 10, 1);\
|
||||
";
|
||||
let _ = ms().verified_stmt(multi_statement_as_trigger);
|
||||
|
||||
let multi_statement_trigger = "\
|
||||
CREATE TRIGGER some_trigger ON some_table FOR INSERT \
|
||||
AS \
|
||||
BEGIN \
|
||||
DECLARE @var INT; \
|
||||
RAISERROR('Trigger fired', 10, 1); \
|
||||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(multi_statement_trigger);
|
||||
|
||||
let create_trigger_with_return = "\
|
||||
CREATE TRIGGER some_trigger ON some_table FOR INSERT \
|
||||
AS \
|
||||
BEGIN \
|
||||
RETURN; \
|
||||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(create_trigger_with_return);
|
||||
|
||||
let create_trigger_with_return = "\
|
||||
CREATE TRIGGER some_trigger ON some_table FOR INSERT \
|
||||
AS \
|
||||
BEGIN \
|
||||
RETURN; \
|
||||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(create_trigger_with_return);
|
||||
|
||||
let create_trigger_with_conditional = "\
|
||||
CREATE TRIGGER some_trigger ON some_table FOR INSERT \
|
||||
AS \
|
||||
BEGIN \
|
||||
IF 1 = 2 \
|
||||
BEGIN \
|
||||
RAISERROR('Trigger fired', 10, 1); \
|
||||
END; \
|
||||
RETURN; \
|
||||
END\
|
||||
";
|
||||
let _ = ms().verified_stmt(create_trigger_with_conditional);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_drop_trigger() {
|
||||
let sql_drop_trigger = "DROP TRIGGER emp_stamp;";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue