| 1 | import { splitSqlStatements } from "@/SQL/SqlFile"; |
| 2 | import { describe, expect, test } from "alchemy-test"; |
| 3 | |
| 4 | describe("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 | }); |