@query-doctor/core 0.8.9 → 0.10.0
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/dist/index.cjs +21 -1
- package/dist/index.d.cts +8 -5
- package/dist/index.d.mts +8 -5
- package/dist/index.mjs +5 -3
- package/dist/optimizer/genalgo.cjs +5 -5
- package/dist/optimizer/genalgo.cjs.map +1 -1
- package/dist/optimizer/genalgo.d.cts +6 -5
- package/dist/optimizer/genalgo.d.cts.map +1 -1
- package/dist/optimizer/genalgo.d.mts +6 -5
- package/dist/optimizer/genalgo.d.mts.map +1 -1
- package/dist/optimizer/genalgo.mjs +5 -5
- package/dist/optimizer/genalgo.mjs.map +1 -1
- package/dist/optimizer/statistics.cjs +1 -61
- package/dist/optimizer/statistics.cjs.map +1 -1
- package/dist/optimizer/statistics.d.cts +1 -20
- package/dist/optimizer/statistics.d.cts.map +1 -1
- package/dist/optimizer/statistics.d.mts +1 -20
- package/dist/optimizer/statistics.d.mts.map +1 -1
- package/dist/optimizer/statistics.mjs +1 -61
- package/dist/optimizer/statistics.mjs.map +1 -1
- package/dist/query.cjs +33 -0
- package/dist/query.cjs.map +1 -0
- package/dist/query.d.cts +105 -0
- package/dist/query.d.cts.map +1 -0
- package/dist/query.d.mts +105 -0
- package/dist/query.d.mts.map +1 -0
- package/dist/query.mjs +31 -0
- package/dist/query.mjs.map +1 -0
- package/dist/schema-dump.cjs +365 -0
- package/dist/schema-dump.cjs.map +1 -0
- package/dist/schema-dump.mjs +365 -0
- package/dist/schema-dump.mjs.map +1 -0
- package/dist/schema.cjs +172 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +352 -0
- package/dist/schema.d.cts.map +1 -0
- package/dist/schema.d.mts +352 -0
- package/dist/schema.d.mts.map +1 -0
- package/dist/schema.mjs +157 -0
- package/dist/schema.mjs.map +1 -0
- package/dist/sql/database.d.cts +1 -1
- package/dist/sql/database.d.mts +1 -1
- package/dist/sql/indexes.cjs +51 -2
- package/dist/sql/indexes.cjs.map +1 -1
- package/dist/sql/indexes.d.cts +20 -4
- package/dist/sql/indexes.d.cts.map +1 -1
- package/dist/sql/indexes.d.mts +20 -4
- package/dist/sql/indexes.d.mts.map +1 -1
- package/dist/sql/indexes.mjs +51 -3
- package/dist/sql/indexes.mjs.map +1 -1
- package/dist/sql/walker.cjs +1 -1
- package/dist/sql/walker.mjs +1 -1
- package/dist/websocket-server.d.cts +68 -0
- package/dist/websocket-server.d.cts.map +1 -0
- package/dist/websocket-server.d.mts +68 -0
- package/dist/websocket-server.d.mts.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
//#region src/schema-dump.ts
|
|
3
|
+
const SCHEMA_DUMP_SQL = `WITH all_indexes AS (
|
|
4
|
+
SELECT
|
|
5
|
+
jsonb_strip_nulls(
|
|
6
|
+
jsonb_build_object(
|
|
7
|
+
'type', 'index',
|
|
8
|
+
'oid', i.oid::integer,
|
|
9
|
+
'schemaName', quote_ident(n.nspname),
|
|
10
|
+
'tableName', quote_ident(t.relname),
|
|
11
|
+
'indexName', quote_ident(i.relname),
|
|
12
|
+
'indexType', am.amname,
|
|
13
|
+
'isUnique', ix.indisunique,
|
|
14
|
+
'isPrimary', ix.indisprimary,
|
|
15
|
+
'isClustered', ix.indisclustered,
|
|
16
|
+
'wherePredicate', pg_get_expr(ix.indpred, t.oid),
|
|
17
|
+
'tablespace', ts.spcname,
|
|
18
|
+
'keyColumns', (
|
|
19
|
+
SELECT
|
|
20
|
+
jsonb_agg(
|
|
21
|
+
jsonb_strip_nulls(jsonb_build_object(
|
|
22
|
+
'type', 'indexColumn',
|
|
23
|
+
'name',
|
|
24
|
+
pg_get_indexdef(i.oid, k.ordinality, true),
|
|
25
|
+
'order',
|
|
26
|
+
CASE WHEN (ix.indoption[k.ordinality - 1] & 1) = 1 THEN 'DESC' ELSE 'ASC' END,
|
|
27
|
+
'nulls',
|
|
28
|
+
CASE
|
|
29
|
+
WHEN (ix.indoption[k.ordinality - 1] & 2) = 2 THEN 'FIRST'
|
|
30
|
+
WHEN (ix.indoption[k.ordinality - 1] & 4) = 4 THEN 'LAST'
|
|
31
|
+
ELSE NULL
|
|
32
|
+
END,
|
|
33
|
+
'opclass',
|
|
34
|
+
(SELECT opcname FROM pg_opclass WHERE oid = ix.indclass[k.ordinality - 1]),
|
|
35
|
+
'collation',
|
|
36
|
+
(SELECT collname FROM pg_collation WHERE oid = ix.indcollation[k.ordinality - 1] AND collname <> 'default')
|
|
37
|
+
))
|
|
38
|
+
ORDER BY k.ordinality
|
|
39
|
+
)
|
|
40
|
+
FROM
|
|
41
|
+
generate_series(1, ix.indnkeyatts) AS k(ordinality)
|
|
42
|
+
),
|
|
43
|
+
'includedColumns', (
|
|
44
|
+
CASE WHEN ix.indnatts = ix.indnkeyatts THEN NULL
|
|
45
|
+
ELSE (
|
|
46
|
+
SELECT
|
|
47
|
+
jsonb_agg(
|
|
48
|
+
jsonb_build_object(
|
|
49
|
+
'type', 'indexColumnIncluded',
|
|
50
|
+
'name', pg_get_indexdef(i.oid, k.ordinality, true)
|
|
51
|
+
)
|
|
52
|
+
ORDER BY k.ordinality
|
|
53
|
+
)
|
|
54
|
+
FROM
|
|
55
|
+
generate_series(ix.indnkeyatts + 1, ix.indnatts) AS k(ordinality)
|
|
56
|
+
)
|
|
57
|
+
END
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
) AS index_metadata
|
|
61
|
+
FROM
|
|
62
|
+
pg_class t
|
|
63
|
+
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
64
|
+
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
65
|
+
JOIN pg_am am ON i.relam = am.oid
|
|
66
|
+
JOIN pg_namespace n ON t.relnamespace = n.oid
|
|
67
|
+
LEFT JOIN pg_tablespace ts ON i.reltablespace = ts.oid
|
|
68
|
+
WHERE
|
|
69
|
+
n.nspname not like 'pg_%' AND
|
|
70
|
+
n.nspname not like '_timescaledb_%' AND
|
|
71
|
+
t.relispartition = false
|
|
72
|
+
ORDER BY
|
|
73
|
+
n.nspname, t.relname, i.relname
|
|
74
|
+
),
|
|
75
|
+
all_tables as (
|
|
76
|
+
SELECT
|
|
77
|
+
jsonb_strip_nulls(
|
|
78
|
+
jsonb_build_object(
|
|
79
|
+
'type', 'table',
|
|
80
|
+
'oid', c.oid::integer,
|
|
81
|
+
'schemaName', quote_ident(n.nspname),
|
|
82
|
+
'tableName', quote_ident(c.relname),
|
|
83
|
+
'tablespace', quote_ident(ts.spcname),
|
|
84
|
+
'partitionKeyDef', pg_get_partkeydef(c.oid),
|
|
85
|
+
'columns', (
|
|
86
|
+
SELECT
|
|
87
|
+
jsonb_agg(
|
|
88
|
+
jsonb_strip_nulls(
|
|
89
|
+
jsonb_build_object(
|
|
90
|
+
'type', 'column',
|
|
91
|
+
'name', quote_ident(a.attname),
|
|
92
|
+
'order', a.attnum,
|
|
93
|
+
'columnType', format_type(a.atttypid, a.atttypmod),
|
|
94
|
+
'isNullable', NOT a.attnotnull,
|
|
95
|
+
'defaultValue', pg_get_expr(ad.adbin, c.oid),
|
|
96
|
+
'dropped', a.attisdropped,
|
|
97
|
+
'collation', (
|
|
98
|
+
SELECT quote_ident(coll.collname)
|
|
99
|
+
FROM pg_collation coll
|
|
100
|
+
WHERE a.attcollation = coll.oid AND coll.collname <> 'default'
|
|
101
|
+
),
|
|
102
|
+
'storage',
|
|
103
|
+
CASE a.attstorage
|
|
104
|
+
WHEN 'p' THEN 'plain'
|
|
105
|
+
WHEN 'm' THEN 'main'
|
|
106
|
+
WHEN 'e' THEN 'external'
|
|
107
|
+
WHEN 'x' THEN 'extended'
|
|
108
|
+
END,
|
|
109
|
+
'isIdentity',
|
|
110
|
+
CASE a.attidentity
|
|
111
|
+
WHEN 'a' THEN 'always'
|
|
112
|
+
WHEN 'd' THEN 'by default'
|
|
113
|
+
END
|
|
114
|
+
)
|
|
115
|
+
)
|
|
116
|
+
ORDER BY a.attnum
|
|
117
|
+
)
|
|
118
|
+
FROM
|
|
119
|
+
pg_attribute a
|
|
120
|
+
LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum
|
|
121
|
+
WHERE
|
|
122
|
+
a.attrelid = c.oid
|
|
123
|
+
AND a.attnum > 0
|
|
124
|
+
AND NOT a.attisdropped
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
) AS table_metadata
|
|
128
|
+
FROM
|
|
129
|
+
pg_class c
|
|
130
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
131
|
+
LEFT JOIN pg_tablespace ts ON c.reltablespace = ts.oid
|
|
132
|
+
WHERE
|
|
133
|
+
n.nspname not like 'pg_%'
|
|
134
|
+
AND n.nspname <> 'information_schema'
|
|
135
|
+
AND c.relkind in ('r', 'm')
|
|
136
|
+
AND c.relispartition = false
|
|
137
|
+
ORDER BY
|
|
138
|
+
n.nspname, c.relname
|
|
139
|
+
),
|
|
140
|
+
all_constraints as (
|
|
141
|
+
SELECT
|
|
142
|
+
jsonb_strip_nulls(
|
|
143
|
+
jsonb_build_object(
|
|
144
|
+
'type', 'constraint',
|
|
145
|
+
'oid', con.oid::integer,
|
|
146
|
+
'schemaName', quote_ident(n.nspname),
|
|
147
|
+
'tableName', quote_ident(c.relname),
|
|
148
|
+
'constraintName', quote_ident(con.conname),
|
|
149
|
+
'constraintType',
|
|
150
|
+
CASE con.contype
|
|
151
|
+
WHEN 'c' THEN 'check'
|
|
152
|
+
WHEN 'f' THEN 'foreign_key'
|
|
153
|
+
WHEN 'n' THEN 'not_null'
|
|
154
|
+
WHEN 'p' THEN 'primary_key'
|
|
155
|
+
WHEN 'u' THEN 'unique'
|
|
156
|
+
WHEN 't' THEN 'trigger'
|
|
157
|
+
WHEN 'x' THEN 'exclusion'
|
|
158
|
+
ELSE con.contype
|
|
159
|
+
END,
|
|
160
|
+
'definition', pg_get_constraintdef(con.oid),
|
|
161
|
+
'isDeferrable', con.condeferrable,
|
|
162
|
+
'isInitiallyDeferred', con.condeferred,
|
|
163
|
+
'isValidated', con.convalidated,
|
|
164
|
+
'backingIndexOid',
|
|
165
|
+
CASE
|
|
166
|
+
WHEN con.conindid = 0 THEN NULL
|
|
167
|
+
ELSE con.conindid::integer
|
|
168
|
+
END
|
|
169
|
+
)
|
|
170
|
+
) AS constraint_metadata
|
|
171
|
+
FROM
|
|
172
|
+
pg_constraint con
|
|
173
|
+
JOIN pg_class c ON con.conrelid = c.oid
|
|
174
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
175
|
+
WHERE
|
|
176
|
+
n.nspname not like 'pg_%'
|
|
177
|
+
and n.nspname <> 'information_schema'
|
|
178
|
+
AND con.conrelid <> 0
|
|
179
|
+
AND c.relispartition = false
|
|
180
|
+
ORDER BY
|
|
181
|
+
n.nspname, c.relname, con.conname
|
|
182
|
+
),
|
|
183
|
+
all_functions as (
|
|
184
|
+
SELECT
|
|
185
|
+
jsonb_build_object(
|
|
186
|
+
'type', 'function',
|
|
187
|
+
'schemaName', quote_ident(n.nspname),
|
|
188
|
+
'objectName', quote_ident(pro.proname),
|
|
189
|
+
'objectType',
|
|
190
|
+
CASE pro.prokind
|
|
191
|
+
WHEN 'f' THEN 'function'
|
|
192
|
+
WHEN 'p' THEN 'procedure'
|
|
193
|
+
WHEN 'a' THEN 'aggregate'
|
|
194
|
+
WHEN 'w' THEN 'window function'
|
|
195
|
+
END,
|
|
196
|
+
'identityArguments', pg_get_function_identity_arguments(pro.oid),
|
|
197
|
+
'definition', pg_get_functiondef(pro.oid)
|
|
198
|
+
) AS function_metadata
|
|
199
|
+
FROM
|
|
200
|
+
pg_proc pro
|
|
201
|
+
JOIN pg_namespace n ON pro.pronamespace = n.oid
|
|
202
|
+
LEFT JOIN pg_depend d ON d.objid = pro.oid AND d.deptype = 'e'
|
|
203
|
+
WHERE
|
|
204
|
+
n.nspname not like 'pg_%'
|
|
205
|
+
AND n.nspname <> 'information_schema'
|
|
206
|
+
AND d.objid IS NULL
|
|
207
|
+
AND NOT (pro.proname = 'bit_xor' AND pro.prokind = 'a')
|
|
208
|
+
ORDER BY
|
|
209
|
+
n.nspname, pro.proname, pg_get_function_identity_arguments(pro.oid)
|
|
210
|
+
),
|
|
211
|
+
all_extensions as (
|
|
212
|
+
SELECT
|
|
213
|
+
jsonb_build_object(
|
|
214
|
+
'type', 'extension',
|
|
215
|
+
'extensionName', ext.extname,
|
|
216
|
+
'version', ext.extversion,
|
|
217
|
+
'schemaName', quote_ident(n.nspname)
|
|
218
|
+
) AS extension_metadata
|
|
219
|
+
FROM
|
|
220
|
+
pg_extension ext
|
|
221
|
+
JOIN pg_namespace n ON ext.extnamespace = n.oid
|
|
222
|
+
WHERE
|
|
223
|
+
n.nspname not like 'pg_%'
|
|
224
|
+
AND n.nspname <> 'information_schema'
|
|
225
|
+
ORDER BY
|
|
226
|
+
ext.extname
|
|
227
|
+
),
|
|
228
|
+
all_views as (
|
|
229
|
+
SELECT
|
|
230
|
+
jsonb_strip_nulls(
|
|
231
|
+
jsonb_build_object(
|
|
232
|
+
'type', 'view',
|
|
233
|
+
'schemaName', quote_ident(n.nspname),
|
|
234
|
+
'viewName', quote_ident(c.relname),
|
|
235
|
+
'objectType',
|
|
236
|
+
CASE c.relkind
|
|
237
|
+
WHEN 'v' THEN 'view'
|
|
238
|
+
WHEN 'm' THEN 'materialized_view'
|
|
239
|
+
END,
|
|
240
|
+
'definition', pg_get_viewdef(c.oid),
|
|
241
|
+
'tablespace', ts.spcname
|
|
242
|
+
)
|
|
243
|
+
) AS view_metadata
|
|
244
|
+
FROM
|
|
245
|
+
pg_class c
|
|
246
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
247
|
+
LEFT JOIN pg_tablespace ts ON c.reltablespace = ts.oid
|
|
248
|
+
WHERE
|
|
249
|
+
n.nspname not like 'pg_%'
|
|
250
|
+
AND n.nspname <> 'information_schema'
|
|
251
|
+
AND n.nspname <> 'timescaledb_information'
|
|
252
|
+
AND n.nspname not like '_timescaledb_%'
|
|
253
|
+
AND c.relkind IN ('v', 'm')
|
|
254
|
+
ORDER BY
|
|
255
|
+
n.nspname, c.relname
|
|
256
|
+
),
|
|
257
|
+
all_types as (
|
|
258
|
+
SELECT
|
|
259
|
+
jsonb_strip_nulls(
|
|
260
|
+
jsonb_build_object(
|
|
261
|
+
'type', 'type',
|
|
262
|
+
'schemaName', quote_ident(n.nspname),
|
|
263
|
+
'typeName', quote_ident(t.typname),
|
|
264
|
+
'typeCategory',
|
|
265
|
+
CASE t.typtype
|
|
266
|
+
WHEN 'e' THEN 'enum'
|
|
267
|
+
WHEN 'd' THEN 'domain'
|
|
268
|
+
WHEN 'c' THEN 'composite'
|
|
269
|
+
END,
|
|
270
|
+
'enumLabels', (
|
|
271
|
+
CASE WHEN t.typtype = 'e' THEN (
|
|
272
|
+
SELECT jsonb_agg(e.enumlabel ORDER BY e.enumsortorder)
|
|
273
|
+
FROM pg_enum e
|
|
274
|
+
WHERE e.enumtypid = t.oid
|
|
275
|
+
) ELSE NULL END
|
|
276
|
+
),
|
|
277
|
+
'domainBaseType', (
|
|
278
|
+
CASE WHEN t.typtype = 'd' THEN format_type(t.typbasetype, t.typtypmod) ELSE NULL END
|
|
279
|
+
),
|
|
280
|
+
'domainIsNotNull', (
|
|
281
|
+
CASE WHEN t.typtype = 'd' THEN t.typnotnull ELSE NULL END
|
|
282
|
+
),
|
|
283
|
+
'domainDefault', (
|
|
284
|
+
CASE WHEN t.typtype = 'd' THEN t.typdefault ELSE NULL END
|
|
285
|
+
),
|
|
286
|
+
'domainConstraints', (
|
|
287
|
+
CASE WHEN t.typtype = 'd' THEN (
|
|
288
|
+
SELECT jsonb_agg(jsonb_build_object('name', quote_ident(con.conname), 'definition', pg_get_constraintdef(con.oid)) ORDER BY con.conname)
|
|
289
|
+
FROM pg_constraint con
|
|
290
|
+
WHERE con.contypid = t.oid
|
|
291
|
+
) ELSE NULL END
|
|
292
|
+
),
|
|
293
|
+
'compositeAttributes', (
|
|
294
|
+
CASE WHEN t.typtype = 'c' THEN (
|
|
295
|
+
SELECT jsonb_agg(
|
|
296
|
+
jsonb_strip_nulls(jsonb_build_object(
|
|
297
|
+
'type', 'compositeAttribute',
|
|
298
|
+
'name', quote_ident(a.attname),
|
|
299
|
+
'attributeType', format_type(a.atttypid, a.atttypmod),
|
|
300
|
+
'collation', (SELECT coll.collname FROM pg_collation coll WHERE a.attcollation = coll.oid AND coll.collname <> 'default')
|
|
301
|
+
))
|
|
302
|
+
ORDER BY a.attnum
|
|
303
|
+
)
|
|
304
|
+
FROM pg_attribute a
|
|
305
|
+
WHERE a.attrelid = t.typrelid AND a.attnum > 0 AND NOT a.attisdropped
|
|
306
|
+
) ELSE NULL END
|
|
307
|
+
)
|
|
308
|
+
)
|
|
309
|
+
) AS type_metadata
|
|
310
|
+
FROM
|
|
311
|
+
pg_type t
|
|
312
|
+
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
313
|
+
LEFT JOIN pg_depend d ON d.objid = t.oid AND d.deptype = 'e'
|
|
314
|
+
WHERE
|
|
315
|
+
n.nspname not like 'pg_%'
|
|
316
|
+
AND n.nspname <> 'information_schema'
|
|
317
|
+
AND t.typtype IN ('e', 'd', 'c')
|
|
318
|
+
AND d.objid IS NULL
|
|
319
|
+
AND (t.typrelid = 0 OR (SELECT c.relkind FROM pg_class c WHERE c.oid = t.typrelid) not in ('r', 'v', 'w'))
|
|
320
|
+
ORDER BY
|
|
321
|
+
n.nspname, t.typname
|
|
322
|
+
),
|
|
323
|
+
all_triggers as (
|
|
324
|
+
SELECT
|
|
325
|
+
jsonb_strip_nulls(
|
|
326
|
+
jsonb_build_object(
|
|
327
|
+
'type', 'trigger',
|
|
328
|
+
'schemaName', quote_ident(n.nspname),
|
|
329
|
+
'tableName', quote_ident(c.relname),
|
|
330
|
+
'triggerName', quote_ident(t.tgname),
|
|
331
|
+
'definition', pg_get_triggerdef(t.oid),
|
|
332
|
+
'enabledMode', t.tgenabled
|
|
333
|
+
)
|
|
334
|
+
) AS trigger_metadata
|
|
335
|
+
FROM
|
|
336
|
+
pg_trigger t
|
|
337
|
+
JOIN pg_class c ON t.tgrelid = c.oid
|
|
338
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
339
|
+
LEFT JOIN pg_depend d ON d.objid = t.oid AND d.deptype = 'e'
|
|
340
|
+
WHERE
|
|
341
|
+
n.nspname not like 'pg_%'
|
|
342
|
+
AND n.nspname <> 'information_schema'
|
|
343
|
+
AND t.tgisinternal = false
|
|
344
|
+
AND d.objid IS NULL
|
|
345
|
+
AND c.relispartition = false
|
|
346
|
+
ORDER BY
|
|
347
|
+
n.nspname, c.relname, t.tgname
|
|
348
|
+
)
|
|
349
|
+
SELECT
|
|
350
|
+
jsonb_strip_nulls(
|
|
351
|
+
jsonb_build_object(
|
|
352
|
+
'indexes', (select jsonb_agg(all_indexes.index_metadata) from all_indexes),
|
|
353
|
+
'tables', (select jsonb_agg(all_tables.table_metadata) from all_tables),
|
|
354
|
+
'constraints', (select jsonb_agg(all_constraints.constraint_metadata) from all_constraints),
|
|
355
|
+
'functions', (select jsonb_agg(all_functions.function_metadata) from all_functions),
|
|
356
|
+
'extensions', (select jsonb_agg(all_extensions.extension_metadata) from all_extensions),
|
|
357
|
+
'views', (select jsonb_agg(all_views.view_metadata) from all_views),
|
|
358
|
+
'types', (select jsonb_agg(all_types.type_metadata) from all_types),
|
|
359
|
+
'triggers', (select jsonb_agg(all_triggers.trigger_metadata) from all_triggers)
|
|
360
|
+
)
|
|
361
|
+
) as result; -- @qd_introspection`;
|
|
362
|
+
//#endregion
|
|
363
|
+
export { SCHEMA_DUMP_SQL };
|
|
364
|
+
|
|
365
|
+
//# sourceMappingURL=schema-dump.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-dump.mjs","names":[],"sources":["../src/schema-dump.ts"],"sourcesContent":["export const SCHEMA_DUMP_SQL = `WITH all_indexes AS (\n SELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'index',\n 'oid', i.oid::integer,\n 'schemaName', quote_ident(n.nspname),\n 'tableName', quote_ident(t.relname),\n 'indexName', quote_ident(i.relname),\n 'indexType', am.amname,\n 'isUnique', ix.indisunique,\n 'isPrimary', ix.indisprimary,\n 'isClustered', ix.indisclustered,\n 'wherePredicate', pg_get_expr(ix.indpred, t.oid),\n 'tablespace', ts.spcname,\n 'keyColumns', (\n SELECT\n jsonb_agg(\n jsonb_strip_nulls(jsonb_build_object(\n 'type', 'indexColumn',\n 'name',\n pg_get_indexdef(i.oid, k.ordinality, true),\n 'order',\n CASE WHEN (ix.indoption[k.ordinality - 1] & 1) = 1 THEN 'DESC' ELSE 'ASC' END,\n 'nulls',\n CASE\n WHEN (ix.indoption[k.ordinality - 1] & 2) = 2 THEN 'FIRST'\n WHEN (ix.indoption[k.ordinality - 1] & 4) = 4 THEN 'LAST'\n ELSE NULL\n END,\n 'opclass',\n (SELECT opcname FROM pg_opclass WHERE oid = ix.indclass[k.ordinality - 1]),\n 'collation',\n (SELECT collname FROM pg_collation WHERE oid = ix.indcollation[k.ordinality - 1] AND collname <> 'default')\n ))\n ORDER BY k.ordinality\n )\n FROM\n generate_series(1, ix.indnkeyatts) AS k(ordinality)\n ),\n 'includedColumns', (\n CASE WHEN ix.indnatts = ix.indnkeyatts THEN NULL\n ELSE (\n SELECT\n jsonb_agg(\n jsonb_build_object(\n 'type', 'indexColumnIncluded',\n 'name', pg_get_indexdef(i.oid, k.ordinality, true)\n )\n ORDER BY k.ordinality\n )\n FROM\n generate_series(ix.indnkeyatts + 1, ix.indnatts) AS k(ordinality)\n )\n END\n )\n )\n ) AS index_metadata\n FROM\n pg_class t\n JOIN pg_index ix ON t.oid = ix.indrelid\n JOIN pg_class i ON i.oid = ix.indexrelid\n JOIN pg_am am ON i.relam = am.oid\n JOIN pg_namespace n ON t.relnamespace = n.oid\n LEFT JOIN pg_tablespace ts ON i.reltablespace = ts.oid\n WHERE\n n.nspname not like 'pg_%' AND\n n.nspname not like '_timescaledb_%' AND\n t.relispartition = false\n ORDER BY\n n.nspname, t.relname, i.relname\n),\nall_tables as (\nSELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'table',\n 'oid', c.oid::integer,\n 'schemaName', quote_ident(n.nspname),\n 'tableName', quote_ident(c.relname),\n 'tablespace', quote_ident(ts.spcname),\n 'partitionKeyDef', pg_get_partkeydef(c.oid),\n 'columns', (\n SELECT\n jsonb_agg(\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'column',\n 'name', quote_ident(a.attname),\n 'order', a.attnum,\n 'columnType', format_type(a.atttypid, a.atttypmod),\n 'isNullable', NOT a.attnotnull,\n 'defaultValue', pg_get_expr(ad.adbin, c.oid),\n 'dropped', a.attisdropped,\n 'collation', (\n SELECT quote_ident(coll.collname)\n FROM pg_collation coll\n WHERE a.attcollation = coll.oid AND coll.collname <> 'default'\n ),\n 'storage',\n CASE a.attstorage\n WHEN 'p' THEN 'plain'\n WHEN 'm' THEN 'main'\n WHEN 'e' THEN 'external'\n WHEN 'x' THEN 'extended'\n END,\n 'isIdentity',\n CASE a.attidentity\n WHEN 'a' THEN 'always'\n WHEN 'd' THEN 'by default'\n END\n )\n )\n ORDER BY a.attnum\n )\n FROM\n pg_attribute a\n LEFT JOIN pg_attrdef ad ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum\n WHERE\n a.attrelid = c.oid\n AND a.attnum > 0\n AND NOT a.attisdropped\n )\n )\n ) AS table_metadata\nFROM\n pg_class c\n JOIN pg_namespace n ON c.relnamespace = n.oid\n LEFT JOIN pg_tablespace ts ON c.reltablespace = ts.oid\nWHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n AND c.relkind in ('r', 'm')\n AND c.relispartition = false\nORDER BY\n n.nspname, c.relname\n),\nall_constraints as (\nSELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'constraint',\n 'oid', con.oid::integer,\n 'schemaName', quote_ident(n.nspname),\n 'tableName', quote_ident(c.relname),\n 'constraintName', quote_ident(con.conname),\n 'constraintType',\n CASE con.contype\n WHEN 'c' THEN 'check'\n WHEN 'f' THEN 'foreign_key'\n WHEN 'n' THEN 'not_null'\n WHEN 'p' THEN 'primary_key'\n WHEN 'u' THEN 'unique'\n WHEN 't' THEN 'trigger'\n WHEN 'x' THEN 'exclusion'\n ELSE con.contype\n END,\n 'definition', pg_get_constraintdef(con.oid),\n 'isDeferrable', con.condeferrable,\n 'isInitiallyDeferred', con.condeferred,\n 'isValidated', con.convalidated,\n 'backingIndexOid',\n CASE\n WHEN con.conindid = 0 THEN NULL\n ELSE con.conindid::integer\n END\n )\n ) AS constraint_metadata\nFROM\n pg_constraint con\n JOIN pg_class c ON con.conrelid = c.oid\n JOIN pg_namespace n ON c.relnamespace = n.oid\nWHERE\n n.nspname not like 'pg_%'\n and n.nspname <> 'information_schema'\n AND con.conrelid <> 0\n AND c.relispartition = false\nORDER BY\n n.nspname, c.relname, con.conname\n),\nall_functions as (\n SELECT\n jsonb_build_object(\n 'type', 'function',\n 'schemaName', quote_ident(n.nspname),\n 'objectName', quote_ident(pro.proname),\n 'objectType',\n CASE pro.prokind\n WHEN 'f' THEN 'function'\n WHEN 'p' THEN 'procedure'\n WHEN 'a' THEN 'aggregate'\n WHEN 'w' THEN 'window function'\n END,\n 'identityArguments', pg_get_function_identity_arguments(pro.oid),\n 'definition', pg_get_functiondef(pro.oid)\n ) AS function_metadata\n FROM\n pg_proc pro\n JOIN pg_namespace n ON pro.pronamespace = n.oid\n LEFT JOIN pg_depend d ON d.objid = pro.oid AND d.deptype = 'e'\n WHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n AND d.objid IS NULL\n AND NOT (pro.proname = 'bit_xor' AND pro.prokind = 'a')\n ORDER BY\n n.nspname, pro.proname, pg_get_function_identity_arguments(pro.oid)\n),\nall_extensions as (\n SELECT\n jsonb_build_object(\n 'type', 'extension',\n 'extensionName', ext.extname,\n 'version', ext.extversion,\n 'schemaName', quote_ident(n.nspname)\n ) AS extension_metadata\n FROM\n pg_extension ext\n JOIN pg_namespace n ON ext.extnamespace = n.oid\n WHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n ORDER BY\n ext.extname\n),\nall_views as (\n SELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'view',\n 'schemaName', quote_ident(n.nspname),\n 'viewName', quote_ident(c.relname),\n 'objectType',\n CASE c.relkind\n WHEN 'v' THEN 'view'\n WHEN 'm' THEN 'materialized_view'\n END,\n 'definition', pg_get_viewdef(c.oid),\n 'tablespace', ts.spcname\n )\n ) AS view_metadata\n FROM\n pg_class c\n JOIN pg_namespace n ON c.relnamespace = n.oid\n LEFT JOIN pg_tablespace ts ON c.reltablespace = ts.oid\n WHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n AND n.nspname <> 'timescaledb_information'\n AND n.nspname not like '_timescaledb_%'\n AND c.relkind IN ('v', 'm')\n ORDER BY\n n.nspname, c.relname\n),\nall_types as (\n SELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'type',\n 'schemaName', quote_ident(n.nspname),\n 'typeName', quote_ident(t.typname),\n 'typeCategory',\n CASE t.typtype\n WHEN 'e' THEN 'enum'\n WHEN 'd' THEN 'domain'\n WHEN 'c' THEN 'composite'\n END,\n 'enumLabels', (\n CASE WHEN t.typtype = 'e' THEN (\n SELECT jsonb_agg(e.enumlabel ORDER BY e.enumsortorder)\n FROM pg_enum e\n WHERE e.enumtypid = t.oid\n ) ELSE NULL END\n ),\n 'domainBaseType', (\n CASE WHEN t.typtype = 'd' THEN format_type(t.typbasetype, t.typtypmod) ELSE NULL END\n ),\n 'domainIsNotNull', (\n CASE WHEN t.typtype = 'd' THEN t.typnotnull ELSE NULL END\n ),\n 'domainDefault', (\n CASE WHEN t.typtype = 'd' THEN t.typdefault ELSE NULL END\n ),\n 'domainConstraints', (\n CASE WHEN t.typtype = 'd' THEN (\n SELECT jsonb_agg(jsonb_build_object('name', quote_ident(con.conname), 'definition', pg_get_constraintdef(con.oid)) ORDER BY con.conname)\n FROM pg_constraint con\n WHERE con.contypid = t.oid\n ) ELSE NULL END\n ),\n 'compositeAttributes', (\n CASE WHEN t.typtype = 'c' THEN (\n SELECT jsonb_agg(\n jsonb_strip_nulls(jsonb_build_object(\n 'type', 'compositeAttribute',\n 'name', quote_ident(a.attname),\n 'attributeType', format_type(a.atttypid, a.atttypmod),\n 'collation', (SELECT coll.collname FROM pg_collation coll WHERE a.attcollation = coll.oid AND coll.collname <> 'default')\n ))\n ORDER BY a.attnum\n )\n FROM pg_attribute a\n WHERE a.attrelid = t.typrelid AND a.attnum > 0 AND NOT a.attisdropped\n ) ELSE NULL END\n )\n )\n ) AS type_metadata\n FROM\n pg_type t\n JOIN pg_namespace n ON t.typnamespace = n.oid\n LEFT JOIN pg_depend d ON d.objid = t.oid AND d.deptype = 'e'\n WHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n AND t.typtype IN ('e', 'd', 'c')\n AND d.objid IS NULL\n AND (t.typrelid = 0 OR (SELECT c.relkind FROM pg_class c WHERE c.oid = t.typrelid) not in ('r', 'v', 'w'))\n ORDER BY\n n.nspname, t.typname\n),\nall_triggers as (\n SELECT\n jsonb_strip_nulls(\n jsonb_build_object(\n 'type', 'trigger',\n 'schemaName', quote_ident(n.nspname),\n 'tableName', quote_ident(c.relname),\n 'triggerName', quote_ident(t.tgname),\n 'definition', pg_get_triggerdef(t.oid),\n 'enabledMode', t.tgenabled\n )\n ) AS trigger_metadata\n FROM\n pg_trigger t\n JOIN pg_class c ON t.tgrelid = c.oid\n JOIN pg_namespace n ON c.relnamespace = n.oid\n LEFT JOIN pg_depend d ON d.objid = t.oid AND d.deptype = 'e'\n WHERE\n n.nspname not like 'pg_%'\n AND n.nspname <> 'information_schema'\n AND t.tgisinternal = false\n AND d.objid IS NULL\n AND c.relispartition = false\n ORDER BY\n n.nspname, c.relname, t.tgname\n)\nSELECT\njsonb_strip_nulls(\n jsonb_build_object(\n 'indexes', (select jsonb_agg(all_indexes.index_metadata) from all_indexes),\n 'tables', (select jsonb_agg(all_tables.table_metadata) from all_tables),\n 'constraints', (select jsonb_agg(all_constraints.constraint_metadata) from all_constraints),\n 'functions', (select jsonb_agg(all_functions.function_metadata) from all_functions),\n 'extensions', (select jsonb_agg(all_extensions.extension_metadata) from all_extensions),\n 'views', (select jsonb_agg(all_views.view_metadata) from all_views),\n 'types', (select jsonb_agg(all_types.type_metadata) from all_types),\n 'triggers', (select jsonb_agg(all_triggers.trigger_metadata) from all_triggers)\n )\n) as result; -- @qd_introspection`;\n"],"mappings":";;AAAA,MAAa,kBAAkB"}
|
package/dist/schema.cjs
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_schema_dump = require("./schema-dump.cjs");
|
|
4
|
+
const require_pg_identifier = require("./sql/pg-identifier.cjs");
|
|
5
|
+
let zod = require("zod");
|
|
6
|
+
//#region src/schema.ts
|
|
7
|
+
const Identifier = zod.z.codec(zod.z.string(), zod.z.custom(), {
|
|
8
|
+
encode: (v) => v.toString(),
|
|
9
|
+
decode: (v) => require_pg_identifier.PgIdentifier.fromString(v)
|
|
10
|
+
});
|
|
11
|
+
const FullSchemaKeyColumn = zod.z.object({
|
|
12
|
+
type: zod.z.literal("indexColumn"),
|
|
13
|
+
name: Identifier,
|
|
14
|
+
order: zod.z.enum(["ASC", "DESC"]).optional(),
|
|
15
|
+
nulls: zod.z.enum(["FIRST", "LAST"]).optional(),
|
|
16
|
+
opclass: zod.z.string().optional(),
|
|
17
|
+
collation: zod.z.string().optional()
|
|
18
|
+
});
|
|
19
|
+
const FullSchemaIncludedColumn = zod.z.object({ name: Identifier });
|
|
20
|
+
const FullSchemaIndex = zod.z.object({
|
|
21
|
+
type: zod.z.literal("index"),
|
|
22
|
+
oid: zod.z.number(),
|
|
23
|
+
schemaName: Identifier,
|
|
24
|
+
tableName: Identifier,
|
|
25
|
+
indexName: Identifier,
|
|
26
|
+
indexType: zod.z.string(),
|
|
27
|
+
isUnique: zod.z.boolean(),
|
|
28
|
+
isPrimary: zod.z.boolean(),
|
|
29
|
+
isClustered: zod.z.boolean(),
|
|
30
|
+
wherePredicate: zod.z.string().optional(),
|
|
31
|
+
tablespace: zod.z.string().optional(),
|
|
32
|
+
keyColumns: zod.z.array(FullSchemaKeyColumn),
|
|
33
|
+
includedColumns: zod.z.array(FullSchemaIncludedColumn).optional()
|
|
34
|
+
});
|
|
35
|
+
const FullSchemaColumn = zod.z.object({
|
|
36
|
+
type: zod.z.literal("column"),
|
|
37
|
+
name: Identifier,
|
|
38
|
+
order: zod.z.number(),
|
|
39
|
+
columnType: zod.z.string(),
|
|
40
|
+
isNullable: zod.z.boolean(),
|
|
41
|
+
defaultValue: zod.z.string().optional(),
|
|
42
|
+
dropped: zod.z.boolean(),
|
|
43
|
+
collation: zod.z.string().optional(),
|
|
44
|
+
storage: zod.z.enum([
|
|
45
|
+
"plain",
|
|
46
|
+
"main",
|
|
47
|
+
"external",
|
|
48
|
+
"extended"
|
|
49
|
+
]).optional(),
|
|
50
|
+
isIdentity: zod.z.enum(["always", "by default"]).optional()
|
|
51
|
+
});
|
|
52
|
+
const FullSchemaTable = zod.z.object({
|
|
53
|
+
type: zod.z.literal("table"),
|
|
54
|
+
oid: zod.z.number(),
|
|
55
|
+
schemaName: Identifier,
|
|
56
|
+
tableName: Identifier,
|
|
57
|
+
tablespace: zod.z.string().optional(),
|
|
58
|
+
partitionKeyDef: zod.z.string().optional(),
|
|
59
|
+
columns: zod.z.array(FullSchemaColumn).default([])
|
|
60
|
+
});
|
|
61
|
+
const FullSchemaConstraint = zod.z.object({
|
|
62
|
+
type: zod.z.literal("constraint"),
|
|
63
|
+
oid: zod.z.number(),
|
|
64
|
+
schemaName: Identifier,
|
|
65
|
+
tableName: Identifier,
|
|
66
|
+
constraintName: Identifier,
|
|
67
|
+
constraintType: zod.z.enum([
|
|
68
|
+
"check",
|
|
69
|
+
"foreign_key",
|
|
70
|
+
"not_null",
|
|
71
|
+
"primary_key",
|
|
72
|
+
"unique",
|
|
73
|
+
"trigger",
|
|
74
|
+
"exclusion"
|
|
75
|
+
]).or(zod.z.string()),
|
|
76
|
+
definition: zod.z.string(),
|
|
77
|
+
isDeferrable: zod.z.boolean().optional(),
|
|
78
|
+
isInitiallyDeferred: zod.z.boolean().optional(),
|
|
79
|
+
isValidated: zod.z.boolean().optional(),
|
|
80
|
+
backingIndexOid: zod.z.number().optional()
|
|
81
|
+
});
|
|
82
|
+
const FullSchemaFunction = zod.z.object({
|
|
83
|
+
type: zod.z.literal("function"),
|
|
84
|
+
schemaName: Identifier,
|
|
85
|
+
objectName: Identifier,
|
|
86
|
+
objectType: zod.z.enum([
|
|
87
|
+
"function",
|
|
88
|
+
"procedure",
|
|
89
|
+
"aggregate",
|
|
90
|
+
"window function"
|
|
91
|
+
]),
|
|
92
|
+
identityArguments: zod.z.string().optional(),
|
|
93
|
+
definition: zod.z.string()
|
|
94
|
+
});
|
|
95
|
+
const FullSchemaExtension = zod.z.object({
|
|
96
|
+
extensionName: zod.z.string(),
|
|
97
|
+
version: zod.z.string(),
|
|
98
|
+
schemaName: Identifier
|
|
99
|
+
});
|
|
100
|
+
const FullSchemaView = zod.z.object({
|
|
101
|
+
type: zod.z.literal("view"),
|
|
102
|
+
schemaName: Identifier,
|
|
103
|
+
viewName: Identifier,
|
|
104
|
+
objectType: zod.z.enum(["view", "materialized_view"]),
|
|
105
|
+
definition: zod.z.string(),
|
|
106
|
+
tablespace: zod.z.string().optional()
|
|
107
|
+
});
|
|
108
|
+
const FullSchemaTypeConstraint = zod.z.object({
|
|
109
|
+
name: Identifier,
|
|
110
|
+
definition: zod.z.string()
|
|
111
|
+
});
|
|
112
|
+
const FullSchemaCompositeAttribute = zod.z.object({
|
|
113
|
+
type: zod.z.literal("compositeAttribute"),
|
|
114
|
+
name: Identifier,
|
|
115
|
+
attributeType: zod.z.string(),
|
|
116
|
+
collation: Identifier.optional()
|
|
117
|
+
});
|
|
118
|
+
const FullSchemaType = zod.z.object({
|
|
119
|
+
type: zod.z.literal("type"),
|
|
120
|
+
schemaName: Identifier,
|
|
121
|
+
typeName: Identifier,
|
|
122
|
+
typeCategory: zod.z.enum([
|
|
123
|
+
"enum",
|
|
124
|
+
"domain",
|
|
125
|
+
"composite"
|
|
126
|
+
]),
|
|
127
|
+
enumLabels: zod.z.array(zod.z.string()).optional(),
|
|
128
|
+
domainBaseType: zod.z.string().optional(),
|
|
129
|
+
domainIsNotNull: zod.z.boolean().optional(),
|
|
130
|
+
domainDefault: zod.z.string().optional(),
|
|
131
|
+
domainConstraints: zod.z.array(FullSchemaTypeConstraint).optional(),
|
|
132
|
+
compositeAttributes: zod.z.array(FullSchemaCompositeAttribute).optional()
|
|
133
|
+
});
|
|
134
|
+
const FullSchemaTrigger = zod.z.object({
|
|
135
|
+
schemaName: Identifier,
|
|
136
|
+
tableName: Identifier,
|
|
137
|
+
triggerName: Identifier,
|
|
138
|
+
definition: zod.z.string(),
|
|
139
|
+
enabledMode: zod.z.string()
|
|
140
|
+
});
|
|
141
|
+
const FullSchema = zod.z.object({
|
|
142
|
+
indexes: zod.z.array(FullSchemaIndex).default([]),
|
|
143
|
+
tables: zod.z.array(FullSchemaTable).default([]),
|
|
144
|
+
constraints: zod.z.array(FullSchemaConstraint).default([]),
|
|
145
|
+
functions: zod.z.array(FullSchemaFunction).default([]),
|
|
146
|
+
extensions: zod.z.array(FullSchemaExtension).default([]),
|
|
147
|
+
views: zod.z.array(FullSchemaView).default([]),
|
|
148
|
+
types: zod.z.array(FullSchemaType).default([]),
|
|
149
|
+
triggers: zod.z.array(FullSchemaTrigger).default([])
|
|
150
|
+
});
|
|
151
|
+
async function dumpSchema(db) {
|
|
152
|
+
const rows = await db.exec(require_schema_dump.SCHEMA_DUMP_SQL);
|
|
153
|
+
return FullSchema.parse(rows[0]?.result ?? {});
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
exports.FullSchema = FullSchema;
|
|
157
|
+
exports.FullSchemaColumn = FullSchemaColumn;
|
|
158
|
+
exports.FullSchemaCompositeAttribute = FullSchemaCompositeAttribute;
|
|
159
|
+
exports.FullSchemaConstraint = FullSchemaConstraint;
|
|
160
|
+
exports.FullSchemaExtension = FullSchemaExtension;
|
|
161
|
+
exports.FullSchemaFunction = FullSchemaFunction;
|
|
162
|
+
exports.FullSchemaIncludedColumn = FullSchemaIncludedColumn;
|
|
163
|
+
exports.FullSchemaIndex = FullSchemaIndex;
|
|
164
|
+
exports.FullSchemaKeyColumn = FullSchemaKeyColumn;
|
|
165
|
+
exports.FullSchemaTable = FullSchemaTable;
|
|
166
|
+
exports.FullSchemaTrigger = FullSchemaTrigger;
|
|
167
|
+
exports.FullSchemaType = FullSchemaType;
|
|
168
|
+
exports.FullSchemaTypeConstraint = FullSchemaTypeConstraint;
|
|
169
|
+
exports.FullSchemaView = FullSchemaView;
|
|
170
|
+
exports.dumpSchema = dumpSchema;
|
|
171
|
+
|
|
172
|
+
//# sourceMappingURL=schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.cjs","names":["z","PgIdentifier","SCHEMA_DUMP_SQL"],"sources":["../src/schema.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { SCHEMA_DUMP_SQL } from \"./schema-dump.js\";\nimport type { Postgres } from \"./sql/database.js\";\nimport { PgIdentifier } from \"./sql/pg-identifier.js\";\n\nconst Identifier = z.codec(z.string(), z.custom<PgIdentifier>(), {\n encode: (v) => v.toString(),\n decode: (v) => PgIdentifier.fromString(v),\n});\n\nexport const FullSchemaKeyColumn = z.object({\n type: z.literal(\"indexColumn\"),\n name: Identifier,\n order: z.enum([\"ASC\", \"DESC\"]).optional(),\n nulls: z.enum([\"FIRST\", \"LAST\"]).optional(),\n opclass: z.string().optional(),\n collation: z.string().optional(),\n});\n\nexport type FullSchemaKeyColumn = z.infer<typeof FullSchemaKeyColumn>;\n\nexport const FullSchemaIncludedColumn = z.object({\n name: Identifier,\n});\n\nexport type FullSchemaIncludedColumn = z.infer<typeof FullSchemaIncludedColumn>;\n\nexport const FullSchemaIndex = z.object({\n type: z.literal(\"index\"),\n oid: z.number(),\n schemaName: Identifier,\n tableName: Identifier,\n indexName: Identifier,\n indexType: z.string(),\n isUnique: z.boolean(),\n isPrimary: z.boolean(),\n isClustered: z.boolean(),\n wherePredicate: z.string().optional(),\n tablespace: z.string().optional(),\n keyColumns: z.array(FullSchemaKeyColumn),\n includedColumns: z.array(FullSchemaIncludedColumn).optional(),\n});\n\nexport type FullSchemaIndex = z.infer<typeof FullSchemaIndex>;\n\nexport const FullSchemaColumn = z.object({\n type: z.literal(\"column\"),\n name: Identifier,\n order: z.number(),\n columnType: z.string(),\n isNullable: z.boolean(),\n defaultValue: z.string().optional(),\n dropped: z.boolean(),\n collation: z.string().optional(),\n storage: z.enum([\"plain\", \"main\", \"external\", \"extended\"]).optional(),\n isIdentity: z.enum([\"always\", \"by default\"]).optional(),\n});\n\nexport type FullSchemaColumn = z.infer<typeof FullSchemaColumn>;\n\nexport const FullSchemaTable = z.object({\n type: z.literal(\"table\"),\n oid: z.number(),\n schemaName: Identifier,\n tableName: Identifier,\n tablespace: z.string().optional(),\n partitionKeyDef: z.string().optional(),\n columns: z.array(FullSchemaColumn).default([]),\n});\n\nexport type FullSchemaTable = z.infer<typeof FullSchemaTable>;\n\nexport const FullSchemaConstraint = z.object({\n type: z.literal(\"constraint\"),\n oid: z.number(),\n schemaName: Identifier,\n tableName: Identifier,\n constraintName: Identifier,\n constraintType: z\n .enum([\n \"check\",\n \"foreign_key\",\n \"not_null\",\n \"primary_key\",\n \"unique\",\n \"trigger\",\n \"exclusion\",\n ])\n .or(z.string()),\n definition: z.string(),\n isDeferrable: z.boolean().optional(),\n isInitiallyDeferred: z.boolean().optional(),\n isValidated: z.boolean().optional(),\n backingIndexOid: z.number().optional(),\n});\n\nexport type FullSchemaConstraint = z.infer<typeof FullSchemaConstraint>;\n\nexport const FullSchemaFunction = z.object({\n type: z.literal(\"function\"),\n schemaName: Identifier,\n objectName: Identifier,\n objectType: z.enum([\"function\", \"procedure\", \"aggregate\", \"window function\"]),\n identityArguments: z.string().optional(),\n definition: z.string(),\n});\n\nexport type FullSchemaFunction = z.infer<typeof FullSchemaFunction>;\n\nexport const FullSchemaExtension = z.object({\n extensionName: z.string(),\n version: z.string(),\n schemaName: Identifier,\n});\n\nexport type FullSchemaExtension = z.infer<typeof FullSchemaExtension>;\n\nexport const FullSchemaView = z.object({\n type: z.literal(\"view\"),\n schemaName: Identifier,\n viewName: Identifier,\n objectType: z.enum([\"view\", \"materialized_view\"]),\n definition: z.string(),\n tablespace: z.string().optional(),\n});\n\nexport type FullSchemaView = z.infer<typeof FullSchemaView>;\n\nexport const FullSchemaTypeConstraint = z.object({\n name: Identifier,\n definition: z.string(),\n});\n\nexport type FullSchemaTypeConstraint = z.infer<typeof FullSchemaTypeConstraint>;\n\nexport const FullSchemaCompositeAttribute = z.object({\n type: z.literal(\"compositeAttribute\"),\n name: Identifier,\n attributeType: z.string(),\n collation: Identifier.optional(),\n});\n\nexport type FullSchemaCompositeAttribute = z.infer<\n typeof FullSchemaCompositeAttribute\n>;\n\nexport const FullSchemaType = z.object({\n type: z.literal(\"type\"),\n schemaName: Identifier,\n typeName: Identifier,\n typeCategory: z.enum([\"enum\", \"domain\", \"composite\"]),\n enumLabels: z.array(z.string()).optional(),\n domainBaseType: z.string().optional(),\n domainIsNotNull: z.boolean().optional(),\n domainDefault: z.string().optional(),\n domainConstraints: z.array(FullSchemaTypeConstraint).optional(),\n compositeAttributes: z.array(FullSchemaCompositeAttribute).optional(),\n});\n\nexport type FullSchemaType = z.infer<typeof FullSchemaType>;\n\nexport const FullSchemaTrigger = z.object({\n schemaName: Identifier,\n tableName: Identifier,\n triggerName: Identifier,\n definition: z.string(),\n enabledMode: z.string(),\n});\n\nexport type FullSchemaTrigger = z.infer<typeof FullSchemaTrigger>;\n\nexport const FullSchema = z.object({\n indexes: z.array(FullSchemaIndex).default([]),\n tables: z.array(FullSchemaTable).default([]),\n constraints: z.array(FullSchemaConstraint).default([]),\n functions: z.array(FullSchemaFunction).default([]),\n extensions: z.array(FullSchemaExtension).default([]),\n views: z.array(FullSchemaView).default([]),\n types: z.array(FullSchemaType).default([]),\n triggers: z.array(FullSchemaTrigger).default([]),\n});\n\nexport type FullSchema = z.infer<typeof FullSchema>;\n\nexport async function dumpSchema(db: Postgres): Promise<FullSchema> {\n const rows = await db.exec<{ result: FullSchema }>(SCHEMA_DUMP_SQL);\n return FullSchema.parse(rows[0]?.result ?? {});\n}\n"],"mappings":"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"}
|