@query-doctor/core 0.9.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +18 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.mts +5 -4
- package/dist/index.mjs +4 -3
- package/dist/optimizer/dump.cjs +2 -0
- package/dist/optimizer/dump.cjs.map +1 -1
- package/dist/optimizer/dump.d.cts.map +1 -1
- package/dist/optimizer/dump.d.mts.map +1 -1
- package/dist/optimizer/dump.mjs +2 -0
- package/dist/optimizer/dump.mjs.map +1 -1
- package/dist/optimizer/genalgo.cjs +5 -5
- package/dist/optimizer/genalgo.cjs.map +1 -1
- package/dist/optimizer/genalgo.d.cts +5 -4
- package/dist/optimizer/genalgo.d.cts.map +1 -1
- package/dist/optimizer/genalgo.d.mts +5 -4
- 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/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/package.json +3 -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
|
+
exports.SCHEMA_DUMP_SQL = SCHEMA_DUMP_SQL;
|
|
364
|
+
|
|
365
|
+
//# sourceMappingURL=schema-dump.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-dump.cjs","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"}
|