@dsqlbase/migration 0.1.0 → 0.1.3

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 (138) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/base.d.ts +87 -0
  3. package/dist/base.d.ts.map +1 -0
  4. package/dist/base.js +53 -0
  5. package/dist/base.js.map +1 -0
  6. package/dist/ddl/ast.d.ts +267 -0
  7. package/dist/ddl/ast.d.ts.map +1 -0
  8. package/dist/ddl/ast.js +10 -0
  9. package/dist/ddl/ast.js.map +1 -0
  10. package/dist/ddl/factory.d.ts +88 -0
  11. package/dist/ddl/factory.d.ts.map +1 -0
  12. package/dist/ddl/factory.js +186 -0
  13. package/dist/ddl/factory.js.map +1 -0
  14. package/dist/ddl/index.d.ts +5 -0
  15. package/dist/ddl/index.d.ts.map +1 -0
  16. package/dist/ddl/index.js +4 -0
  17. package/dist/ddl/index.js.map +1 -0
  18. package/dist/ddl/printer.d.ts +21 -0
  19. package/dist/ddl/printer.d.ts.map +1 -0
  20. package/dist/ddl/printer.js +278 -0
  21. package/dist/ddl/printer.js.map +1 -0
  22. package/dist/ddl/schema.d.ts +33 -0
  23. package/dist/ddl/schema.d.ts.map +1 -0
  24. package/dist/ddl/schema.js +133 -0
  25. package/dist/ddl/schema.js.map +1 -0
  26. package/dist/executor.d.ts +29 -0
  27. package/dist/executor.d.ts.map +1 -0
  28. package/dist/executor.js +93 -0
  29. package/dist/executor.js.map +1 -0
  30. package/dist/index.d.ts +7 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +7 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/introspection/introspect.d.ts +8 -0
  35. package/dist/introspection/introspect.d.ts.map +1 -0
  36. package/dist/introspection/introspect.js +14 -0
  37. package/dist/introspection/introspect.js.map +1 -0
  38. package/dist/introspection/normalizer.d.ts +96 -0
  39. package/dist/introspection/normalizer.d.ts.map +1 -0
  40. package/dist/introspection/normalizer.js +187 -0
  41. package/dist/introspection/normalizer.js.map +1 -0
  42. package/dist/introspection/query.d.ts +3 -0
  43. package/dist/introspection/query.d.ts.map +1 -0
  44. package/dist/introspection/query.js +284 -0
  45. package/dist/introspection/query.js.map +1 -0
  46. package/dist/reconciliation/diffs/base.d.ts +19 -0
  47. package/dist/reconciliation/diffs/base.d.ts.map +1 -0
  48. package/dist/reconciliation/diffs/base.js +58 -0
  49. package/dist/reconciliation/diffs/base.js.map +1 -0
  50. package/dist/reconciliation/diffs/column.d.ts +42 -0
  51. package/dist/reconciliation/diffs/column.d.ts.map +1 -0
  52. package/dist/reconciliation/diffs/column.js +48 -0
  53. package/dist/reconciliation/diffs/column.js.map +1 -0
  54. package/dist/reconciliation/diffs/constraint.d.ts +9 -0
  55. package/dist/reconciliation/diffs/constraint.d.ts.map +1 -0
  56. package/dist/reconciliation/diffs/constraint.js +122 -0
  57. package/dist/reconciliation/diffs/constraint.js.map +1 -0
  58. package/dist/reconciliation/diffs/domain.d.ts +17 -0
  59. package/dist/reconciliation/diffs/domain.d.ts.map +1 -0
  60. package/dist/reconciliation/diffs/domain.js +30 -0
  61. package/dist/reconciliation/diffs/domain.js.map +1 -0
  62. package/dist/reconciliation/diffs/indexes.d.ts +18 -0
  63. package/dist/reconciliation/diffs/indexes.d.ts.map +1 -0
  64. package/dist/reconciliation/diffs/indexes.js +59 -0
  65. package/dist/reconciliation/diffs/indexes.js.map +1 -0
  66. package/dist/reconciliation/diffs/sequence.d.ts +19 -0
  67. package/dist/reconciliation/diffs/sequence.d.ts.map +1 -0
  68. package/dist/reconciliation/diffs/sequence.js +17 -0
  69. package/dist/reconciliation/diffs/sequence.js.map +1 -0
  70. package/dist/reconciliation/diffs/table.d.ts +6 -0
  71. package/dist/reconciliation/diffs/table.d.ts.map +1 -0
  72. package/dist/reconciliation/diffs/table.js +52 -0
  73. package/dist/reconciliation/diffs/table.js.map +1 -0
  74. package/dist/reconciliation/operations/base.d.ts +54 -0
  75. package/dist/reconciliation/operations/base.d.ts.map +1 -0
  76. package/dist/reconciliation/operations/base.js +27 -0
  77. package/dist/reconciliation/operations/base.js.map +1 -0
  78. package/dist/reconciliation/operations/domain.d.ts +7 -0
  79. package/dist/reconciliation/operations/domain.d.ts.map +1 -0
  80. package/dist/reconciliation/operations/domain.js +88 -0
  81. package/dist/reconciliation/operations/domain.js.map +1 -0
  82. package/dist/reconciliation/operations/index.d.ts +6 -0
  83. package/dist/reconciliation/operations/index.d.ts.map +1 -0
  84. package/dist/reconciliation/operations/index.js +35 -0
  85. package/dist/reconciliation/operations/index.js.map +1 -0
  86. package/dist/reconciliation/operations/schema.d.ts +7 -0
  87. package/dist/reconciliation/operations/schema.d.ts.map +1 -0
  88. package/dist/reconciliation/operations/schema.js +41 -0
  89. package/dist/reconciliation/operations/schema.js.map +1 -0
  90. package/dist/reconciliation/operations/sequence.d.ts +7 -0
  91. package/dist/reconciliation/operations/sequence.d.ts.map +1 -0
  92. package/dist/reconciliation/operations/sequence.js +75 -0
  93. package/dist/reconciliation/operations/sequence.js.map +1 -0
  94. package/dist/reconciliation/operations/table.d.ts +9 -0
  95. package/dist/reconciliation/operations/table.d.ts.map +1 -0
  96. package/dist/reconciliation/operations/table.js +513 -0
  97. package/dist/reconciliation/operations/table.js.map +1 -0
  98. package/dist/reconciliation/planner.d.ts +3 -0
  99. package/dist/reconciliation/planner.d.ts.map +1 -0
  100. package/dist/reconciliation/planner.js +125 -0
  101. package/dist/reconciliation/planner.js.map +1 -0
  102. package/dist/reconciliation/reconcile.d.ts +22 -0
  103. package/dist/reconciliation/reconcile.d.ts.map +1 -0
  104. package/dist/reconciliation/reconcile.js +48 -0
  105. package/dist/reconciliation/reconcile.js.map +1 -0
  106. package/dist/runner.d.ts +41 -0
  107. package/dist/runner.d.ts.map +1 -0
  108. package/dist/runner.js +69 -0
  109. package/dist/runner.js.map +1 -0
  110. package/dist/validation/context.d.ts +32 -0
  111. package/dist/validation/context.d.ts.map +1 -0
  112. package/dist/validation/context.js +25 -0
  113. package/dist/validation/context.js.map +1 -0
  114. package/dist/validation/index.d.ts +3 -0
  115. package/dist/validation/index.d.ts.map +1 -0
  116. package/dist/validation/index.js +2 -0
  117. package/dist/validation/index.js.map +1 -0
  118. package/dist/validation/rules/global.d.ts +5 -0
  119. package/dist/validation/rules/global.d.ts.map +1 -0
  120. package/dist/validation/rules/global.js +35 -0
  121. package/dist/validation/rules/global.js.map +1 -0
  122. package/dist/validation/rules/schema.d.ts +4 -0
  123. package/dist/validation/rules/schema.d.ts.map +1 -0
  124. package/dist/validation/rules/schema.js +12 -0
  125. package/dist/validation/rules/schema.js.map +1 -0
  126. package/dist/validation/rules/sequence.d.ts +4 -0
  127. package/dist/validation/rules/sequence.d.ts.map +1 -0
  128. package/dist/validation/rules/sequence.js +13 -0
  129. package/dist/validation/rules/sequence.js.map +1 -0
  130. package/dist/validation/rules/table.d.ts +12 -0
  131. package/dist/validation/rules/table.d.ts.map +1 -0
  132. package/dist/validation/rules/table.js +164 -0
  133. package/dist/validation/rules/table.js.map +1 -0
  134. package/dist/validation/validate.d.ts +13 -0
  135. package/dist/validation/validate.d.ts.map +1 -0
  136. package/dist/validation/validate.js +42 -0
  137. package/dist/validation/validate.js.map +1 -0
  138. package/package.json +2 -2
@@ -0,0 +1,284 @@
1
+ import { sql } from "@dsqlbase/core";
2
+ export const SYSTEM_SCHEMAS = ["pg_catalog", "pg_toast", "information_schema", "sys"];
3
+ const schemas = sql `
4
+ schema_defs AS (
5
+ SELECT json_build_object(
6
+ 'kind', 'SCHEMA',
7
+ 'name', s.name
8
+ ) AS defs
9
+ FROM schemas s
10
+ WHERE s.name != 'public'
11
+ )
12
+ `;
13
+ const columns = sql `
14
+ SELECT json_agg(json_build_object(
15
+ 'kind', 'COLUMN',
16
+ 'name', a.attname,
17
+ 'dataType', pg_catalog.format_type(a.atttypid, a.atttypmod),
18
+ 'notNull', a.attnotnull,
19
+ 'defaultValue', CASE WHEN a.attgenerated = '' THEN (
20
+ SELECT pg_get_expr(d.adbin, d.adrelid)
21
+ FROM pg_attrdef d
22
+ WHERE d.adrelid = c.oid AND d.adnum = a.attnum
23
+ ) ELSE NULL END,
24
+ 'domain', (
25
+ SELECT t.typname
26
+ FROM pg_type t
27
+ WHERE t.oid = a.atttypid AND t.typtype = 'd'
28
+ ),
29
+ 'generated', CASE
30
+ WHEN a.attgenerated = 's' THEN json_build_object(
31
+ 'type', 'ALWAYS',
32
+ 'expression', (
33
+ SELECT pg_get_expr(d.adbin, d.adrelid)
34
+ FROM pg_attrdef d
35
+ WHERE d.adrelid = c.oid AND d.adnum = a.attnum
36
+ ),
37
+ 'mode', 'STORED'
38
+ )
39
+ ELSE NULL
40
+ END,
41
+ 'identity', CASE
42
+ WHEN a.attidentity IN ('a', 'd') THEN (
43
+ SELECT json_build_object(
44
+ 'type', CASE a.attidentity WHEN 'a' THEN 'ALWAYS' ELSE 'BY DEFAULT' END,
45
+ 'sequenceName', sc.relname,
46
+ 'options', json_build_object(
47
+ 'dataType', pg_catalog.format_type(seq.seqtypid, NULL),
48
+ 'cache', seq.seqcache::text,
49
+ 'cycle', seq.seqcycle,
50
+ 'increment', seq.seqincrement::text,
51
+ 'minValue', seq.seqmin::text,
52
+ 'maxValue', seq.seqmax::text,
53
+ 'startValue', seq.seqstart::text,
54
+ 'ownedBy', NULL
55
+ )
56
+ )
57
+ FROM pg_depend dep
58
+ JOIN pg_class sc ON sc.oid = dep.objid AND sc.relkind = 'S'
59
+ JOIN pg_sequence seq ON seq.seqrelid = sc.oid
60
+ WHERE dep.refclassid = 'pg_class'::regclass
61
+ AND dep.refobjid = c.oid
62
+ AND dep.refobjsubid = a.attnum
63
+ AND dep.deptype = 'i'
64
+ LIMIT 1
65
+ )
66
+ ELSE NULL
67
+ END
68
+ ))
69
+ FROM pg_attribute a
70
+ WHERE a.attrelid = c.oid
71
+ AND a.attnum > 0
72
+ AND NOT a.attisdropped
73
+ `;
74
+ const indexes = sql `
75
+ SELECT json_agg(json_build_object(
76
+ 'kind', 'INDEX',
77
+ 'name', ic.relname,
78
+ 'unique', ix.indisunique,
79
+ 'distinctNulls', NOT ix.indnullsnotdistinct,
80
+ 'columns', (
81
+ SELECT json_agg(
82
+ json_build_object(
83
+ 'kind', 'INDEX_COLUMN',
84
+ 'column', pa.attname,
85
+ 'sortDirection', CASE
86
+ WHEN (ix.indoption[col_pos] & 1) = 1 THEN 'DESC'
87
+ ELSE 'ASC'
88
+ END,
89
+ 'nulls', CASE
90
+ WHEN (ix.indoption[col_pos] & 2) = 2 THEN 'FIRST'
91
+ ELSE 'LAST'
92
+ END
93
+ )
94
+ ORDER BY col_pos
95
+ )
96
+ FROM LATERAL unnest(ix.indkey) WITH ORDINALITY AS u(attnum, col_pos)
97
+ JOIN pg_attribute pa
98
+ ON pa.attrelid = c.oid
99
+ AND pa.attnum = u.attnum
100
+ WHERE col_pos <= ix.indnkeyatts
101
+ ),
102
+ 'include', (
103
+ SELECT json_agg(
104
+ pa.attname
105
+ ORDER BY col_pos
106
+ )
107
+ FROM LATERAL unnest(ix.indkey) WITH ORDINALITY AS u(attnum, col_pos)
108
+ JOIN pg_attribute pa
109
+ ON pa.attrelid = c.oid
110
+ AND pa.attnum = u.attnum
111
+ WHERE col_pos > ix.indnkeyatts
112
+ )
113
+ ))
114
+ FROM pg_index ix
115
+ JOIN pg_class ic ON ic.oid = ix.indexrelid
116
+ WHERE ix.indrelid = c.oid
117
+ AND NOT ix.indisprimary
118
+ AND NOT EXISTS (
119
+ SELECT 1 FROM pg_constraint con
120
+ WHERE con.conindid = ix.indexrelid
121
+ AND con.contype IN ('u', 'p')
122
+ )
123
+ `;
124
+ const constraints = sql `
125
+ SELECT json_agg(json_build_object(
126
+ 'kind', CASE con.contype
127
+ WHEN 'p' THEN 'PRIMARY_KEY_CONSTRAINT'
128
+ WHEN 'u' THEN 'UNIQUE_CONSTRAINT'
129
+ WHEN 'c' THEN 'CHECK_CONSTRAINT'
130
+ END,
131
+ 'name', con.conname,
132
+ 'columns', (
133
+ SELECT json_agg(a.attname ORDER BY array_position(con.conkey, a.attnum))
134
+ FROM pg_attribute a
135
+ WHERE a.attrelid = con.conrelid
136
+ AND a.attnum = ANY(con.conkey)
137
+ ),
138
+ 'expression', CASE WHEN con.contype = 'c'
139
+ THEN pg_get_constraintdef(con.oid, true) ELSE NULL END,
140
+ 'distinctNulls', CASE WHEN con.contype = 'u'
141
+ THEN NOT cix.indnullsnotdistinct ELSE NULL END,
142
+ 'include', CASE WHEN con.contype IN ('u', 'p') THEN (
143
+ SELECT json_agg(pa.attname ORDER BY col_pos)
144
+ FROM LATERAL unnest(cix.indkey) WITH ORDINALITY AS u(attnum, col_pos)
145
+ JOIN pg_attribute pa ON pa.attrelid = cix.indrelid AND pa.attnum = u.attnum
146
+ WHERE col_pos > cix.indnkeyatts
147
+ ) ELSE NULL END
148
+ ))
149
+ FROM pg_constraint con
150
+ LEFT JOIN pg_index cix ON cix.indexrelid = con.conindid
151
+ WHERE con.conrelid = c.oid
152
+ AND con.contype IN ('p', 'u', 'c')
153
+ `;
154
+ const tables = sql `
155
+ table_defs AS (
156
+ SELECT json_build_object(
157
+ 'kind', 'TABLE',
158
+ 'name', c.relname,
159
+ 'namespace', s.name,
160
+ 'columns', (${columns}),
161
+ 'indexes', (${indexes}),
162
+ 'constraints', (${constraints})
163
+ ) AS defs
164
+ FROM pg_class c
165
+ JOIN schemas s ON s.oid = c.relnamespace
166
+ WHERE c.relkind = 'r'
167
+ )
168
+ `;
169
+ const domains = sql `
170
+ domain_defs AS (
171
+ SELECT json_build_object(
172
+ 'kind', 'DOMAIN',
173
+ 'name', t.typname,
174
+ 'namespace', s.name,
175
+ 'dataType', pg_catalog.format_type(t.typbasetype, t.typtypmod),
176
+ 'notNull', t.typnotnull,
177
+ 'defaultValue', t.typdefault,
178
+ 'check', (
179
+ SELECT json_build_object(
180
+ 'kind', 'CHECK_CONSTRAINT',
181
+ 'name', con.conname,
182
+ 'expression', pg_get_constraintdef(con.oid, true)
183
+ )
184
+ FROM pg_constraint con
185
+ WHERE con.contypid = t.oid AND con.contype = 'c'
186
+ LIMIT 1
187
+ )
188
+ ) AS defs
189
+ FROM pg_type t
190
+ JOIN schemas s ON s.oid = t.typnamespace
191
+ WHERE t.typtype = 'd'
192
+ )
193
+ `;
194
+ const sequences = sql `
195
+ sequence_defs AS (
196
+ SELECT json_build_object(
197
+ 'kind', 'SEQUENCE',
198
+ 'name', c.relname,
199
+ 'namespace', s.name,
200
+ 'options', json_build_object(
201
+ 'dataType', pg_catalog.format_type(seq.seqtypid, NULL),
202
+ 'startValue', seq.seqstart::text,
203
+ 'minValue', seq.seqmin::text,
204
+ 'maxValue', seq.seqmax::text,
205
+ 'increment', seq.seqincrement::text,
206
+ 'cycle', seq.seqcycle,
207
+ 'cache', seq.seqcache::text,
208
+ 'ownedBy', (
209
+ SELECT format('%I.%I', tc.relname, ta.attname)
210
+ FROM pg_depend dep
211
+ JOIN pg_class tc ON tc.oid = dep.refobjid
212
+ JOIN pg_attribute ta
213
+ ON ta.attrelid = dep.refobjid
214
+ AND ta.attnum = dep.refobjsubid
215
+ WHERE dep.classid = 'pg_class'::regclass
216
+ AND dep.objid = c.oid
217
+ AND dep.refclassid = 'pg_class'::regclass
218
+ AND dep.deptype = 'a'
219
+ LIMIT 1
220
+ )
221
+ )
222
+ ) AS defs
223
+ FROM pg_sequence seq
224
+ JOIN pg_class c ON c.oid = seq.seqrelid
225
+ JOIN schemas s ON s.oid = c.relnamespace
226
+ WHERE NOT EXISTS (
227
+ SELECT 1 FROM pg_depend dep
228
+ WHERE dep.classid = 'pg_class'::regclass
229
+ AND dep.objid = c.oid
230
+ AND dep.deptype = 'i'
231
+ )
232
+ )
233
+ `;
234
+ // Reserved for future stories: VIEW and FUNCTION rows are queried but dropped at the normalizer boundary.
235
+ const views = sql `
236
+ view_defs AS (
237
+ SELECT json_build_object(
238
+ 'kind', 'VIEW',
239
+ 'name', c.relname,
240
+ 'namespace', s.name
241
+ ) AS defs
242
+ FROM pg_class c
243
+ JOIN schemas s ON s.oid = c.relnamespace
244
+ WHERE c.relkind = 'v'
245
+ )
246
+ `;
247
+ const functions = sql `
248
+ function_defs AS (
249
+ SELECT json_build_object(
250
+ 'kind', 'FUNCTION',
251
+ 'name', p.proname,
252
+ 'namespace', s.name
253
+ ) AS defs
254
+ FROM pg_proc p
255
+ JOIN schemas s ON s.oid = p.pronamespace
256
+ WHERE p.prokind = 'f'
257
+ )
258
+ `;
259
+ export const introspection = sql `
260
+ WITH schemas AS (
261
+ SELECT n.oid, n.nspname AS name
262
+ FROM pg_namespace n
263
+ WHERE n.nspname NOT IN ('pg_catalog', 'pg_toast', 'information_schema', 'sys')
264
+ AND n.nspname NOT LIKE 'pg_temp_%'
265
+ AND n.nspname NOT LIKE 'pg_toast_temp_%'
266
+ ),
267
+ ${schemas},
268
+ ${tables},
269
+ ${domains},
270
+ ${sequences},
271
+ ${views},
272
+ ${functions}
273
+ -- Concatenate all definitions into a single array
274
+ SELECT COALESCE(json_agg(d.defs), '[]'::json) AS definitions
275
+ FROM (
276
+ SELECT defs FROM schema_defs UNION ALL
277
+ SELECT defs FROM domain_defs UNION ALL
278
+ SELECT defs FROM table_defs UNION ALL
279
+ SELECT defs FROM sequence_defs UNION ALL
280
+ SELECT defs FROM view_defs UNION ALL
281
+ SELECT defs FROM function_defs
282
+ ) d
283
+ `;
284
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/introspection/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;AAEtF,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;CASlB,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DlB,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlB,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BtB,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;oBAME,OAAO;oBACP,OAAO;wBACH,WAAW;;;;;;CAMlC,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwBlB,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCpB,CAAC;AAEF,0GAA0G;AAC1G,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;;;CAWhB,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;CAWpB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;IAQ5B,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,KAAK;IACL,SAAS;;;;;;;;;;;CAWZ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { DefinitionNode } from "@dsqlbase/core/definition";
2
+ import { SerializedObject } from "../../base.js";
3
+ export type DiffType = "add" | "remove" | "modify";
4
+ export type DiffValue<TType extends DiffType, TObject extends SerializedObject<DefinitionNode>> = TType extends "modify" ? TObject[keyof TObject] extends (infer V)[] ? V : TObject[keyof TObject] : TObject;
5
+ export interface Diff<TType extends DiffType, TObject extends SerializedObject<DefinitionNode>> {
6
+ type: TType;
7
+ kind: TObject["kind"];
8
+ name: TObject["name"];
9
+ object: TObject;
10
+ key?: keyof TObject;
11
+ value?: DiffValue<TType, TObject>;
12
+ prevValue?: DiffValue<TType, TObject>;
13
+ }
14
+ export type AnyDiff<T extends DefinitionNode = DefinitionNode> = Diff<DiffType, SerializedObject<T>>;
15
+ export declare function isDefined<T>(value: T | undefined | null): value is Exclude<T, undefined | null>;
16
+ export declare function sortedArray<T>(array: T[]): T[];
17
+ export declare function hasDiff<T extends object>(local: T | null | undefined, remote: T | null | undefined, key: keyof T): boolean;
18
+ export declare function diffType<T extends object>(local: T, remote: T, key: keyof T): DiffType;
19
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/reconciliation/diffs/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAsB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACnD,MAAM,MAAM,SAAS,CACnB,KAAK,SAAS,QAAQ,EACtB,OAAO,SAAS,gBAAgB,CAAC,cAAc,CAAC,IAC9C,KAAK,SAAS,QAAQ,GACtB,OAAO,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACxC,CAAC,GACD,OAAO,CAAC,MAAM,OAAO,CAAC,GACxB,OAAO,CAAC;AAEZ,MAAM,WAAW,IAAI,CAAC,KAAK,SAAS,QAAQ,EAAE,OAAO,SAAS,gBAAgB,CAAC,cAAc,CAAC;IAC5F,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,IAAI,CACnE,QAAQ,EACR,gBAAgB,CAAC,CAAC,CAAC,CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAE/F;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAY9C;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACtC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC5B,GAAG,EAAE,MAAM,CAAC,GACX,OAAO,CAyCT;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAUtF"}
@@ -0,0 +1,58 @@
1
+ import { isDefinitionObject } from "../../base.js";
2
+ export function isDefined(value) {
3
+ return value !== undefined && value !== null;
4
+ }
5
+ export function sortedArray(array) {
6
+ return array.sort((a, b) => {
7
+ if (typeof a === "string" && typeof b === "string") {
8
+ return a.localeCompare(b);
9
+ }
10
+ if (isDefinitionObject(a) && isDefinitionObject(b)) {
11
+ return a.name.localeCompare(b.name);
12
+ }
13
+ return 0;
14
+ });
15
+ }
16
+ export function hasDiff(local, remote, key) {
17
+ if (!isDefined(local)) {
18
+ return isDefined(remote);
19
+ }
20
+ if (!isDefined(remote)) {
21
+ return true;
22
+ }
23
+ const localValue = local[key];
24
+ const remoteValue = remote[key];
25
+ if (typeof localValue !== typeof remoteValue) {
26
+ return true;
27
+ }
28
+ if (typeof localValue === "object" && localValue !== null) {
29
+ if (Array.isArray(localValue) && Array.isArray(remoteValue)) {
30
+ if (localValue.length !== remoteValue.length) {
31
+ return true;
32
+ }
33
+ for (let i = 0; i < localValue.length; i++) {
34
+ if (hasDiff(sortedArray(localValue), sortedArray(remoteValue), i)) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ for (const subKey of Object.keys(localValue)) {
41
+ if (hasDiff(localValue, remoteValue, subKey)) {
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+ return localValue !== remoteValue;
48
+ }
49
+ export function diffType(local, remote, key) {
50
+ if (isDefined(local[key]) && !isDefined(remote[key])) {
51
+ return "add";
52
+ }
53
+ if (!isDefined(local[key]) && isDefined(remote[key])) {
54
+ return "remove";
55
+ }
56
+ return "modify";
57
+ }
58
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/reconciliation/diffs/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { AnyColumnDefinition } from "@dsqlbase/core/definition";
2
+ import { SerializedObject } from "../../base.js";
3
+ import { Diff, DiffType } from "./base.js";
4
+ export declare function diffColumn(local: SerializedObject<AnyColumnDefinition>, remote?: SerializedObject<AnyColumnDefinition>): (Diff<DiffType, {
5
+ readonly kind: "COLUMN";
6
+ readonly name: string;
7
+ readonly dataType: string;
8
+ readonly notNull: boolean;
9
+ readonly primaryKey: boolean;
10
+ readonly unique: boolean;
11
+ readonly defaultValue: string | null;
12
+ readonly check: {
13
+ readonly kind: "CHECK_CONSTRAINT";
14
+ readonly name: string;
15
+ readonly expression: string;
16
+ } | null;
17
+ readonly domain: string | null;
18
+ readonly generated: {
19
+ type: "ALWAYS";
20
+ expression: string;
21
+ mode: "STORED";
22
+ } | null;
23
+ readonly identity: {
24
+ type: import("@dsqlbase/core/definition").ColumnGeneratedType;
25
+ sequenceName: string | undefined;
26
+ options: {
27
+ dataType: string | undefined;
28
+ cache: number | undefined;
29
+ cycle: boolean | undefined;
30
+ increment: number | undefined;
31
+ minValue: number | undefined;
32
+ maxValue: number | undefined;
33
+ startValue: number | undefined;
34
+ ownedBy: string | undefined;
35
+ } | null;
36
+ } | null;
37
+ }> | Diff<DiffType, {
38
+ readonly kind: "CHECK_CONSTRAINT";
39
+ readonly name: string;
40
+ readonly expression: string;
41
+ }>)[];
42
+ //# sourceMappingURL=column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/reconciliation/diffs/column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAY,QAAQ,EAAW,MAAM,WAAW,CAAC;AAE9D,wBAAgB,UAAU,CACxB,KAAK,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,EAC5C,MAAM,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsD/C"}
@@ -0,0 +1,48 @@
1
+ import { diffType, hasDiff } from "./base.js";
2
+ export function diffColumn(local, remote) {
3
+ const diffs = [];
4
+ if (!remote) {
5
+ diffs.push({
6
+ type: "add",
7
+ kind: local.kind,
8
+ name: local.name,
9
+ object: local,
10
+ });
11
+ return diffs;
12
+ }
13
+ for (const key of [
14
+ "dataType",
15
+ "notNull",
16
+ "defaultValue",
17
+ "domain",
18
+ "primaryKey",
19
+ "unique",
20
+ "generated",
21
+ "identity",
22
+ ]) {
23
+ if (hasDiff(local, remote, key)) {
24
+ diffs.push({
25
+ type: diffType(local, remote, key),
26
+ kind: local.kind,
27
+ name: local.name,
28
+ object: local,
29
+ key,
30
+ value: local[key],
31
+ prevValue: remote[key],
32
+ });
33
+ }
34
+ }
35
+ if (hasDiff(local.check, remote.check, "name")) {
36
+ diffs.push({
37
+ type: diffType(local, remote, "check"),
38
+ kind: local.kind,
39
+ name: local.name,
40
+ object: local,
41
+ key: "check",
42
+ value: local.check,
43
+ prevValue: remote.check,
44
+ });
45
+ }
46
+ return diffs;
47
+ }
48
+ //# sourceMappingURL=column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/reconciliation/diffs/column.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,QAAQ,EAAY,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,UAAU,UAAU,CACxB,KAA4C,EAC5C,MAA8C;IAE9C,MAAM,KAAK,GAGL,EAAE,CAAC;IAET,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,UAAU;QACV,SAAS;QACT,cAAc;QACd,QAAQ;QACR,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,UAAU;KACF,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;gBAClC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK;gBACb,GAAG;gBACH,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;gBACjB,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;YACtC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,MAAM,CAAC,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AnyCheckConstraintDefinition, AnyConstraintDefinition, AnyPrimaryKeyConstraintDefinition, AnyUniqueConstraintDefinition } from "@dsqlbase/core/definition";
2
+ import { SerializedObject } from "../../base.js";
3
+ import { Diff, DiffType } from "./base.js";
4
+ export type ConstraintDiff = Diff<DiffType, SerializedObject<AnyCheckConstraintDefinition>> | Diff<DiffType, SerializedObject<AnyPrimaryKeyConstraintDefinition>> | Diff<DiffType, SerializedObject<AnyUniqueConstraintDefinition>> | Diff<DiffType, SerializedObject<AnyConstraintDefinition>>;
5
+ export declare function diffCheckConstraint(local: SerializedObject<AnyCheckConstraintDefinition>, remote?: SerializedObject<AnyCheckConstraintDefinition>): Diff<DiffType, SerializedObject<AnyCheckConstraintDefinition>>[];
6
+ export declare function diffPrimaryKeyConstraint(local: SerializedObject<AnyPrimaryKeyConstraintDefinition>, remote?: SerializedObject<AnyPrimaryKeyConstraintDefinition>): Diff<DiffType, SerializedObject<AnyPrimaryKeyConstraintDefinition>>[];
7
+ export declare function diffUniqueConstraint(local: SerializedObject<AnyUniqueConstraintDefinition>, remote?: SerializedObject<AnyUniqueConstraintDefinition>): Diff<DiffType, SerializedObject<AnyUniqueConstraintDefinition>>[];
8
+ export declare function diffConstraint<T extends SerializedObject<AnyConstraintDefinition>>(local: T, remote?: T): ConstraintDiff[];
9
+ //# sourceMappingURL=constraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../../../src/reconciliation/diffs/constraint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,iCAAiC,EACjC,6BAA6B,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAW,MAAM,WAAW,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,GAC9D,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,CAAC,GACnE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,GAC/D,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAE9D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,EACrD,MAAM,CAAC,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,GACtD,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,EAAE,CA2BlE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,EAC1D,MAAM,CAAC,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,GAC3D,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,CAAC,EAAE,CAuCvE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,EACtD,MAAM,CAAC,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,GACvD,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAmDnE;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,CAAC,uBAAuB,CAAC,EAChF,KAAK,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,CAAC,GACT,cAAc,EAAE,CAyBlB"}
@@ -0,0 +1,122 @@
1
+ import { hasDiff } from "./base.js";
2
+ export function diffCheckConstraint(local, remote) {
3
+ const diffs = [];
4
+ if (!remote) {
5
+ diffs.push({
6
+ type: "add",
7
+ kind: local.kind,
8
+ name: local.name,
9
+ object: local,
10
+ });
11
+ return diffs;
12
+ }
13
+ if (hasDiff(local, remote, "name")) {
14
+ diffs.push({
15
+ type: "modify",
16
+ kind: local.kind,
17
+ name: local.name,
18
+ key: "name",
19
+ object: local,
20
+ value: local,
21
+ prevValue: remote,
22
+ });
23
+ }
24
+ return diffs;
25
+ }
26
+ export function diffPrimaryKeyConstraint(local, remote) {
27
+ const diffs = [];
28
+ if (!remote) {
29
+ diffs.push({
30
+ type: "add",
31
+ kind: local.kind,
32
+ name: local.name,
33
+ object: local,
34
+ });
35
+ return diffs;
36
+ }
37
+ if (hasDiff(local, remote, "columns")) {
38
+ diffs.push({
39
+ type: "modify",
40
+ kind: local.kind,
41
+ name: local.name,
42
+ object: local,
43
+ key: "columns",
44
+ value: local.columns,
45
+ prevValue: remote.columns,
46
+ });
47
+ }
48
+ if (hasDiff(local, remote, "include")) {
49
+ diffs.push({
50
+ type: "modify",
51
+ kind: local.kind,
52
+ name: local.name,
53
+ object: local,
54
+ key: "include",
55
+ value: local.include,
56
+ prevValue: remote.include,
57
+ });
58
+ }
59
+ return diffs;
60
+ }
61
+ export function diffUniqueConstraint(local, remote) {
62
+ const diffs = [];
63
+ if (!remote) {
64
+ diffs.push({
65
+ type: "add",
66
+ kind: local.kind,
67
+ name: local.name,
68
+ object: local,
69
+ });
70
+ return diffs;
71
+ }
72
+ if (hasDiff(local, remote, "columns")) {
73
+ diffs.push({
74
+ type: "modify",
75
+ kind: local.kind,
76
+ name: local.name,
77
+ object: local,
78
+ key: "columns",
79
+ value: local.columns,
80
+ prevValue: remote.columns,
81
+ });
82
+ }
83
+ if (hasDiff(local, remote, "include")) {
84
+ diffs.push({
85
+ type: "modify",
86
+ kind: local.kind,
87
+ name: local.name,
88
+ object: local,
89
+ key: "include",
90
+ value: local.include,
91
+ prevValue: remote.include,
92
+ });
93
+ }
94
+ if (hasDiff(local, remote, "distinctNulls")) {
95
+ diffs.push({
96
+ type: "modify",
97
+ kind: local.kind,
98
+ name: local.name,
99
+ object: local,
100
+ key: "distinctNulls",
101
+ value: local.distinctNulls,
102
+ prevValue: remote.distinctNulls,
103
+ });
104
+ }
105
+ return diffs;
106
+ }
107
+ export function diffConstraint(local, remote) {
108
+ const diffs = [];
109
+ switch (local.kind) {
110
+ case "CHECK_CONSTRAINT":
111
+ diffs.push(...diffCheckConstraint(local, remote));
112
+ break;
113
+ case "PRIMARY_KEY_CONSTRAINT":
114
+ diffs.push(...diffPrimaryKeyConstraint(local, remote));
115
+ break;
116
+ case "UNIQUE_CONSTRAINT":
117
+ diffs.push(...diffUniqueConstraint(local, remote));
118
+ break;
119
+ }
120
+ return diffs;
121
+ }
122
+ //# sourceMappingURL=constraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../../src/reconciliation/diffs/constraint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { AnyDomainDefinition } from "@dsqlbase/core";
2
+ import { SerializedObject } from "../../base.js";
3
+ import { Diff, DiffType } from "./base.js";
4
+ export declare function diffDomain(local: SerializedObject<AnyDomainDefinition>, remote: SerializedObject<AnyDomainDefinition>): Diff<DiffType, {
5
+ readonly kind: "DOMAIN";
6
+ readonly name: string;
7
+ readonly namespace: string;
8
+ readonly dataType: string;
9
+ readonly notNull: boolean;
10
+ readonly defaultValue: string | undefined;
11
+ readonly check: {
12
+ readonly kind: "CHECK_CONSTRAINT";
13
+ readonly name: string;
14
+ readonly expression: string;
15
+ } | undefined;
16
+ }>[];
17
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/reconciliation/diffs/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAY,QAAQ,EAAW,MAAM,WAAW,CAAC;AAE9D,wBAAgB,UAAU,CACxB,KAAK,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,EAC5C,MAAM,EAAE,gBAAgB,CAAC,mBAAmB,CAAC;;;;;;;;;;;;KA+B9C"}