1import { splitSqlStatements } from "@/SQL/SqlFile";
2import { describe, expect, test } from "alchemy-test";
3
4describe("SqlFile", { tags: ["unit", "local"] }, () => {
5 describe("splitSqlStatements", () => {
6 test("splits statements separated by breakpoints on their own line", () => {
7 const sql = [
8 "CREATE TABLE `users` (\n\t`id` int NOT NULL\n);",
9 "--> statement-breakpoint",
10 "CREATE TABLE `sessions` (\n\t`id` int NOT NULL\n);",
11 ].join("\n");
12 expect(splitSqlStatements(sql)).toEqual([
13 "CREATE TABLE `users` (\n\t`id` int NOT NULL\n);",
14 "CREATE TABLE `sessions` (\n\t`id` int NOT NULL\n);",
15 ]);
16 });
17
18 // drizzle-kit puts the marker on the same line after single-line
19 // statements (`...;--> statement-breakpoint`). A newline-anchored split
20 // misses those, and the leftover `-->` makes Vitess bail with
21 // "syntax error at position 2".
22 test("splits breakpoints appended on the same line as the statement", () => {
23 const sql = [
24 "CREATE TABLE `users` (\n\t`id` int NOT NULL\n);",
25 "--> statement-breakpoint",
26 "CREATE INDEX `users_email` ON `users` (`email`);--> statement-breakpoint",
27 "CREATE INDEX `users_name` ON `users` (`name`);",
28 ].join("\n");
29 expect(splitSqlStatements(sql)).toEqual([
30 "CREATE TABLE `users` (\n\t`id` int NOT NULL\n);",
31 "CREATE INDEX `users_email` ON `users` (`email`);",
32 "CREATE INDEX `users_name` ON `users` (`name`);",
33 ]);
34 });
35
36 test("splits CRLF-separated breakpoints", () => {
37 const sql =
38 "CREATE TABLE `users` (`id` int);\r\n--> statement-breakpoint\r\nCREATE TABLE `sessions` (`id` int);";
39 expect(splitSqlStatements(sql)).toEqual([
40 "CREATE TABLE `users` (`id` int);",
41 "CREATE TABLE `sessions` (`id` int);",
42 ]);
43 });
44
45 test("drops empty segments and keeps sql without markers intact", () => {
46 expect(splitSqlStatements("--> statement-breakpoint\n")).toEqual([]);
47 expect(splitSqlStatements("SELECT 1;")).toEqual(["SELECT 1;"]);
48 });
49 });
50});