@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.
- package/CHANGELOG.md +21 -0
- package/dist/base.d.ts +87 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +53 -0
- package/dist/base.js.map +1 -0
- package/dist/ddl/ast.d.ts +267 -0
- package/dist/ddl/ast.d.ts.map +1 -0
- package/dist/ddl/ast.js +10 -0
- package/dist/ddl/ast.js.map +1 -0
- package/dist/ddl/factory.d.ts +88 -0
- package/dist/ddl/factory.d.ts.map +1 -0
- package/dist/ddl/factory.js +186 -0
- package/dist/ddl/factory.js.map +1 -0
- package/dist/ddl/index.d.ts +5 -0
- package/dist/ddl/index.d.ts.map +1 -0
- package/dist/ddl/index.js +4 -0
- package/dist/ddl/index.js.map +1 -0
- package/dist/ddl/printer.d.ts +21 -0
- package/dist/ddl/printer.d.ts.map +1 -0
- package/dist/ddl/printer.js +278 -0
- package/dist/ddl/printer.js.map +1 -0
- package/dist/ddl/schema.d.ts +33 -0
- package/dist/ddl/schema.d.ts.map +1 -0
- package/dist/ddl/schema.js +133 -0
- package/dist/ddl/schema.js.map +1 -0
- package/dist/executor.d.ts +29 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +93 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/introspection/introspect.d.ts +8 -0
- package/dist/introspection/introspect.d.ts.map +1 -0
- package/dist/introspection/introspect.js +14 -0
- package/dist/introspection/introspect.js.map +1 -0
- package/dist/introspection/normalizer.d.ts +96 -0
- package/dist/introspection/normalizer.d.ts.map +1 -0
- package/dist/introspection/normalizer.js +187 -0
- package/dist/introspection/normalizer.js.map +1 -0
- package/dist/introspection/query.d.ts +3 -0
- package/dist/introspection/query.d.ts.map +1 -0
- package/dist/introspection/query.js +284 -0
- package/dist/introspection/query.js.map +1 -0
- package/dist/reconciliation/diffs/base.d.ts +19 -0
- package/dist/reconciliation/diffs/base.d.ts.map +1 -0
- package/dist/reconciliation/diffs/base.js +58 -0
- package/dist/reconciliation/diffs/base.js.map +1 -0
- package/dist/reconciliation/diffs/column.d.ts +42 -0
- package/dist/reconciliation/diffs/column.d.ts.map +1 -0
- package/dist/reconciliation/diffs/column.js +48 -0
- package/dist/reconciliation/diffs/column.js.map +1 -0
- package/dist/reconciliation/diffs/constraint.d.ts +9 -0
- package/dist/reconciliation/diffs/constraint.d.ts.map +1 -0
- package/dist/reconciliation/diffs/constraint.js +122 -0
- package/dist/reconciliation/diffs/constraint.js.map +1 -0
- package/dist/reconciliation/diffs/domain.d.ts +17 -0
- package/dist/reconciliation/diffs/domain.d.ts.map +1 -0
- package/dist/reconciliation/diffs/domain.js +30 -0
- package/dist/reconciliation/diffs/domain.js.map +1 -0
- package/dist/reconciliation/diffs/indexes.d.ts +18 -0
- package/dist/reconciliation/diffs/indexes.d.ts.map +1 -0
- package/dist/reconciliation/diffs/indexes.js +59 -0
- package/dist/reconciliation/diffs/indexes.js.map +1 -0
- package/dist/reconciliation/diffs/sequence.d.ts +19 -0
- package/dist/reconciliation/diffs/sequence.d.ts.map +1 -0
- package/dist/reconciliation/diffs/sequence.js +17 -0
- package/dist/reconciliation/diffs/sequence.js.map +1 -0
- package/dist/reconciliation/diffs/table.d.ts +6 -0
- package/dist/reconciliation/diffs/table.d.ts.map +1 -0
- package/dist/reconciliation/diffs/table.js +52 -0
- package/dist/reconciliation/diffs/table.js.map +1 -0
- package/dist/reconciliation/operations/base.d.ts +54 -0
- package/dist/reconciliation/operations/base.d.ts.map +1 -0
- package/dist/reconciliation/operations/base.js +27 -0
- package/dist/reconciliation/operations/base.js.map +1 -0
- package/dist/reconciliation/operations/domain.d.ts +7 -0
- package/dist/reconciliation/operations/domain.d.ts.map +1 -0
- package/dist/reconciliation/operations/domain.js +88 -0
- package/dist/reconciliation/operations/domain.js.map +1 -0
- package/dist/reconciliation/operations/index.d.ts +6 -0
- package/dist/reconciliation/operations/index.d.ts.map +1 -0
- package/dist/reconciliation/operations/index.js +35 -0
- package/dist/reconciliation/operations/index.js.map +1 -0
- package/dist/reconciliation/operations/schema.d.ts +7 -0
- package/dist/reconciliation/operations/schema.d.ts.map +1 -0
- package/dist/reconciliation/operations/schema.js +41 -0
- package/dist/reconciliation/operations/schema.js.map +1 -0
- package/dist/reconciliation/operations/sequence.d.ts +7 -0
- package/dist/reconciliation/operations/sequence.d.ts.map +1 -0
- package/dist/reconciliation/operations/sequence.js +75 -0
- package/dist/reconciliation/operations/sequence.js.map +1 -0
- package/dist/reconciliation/operations/table.d.ts +9 -0
- package/dist/reconciliation/operations/table.d.ts.map +1 -0
- package/dist/reconciliation/operations/table.js +513 -0
- package/dist/reconciliation/operations/table.js.map +1 -0
- package/dist/reconciliation/planner.d.ts +3 -0
- package/dist/reconciliation/planner.d.ts.map +1 -0
- package/dist/reconciliation/planner.js +125 -0
- package/dist/reconciliation/planner.js.map +1 -0
- package/dist/reconciliation/reconcile.d.ts +22 -0
- package/dist/reconciliation/reconcile.d.ts.map +1 -0
- package/dist/reconciliation/reconcile.js +48 -0
- package/dist/reconciliation/reconcile.js.map +1 -0
- package/dist/runner.d.ts +41 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +69 -0
- package/dist/runner.js.map +1 -0
- package/dist/validation/context.d.ts +32 -0
- package/dist/validation/context.d.ts.map +1 -0
- package/dist/validation/context.js +25 -0
- package/dist/validation/context.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/rules/global.d.ts +5 -0
- package/dist/validation/rules/global.d.ts.map +1 -0
- package/dist/validation/rules/global.js +35 -0
- package/dist/validation/rules/global.js.map +1 -0
- package/dist/validation/rules/schema.d.ts +4 -0
- package/dist/validation/rules/schema.d.ts.map +1 -0
- package/dist/validation/rules/schema.js +12 -0
- package/dist/validation/rules/schema.js.map +1 -0
- package/dist/validation/rules/sequence.d.ts +4 -0
- package/dist/validation/rules/sequence.d.ts.map +1 -0
- package/dist/validation/rules/sequence.js +13 -0
- package/dist/validation/rules/sequence.js.map +1 -0
- package/dist/validation/rules/table.d.ts +12 -0
- package/dist/validation/rules/table.d.ts.map +1 -0
- package/dist/validation/rules/table.js +164 -0
- package/dist/validation/rules/table.js.map +1 -0
- package/dist/validation/validate.d.ts +13 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +42 -0
- package/dist/validation/validate.js.map +1 -0
- 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":"AAOA,OAAO,EAAkB,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpD,MAAM,UAAU,mBAAmB,CACjC,KAAqD,EACrD,MAAuD;IAEvD,MAAM,KAAK,GAAqE,EAAE,CAAC;IAEnF,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,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAA0D,EAC1D,MAA4D;IAE5D,MAAM,KAAK,GAA0E,EAAE,CAAC;IAExF,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,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAsD,EACtD,MAAwD;IAExD,MAAM,KAAK,GAAsE,EAAE,CAAC;IAEpF,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,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,KAAK,CAAC,aAAa;YAC1B,SAAS,EAAE,MAAM,CAAC,aAAa;SAChC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAQ,EACR,MAAU;IAEV,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,kBAAkB;YACrB,KAAK,CAAC,IAAI,CACR,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAwD,CAAC,CACxF,CAAC;YACF,MAAM;QACR,KAAK,wBAAwB;YAC3B,KAAK,CAAC,IAAI,CACR,GAAG,wBAAwB,CACzB,KAAK,EACL,MAA6D,CAC9D,CACF,CAAC;YACF,MAAM;QACR,KAAK,mBAAmB;YACtB,KAAK,CAAC,IAAI,CACR,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAyD,CAAC,CAC1F,CAAC;YACF,MAAM;IACV,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -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"}
|