@anthonyalayo/drizzle-kit 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/.gitignore +25 -0
  2. package/README.md +79 -0
  3. package/build.dev.ts +51 -0
  4. package/build.ts +112 -0
  5. package/imports-checker/analyze.ts +78 -0
  6. package/imports-checker/checker.ts +296 -0
  7. package/imports-checker/grammar/grammar.ohm +121 -0
  8. package/imports-checker/grammar/grammar.ohm-bundle.d.ts +164 -0
  9. package/imports-checker/grammar/grammar.ohm-bundle.js +753 -0
  10. package/imports-checker/index.ts +48 -0
  11. package/package.json +142 -0
  12. package/patches/difflib@0.2.4.patch +31 -0
  13. package/src/@types/utils.ts +58 -0
  14. package/src/api.ts +504 -0
  15. package/src/cli/commands/_es5.ts +2 -0
  16. package/src/cli/commands/check.ts +52 -0
  17. package/src/cli/commands/drop.ts +60 -0
  18. package/src/cli/commands/introspect.ts +772 -0
  19. package/src/cli/commands/libSqlPushUtils.ts +355 -0
  20. package/src/cli/commands/migrate.ts +1526 -0
  21. package/src/cli/commands/mysqlIntrospect.ts +53 -0
  22. package/src/cli/commands/mysqlPushUtils.ts +352 -0
  23. package/src/cli/commands/mysqlUp.ts +102 -0
  24. package/src/cli/commands/pgIntrospect.ts +55 -0
  25. package/src/cli/commands/pgPushUtils.ts +269 -0
  26. package/src/cli/commands/pgUp.ts +217 -0
  27. package/src/cli/commands/push.ts +637 -0
  28. package/src/cli/commands/singlestoreIntrospect.ts +53 -0
  29. package/src/cli/commands/singlestorePushUtils.ts +456 -0
  30. package/src/cli/commands/singlestoreUp.ts +1 -0
  31. package/src/cli/commands/sqliteIntrospect.ts +96 -0
  32. package/src/cli/commands/sqlitePushUtils.ts +322 -0
  33. package/src/cli/commands/sqliteUp.ts +52 -0
  34. package/src/cli/commands/utils.ts +858 -0
  35. package/src/cli/connections.ts +914 -0
  36. package/src/cli/index.ts +48 -0
  37. package/src/cli/schema.ts +794 -0
  38. package/src/cli/selector-ui.ts +38 -0
  39. package/src/cli/utils.ts +112 -0
  40. package/src/cli/validations/cli.ts +79 -0
  41. package/src/cli/validations/common.ts +193 -0
  42. package/src/cli/validations/libsql.ts +27 -0
  43. package/src/cli/validations/mysql.ts +61 -0
  44. package/src/cli/validations/outputs.ts +91 -0
  45. package/src/cli/validations/postgres.ts +83 -0
  46. package/src/cli/validations/singlestore.ts +61 -0
  47. package/src/cli/validations/sqlite.ts +104 -0
  48. package/src/cli/validations/studio.ts +24 -0
  49. package/src/cli/views.ts +658 -0
  50. package/src/extensions/getTablesFilterByExtensions.ts +16 -0
  51. package/src/extensions/vector.ts +10 -0
  52. package/src/global.ts +61 -0
  53. package/src/index.ts +326 -0
  54. package/src/introspect-mysql.ts +1030 -0
  55. package/src/introspect-pg.ts +1435 -0
  56. package/src/introspect-singlestore.ts +913 -0
  57. package/src/introspect-sqlite.ts +533 -0
  58. package/src/jsonDiffer.js +882 -0
  59. package/src/jsonStatements.ts +3590 -0
  60. package/src/loader.mjs +57 -0
  61. package/src/migrationPreparator.ts +217 -0
  62. package/src/schemaValidator.ts +23 -0
  63. package/src/serializer/index.ts +142 -0
  64. package/src/serializer/mysqlImports.ts +38 -0
  65. package/src/serializer/mysqlSchema.ts +423 -0
  66. package/src/serializer/mysqlSerializer.ts +999 -0
  67. package/src/serializer/pgImports.ts +106 -0
  68. package/src/serializer/pgSchema.ts +937 -0
  69. package/src/serializer/pgSerializer.ts +2223 -0
  70. package/src/serializer/singlestoreImports.ts +38 -0
  71. package/src/serializer/singlestoreSchema.ts +257 -0
  72. package/src/serializer/singlestoreSerializer.ts +767 -0
  73. package/src/serializer/sqliteImports.ts +41 -0
  74. package/src/serializer/sqliteSchema.ts +352 -0
  75. package/src/serializer/sqliteSerializer.ts +931 -0
  76. package/src/serializer/studio.ts +694 -0
  77. package/src/serializer/utils.ts +45 -0
  78. package/src/simulator.ts +157 -0
  79. package/src/snapshotsDiffer.ts +4398 -0
  80. package/src/sqlgenerator.ts +4212 -0
  81. package/src/statementCombiner.ts +597 -0
  82. package/src/utils/certs.ts +44 -0
  83. package/src/utils/words.ts +1333 -0
  84. package/src/utils.ts +370 -0
  85. package/tests/bin.test.ts +58 -0
  86. package/tests/cli/d1http.config.ts +12 -0
  87. package/tests/cli/drizzle.config.ts +9 -0
  88. package/tests/cli/durable-sqlite.config.ts +7 -0
  89. package/tests/cli/expo.config.ts +7 -0
  90. package/tests/cli/postgres.config.ts +13 -0
  91. package/tests/cli/postgres2.config.ts +17 -0
  92. package/tests/cli/schema.ts +1 -0
  93. package/tests/cli/turso.config.ts +10 -0
  94. package/tests/cli-export.test.ts +79 -0
  95. package/tests/cli-generate.test.ts +259 -0
  96. package/tests/cli-migrate.test.ts +103 -0
  97. package/tests/cli-push.test.ts +126 -0
  98. package/tests/common.ts +15 -0
  99. package/tests/indexes/common.ts +21 -0
  100. package/tests/indexes/pg.test.ts +245 -0
  101. package/tests/introspect/libsql.test.ts +35 -0
  102. package/tests/introspect/mysql.test.ts +319 -0
  103. package/tests/introspect/pg.test.ts +894 -0
  104. package/tests/introspect/singlestore.test.ts +275 -0
  105. package/tests/introspect/sqlite.test.ts +122 -0
  106. package/tests/libsql-checks.test.ts +308 -0
  107. package/tests/libsql-statements.test.ts +989 -0
  108. package/tests/libsql-views.test.ts +218 -0
  109. package/tests/migrate/libsq-schema.ts +6 -0
  110. package/tests/migrate/libsql-migrate.test.ts +58 -0
  111. package/tests/migrate/migrations/0000_little_blizzard.sql +4 -0
  112. package/tests/migrate/migrations/0001_nebulous_storm.sql +10 -0
  113. package/tests/migrate/migrations/meta/0000_snapshot.json +40 -0
  114. package/tests/migrate/migrations/meta/0001_snapshot.json +40 -0
  115. package/tests/migrate/migrations/meta/_journal.json +20 -0
  116. package/tests/mysql-checks.test.ts +291 -0
  117. package/tests/mysql-generated.test.ts +1290 -0
  118. package/tests/mysql-schemas.test.ts +156 -0
  119. package/tests/mysql-views.test.ts +553 -0
  120. package/tests/mysql.test.ts +863 -0
  121. package/tests/pg-array.test.ts +368 -0
  122. package/tests/pg-checks.test.ts +329 -0
  123. package/tests/pg-columns.test.ts +484 -0
  124. package/tests/pg-domains.test.ts +306 -0
  125. package/tests/pg-enums.test.ts +751 -0
  126. package/tests/pg-generated.test.ts +529 -0
  127. package/tests/pg-identity.test.ts +447 -0
  128. package/tests/pg-schemas.test.ts +105 -0
  129. package/tests/pg-sequences.test.ts +298 -0
  130. package/tests/pg-tables.test.ts +1021 -0
  131. package/tests/pg-views.test.ts +1929 -0
  132. package/tests/push/common.ts +58 -0
  133. package/tests/push/libsql.test.ts +1400 -0
  134. package/tests/push/mysql-push.test.ts +345 -0
  135. package/tests/push/mysql.test.ts +788 -0
  136. package/tests/push/pg.test.ts +4341 -0
  137. package/tests/push/singlestore-push.test.ts +894 -0
  138. package/tests/push/singlestore.test.ts +444 -0
  139. package/tests/push/sqlite.test.ts +1613 -0
  140. package/tests/rls/pg-policy.test.ts +1656 -0
  141. package/tests/rls/pg-role.test.ts +234 -0
  142. package/tests/schemaDiffer.ts +2852 -0
  143. package/tests/singlestore-generated.test.ts +1290 -0
  144. package/tests/singlestore-schemas.test.ts +155 -0
  145. package/tests/singlestore.test.ts +978 -0
  146. package/tests/sqlite-checks.test.ts +308 -0
  147. package/tests/sqlite-columns.test.ts +1049 -0
  148. package/tests/sqlite-generated.test.ts +1726 -0
  149. package/tests/sqlite-tables.test.ts +637 -0
  150. package/tests/sqlite-views.test.ts +218 -0
  151. package/tests/statements-combiner/libsql-statements-combiner.test.ts +1812 -0
  152. package/tests/statements-combiner/singlestore-statements-combiner.test.ts +882 -0
  153. package/tests/statements-combiner/sqlite-statements-combiner.test.ts +1211 -0
  154. package/tests/test/sqlite.test.ts +39 -0
  155. package/tests/testsinglestore.ts +29 -0
  156. package/tests/validations.test.ts +869 -0
  157. package/tests/wrap-param.test.ts +16 -0
  158. package/tsconfig.build.json +4 -0
  159. package/tsconfig.cli-types.json +9 -0
  160. package/tsconfig.json +28 -0
  161. package/vitest.config.ts +34 -0
@@ -0,0 +1,484 @@
1
+ import { integer, pgTable, primaryKey, serial, text, uuid, varchar } from 'drizzle-orm/pg-core';
2
+ import { expect, test } from 'vitest';
3
+ import { diffTestSchemas } from './schemaDiffer';
4
+
5
+ test('add columns #1', async (t) => {
6
+ const schema1 = {
7
+ users: pgTable('users', {
8
+ id: serial('id').primaryKey(),
9
+ }),
10
+ };
11
+
12
+ const schema2 = {
13
+ users: pgTable('users', {
14
+ id: serial('id').primaryKey(),
15
+ name: text('name'),
16
+ }),
17
+ };
18
+
19
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
20
+
21
+ expect(statements.length).toBe(1);
22
+ expect(statements[0]).toStrictEqual({
23
+ type: 'alter_table_add_column',
24
+ tableName: 'users',
25
+ schema: '',
26
+ column: { name: 'name', type: 'text', primaryKey: false, notNull: false },
27
+ });
28
+ });
29
+
30
+ test('add columns #2', async (t) => {
31
+ const schema1 = {
32
+ users: pgTable('users', {
33
+ id: serial('id').primaryKey(),
34
+ }),
35
+ };
36
+
37
+ const schema2 = {
38
+ users: pgTable('users', {
39
+ id: serial('id').primaryKey(),
40
+ name: text('name'),
41
+ email: text('email'),
42
+ }),
43
+ };
44
+
45
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
46
+
47
+ expect(statements.length).toBe(2);
48
+ expect(statements[0]).toStrictEqual({
49
+ type: 'alter_table_add_column',
50
+ tableName: 'users',
51
+ schema: '',
52
+ column: { name: 'name', type: 'text', primaryKey: false, notNull: false },
53
+ });
54
+ expect(statements[1]).toStrictEqual({
55
+ type: 'alter_table_add_column',
56
+ tableName: 'users',
57
+ schema: '',
58
+ column: { name: 'email', type: 'text', primaryKey: false, notNull: false },
59
+ });
60
+ });
61
+
62
+ test('alter column change name #1', async (t) => {
63
+ const schema1 = {
64
+ users: pgTable('users', {
65
+ id: serial('id').primaryKey(),
66
+ name: text('name'),
67
+ }),
68
+ };
69
+
70
+ const schema2 = {
71
+ users: pgTable('users', {
72
+ id: serial('id').primaryKey(),
73
+ name: text('name1'),
74
+ }),
75
+ };
76
+
77
+ const { statements } = await diffTestSchemas(schema1, schema2, [
78
+ 'public.users.name->public.users.name1',
79
+ ]);
80
+
81
+ expect(statements.length).toBe(1);
82
+ expect(statements[0]).toStrictEqual({
83
+ type: 'alter_table_rename_column',
84
+ tableName: 'users',
85
+ schema: '',
86
+ oldColumnName: 'name',
87
+ newColumnName: 'name1',
88
+ });
89
+ });
90
+
91
+ test('alter column change name #2', async (t) => {
92
+ const schema1 = {
93
+ users: pgTable('users', {
94
+ id: serial('id').primaryKey(),
95
+ name: text('name'),
96
+ }),
97
+ };
98
+
99
+ const schema2 = {
100
+ users: pgTable('users', {
101
+ id: serial('id').primaryKey(),
102
+ name: text('name1'),
103
+ email: text('email'),
104
+ }),
105
+ };
106
+
107
+ const { statements } = await diffTestSchemas(schema1, schema2, [
108
+ 'public.users.name->public.users.name1',
109
+ ]);
110
+
111
+ expect(statements.length).toBe(2);
112
+ expect(statements[0]).toStrictEqual({
113
+ type: 'alter_table_rename_column',
114
+ tableName: 'users',
115
+ schema: '',
116
+ oldColumnName: 'name',
117
+ newColumnName: 'name1',
118
+ });
119
+ expect(statements[1]).toStrictEqual({
120
+ type: 'alter_table_add_column',
121
+ tableName: 'users',
122
+ schema: '',
123
+ column: {
124
+ name: 'email',
125
+ notNull: false,
126
+ primaryKey: false,
127
+ type: 'text',
128
+ },
129
+ });
130
+ });
131
+
132
+ test('alter table add composite pk', async (t) => {
133
+ const schema1 = {
134
+ table: pgTable('table', {
135
+ id1: integer('id1'),
136
+ id2: integer('id2'),
137
+ }),
138
+ };
139
+
140
+ const schema2 = {
141
+ table: pgTable(
142
+ 'table',
143
+ {
144
+ id1: integer('id1'),
145
+ id2: integer('id2'),
146
+ },
147
+ (t) => {
148
+ return {
149
+ pk: primaryKey({ columns: [t.id1, t.id2] }),
150
+ };
151
+ },
152
+ ),
153
+ };
154
+
155
+ const { statements, sqlStatements } = await diffTestSchemas(
156
+ schema1,
157
+ schema2,
158
+ [],
159
+ );
160
+
161
+ expect(statements.length).toBe(1);
162
+ expect(statements[0]).toStrictEqual({
163
+ type: 'create_composite_pk',
164
+ tableName: 'table',
165
+ data: 'id1,id2;table_id1_id2_pk',
166
+ schema: '',
167
+ constraintName: 'table_id1_id2_pk',
168
+ });
169
+
170
+ expect(sqlStatements.length).toBe(1);
171
+ expect(sqlStatements[0]).toBe(
172
+ 'ALTER TABLE "table" ADD CONSTRAINT "table_id1_id2_pk" PRIMARY KEY("id1","id2");',
173
+ );
174
+ });
175
+
176
+ test('rename table rename column #1', async (t) => {
177
+ const schema1 = {
178
+ users: pgTable('users', {
179
+ id: integer('id'),
180
+ }),
181
+ };
182
+
183
+ const schema2 = {
184
+ users: pgTable('users1', {
185
+ id: integer('id1'),
186
+ }),
187
+ };
188
+
189
+ const { statements } = await diffTestSchemas(schema1, schema2, [
190
+ 'public.users->public.users1',
191
+ 'public.users1.id->public.users1.id1',
192
+ ]);
193
+
194
+ expect(statements.length).toBe(2);
195
+ expect(statements[0]).toStrictEqual({
196
+ type: 'rename_table',
197
+ tableNameFrom: 'users',
198
+ tableNameTo: 'users1',
199
+ fromSchema: '',
200
+ toSchema: '',
201
+ });
202
+ expect(statements[1]).toStrictEqual({
203
+ type: 'alter_table_rename_column',
204
+ oldColumnName: 'id',
205
+ newColumnName: 'id1',
206
+ schema: '',
207
+ tableName: 'users1',
208
+ });
209
+ });
210
+
211
+ test('with composite pks #1', async (t) => {
212
+ const schema1 = {
213
+ users: pgTable(
214
+ 'users',
215
+ {
216
+ id1: integer('id1'),
217
+ id2: integer('id2'),
218
+ },
219
+ (t) => {
220
+ return {
221
+ pk: primaryKey({ columns: [t.id1, t.id2], name: 'compositePK' }),
222
+ };
223
+ },
224
+ ),
225
+ };
226
+
227
+ const schema2 = {
228
+ users: pgTable(
229
+ 'users',
230
+ {
231
+ id1: integer('id1'),
232
+ id2: integer('id2'),
233
+ text: text('text'),
234
+ },
235
+ (t) => {
236
+ return {
237
+ pk: primaryKey({ columns: [t.id1, t.id2], name: 'compositePK' }),
238
+ };
239
+ },
240
+ ),
241
+ };
242
+
243
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
244
+
245
+ expect(statements.length).toBe(1);
246
+ expect(statements[0]).toStrictEqual({
247
+ type: 'alter_table_add_column',
248
+ tableName: 'users',
249
+ schema: '',
250
+ column: {
251
+ name: 'text',
252
+ notNull: false,
253
+ primaryKey: false,
254
+ type: 'text',
255
+ },
256
+ });
257
+ });
258
+
259
+ test('with composite pks #2', async (t) => {
260
+ const schema1 = {
261
+ users: pgTable('users', {
262
+ id1: integer('id1'),
263
+ id2: integer('id2'),
264
+ }),
265
+ };
266
+
267
+ const schema2 = {
268
+ users: pgTable(
269
+ 'users',
270
+ {
271
+ id1: integer('id1'),
272
+ id2: integer('id2'),
273
+ },
274
+ (t) => {
275
+ return {
276
+ pk: primaryKey({ columns: [t.id1, t.id2], name: 'compositePK' }),
277
+ };
278
+ },
279
+ ),
280
+ };
281
+
282
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
283
+
284
+ expect(statements.length).toBe(1);
285
+ expect(statements[0]).toStrictEqual({
286
+ type: 'create_composite_pk',
287
+ tableName: 'users',
288
+ schema: '',
289
+ constraintName: 'compositePK',
290
+ data: 'id1,id2;compositePK',
291
+ });
292
+ });
293
+
294
+ test('with composite pks #3', async (t) => {
295
+ const schema1 = {
296
+ users: pgTable(
297
+ 'users',
298
+ {
299
+ id1: integer('id1'),
300
+ id2: integer('id2'),
301
+ },
302
+ (t) => {
303
+ return {
304
+ pk: primaryKey({ columns: [t.id1, t.id2], name: 'compositePK' }),
305
+ };
306
+ },
307
+ ),
308
+ };
309
+
310
+ const schema2 = {
311
+ users: pgTable(
312
+ 'users',
313
+ {
314
+ id1: integer('id1'),
315
+ id3: integer('id3'),
316
+ },
317
+ (t) => {
318
+ return {
319
+ pk: primaryKey({ columns: [t.id1, t.id3], name: 'compositePK' }),
320
+ };
321
+ },
322
+ ),
323
+ };
324
+
325
+ // TODO: remove redundand drop/create create constraint
326
+ const { statements } = await diffTestSchemas(schema1, schema2, [
327
+ 'public.users.id2->public.users.id3',
328
+ ]);
329
+
330
+ expect(statements.length).toBe(2);
331
+ expect(statements[0]).toStrictEqual({
332
+ type: 'alter_table_rename_column',
333
+ tableName: 'users',
334
+ schema: '',
335
+ newColumnName: 'id3',
336
+ oldColumnName: 'id2',
337
+ });
338
+ expect(statements[1]).toStrictEqual({
339
+ type: 'alter_composite_pk',
340
+ tableName: 'users',
341
+ schema: '',
342
+ new: 'id1,id3;compositePK',
343
+ old: 'id1,id2;compositePK',
344
+ newConstraintName: 'compositePK',
345
+ oldConstraintName: 'compositePK',
346
+ });
347
+ });
348
+
349
+ test('add multiple constraints #1', async (t) => {
350
+ const t1 = pgTable('t1', {
351
+ id: uuid('id').primaryKey().defaultRandom(),
352
+ });
353
+
354
+ const t2 = pgTable('t2', {
355
+ id: uuid('id').primaryKey().defaultRandom(),
356
+ });
357
+
358
+ const t3 = pgTable('t3', {
359
+ id: uuid('id').primaryKey().defaultRandom(),
360
+ });
361
+
362
+ const schema1 = {
363
+ t1,
364
+ t2,
365
+ t3,
366
+ ref1: pgTable('ref1', {
367
+ id1: uuid('id1').references(() => t1.id),
368
+ id2: uuid('id2').references(() => t2.id),
369
+ id3: uuid('id3').references(() => t3.id),
370
+ }),
371
+ };
372
+
373
+ const schema2 = {
374
+ t1,
375
+ t2,
376
+ t3,
377
+ ref1: pgTable('ref1', {
378
+ id1: uuid('id1').references(() => t1.id, { onDelete: 'cascade' }),
379
+ id2: uuid('id2').references(() => t2.id, { onDelete: 'set null' }),
380
+ id3: uuid('id3').references(() => t3.id, { onDelete: 'cascade' }),
381
+ }),
382
+ };
383
+
384
+ // TODO: remove redundand drop/create create constraint
385
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
386
+
387
+ expect(statements.length).toBe(6);
388
+ });
389
+
390
+ test('add multiple constraints #2', async (t) => {
391
+ const t1 = pgTable('t1', {
392
+ id1: uuid('id1').primaryKey().defaultRandom(),
393
+ id2: uuid('id2').primaryKey().defaultRandom(),
394
+ id3: uuid('id3').primaryKey().defaultRandom(),
395
+ });
396
+
397
+ const schema1 = {
398
+ t1,
399
+ ref1: pgTable('ref1', {
400
+ id1: uuid('id1').references(() => t1.id1),
401
+ id2: uuid('id2').references(() => t1.id2),
402
+ id3: uuid('id3').references(() => t1.id3),
403
+ }),
404
+ };
405
+
406
+ const schema2 = {
407
+ t1,
408
+ ref1: pgTable('ref1', {
409
+ id1: uuid('id1').references(() => t1.id1, { onDelete: 'cascade' }),
410
+ id2: uuid('id2').references(() => t1.id2, { onDelete: 'set null' }),
411
+ id3: uuid('id3').references(() => t1.id3, { onDelete: 'cascade' }),
412
+ }),
413
+ };
414
+
415
+ // TODO: remove redundand drop/create create constraint
416
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
417
+
418
+ expect(statements.length).toBe(6);
419
+ });
420
+
421
+ test('add multiple constraints #3', async (t) => {
422
+ const t1 = pgTable('t1', {
423
+ id1: uuid('id1').primaryKey().defaultRandom(),
424
+ id2: uuid('id2').primaryKey().defaultRandom(),
425
+ id3: uuid('id3').primaryKey().defaultRandom(),
426
+ });
427
+
428
+ const schema1 = {
429
+ t1,
430
+ ref1: pgTable('ref1', {
431
+ id: uuid('id').references(() => t1.id1),
432
+ }),
433
+ ref2: pgTable('ref2', {
434
+ id: uuid('id').references(() => t1.id2),
435
+ }),
436
+ ref3: pgTable('ref3', {
437
+ id: uuid('id').references(() => t1.id3),
438
+ }),
439
+ };
440
+
441
+ const schema2 = {
442
+ t1,
443
+ ref1: pgTable('ref1', {
444
+ id: uuid('id').references(() => t1.id1, { onDelete: 'cascade' }),
445
+ }),
446
+ ref2: pgTable('ref2', {
447
+ id: uuid('id').references(() => t1.id2, { onDelete: 'set null' }),
448
+ }),
449
+ ref3: pgTable('ref3', {
450
+ id: uuid('id').references(() => t1.id3, { onDelete: 'cascade' }),
451
+ }),
452
+ };
453
+
454
+ // TODO: remove redundand drop/create create constraint
455
+ const { statements } = await diffTestSchemas(schema1, schema2, []);
456
+
457
+ expect(statements.length).toBe(6);
458
+ });
459
+
460
+ test('varchar and text default values escape single quotes', async (t) => {
461
+ const schema1 = {
462
+ table: pgTable('table', {
463
+ id: serial('id').primaryKey(),
464
+ }),
465
+ };
466
+
467
+ const schem2 = {
468
+ table: pgTable('table', {
469
+ id: serial('id').primaryKey(),
470
+ text: text('text').default("escape's quotes"),
471
+ varchar: varchar('varchar').default("escape's quotes"),
472
+ }),
473
+ };
474
+
475
+ const { sqlStatements } = await diffTestSchemas(schema1, schem2, []);
476
+
477
+ expect(sqlStatements.length).toBe(2);
478
+ expect(sqlStatements[0]).toStrictEqual(
479
+ 'ALTER TABLE "table" ADD COLUMN "text" text DEFAULT \'escape\'\'s quotes\';',
480
+ );
481
+ expect(sqlStatements[1]).toStrictEqual(
482
+ 'ALTER TABLE "table" ADD COLUMN "varchar" varchar DEFAULT \'escape\'\'s quotes\';',
483
+ );
484
+ });