@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,882 @@
1
+ import { JsonStatement } from 'src/jsonStatements';
2
+ import { SingleStoreSchemaSquashed } from 'src/serializer/singlestoreSchema';
3
+ import { singleStoreCombineStatements } from 'src/statementCombiner';
4
+ import { expect, test } from 'vitest';
5
+
6
+ test(`change column data type`, async (t) => {
7
+ const statements: JsonStatement[] = [
8
+ {
9
+ type: 'alter_table_rename_column',
10
+ tableName: 'user',
11
+ oldColumnName: 'lastName',
12
+ newColumnName: 'lastName123',
13
+ schema: '',
14
+ },
15
+ {
16
+ type: 'alter_table_alter_column_set_type',
17
+ tableName: 'user',
18
+ columnName: 'lastName123',
19
+ newDataType: 'int',
20
+ oldDataType: 'text',
21
+ schema: '',
22
+ columnDefault: undefined,
23
+ columnOnUpdate: undefined,
24
+ columnNotNull: false,
25
+ columnAutoIncrement: false,
26
+ columnPk: false,
27
+ columnIsUnique: false,
28
+ } as unknown as JsonStatement,
29
+ ];
30
+ const json1: SingleStoreSchemaSquashed = {
31
+ version: '1',
32
+ dialect: 'singlestore',
33
+ tables: {
34
+ user: {
35
+ name: 'user',
36
+ columns: {
37
+ firstName: {
38
+ name: 'firstName',
39
+ type: 'int',
40
+ primaryKey: true,
41
+ notNull: true,
42
+ autoincrement: false,
43
+ },
44
+ lastName: {
45
+ name: 'lastName',
46
+ type: 'text',
47
+ primaryKey: false,
48
+ notNull: false,
49
+ autoincrement: false,
50
+ },
51
+ test: {
52
+ name: 'test',
53
+ type: 'text',
54
+ primaryKey: false,
55
+ notNull: false,
56
+ autoincrement: false,
57
+ },
58
+ },
59
+ indexes: {},
60
+ compositePrimaryKeys: {},
61
+ uniqueConstraints: {},
62
+ },
63
+ },
64
+ };
65
+ const json2: SingleStoreSchemaSquashed = {
66
+ version: '1',
67
+ dialect: 'singlestore',
68
+ tables: {
69
+ user: {
70
+ name: 'user',
71
+ columns: {
72
+ firstName: {
73
+ name: 'firstName',
74
+ type: 'int',
75
+ primaryKey: true,
76
+ notNull: true,
77
+ autoincrement: false,
78
+ },
79
+ lastName: {
80
+ name: 'lastName123',
81
+ type: 'int',
82
+ primaryKey: false,
83
+ notNull: false,
84
+ autoincrement: false,
85
+ },
86
+ test: {
87
+ name: 'test',
88
+ type: 'int',
89
+ primaryKey: false,
90
+ notNull: false,
91
+ autoincrement: false,
92
+ },
93
+ },
94
+ indexes: {},
95
+ compositePrimaryKeys: {},
96
+ uniqueConstraints: {},
97
+ },
98
+ },
99
+ };
100
+
101
+ const newJsonStatements = [
102
+ {
103
+ type: 'alter_table_rename_column',
104
+ tableName: 'user',
105
+ oldColumnName: 'lastName',
106
+ newColumnName: 'lastName123',
107
+ schema: '',
108
+ },
109
+ {
110
+ type: 'singlestore_recreate_table',
111
+ tableName: 'user',
112
+ columns: [
113
+ {
114
+ name: 'firstName',
115
+ type: 'int',
116
+ primaryKey: true,
117
+ notNull: true,
118
+ autoincrement: false,
119
+ },
120
+ {
121
+ name: 'lastName123',
122
+ type: 'int',
123
+ primaryKey: false,
124
+ notNull: false,
125
+ autoincrement: false,
126
+ },
127
+ {
128
+ name: 'test',
129
+ type: 'int',
130
+ primaryKey: false,
131
+ notNull: false,
132
+ autoincrement: false,
133
+ },
134
+ ],
135
+ compositePKs: [],
136
+ uniqueConstraints: [],
137
+ },
138
+ ];
139
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
140
+ newJsonStatements,
141
+ );
142
+ });
143
+
144
+ test(`set autoincrement`, async (t) => {
145
+ const statements: JsonStatement[] = [
146
+ {
147
+ type: 'alter_table_alter_column_set_autoincrement',
148
+ tableName: 'users',
149
+ columnName: 'id',
150
+ schema: '',
151
+ newDataType: 'int',
152
+ columnDefault: undefined,
153
+ columnOnUpdate: undefined,
154
+ columnNotNull: true,
155
+ columnAutoIncrement: true,
156
+ columnPk: false,
157
+ } as unknown as JsonStatement,
158
+ ];
159
+
160
+ const json2: SingleStoreSchemaSquashed = {
161
+ version: '1',
162
+ dialect: 'singlestore',
163
+ tables: {
164
+ users: {
165
+ name: 'users',
166
+ columns: {
167
+ new_id: {
168
+ name: 'id',
169
+ type: 'int',
170
+ primaryKey: false,
171
+ notNull: true,
172
+ autoincrement: true,
173
+ },
174
+ name: {
175
+ name: 'name',
176
+ type: 'text',
177
+ primaryKey: false,
178
+ notNull: false,
179
+ autoincrement: false,
180
+ },
181
+ email: {
182
+ name: 'email',
183
+ type: 'text',
184
+ primaryKey: false,
185
+ notNull: true,
186
+ autoincrement: false,
187
+ },
188
+ },
189
+ indexes: {},
190
+ compositePrimaryKeys: {},
191
+ uniqueConstraints: {},
192
+ },
193
+ },
194
+ };
195
+ const newJsonStatements = [
196
+ {
197
+ type: 'singlestore_recreate_table',
198
+ tableName: 'users',
199
+ columns: [
200
+ {
201
+ name: 'id',
202
+ type: 'int',
203
+ primaryKey: false,
204
+ notNull: true,
205
+ autoincrement: true,
206
+ },
207
+ {
208
+ name: 'name',
209
+ type: 'text',
210
+ primaryKey: false,
211
+ notNull: false,
212
+ autoincrement: false,
213
+ },
214
+ {
215
+ name: 'email',
216
+ type: 'text',
217
+ primaryKey: false,
218
+ notNull: true,
219
+ autoincrement: false,
220
+ },
221
+ ],
222
+ compositePKs: [],
223
+ uniqueConstraints: [],
224
+ },
225
+ ];
226
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
227
+ newJsonStatements,
228
+ );
229
+ });
230
+
231
+ test(`drop autoincrement`, async (t) => {
232
+ const statements: JsonStatement[] = [
233
+ {
234
+ type: 'alter_table_alter_column_drop_autoincrement',
235
+ tableName: 'users',
236
+ columnName: 'id',
237
+ schema: '',
238
+ newDataType: 'int',
239
+ columnDefault: undefined,
240
+ columnOnUpdate: undefined,
241
+ columnNotNull: true,
242
+ columnAutoIncrement: true,
243
+ columnPk: false,
244
+ } as unknown as JsonStatement,
245
+ ];
246
+
247
+ const json2: SingleStoreSchemaSquashed = {
248
+ version: '1',
249
+ dialect: 'singlestore',
250
+ tables: {
251
+ users: {
252
+ name: 'users',
253
+ columns: {
254
+ new_id: {
255
+ name: 'id',
256
+ type: 'int',
257
+ primaryKey: false,
258
+ notNull: true,
259
+ autoincrement: false,
260
+ },
261
+ name: {
262
+ name: 'name',
263
+ type: 'text',
264
+ primaryKey: false,
265
+ notNull: false,
266
+ autoincrement: false,
267
+ },
268
+ email: {
269
+ name: 'email',
270
+ type: 'text',
271
+ primaryKey: false,
272
+ notNull: true,
273
+ autoincrement: false,
274
+ },
275
+ },
276
+ indexes: {},
277
+ compositePrimaryKeys: {},
278
+ uniqueConstraints: {},
279
+ },
280
+ },
281
+ };
282
+ const newJsonStatements = [
283
+ {
284
+ type: 'singlestore_recreate_table',
285
+ tableName: 'users',
286
+ columns: [
287
+ {
288
+ name: 'id',
289
+ type: 'int',
290
+ primaryKey: false,
291
+ notNull: true,
292
+ autoincrement: false,
293
+ },
294
+ {
295
+ name: 'name',
296
+ type: 'text',
297
+ primaryKey: false,
298
+ notNull: false,
299
+ autoincrement: false,
300
+ },
301
+ {
302
+ name: 'email',
303
+ type: 'text',
304
+ primaryKey: false,
305
+ notNull: true,
306
+ autoincrement: false,
307
+ },
308
+ ],
309
+ compositePKs: [],
310
+ uniqueConstraints: [],
311
+ },
312
+ ];
313
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
314
+ newJsonStatements,
315
+ );
316
+ });
317
+
318
+ test(`drop autoincrement`, async (t) => {
319
+ const statements: JsonStatement[] = [
320
+ {
321
+ type: 'alter_table_alter_column_drop_autoincrement',
322
+ tableName: 'users',
323
+ columnName: 'id',
324
+ schema: '',
325
+ newDataType: 'int',
326
+ columnDefault: undefined,
327
+ columnOnUpdate: undefined,
328
+ columnNotNull: true,
329
+ columnAutoIncrement: true,
330
+ columnPk: false,
331
+ } as unknown as JsonStatement,
332
+ ];
333
+
334
+ const json2: SingleStoreSchemaSquashed = {
335
+ version: '1',
336
+ dialect: 'singlestore',
337
+ tables: {
338
+ users: {
339
+ name: 'users',
340
+ columns: {
341
+ new_id: {
342
+ name: 'id',
343
+ type: 'int',
344
+ primaryKey: false,
345
+ notNull: true,
346
+ autoincrement: false,
347
+ },
348
+ name: {
349
+ name: 'name',
350
+ type: 'text',
351
+ primaryKey: false,
352
+ notNull: false,
353
+ autoincrement: false,
354
+ },
355
+ email: {
356
+ name: 'email',
357
+ type: 'text',
358
+ primaryKey: false,
359
+ notNull: true,
360
+ autoincrement: false,
361
+ },
362
+ },
363
+ indexes: {},
364
+ compositePrimaryKeys: {},
365
+ uniqueConstraints: {},
366
+ },
367
+ },
368
+ };
369
+ const newJsonStatements = [
370
+ {
371
+ type: 'singlestore_recreate_table',
372
+ tableName: 'users',
373
+ columns: [
374
+ {
375
+ name: 'id',
376
+ type: 'int',
377
+ primaryKey: false,
378
+ notNull: true,
379
+ autoincrement: false,
380
+ },
381
+ {
382
+ name: 'name',
383
+ type: 'text',
384
+ primaryKey: false,
385
+ notNull: false,
386
+ autoincrement: false,
387
+ },
388
+ {
389
+ name: 'email',
390
+ type: 'text',
391
+ primaryKey: false,
392
+ notNull: true,
393
+ autoincrement: false,
394
+ },
395
+ ],
396
+ compositePKs: [],
397
+ uniqueConstraints: [],
398
+ },
399
+ ];
400
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
401
+ newJsonStatements,
402
+ );
403
+ });
404
+
405
+ test(`set not null`, async (t) => {
406
+ const statements: JsonStatement[] = [
407
+ {
408
+ type: 'alter_table_alter_column_set_notnull',
409
+ tableName: 'users',
410
+ columnName: 'name',
411
+ schema: '',
412
+ newDataType: 'text',
413
+ columnDefault: undefined,
414
+ columnOnUpdate: undefined,
415
+ columnNotNull: true,
416
+ columnAutoIncrement: false,
417
+ columnPk: false,
418
+ } as unknown as JsonStatement,
419
+ ];
420
+
421
+ const json2: SingleStoreSchemaSquashed = {
422
+ version: '1',
423
+ dialect: 'singlestore',
424
+ tables: {
425
+ users: {
426
+ name: 'users',
427
+ columns: {
428
+ new_id: {
429
+ name: 'id',
430
+ type: 'int',
431
+ primaryKey: false,
432
+ notNull: true,
433
+ autoincrement: false,
434
+ },
435
+ name: {
436
+ name: 'name',
437
+ type: 'text',
438
+ primaryKey: false,
439
+ notNull: true,
440
+ autoincrement: false,
441
+ },
442
+ email: {
443
+ name: 'email',
444
+ type: 'text',
445
+ primaryKey: false,
446
+ notNull: true,
447
+ autoincrement: false,
448
+ },
449
+ },
450
+ indexes: {},
451
+ compositePrimaryKeys: {},
452
+ uniqueConstraints: {},
453
+ },
454
+ },
455
+ };
456
+ const newJsonStatements = [
457
+ {
458
+ type: 'singlestore_recreate_table',
459
+ tableName: 'users',
460
+ columns: [
461
+ {
462
+ name: 'id',
463
+ type: 'int',
464
+ primaryKey: false,
465
+ notNull: true,
466
+ autoincrement: false,
467
+ },
468
+ {
469
+ name: 'name',
470
+ type: 'text',
471
+ primaryKey: false,
472
+ notNull: true,
473
+ autoincrement: false,
474
+ },
475
+ {
476
+ name: 'email',
477
+ type: 'text',
478
+ primaryKey: false,
479
+ notNull: true,
480
+ autoincrement: false,
481
+ },
482
+ ],
483
+ compositePKs: [],
484
+ uniqueConstraints: [],
485
+ },
486
+ ];
487
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
488
+ newJsonStatements,
489
+ );
490
+ });
491
+
492
+ test(`drop not null`, async (t) => {
493
+ const statements: JsonStatement[] = [
494
+ {
495
+ type: 'alter_table_alter_column_drop_notnull',
496
+ tableName: 'users',
497
+ columnName: 'name',
498
+ schema: '',
499
+ newDataType: 'text',
500
+ columnDefault: undefined,
501
+ columnOnUpdate: undefined,
502
+ columnNotNull: false,
503
+ columnAutoIncrement: false,
504
+ columnPk: false,
505
+ } as unknown as JsonStatement,
506
+ ];
507
+
508
+ const json2: SingleStoreSchemaSquashed = {
509
+ version: '1',
510
+ dialect: 'singlestore',
511
+ tables: {
512
+ users: {
513
+ name: 'users',
514
+ columns: {
515
+ new_id: {
516
+ name: 'id',
517
+ type: 'int',
518
+ primaryKey: false,
519
+ notNull: true,
520
+ autoincrement: false,
521
+ },
522
+ name: {
523
+ name: 'name',
524
+ type: 'text',
525
+ primaryKey: false,
526
+ notNull: true,
527
+ autoincrement: false,
528
+ },
529
+ email: {
530
+ name: 'email',
531
+ type: 'text',
532
+ primaryKey: false,
533
+ notNull: true,
534
+ autoincrement: false,
535
+ },
536
+ },
537
+ indexes: {},
538
+ compositePrimaryKeys: {},
539
+ uniqueConstraints: {},
540
+ },
541
+ },
542
+ };
543
+ const newJsonStatements = [
544
+ {
545
+ type: 'singlestore_recreate_table',
546
+ tableName: 'users',
547
+ columns: [
548
+ {
549
+ name: 'id',
550
+ type: 'int',
551
+ primaryKey: false,
552
+ notNull: true,
553
+ autoincrement: false,
554
+ },
555
+ {
556
+ name: 'name',
557
+ type: 'text',
558
+ primaryKey: false,
559
+ notNull: true,
560
+ autoincrement: false,
561
+ },
562
+ {
563
+ name: 'email',
564
+ type: 'text',
565
+ primaryKey: false,
566
+ notNull: true,
567
+ autoincrement: false,
568
+ },
569
+ ],
570
+ compositePKs: [],
571
+ uniqueConstraints: [],
572
+ },
573
+ ];
574
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
575
+ newJsonStatements,
576
+ );
577
+ });
578
+
579
+ test(`renamed column and droped column "test"`, async (t) => {
580
+ const statements: JsonStatement[] = [
581
+ {
582
+ type: 'alter_table_rename_column',
583
+ tableName: 'user',
584
+ oldColumnName: 'lastName',
585
+ newColumnName: 'lastName123',
586
+ schema: '',
587
+ },
588
+ {
589
+ type: 'alter_table_drop_column',
590
+ tableName: 'user',
591
+ columnName: 'test',
592
+ schema: '',
593
+ },
594
+ ];
595
+ const json1: SingleStoreSchemaSquashed = {
596
+ version: '1',
597
+ dialect: 'singlestore',
598
+ tables: {
599
+ user: {
600
+ name: 'user',
601
+ columns: {
602
+ firstName: {
603
+ name: 'firstName',
604
+ type: 'int',
605
+ primaryKey: true,
606
+ notNull: true,
607
+ autoincrement: false,
608
+ },
609
+ lastName: {
610
+ name: 'lastName',
611
+ type: 'text',
612
+ primaryKey: false,
613
+ notNull: false,
614
+ autoincrement: false,
615
+ },
616
+ test: {
617
+ name: 'test',
618
+ type: 'text',
619
+ primaryKey: false,
620
+ notNull: false,
621
+ autoincrement: false,
622
+ },
623
+ },
624
+ indexes: {},
625
+ compositePrimaryKeys: {},
626
+ uniqueConstraints: {},
627
+ },
628
+ },
629
+ };
630
+ const json2: SingleStoreSchemaSquashed = {
631
+ version: '1',
632
+ dialect: 'singlestore',
633
+ tables: {
634
+ user: {
635
+ name: 'user',
636
+ columns: {
637
+ firstName: {
638
+ name: 'firstName',
639
+ type: 'int',
640
+ primaryKey: true,
641
+ notNull: true,
642
+ autoincrement: false,
643
+ },
644
+ lastName: {
645
+ name: 'lastName123',
646
+ type: 'int',
647
+ primaryKey: false,
648
+ notNull: false,
649
+ autoincrement: false,
650
+ },
651
+ test: {
652
+ name: 'test',
653
+ type: 'int',
654
+ primaryKey: false,
655
+ notNull: false,
656
+ autoincrement: false,
657
+ },
658
+ },
659
+ indexes: {},
660
+ compositePrimaryKeys: {},
661
+ uniqueConstraints: {},
662
+ },
663
+ },
664
+ };
665
+
666
+ const newJsonStatements: JsonStatement[] = [
667
+ {
668
+ type: 'alter_table_rename_column',
669
+ tableName: 'user',
670
+ oldColumnName: 'lastName',
671
+ newColumnName: 'lastName123',
672
+ schema: '',
673
+ },
674
+ {
675
+ type: 'alter_table_drop_column',
676
+ tableName: 'user',
677
+ columnName: 'test',
678
+ schema: '',
679
+ },
680
+ ];
681
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
682
+ newJsonStatements,
683
+ );
684
+ });
685
+
686
+ test(`droped column that is part of composite pk`, async (t) => {
687
+ const statements: JsonStatement[] = [
688
+ { type: 'delete_composite_pk', tableName: 'user', data: 'id,iq' },
689
+ {
690
+ type: 'alter_table_alter_column_set_pk',
691
+ tableName: 'user',
692
+ schema: '',
693
+ columnName: 'id',
694
+ },
695
+ {
696
+ type: 'alter_table_drop_column',
697
+ tableName: 'user',
698
+ columnName: 'iq',
699
+ schema: '',
700
+ },
701
+ ];
702
+ const json1: SingleStoreSchemaSquashed = {
703
+ version: '1',
704
+ dialect: 'singlestore',
705
+ tables: {
706
+ user: {
707
+ name: 'user',
708
+ columns: {
709
+ id: {
710
+ name: 'id',
711
+ type: 'int',
712
+ primaryKey: false,
713
+ notNull: false,
714
+ autoincrement: false,
715
+ },
716
+ first_nam: {
717
+ name: 'first_nam',
718
+ type: 'text',
719
+ primaryKey: false,
720
+ notNull: false,
721
+ autoincrement: false,
722
+ },
723
+ iq: {
724
+ name: 'iq',
725
+ type: 'int',
726
+ primaryKey: false,
727
+ notNull: false,
728
+ autoincrement: false,
729
+ },
730
+ },
731
+ indexes: {},
732
+ compositePrimaryKeys: {
733
+ user_id_iq_pk: 'id,iq',
734
+ },
735
+ uniqueConstraints: {},
736
+ },
737
+ },
738
+ };
739
+ const json2: SingleStoreSchemaSquashed = {
740
+ version: '1',
741
+ dialect: 'singlestore',
742
+ tables: {
743
+ user: {
744
+ name: 'user',
745
+ columns: {
746
+ id: {
747
+ name: 'id',
748
+ type: 'int',
749
+ primaryKey: true,
750
+ notNull: false,
751
+ autoincrement: false,
752
+ },
753
+ first_nam: {
754
+ name: 'first_name',
755
+ type: 'text',
756
+ primaryKey: false,
757
+ notNull: false,
758
+ autoincrement: false,
759
+ },
760
+ },
761
+ indexes: {},
762
+ compositePrimaryKeys: {},
763
+ uniqueConstraints: {},
764
+ },
765
+ },
766
+ };
767
+
768
+ const newJsonStatements: JsonStatement[] = [
769
+ {
770
+ type: 'singlestore_recreate_table',
771
+ tableName: 'user',
772
+ columns: [
773
+ {
774
+ name: 'id',
775
+ type: 'int',
776
+ primaryKey: true,
777
+ notNull: false,
778
+ autoincrement: false,
779
+ },
780
+ {
781
+ name: 'first_name',
782
+ type: 'text',
783
+ primaryKey: false,
784
+ notNull: false,
785
+ autoincrement: false,
786
+ },
787
+ ],
788
+ compositePKs: [],
789
+ uniqueConstraints: [],
790
+ },
791
+ ];
792
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
793
+ newJsonStatements,
794
+ );
795
+ });
796
+
797
+ test(`add column with pk`, async (t) => {
798
+ const statements: JsonStatement[] = [
799
+ {
800
+ type: 'alter_table_add_column',
801
+ tableName: 'table',
802
+ column: {
803
+ name: 'test',
804
+ type: 'integer',
805
+ primaryKey: true,
806
+ notNull: false,
807
+ autoincrement: false,
808
+ },
809
+ schema: '',
810
+ },
811
+ ];
812
+ const json2: SingleStoreSchemaSquashed = {
813
+ version: '1',
814
+ dialect: 'singlestore',
815
+ tables: {
816
+ table: {
817
+ name: 'table',
818
+ columns: {
819
+ id1: {
820
+ name: 'id1',
821
+ type: 'text',
822
+ primaryKey: false,
823
+ notNull: true,
824
+ autoincrement: false,
825
+ },
826
+ new_age: {
827
+ name: 'new_age',
828
+ type: 'integer',
829
+ primaryKey: false,
830
+ notNull: false,
831
+ autoincrement: false,
832
+ },
833
+ test: {
834
+ name: 'test',
835
+ type: 'integer',
836
+ primaryKey: false,
837
+ notNull: false,
838
+ autoincrement: false,
839
+ },
840
+ },
841
+ indexes: {},
842
+ compositePrimaryKeys: {},
843
+ uniqueConstraints: {},
844
+ },
845
+ },
846
+ };
847
+
848
+ const newJsonStatements = [
849
+ {
850
+ columns: [
851
+ {
852
+ name: 'id1',
853
+ type: 'text',
854
+ primaryKey: false,
855
+ notNull: true,
856
+ autoincrement: false,
857
+ },
858
+ {
859
+ name: 'new_age',
860
+ type: 'integer',
861
+ primaryKey: false,
862
+ notNull: false,
863
+ autoincrement: false,
864
+ },
865
+ {
866
+ name: 'test',
867
+ type: 'integer',
868
+ primaryKey: false,
869
+ notNull: false,
870
+ autoincrement: false,
871
+ },
872
+ ],
873
+ compositePKs: [],
874
+ tableName: 'table',
875
+ type: 'singlestore_recreate_table',
876
+ uniqueConstraints: [],
877
+ },
878
+ ];
879
+ expect(singleStoreCombineStatements(statements, json2)).toStrictEqual(
880
+ newJsonStatements,
881
+ );
882
+ });