Skip to content

Commit ddb9475

Browse files
authored
fix: split merge into (#550)
1 parent 85baf89 commit ddb9475

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

crates/pgt_statement_splitter/src/lib.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,32 @@ values ('insert', new.id, now());",
537537
]);
538538
}
539539

540+
#[test]
541+
fn merge_into() {
542+
Tester::from(
543+
"MERGE INTO course_permissions AS cp
544+
USING (SELECT 1 AS user_id, 2 AS course_id, 'Owner'::enum_course_role AS course_role) AS data
545+
ON (cp.course_id = data.course_id AND cp.user_id = data.user_id)
546+
WHEN MATCHED THEN UPDATE SET course_role = data.course_role
547+
WHEN NOT MATCHED THEN
548+
INSERT
549+
(user_id, course_id, course_role)
550+
VALUES
551+
(data.user_id, data.course_id, data.course_role);",
552+
)
553+
.expect_statements(vec![
554+
"MERGE INTO course_permissions AS cp
555+
USING (SELECT 1 AS user_id, 2 AS course_id, 'Owner'::enum_course_role AS course_role) AS data
556+
ON (cp.course_id = data.course_id AND cp.user_id = data.user_id)
557+
WHEN MATCHED THEN UPDATE SET course_role = data.course_role
558+
WHEN NOT MATCHED THEN
559+
INSERT
560+
(user_id, course_id, course_role)
561+
VALUES
562+
(data.user_id, data.course_id, data.course_role);",
563+
]);
564+
}
565+
540566
#[test]
541567
fn commas_and_newlines() {
542568
Tester::from(

crates/pgt_statement_splitter/src/splitter/common.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ pub(crate) fn unknown(p: &mut Splitter, exclude: &[SyntaxKind]) {
263263
SyntaxKind::DO_KW,
264264
// FOR NO KEY UPDATE
265265
SyntaxKind::KEY_KW,
266+
// WHEN MATCHED THEN
267+
SyntaxKind::THEN_KW,
266268
]
267269
.iter()
268270
.all(|x| Some(x) != prev.as_ref())

0 commit comments

Comments
 (0)