mirror of https://github.com/AMT-Cheif/drift.git
97 lines
2.1 KiB
Dart
97 lines
2.1 KiB
Dart
import 'package:sqlparser/sqlparser.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import 'utils.dart';
|
|
|
|
final _block = Block([
|
|
UpdateStatement(table: TableReference('tbl'), set: [
|
|
SetComponent(
|
|
column: Reference(columnName: 'foo'),
|
|
expression: Reference(columnName: 'bar'),
|
|
),
|
|
]),
|
|
SelectStatement(
|
|
columns: [StarResultColumn()],
|
|
from: TableReference('tbl'),
|
|
),
|
|
]);
|
|
|
|
void main() {
|
|
test('parses create trigger statements', () {
|
|
const sql = '''
|
|
CREATE TRIGGER IF NOT EXISTS my_trigger
|
|
AFTER DELETE ON tbl
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE tbl SET foo = bar;
|
|
SELECT * FROM tbl;
|
|
END;
|
|
''';
|
|
|
|
testStatement(
|
|
sql,
|
|
CreateTriggerStatement(
|
|
ifNotExists: true,
|
|
triggerName: 'my_trigger',
|
|
mode: TriggerMode.after,
|
|
target: DeleteTarget(),
|
|
onTable: TableReference('tbl'),
|
|
action: _block,
|
|
),
|
|
);
|
|
});
|
|
|
|
test('with INSTEAD OF mode and UPDATE', () {
|
|
const sql = '''
|
|
CREATE TRIGGER my_trigger
|
|
INSTEAD OF UPDATE OF foo, bar ON tbl
|
|
BEGIN
|
|
UPDATE tbl SET foo = bar;
|
|
SELECT * FROM tbl;
|
|
END;
|
|
''';
|
|
|
|
testStatement(
|
|
sql,
|
|
CreateTriggerStatement(
|
|
triggerName: 'my_trigger',
|
|
mode: TriggerMode.insteadOf,
|
|
target: UpdateTarget([
|
|
Reference(columnName: 'foo'),
|
|
Reference(columnName: 'bar'),
|
|
]),
|
|
onTable: TableReference('tbl'),
|
|
action: _block,
|
|
),
|
|
);
|
|
});
|
|
|
|
test('with BEFORE, INSERT and WHEN clause', () {
|
|
const sql = '''
|
|
CREATE TRIGGER my_trigger
|
|
BEFORE INSERT ON tbl
|
|
WHEN new.foo IS NULL
|
|
BEGIN
|
|
UPDATE tbl SET foo = bar;
|
|
SELECT * FROM tbl;
|
|
END;
|
|
''';
|
|
|
|
testStatement(
|
|
sql,
|
|
CreateTriggerStatement(
|
|
triggerName: 'my_trigger',
|
|
mode: TriggerMode.before,
|
|
target: InsertTarget(),
|
|
onTable: TableReference('tbl'),
|
|
when: IsExpression(
|
|
false,
|
|
Reference(entityName: 'new', columnName: 'foo'),
|
|
NullLiteral(token(TokenType.$null)),
|
|
),
|
|
action: _block,
|
|
),
|
|
);
|
|
});
|
|
}
|