@@ -76,7 +76,7 @@ describe('splitSqlQueries', () => {
76
76
it ( 'Should respect -- within a string' , ( ) => {
77
77
const sqlFileContent = `
78
78
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));
79
- INSERT INTO users (id, name) VALUES (1, 'John -- This is a comment');
79
+ INSERT INTO users (id, name) VALUES (1, 'John -- This is a comment');
80
80
`
81
81
const queries = splitSqlQueries ( sqlFileContent )
82
82
expect ( queries ) . toHaveLength ( 2 )
@@ -86,7 +86,7 @@ describe('splitSqlQueries', () => {
86
86
it ( 'Should respect /* */ within a string' , ( ) => {
87
87
const sqlFileContent = `
88
88
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));
89
- INSERT INTO users (id, name) VALUES (1, 'John /* This is a comment */');
89
+ INSERT INTO users (id, name) VALUES (1, 'John /* This is a comment */');
90
90
`
91
91
const queries = splitSqlQueries ( sqlFileContent )
92
92
expect ( queries ) . toHaveLength ( 2 )
@@ -102,16 +102,16 @@ describe('splitSqlQueries', () => {
102
102
103
103
-- 2. Empty Results
104
104
SELECT * FROM users WHERE id = -1;
105
- SELECT orders.id, users.name
106
- FROM orders
107
- LEFT JOIN users ON orders.user_id = users.id
105
+ SELECT orders.id, users.name
106
+ FROM orders
107
+ LEFT JOIN users ON orders.user_id = users.id
108
108
WHERE users.id IS NULL;
109
109
110
110
-- 3. Duplicate Handling
111
111
INSERT INTO products (id, name) VALUES (1, 'Widget'), (1, 'Widget');
112
- SELECT name, COUNT(*) AS cnt
113
- FROM products
114
- GROUP BY name
112
+ SELECT name, COUNT(*) AS cnt
113
+ FROM products
114
+ GROUP BY name
115
115
HAVING cnt > 1;
116
116
117
117
-- 4. Aggregation Edge Cases
@@ -152,8 +152,8 @@ describe('splitSqlQueries', () => {
152
152
SELECT * FROM events WHERE event_date BETWEEN '2024-01-01' AND '2024-12-31';
153
153
154
154
-- 13. Self-JOIN
155
- SELECT a.id AS parent_id, b.id AS child_id
156
- FROM users a
155
+ SELECT a.id AS parent_id, b.id AS child_id
156
+ FROM users a
157
157
JOIN users b ON a.id = b.parent_id;
158
158
159
159
-- 14. Triggers or Constraints
@@ -168,14 +168,14 @@ describe('splitSqlQueries', () => {
168
168
'SELECT * FROM users WHERE email IS NULL;' ,
169
169
'SELECT * FROM users WHERE email = \'\';' ,
170
170
'SELECT * FROM users WHERE id = -1;' ,
171
- 'SELECT orders.id, users.name \n'
172
- + ' FROM orders \n'
173
- + ' LEFT JOIN users ON orders.user_id = users.id \n'
171
+ 'SELECT orders.id, users.name\n'
172
+ + ' FROM orders\n'
173
+ + ' LEFT JOIN users ON orders.user_id = users.id\n'
174
174
+ ' WHERE users.id IS NULL;' ,
175
175
'INSERT INTO products (id, name) VALUES (1, \'Widget\'), (1, \'Widget\');' ,
176
- 'SELECT name, COUNT(*) AS cnt \n'
177
- + ' FROM products \n'
178
- + ' GROUP BY name \n'
176
+ 'SELECT name, COUNT(*) AS cnt\n'
177
+ + ' FROM products\n'
178
+ + ' GROUP BY name\n'
179
179
+ ' HAVING cnt > 1;' ,
180
180
'SELECT AVG(price), SUM(price) FROM orders WHERE 1 = 0;' ,
181
181
'SELECT user_id, COUNT(*) FROM orders WHERE user_id = 1 GROUP BY user_id;' ,
@@ -196,11 +196,33 @@ describe('splitSqlQueries', () => {
196
196
'SELECT * FROM orders FORCE INDEX (order_date_index) WHERE order_date = \'2024-01-01\';' ,
197
197
'INSERT INTO events (id, event_date) VALUES (1, \'2024-02-29\'), (2, \'0000-00-00\'), (3, \'9999-12-31\');' ,
198
198
'SELECT * FROM events WHERE event_date BETWEEN \'2024-01-01\' AND \'2024-12-31\';' ,
199
- 'SELECT a.id AS parent_id, b.id AS child_id \n'
200
- + ' FROM users a \n'
199
+ 'SELECT a.id AS parent_id, b.id AS child_id\n'
200
+ + ' FROM users a\n'
201
201
+ ' JOIN users b ON a.id = b.parent_id;' ,
202
202
'INSERT INTO users (id, name, email) VALUES (NULL, \'Test\', \'[email protected] \');' ,
203
203
'INSERT INTO orders (id, status) VALUES (NULL, NULL);'
204
204
] )
205
205
} )
206
+
207
+ it ( 'Should keep trigger sql queries as one query' , ( ) => {
208
+ const sqlFileContent = `
209
+ -- Create a table. And an external content fts5 table to index it.
210
+ CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
211
+ CREATE VIRTUAL TABLE fts_idx USING fts5(b, c, content='t1', content_rowid='a');
212
+
213
+ -- Triggers to keep the FTS index up to date.
214
+ CREATE TRIGGER t1_ai AFTER INSERT ON t1 BEGIN
215
+ INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
216
+ END;
217
+ CREATE TRIGGER t1_ad AFTER DELETE ON t1 BEGIN
218
+ INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
219
+ END;
220
+ CREATE TRIGGER t1_au AFTER UPDATE ON t1 BEGIN
221
+ INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
222
+ INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
223
+ END;
224
+ `
225
+ const queries = splitSqlQueries ( sqlFileContent )
226
+ expect ( queries ) . toHaveLength ( 5 )
227
+ } )
206
228
} )
0 commit comments