Skip to content

Commit e807a73

Browse files
authored
chore: tweak txn syntax (#14960)
1 parent 42b5133 commit e807a73

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

src/query/ast/src/parser/statement.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1986,7 +1986,7 @@ pub fn statement_body(i: Input) -> IResult<Statement> {
19861986
},
19871987
);
19881988

1989-
let begin = value(Statement::Begin, rule! { BEGIN });
1989+
let begin = value(Statement::Begin, rule! { BEGIN ~ (TRANSACTION)? });
19901990
let commit = value(Statement::Commit, rule! { COMMIT });
19911991
let abort = value(Statement::Abort, rule! { ABORT | ROLLBACK });
19921992

src/query/ast/src/parser/token.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,8 @@ pub enum TokenKind {
12131213
UNTIL,
12141214
#[token("BEGIN", ignore(ascii_case))]
12151215
BEGIN,
1216+
#[token("TRANSACTION", ignore(ascii_case))]
1217+
TRANSACTION,
12161218
#[token("COMMIT", ignore(ascii_case))]
12171219
COMMIT,
12181220
#[token("ABORT", ignore(ascii_case))]
@@ -1541,6 +1543,7 @@ impl TokenKind {
15411543
// | TokenKind::TABLESAMPLE
15421544
| TokenKind::THEN
15431545
| TokenKind::TRAILING
1546+
| TokenKind::TRANSACTION
15441547
| TokenKind::TRUE
15451548
// | TokenKind::UNIQUE
15461549
//| TokenKind::USER

tests/sqllogictests/suites/base/14_transaction/14_0003_merge_into.test

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,80 @@ SELECT employee_id, salary FROM salaries order by employee_id;
6969
4 55000.00
7070

7171

72+
statement ok
73+
drop database test_txn_merge_into;
74+
75+
76+
statement ok
77+
create or replace database test_txn_merge_into;
78+
79+
statement ok
80+
use test_txn_merge_into;
81+
82+
statement ok
83+
set enable_experimental_merge_into = 1;
84+
85+
statement ok
86+
CREATE TABLE employees (
87+
employee_id INT,
88+
employee_name VARCHAR(255),
89+
department VARCHAR(255)
90+
);
91+
92+
statement ok
93+
CREATE TABLE salaries (
94+
employee_id INT,
95+
salary DECIMAL(10, 2)
96+
);
97+
98+
statement ok
99+
BEGIN TRANSACTION;
100+
101+
statement ok
102+
INSERT INTO employees VALUES
103+
(1, 'Alice', 'HR'),
104+
(2, 'Bob', 'IT'),
105+
(3, 'Charlie', 'Finance'),
106+
(4, 'David', 'HR');
107+
108+
statement ok
109+
INSERT INTO salaries VALUES
110+
(1, 50000.00),
111+
(2, 60000.00);
112+
113+
statement ok
114+
MERGE INTO salaries
115+
USING (SELECT * FROM employees) AS employees
116+
ON salaries.employee_id = employees.employee_id
117+
WHEN MATCHED AND employees.department = 'HR' THEN
118+
UPDATE SET
119+
salaries.salary = salaries.salary + 1000.00
120+
WHEN MATCHED THEN
121+
UPDATE SET
122+
salaries.salary = salaries.salary + 500.00
123+
WHEN NOT MATCHED THEN
124+
INSERT (employee_id, salary)
125+
VALUES (employees.employee_id, 55000.00);
126+
127+
query IF
128+
SELECT employee_id, salary FROM salaries order by employee_id;
129+
----
130+
1 51000.00
131+
2 60500.00
132+
3 55000.00
133+
4 55000.00
134+
135+
statement ok
136+
COMMIT;
137+
138+
query IF
139+
SELECT employee_id, salary FROM salaries order by employee_id;
140+
----
141+
1 51000.00
142+
2 60500.00
143+
3 55000.00
144+
4 55000.00
145+
146+
72147
statement ok
73148
drop database test_txn_merge_into;

0 commit comments

Comments
 (0)