dbctx 2.0.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/index.mjs +6727 -282
  2. package/package.json +12 -9
  3. package/dist/app/assemble.d.mts +0 -5
  4. package/dist/app/assemble.d.mts.map +0 -1
  5. package/dist/app/assemble.mjs +0 -182
  6. package/dist/app/config.d.mts +0 -9
  7. package/dist/app/config.d.mts.map +0 -1
  8. package/dist/app/config.mjs +0 -49
  9. package/dist/app/db.d.mts +0 -9
  10. package/dist/app/db.d.mts.map +0 -1
  11. package/dist/app/db.mjs +0 -182
  12. package/dist/app/detect.d.mts +0 -14
  13. package/dist/app/detect.d.mts.map +0 -1
  14. package/dist/app/detect.mjs +0 -108
  15. package/dist/app/list.d.mts +0 -4
  16. package/dist/app/list.d.mts.map +0 -1
  17. package/dist/app/list.mjs +0 -93
  18. package/dist/app/load-introspection.d.mts +0 -26
  19. package/dist/app/load-introspection.d.mts.map +0 -1
  20. package/dist/app/load-introspection.mjs +0 -89
  21. package/dist/app/login.d.mts +0 -2
  22. package/dist/app/login.d.mts.map +0 -1
  23. package/dist/app/login.mjs +0 -69
  24. package/dist/app/open-url.d.mts +0 -6
  25. package/dist/app/open-url.d.mts.map +0 -1
  26. package/dist/app/open-url.mjs +0 -33
  27. package/dist/app/sample.d.mts +0 -24
  28. package/dist/app/sample.d.mts.map +0 -1
  29. package/dist/app/sample.mjs +0 -257
  30. package/dist/app/session.d.mts +0 -9
  31. package/dist/app/session.d.mts.map +0 -1
  32. package/dist/app/session.mjs +0 -195
  33. package/dist/app/ssh.d.mts +0 -3
  34. package/dist/app/ssh.d.mts.map +0 -1
  35. package/dist/app/ssh.mjs +0 -218
  36. package/dist/app/tail.d.mts +0 -13
  37. package/dist/app/tail.d.mts.map +0 -1
  38. package/dist/app/tail.mjs +0 -168
  39. package/dist/db/analyze.d.mts +0 -3
  40. package/dist/db/analyze.d.mts.map +0 -1
  41. package/dist/db/analyze.mjs +0 -16
  42. package/dist/db/attributes.d.mts +0 -16
  43. package/dist/db/attributes.d.mts.map +0 -1
  44. package/dist/db/attributes.mjs +0 -37
  45. package/dist/db/check-constraints.d.mts +0 -9
  46. package/dist/db/check-constraints.d.mts.map +0 -1
  47. package/dist/db/check-constraints.mjs +0 -17
  48. package/dist/db/custom-types.d.mts +0 -26
  49. package/dist/db/custom-types.d.mts.map +0 -1
  50. package/dist/db/custom-types.mjs +0 -61
  51. package/dist/db/enums.d.mts +0 -8
  52. package/dist/db/enums.d.mts.map +0 -1
  53. package/dist/db/enums.mjs +0 -24
  54. package/dist/db/extensions.d.mts +0 -8
  55. package/dist/db/extensions.d.mts.map +0 -1
  56. package/dist/db/extensions.mjs +0 -14
  57. package/dist/db/file-stats.d.mts +0 -11
  58. package/dist/db/file-stats.d.mts.map +0 -1
  59. package/dist/db/file-stats.mjs +0 -43
  60. package/dist/db/foreign-keys.d.mts +0 -14
  61. package/dist/db/foreign-keys.d.mts.map +0 -1
  62. package/dist/db/foreign-keys.mjs +0 -44
  63. package/dist/db/functions.d.mts +0 -11
  64. package/dist/db/functions.d.mts.map +0 -1
  65. package/dist/db/functions.mjs +0 -23
  66. package/dist/db/index.d.mts +0 -19
  67. package/dist/db/index.d.mts.map +0 -1
  68. package/dist/db/index.mjs +0 -19
  69. package/dist/db/indexes.d.mts +0 -16
  70. package/dist/db/indexes.d.mts.map +0 -1
  71. package/dist/db/indexes.mjs +0 -38
  72. package/dist/db/planner-stats.d.mts +0 -33
  73. package/dist/db/planner-stats.d.mts.map +0 -1
  74. package/dist/db/planner-stats.mjs +0 -103
  75. package/dist/db/relations.d.mts +0 -11
  76. package/dist/db/relations.d.mts.map +0 -1
  77. package/dist/db/relations.mjs +0 -32
  78. package/dist/db/rls.d.mts +0 -21
  79. package/dist/db/rls.d.mts.map +0 -1
  80. package/dist/db/rls.mjs +0 -48
  81. package/dist/db/sample.d.mts +0 -16
  82. package/dist/db/sample.d.mts.map +0 -1
  83. package/dist/db/sample.mjs +0 -73
  84. package/dist/db/sequences.d.mts +0 -15
  85. package/dist/db/sequences.d.mts.map +0 -1
  86. package/dist/db/sequences.mjs +0 -31
  87. package/dist/db/stats.d.mts +0 -12
  88. package/dist/db/stats.d.mts.map +0 -1
  89. package/dist/db/stats.mjs +0 -34
  90. package/dist/db/triggers.d.mts +0 -11
  91. package/dist/db/triggers.d.mts.map +0 -1
  92. package/dist/db/triggers.mjs +0 -21
  93. package/dist/db/version.d.mts +0 -14
  94. package/dist/db/version.d.mts.map +0 -1
  95. package/dist/db/version.mjs +0 -27
  96. package/dist/flow/events.d.mts +0 -115
  97. package/dist/flow/events.d.mts.map +0 -1
  98. package/dist/flow/events.mjs +0 -2
  99. package/dist/flow/interpreter.d.mts +0 -21
  100. package/dist/flow/interpreter.d.mts.map +0 -1
  101. package/dist/flow/interpreter.mjs +0 -605
  102. package/dist/flow/projection.d.mts +0 -17
  103. package/dist/flow/projection.d.mts.map +0 -1
  104. package/dist/flow/projection.mjs +0 -83
  105. package/dist/flow/projection.test.d.mts +0 -2
  106. package/dist/flow/projection.test.d.mts.map +0 -1
  107. package/dist/flow/projection.test.mjs +0 -162
  108. package/dist/flow/reducer.d.mts +0 -5
  109. package/dist/flow/reducer.d.mts.map +0 -1
  110. package/dist/flow/reducer.mjs +0 -306
  111. package/dist/flow/reducer.test.d.mts +0 -2
  112. package/dist/flow/reducer.test.d.mts.map +0 -1
  113. package/dist/flow/reducer.test.mjs +0 -479
  114. package/dist/flow/run.d.mts +0 -3
  115. package/dist/flow/run.d.mts.map +0 -1
  116. package/dist/flow/run.mjs +0 -89
  117. package/dist/flow/states.d.mts +0 -54
  118. package/dist/flow/states.d.mts.map +0 -1
  119. package/dist/flow/states.mjs +0 -39
  120. package/dist/index.d.mts +0 -29
  121. package/dist/index.d.mts.map +0 -1
  122. package/dist/lib/atomic-write.d.mts +0 -4
  123. package/dist/lib/atomic-write.d.mts.map +0 -1
  124. package/dist/lib/atomic-write.mjs +0 -75
  125. package/dist/lib/env.d.mts +0 -2
  126. package/dist/lib/env.d.mts.map +0 -1
  127. package/dist/lib/env.mjs +0 -4
  128. package/dist/lib/stream-job.d.mts +0 -19
  129. package/dist/lib/stream-job.d.mts.map +0 -1
  130. package/dist/lib/stream-job.mjs +0 -55
  131. package/dist/lib/trpc-url.d.mts +0 -2
  132. package/dist/lib/trpc-url.d.mts.map +0 -1
  133. package/dist/lib/trpc-url.mjs +0 -5
  134. package/dist/lib/trpc.d.mts +0 -7
  135. package/dist/lib/trpc.d.mts.map +0 -1
  136. package/dist/lib/trpc.mjs +0 -37
  137. package/dist/lib/trpc.react.d.mts +0 -4
  138. package/dist/lib/trpc.react.d.mts.map +0 -1
  139. package/dist/lib/trpc.react.mjs +0 -3
  140. package/dist/lib/version.d.mts +0 -2
  141. package/dist/lib/version.d.mts.map +0 -1
  142. package/dist/lib/version.mjs +0 -5
  143. package/dist/logger.d.mts +0 -3
  144. package/dist/logger.d.mts.map +0 -1
  145. package/dist/logger.mjs +0 -11
  146. package/dist/providers/TrpcProvider.d.ts +0 -9
  147. package/dist/providers/TrpcProvider.d.ts.map +0 -1
  148. package/dist/providers/TrpcProvider.js +0 -41
  149. package/dist/store.d.mts +0 -176
  150. package/dist/store.d.mts.map +0 -1
  151. package/dist/store.mjs +0 -147
  152. package/dist/types/connection.d.mts +0 -17
  153. package/dist/types/connection.d.mts.map +0 -1
  154. package/dist/types/connection.mjs +0 -2
  155. package/dist/ui/App.d.ts +0 -10
  156. package/dist/ui/App.d.ts.map +0 -1
  157. package/dist/ui/App.js +0 -41
  158. package/dist/ui/components/Analyze.d.ts +0 -10
  159. package/dist/ui/components/Analyze.d.ts.map +0 -1
  160. package/dist/ui/components/Analyze.js +0 -54
  161. package/dist/ui/components/Billing.d.ts +0 -10
  162. package/dist/ui/components/Billing.d.ts.map +0 -1
  163. package/dist/ui/components/Billing.js +0 -40
  164. package/dist/ui/components/DB.d.ts +0 -10
  165. package/dist/ui/components/DB.d.ts.map +0 -1
  166. package/dist/ui/components/DB.js +0 -22
  167. package/dist/ui/components/DatabasePicker.d.ts +0 -13
  168. package/dist/ui/components/DatabasePicker.d.ts.map +0 -1
  169. package/dist/ui/components/DatabasePicker.js +0 -79
  170. package/dist/ui/components/Enrich.d.ts +0 -10
  171. package/dist/ui/components/Enrich.d.ts.map +0 -1
  172. package/dist/ui/components/Enrich.js +0 -41
  173. package/dist/ui/components/Error.d.ts +0 -7
  174. package/dist/ui/components/Error.d.ts.map +0 -1
  175. package/dist/ui/components/Error.js +0 -6
  176. package/dist/ui/components/Gate.d.ts +0 -10
  177. package/dist/ui/components/Gate.d.ts.map +0 -1
  178. package/dist/ui/components/Gate.js +0 -15
  179. package/dist/ui/components/Introspect.d.ts +0 -10
  180. package/dist/ui/components/Introspect.d.ts.map +0 -1
  181. package/dist/ui/components/Introspect.js +0 -66
  182. package/dist/ui/components/IntrospectionUpload.d.ts +0 -10
  183. package/dist/ui/components/IntrospectionUpload.d.ts.map +0 -1
  184. package/dist/ui/components/IntrospectionUpload.js +0 -30
  185. package/dist/ui/components/Login.d.ts +0 -19
  186. package/dist/ui/components/Login.d.ts.map +0 -1
  187. package/dist/ui/components/Login.js +0 -38
  188. package/dist/ui/components/OutputJson.d.ts +0 -10
  189. package/dist/ui/components/OutputJson.d.ts.map +0 -1
  190. package/dist/ui/components/OutputJson.js +0 -18
  191. package/dist/ui/components/PasswordInput.d.ts +0 -7
  192. package/dist/ui/components/PasswordInput.d.ts.map +0 -1
  193. package/dist/ui/components/PasswordInput.js +0 -32
  194. package/dist/ui/components/SSH.d.ts +0 -10
  195. package/dist/ui/components/SSH.d.ts.map +0 -1
  196. package/dist/ui/components/SSH.js +0 -22
  197. package/dist/ui/components/SamplesUpload.d.ts +0 -10
  198. package/dist/ui/components/SamplesUpload.d.ts.map +0 -1
  199. package/dist/ui/components/SamplesUpload.js +0 -24
  200. package/dist/ui/components/Sampling.d.ts +0 -10
  201. package/dist/ui/components/Sampling.d.ts.map +0 -1
  202. package/dist/ui/components/Sampling.js +0 -58
  203. package/dist/ui/components/Session.d.ts +0 -10
  204. package/dist/ui/components/Session.d.ts.map +0 -1
  205. package/dist/ui/components/Session.js +0 -47
  206. package/dist/ui/components/Spinner.d.ts +0 -3
  207. package/dist/ui/components/Spinner.d.ts.map +0 -1
  208. package/dist/ui/components/Spinner.js +0 -30
  209. package/dist/ui/components/Splash.d.ts +0 -3
  210. package/dist/ui/components/Splash.d.ts.map +0 -1
  211. package/dist/ui/components/Splash.js +0 -13
  212. package/dist/ui/components/TextInput.d.ts +0 -11
  213. package/dist/ui/components/TextInput.d.ts.map +0 -1
  214. package/dist/ui/components/TextInput.js +0 -286
  215. package/dist/ui/components/UserExplanation.d.ts +0 -10
  216. package/dist/ui/components/UserExplanation.d.ts.map +0 -1
  217. package/dist/ui/components/UserExplanation.js +0 -34
  218. package/dist/validatePaths.d.mts +0 -13
  219. package/dist/validatePaths.d.mts.map +0 -1
  220. package/dist/validatePaths.mjs +0 -58
@@ -1,103 +0,0 @@
1
- // pg_stats exposes most_common_vals/histogram_bounds as anyarray which pg cannot
2
- // serialize over the wire; cast to text[] so values come back as strings. On the
3
- // replay side we cast back to the target column type before injecting.
4
- export const fetchPublicPlannerStatistics = async (pool) => {
5
- const [relationsResult, attributesResult, extendedResult] = await Promise.all([
6
- pool.query(`
7
- SELECT
8
- c.relname AS relation_name,
9
- c.reltuples::float8 AS reltuples,
10
- c.relpages::int AS relpages,
11
- c.relallvisible::int AS relallvisible
12
- FROM pg_catalog.pg_class c
13
- JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
14
- WHERE n.nspname = 'public'
15
- AND c.relkind IN ('r', 'p', 'm')
16
- ORDER BY c.relname
17
- `),
18
- pool.query(`
19
- SELECT
20
- s.tablename AS relation_name,
21
- s.attname AS attribute_name,
22
- s.inherited AS inherited,
23
- s.null_frac::float8 AS null_frac,
24
- s.avg_width::int AS avg_width,
25
- s.n_distinct::float8 AS n_distinct,
26
- s.most_common_vals::text::text[] AS most_common_vals,
27
- s.most_common_freqs AS most_common_freqs,
28
- s.histogram_bounds::text::text[] AS histogram_bounds,
29
- s.correlation::float8 AS correlation,
30
- s.most_common_elems::text::text[] AS most_common_elems,
31
- s.most_common_elem_freqs AS most_common_elem_freqs,
32
- s.elem_count_histogram AS elem_count_histogram
33
- FROM pg_catalog.pg_stats s
34
- WHERE s.schemaname = 'public'
35
- ORDER BY s.tablename, s.attname, s.inherited
36
- `),
37
- // pg_stats_ext exposes the column list under `attnames` (name[]),
38
- // not `columns`. Kinds come back as `"char"[]`, which pg cannot
39
- // serialize over the wire without an explicit cast to text[].
40
- // This query is non-fatal: any catalog shape mismatch (e.g. older
41
- // Postgres) falls through to empty extended stats rather than
42
- // blocking the introspection upload.
43
- pool
44
- .query(`
45
- SELECT
46
- c.relname AS relation_name,
47
- e.statistics_name AS name,
48
- e.kinds::text::text[] AS kind,
49
- e.attnames::text::text[] AS columns,
50
- e.n_distinct::text AS ndistinct,
51
- e.dependencies::text AS dependencies,
52
- e.most_common_vals::text AS mcv
53
- FROM pg_catalog.pg_stats_ext e
54
- JOIN pg_catalog.pg_class c ON c.relname = e.tablename
55
- JOIN pg_catalog.pg_namespace n
56
- ON n.oid = c.relnamespace AND n.nspname = e.schemaname
57
- WHERE e.schemaname = 'public'
58
- ORDER BY c.relname, e.statistics_name
59
- `)
60
- .catch(() => ({ rows: [] })),
61
- ]);
62
- const attrsByRelation = new Map();
63
- attributesResult.rows.forEach((r) => {
64
- const bucket = attrsByRelation.get(r.relation_name) ?? [];
65
- bucket.push({
66
- attribute_name: r.attribute_name,
67
- inherited: r.inherited,
68
- null_frac: Number(r.null_frac),
69
- avg_width: Number(r.avg_width),
70
- n_distinct: Number(r.n_distinct),
71
- most_common_vals: r.most_common_vals,
72
- most_common_freqs: r.most_common_freqs,
73
- histogram_bounds: r.histogram_bounds,
74
- correlation: r.correlation === null ? null : Number(r.correlation),
75
- most_common_elems: r.most_common_elems,
76
- most_common_elem_freqs: r.most_common_elem_freqs,
77
- elem_count_histogram: r.elem_count_histogram,
78
- });
79
- attrsByRelation.set(r.relation_name, bucket);
80
- });
81
- const extendedByRelation = new Map();
82
- extendedResult.rows.forEach((r) => {
83
- const bucket = extendedByRelation.get(r.relation_name) ?? [];
84
- bucket.push({
85
- name: r.name,
86
- kind: r.kind,
87
- columns: r.columns,
88
- ndistinct: r.ndistinct,
89
- dependencies: r.dependencies,
90
- mcv: r.mcv,
91
- });
92
- extendedByRelation.set(r.relation_name, bucket);
93
- });
94
- return relationsResult.rows.map((r) => ({
95
- relation_name: r.relation_name,
96
- reltuples: Number(r.reltuples),
97
- relpages: Number(r.relpages),
98
- relallvisible: Number(r.relallvisible),
99
- attributes: attrsByRelation.get(r.relation_name) ?? [],
100
- extended: extendedByRelation.get(r.relation_name) ?? [],
101
- }));
102
- };
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm5lci1zdGF0cy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi9wbGFubmVyLXN0YXRzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRUEsaUZBQWlGO0FBQ2pGLGlGQUFpRjtBQUNqRix1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsS0FBSyxFQUM3QyxJQUFVLEVBQytCLEVBQUU7SUFDM0MsTUFBTSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsR0FDckQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBZTs7Ozs7Ozs7Ozs7YUFXeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7YUFrQnpCLENBQUM7UUFDRixrRUFBa0U7UUFDbEUsZ0VBQWdFO1FBQ2hFLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUsOERBQThEO1FBQzlELHFDQUFxQztRQUNyQyxJQUFJO2FBQ0MsS0FBSyxDQUNGOzs7Ozs7Ozs7Ozs7Ozs7YUFlUCxDQUNJO2FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBb0IsRUFBQyxDQUFDLENBQUM7S0FDbkQsQ0FBQyxDQUFDO0lBRVAsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7SUFDcEUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1IsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjO1lBQ2hDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDOUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlCLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNoQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ3BDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxpQkFBaUI7WUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtZQUNwQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDbEUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtZQUN0QyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsc0JBQXNCO1lBQ2hELG9CQUFvQixFQUFFLENBQUMsQ0FBQyxvQkFBb0I7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUNuRSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzlCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDbEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3RCLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtZQUM1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7U0FDYixDQUFDLENBQUM7UUFDSCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQzlCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5QixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDNUIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3RDLFVBQVUsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1FBQ3RELFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7S0FDMUQsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlUGxhbm5lclN0YXRzID0ge1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRFeHRlbmRlZFN0YXRpc3RpYyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25QbGFubmVyU3RhdHMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJlbHR1cGxlczogbnVtYmVyO1xuICAgIHJlbHBhZ2VzOiBudW1iZXI7XG4gICAgcmVsYWxsdmlzaWJsZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6IHJlYWRvbmx5IFRBdHRyaWJ1dGVQbGFubmVyU3RhdHNbXTtcbiAgICBleHRlbmRlZDogcmVhZG9ubHkgVEV4dGVuZGVkU3RhdGlzdGljW107XG59O1xuXG50eXBlIFRSZWxhdGlvblJvdyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgcmVsdHVwbGVzOiBudW1iZXI7XG4gICAgcmVscGFnZXM6IG51bWJlcjtcbiAgICByZWxhbGx2aXNpYmxlOiBudW1iZXI7XG59O1xuXG50eXBlIFRBdHRyaWJ1dGVSb3cgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbnR5cGUgVEV4dGVuZGVkUm93ID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBwZ19zdGF0cyBleHBvc2VzIG1vc3RfY29tbW9uX3ZhbHMvaGlzdG9ncmFtX2JvdW5kcyBhcyBhbnlhcnJheSB3aGljaCBwZyBjYW5ub3Rcbi8vIHNlcmlhbGl6ZSBvdmVyIHRoZSB3aXJlOyBjYXN0IHRvIHRleHRbXSBzbyB2YWx1ZXMgY29tZSBiYWNrIGFzIHN0cmluZ3MuIE9uIHRoZVxuLy8gcmVwbGF5IHNpZGUgd2UgY2FzdCBiYWNrIHRvIHRoZSB0YXJnZXQgY29sdW1uIHR5cGUgYmVmb3JlIGluamVjdGluZy5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1BsYW5uZXJTdGF0aXN0aWNzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRSZWxhdGlvblBsYW5uZXJTdGF0c1tdPiA9PiB7XG4gICAgY29uc3QgW3JlbGF0aW9uc1Jlc3VsdCwgYXR0cmlidXRlc1Jlc3VsdCwgZXh0ZW5kZWRSZXN1bHRdID1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgcG9vbC5xdWVyeTxUUmVsYXRpb25Sb3c+KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAgICAgYy5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsdHVwbGVzOjpmbG9hdDggQVMgcmVsdHVwbGVzLFxuICAgICAgICAgICAgICAgICAgICBjLnJlbHBhZ2VzOjppbnQgQVMgcmVscGFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsYWxsdmlzaWJsZTo6aW50IEFTIHJlbGFsbHZpc2libGVcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcsICdtJylcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjLnJlbG5hbWVcbiAgICAgICAgICAgIGApLFxuICAgICAgICAgICAgcG9vbC5xdWVyeTxUQXR0cmlidXRlUm93PihgXG4gICAgICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgICAgIHMudGFibGVuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIHMuYXR0bmFtZSBBUyBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcy5pbmhlcml0ZWQgQVMgaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICBzLm51bGxfZnJhYzo6ZmxvYXQ4IEFTIG51bGxfZnJhYyxcbiAgICAgICAgICAgICAgICAgICAgcy5hdmdfd2lkdGg6OmludCBBUyBhdmdfd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHMubl9kaXN0aW5jdDo6ZmxvYXQ4IEFTIG5fZGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fdmFsczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX3ZhbHMsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fZnJlcXMgQVMgbW9zdF9jb21tb25fZnJlcXMsXG4gICAgICAgICAgICAgICAgICAgIHMuaGlzdG9ncmFtX2JvdW5kczo6dGV4dDo6dGV4dFtdIEFTIGhpc3RvZ3JhbV9ib3VuZHMsXG4gICAgICAgICAgICAgICAgICAgIHMuY29ycmVsYXRpb246OmZsb2F0OCBBUyBjb3JyZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcy5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX2VsZW1zLFxuICAgICAgICAgICAgICAgICAgICBzLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMgQVMgbW9zdF9jb21tb25fZWxlbV9mcmVxcyxcbiAgICAgICAgICAgICAgICAgICAgcy5lbGVtX2NvdW50X2hpc3RvZ3JhbSBBUyBlbGVtX2NvdW50X2hpc3RvZ3JhbVxuICAgICAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgICAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBzLnRhYmxlbmFtZSwgcy5hdHRuYW1lLCBzLmluaGVyaXRlZFxuICAgICAgICAgICAgYCksXG4gICAgICAgICAgICAvLyBwZ19zdGF0c19leHQgZXhwb3NlcyB0aGUgY29sdW1uIGxpc3QgdW5kZXIgYGF0dG5hbWVzYCAobmFtZVtdKSxcbiAgICAgICAgICAgIC8vIG5vdCBgY29sdW1uc2AuIEtpbmRzIGNvbWUgYmFjayBhcyBgXCJjaGFyXCJbXWAsIHdoaWNoIHBnIGNhbm5vdFxuICAgICAgICAgICAgLy8gc2VyaWFsaXplIG92ZXIgdGhlIHdpcmUgd2l0aG91dCBhbiBleHBsaWNpdCBjYXN0IHRvIHRleHRbXS5cbiAgICAgICAgICAgIC8vIFRoaXMgcXVlcnkgaXMgbm9uLWZhdGFsOiBhbnkgY2F0YWxvZyBzaGFwZSBtaXNtYXRjaCAoZS5nLiBvbGRlclxuICAgICAgICAgICAgLy8gUG9zdGdyZXMpIGZhbGxzIHRocm91Z2ggdG8gZW1wdHkgZXh0ZW5kZWQgc3RhdHMgcmF0aGVyIHRoYW5cbiAgICAgICAgICAgIC8vIGJsb2NraW5nIHRoZSBpbnRyb3NwZWN0aW9uIHVwbG9hZC5cbiAgICAgICAgICAgIHBvb2xcbiAgICAgICAgICAgICAgICAucXVlcnk8VEV4dGVuZGVkUm93PihcbiAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgICAgICBjLnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5zdGF0aXN0aWNzX25hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5raW5kczo6dGV4dDo6dGV4dFtdIEFTIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIGUuYXR0bmFtZXM6OnRleHQ6OnRleHRbXSBBUyBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICBlLm5fZGlzdGluY3Q6OnRleHQgQVMgbmRpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICBlLmRlcGVuZGVuY2llczo6dGV4dCBBUyBkZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICAgICAgICAgIGUubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtY3ZcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdHNfZXh0IGVcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLnJlbG5hbWUgPSBlLnRhYmxlbmFtZVxuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgblxuICAgICAgICAgICAgICAgICAgICBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBlLnNjaGVtYW5hbWVcbiAgICAgICAgICAgICAgICBXSEVSRSBlLnNjaGVtYW5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIE9SREVSIEJZIGMucmVsbmFtZSwgZS5zdGF0aXN0aWNzX25hbWVcbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiAoe3Jvd3M6IFtdIGFzIFRFeHRlbmRlZFJvd1tdfSkpLFxuICAgICAgICBdKTtcblxuICAgIGNvbnN0IGF0dHJzQnlSZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBUQXR0cmlidXRlUGxhbm5lclN0YXRzW10+KCk7XG4gICAgYXR0cmlidXRlc1Jlc3VsdC5yb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gYXR0cnNCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdO1xuICAgICAgICBidWNrZXQucHVzaCh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZTogci5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGluaGVyaXRlZDogci5pbmhlcml0ZWQsXG4gICAgICAgICAgICBudWxsX2ZyYWM6IE51bWJlcihyLm51bGxfZnJhYyksXG4gICAgICAgICAgICBhdmdfd2lkdGg6IE51bWJlcihyLmF2Z193aWR0aCksXG4gICAgICAgICAgICBuX2Rpc3RpbmN0OiBOdW1iZXIoci5uX2Rpc3RpbmN0KSxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX3ZhbHM6IHIubW9zdF9jb21tb25fdmFscyxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX2ZyZXFzOiByLm1vc3RfY29tbW9uX2ZyZXFzLFxuICAgICAgICAgICAgaGlzdG9ncmFtX2JvdW5kczogci5oaXN0b2dyYW1fYm91bmRzLFxuICAgICAgICAgICAgY29ycmVsYXRpb246IHIuY29ycmVsYXRpb24gPT09IG51bGwgPyBudWxsIDogTnVtYmVyKHIuY29ycmVsYXRpb24pLFxuICAgICAgICAgICAgbW9zdF9jb21tb25fZWxlbXM6IHIubW9zdF9jb21tb25fZWxlbXMsXG4gICAgICAgICAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsXG4gICAgICAgICAgICBlbGVtX2NvdW50X2hpc3RvZ3JhbTogci5lbGVtX2NvdW50X2hpc3RvZ3JhbSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJzQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXh0ZW5kZWRCeVJlbGF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIFRFeHRlbmRlZFN0YXRpc3RpY1tdPigpO1xuICAgIGV4dGVuZGVkUmVzdWx0LnJvd3MuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICBjb25zdCBidWNrZXQgPSBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW107XG4gICAgICAgIGJ1Y2tldC5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgICAgIGtpbmQ6IHIua2luZCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHIuY29sdW1ucyxcbiAgICAgICAgICAgIG5kaXN0aW5jdDogci5uZGlzdGluY3QsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IHIuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgbWN2OiByLm1jdixcbiAgICAgICAgfSk7XG4gICAgICAgIGV4dGVuZGVkQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbGF0aW9uc1Jlc3VsdC5yb3dzLm1hcCgocikgPT4gKHtcbiAgICAgICAgcmVsYXRpb25fbmFtZTogci5yZWxhdGlvbl9uYW1lLFxuICAgICAgICByZWx0dXBsZXM6IE51bWJlcihyLnJlbHR1cGxlcyksXG4gICAgICAgIHJlbHBhZ2VzOiBOdW1iZXIoci5yZWxwYWdlcyksXG4gICAgICAgIHJlbGFsbHZpc2libGU6IE51bWJlcihyLnJlbGFsbHZpc2libGUpLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyc0J5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgICAgIGV4dGVuZGVkOiBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgfSkpO1xufTtcbiJdfQ==
@@ -1,11 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TRelationType = 'partitioned_table' | 'table' | 'view' | 'materialized_view';
3
- export type TRelationInfo = {
4
- name: string;
5
- type: TRelationType;
6
- comment: string | null;
7
- };
8
- export type TGroupedRelations = Record<TRelationType, TRelationInfo[]>;
9
- export declare const fetchPublicRelations: (pool: Pool) => Promise<TGroupedRelations>;
10
- export declare const fetchViewDefinition: (pool: Pool, viewName: string) => Promise<string>;
11
- //# sourceMappingURL=relations.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relations.d.mts","sourceRoot":"./src/","sources":["db/relations.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,MAAM,MAAM,aAAa,GACnB,mBAAmB,GACnB,OAAO,GACP,MAAM,GACN,mBAAmB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;AAEvE,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,iBAAiB,CAqB3B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,MAAM,IAAI,EACV,UAAU,MAAM,KACjB,OAAO,CAAC,MAAM,CAYhB,CAAC"}
@@ -1,32 +0,0 @@
1
- import { groupBy } from 'es-toolkit';
2
- export const fetchPublicRelations = async (pool) => {
3
- const result = await pool.query(`
4
- SELECT relname AS name,
5
- CASE relkind
6
- WHEN 'p' THEN 'partitioned_table'
7
- WHEN 'r' THEN 'table'
8
- WHEN 'v' THEN 'view'
9
- WHEN 'm' THEN 'materialized_view'
10
- END AS type,
11
- obj_description(oid, 'pg_class') AS comment
12
- FROM pg_catalog.pg_class
13
- WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')
14
- AND (
15
- relkind = 'p'
16
- OR (relkind = 'r' AND NOT relispartition)
17
- OR relkind IN ('v', 'm')
18
- )
19
- ORDER BY type, name
20
- `);
21
- return groupBy(result.rows, (row) => row.type);
22
- };
23
- export const fetchViewDefinition = async (pool, viewName) => {
24
- const result = await pool.query(`
25
- SELECT pg_get_viewdef(c.oid, true) AS definition
26
- FROM pg_catalog.pg_class c
27
- WHERE c.relname = $1
28
- AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')
29
- `, [viewName]);
30
- return result.rows[0].definition;
31
- };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3JlbGF0aW9ucy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQWdCbkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2dCLEVBQUU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQjlDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQXNCLENBQUM7QUFDeEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUNwQyxJQUFVLEVBQ1YsUUFBZ0IsRUFDRCxFQUFFO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDM0I7Ozs7O1NBS0MsRUFDRCxDQUFDLFFBQVEsQ0FBQyxDQUNiLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge2dyb3VwQnl9IGZyb20gJ2VzLXRvb2xraXQnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25UeXBlID1cbiAgICB8ICdwYXJ0aXRpb25lZF90YWJsZSdcbiAgICB8ICd0YWJsZSdcbiAgICB8ICd2aWV3J1xuICAgIHwgJ21hdGVyaWFsaXplZF92aWV3JztcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uSW5mbyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVFJlbGF0aW9uVHlwZTtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVEdyb3VwZWRSZWxhdGlvbnMgPSBSZWNvcmQ8VFJlbGF0aW9uVHlwZSwgVFJlbGF0aW9uSW5mb1tdPjtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljUmVsYXRpb25zID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRHcm91cGVkUmVsYXRpb25zPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUmVsYXRpb25JbmZvPihgXG4gICAgICAgIFNFTEVDVCByZWxuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBDQVNFIHJlbGtpbmRcbiAgICAgICAgICAgICAgICBXSEVOICdwJyBUSEVOICdwYXJ0aXRpb25lZF90YWJsZSdcbiAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICd0YWJsZSdcbiAgICAgICAgICAgICAgICBXSEVOICd2JyBUSEVOICd2aWV3J1xuICAgICAgICAgICAgICAgIFdIRU4gJ20nIFRIRU4gJ21hdGVyaWFsaXplZF92aWV3J1xuICAgICAgICAgICAgRU5EIEFTIHR5cGUsXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24ob2lkLCAncGdfY2xhc3MnKSBBUyBjb21tZW50XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzc1xuICAgICAgICBXSEVSRSByZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gJ3B1YmxpYycpXG4gICAgICAgICAgICBBTkQgKFxuICAgICAgICAgICAgICAgIHJlbGtpbmQgPSAncCdcbiAgICAgICAgICAgICAgICBPUiAocmVsa2luZCA9ICdyJyBBTkQgTk9UIHJlbGlzcGFydGl0aW9uKVxuICAgICAgICAgICAgICAgIE9SIHJlbGtpbmQgSU4gKCd2JywgJ20nKVxuICAgICAgICAgICAgKVxuICAgICAgICBPUkRFUiBCWSB0eXBlLCBuYW1lXG4gICAgYCk7XG5cbiAgICByZXR1cm4gZ3JvdXBCeShyZXN1bHQucm93cywgKHJvdykgPT4gcm93LnR5cGUpIGFzIFRHcm91cGVkUmVsYXRpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVmlld0RlZmluaXRpb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB2aWV3TmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtkZWZpbml0aW9uOiBzdHJpbmd9PihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoYy5vaWQsIHRydWUpIEFTIGRlZmluaXRpb25cbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgV0hFUkUgYy5yZWxuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBjLnJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAncHVibGljJylcbiAgICAgICAgYCxcbiAgICAgICAgW3ZpZXdOYW1lXSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdIS5kZWZpbml0aW9uO1xufTtcbiJdfQ==
package/dist/db/rls.d.mts DELETED
@@ -1,21 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TPolicyCommand = 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE';
3
- export type TRelationRLS = {
4
- relation_name: string;
5
- rls_enabled: boolean;
6
- rls_forced: boolean;
7
- };
8
- export type TPolicyInfo = {
9
- relation_name: string;
10
- name: string;
11
- permissive: boolean;
12
- roles: readonly string[];
13
- command: TPolicyCommand;
14
- using_expression: string | null;
15
- with_check_expression: string | null;
16
- };
17
- export declare const fetchPublicRLS: (pool: Pool) => Promise<{
18
- readonly relations: readonly TRelationRLS[];
19
- readonly policies: readonly TPolicyInfo[];
20
- }>;
21
- //# sourceMappingURL=rls.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rls.d.mts","sourceRoot":"./src/","sources":["db/rls.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,cAAc,GACvB,MAAM,IAAI,KACX,OAAO,CAAC;IACP,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC7C,CA+CA,CAAC"}
package/dist/db/rls.mjs DELETED
@@ -1,48 +0,0 @@
1
- export const fetchPublicRLS = async (pool) => {
2
- const [relations, policies] = await Promise.all([
3
- pool.query(`
4
- SELECT
5
- c.relname AS relation_name,
6
- c.relrowsecurity AS rls_enabled,
7
- c.relforcerowsecurity AS rls_forced
8
- FROM pg_catalog.pg_class c
9
- JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
10
- WHERE n.nspname = 'public'
11
- AND c.relkind IN ('r', 'p')
12
- AND (c.relrowsecurity OR c.relforcerowsecurity)
13
- ORDER BY c.relname
14
- `),
15
- pool.query(`
16
- SELECT
17
- t.relname AS relation_name,
18
- pol.polname AS name,
19
- pol.polpermissive AS permissive,
20
- COALESCE(
21
- (
22
- SELECT array_agg(
23
- CASE WHEN r = 0 THEN 'public' ELSE pg_get_userbyid(r) END
24
- ORDER BY r
25
- )
26
- FROM unnest(pol.polroles) AS r
27
- ),
28
- ARRAY[]::text[]
29
- ) AS roles,
30
- CASE pol.polcmd
31
- WHEN '*' THEN 'ALL'
32
- WHEN 'r' THEN 'SELECT'
33
- WHEN 'a' THEN 'INSERT'
34
- WHEN 'w' THEN 'UPDATE'
35
- WHEN 'd' THEN 'DELETE'
36
- END AS command,
37
- pg_get_expr(pol.polqual, pol.polrelid) AS using_expression,
38
- pg_get_expr(pol.polwithcheck, pol.polrelid) AS with_check_expression
39
- FROM pg_catalog.pg_policy pol
40
- JOIN pg_catalog.pg_class t ON t.oid = pol.polrelid
41
- JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace
42
- WHERE n.nspname = 'public'
43
- ORDER BY t.relname, pol.polname
44
- `),
45
- ]);
46
- return { relations: relations.rows, policies: policies.rows };
47
- };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3Jscy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0JBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQy9CLElBQVUsRUFJWCxFQUFFO0lBQ0QsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBZTs7Ozs7Ozs7Ozs7U0FXeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBNkJ2QixDQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvbGljeUNvbW1hbmQgPSAnQUxMJyB8ICdTRUxFQ1QnIHwgJ0lOU0VSVCcgfCAnVVBEQVRFJyB8ICdERUxFVEUnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25STFMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJsc19lbmFibGVkOiBib29sZWFuO1xuICAgIHJsc19mb3JjZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUUG9saWN5SW5mbyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBlcm1pc3NpdmU6IGJvb2xlYW47XG4gICAgcm9sZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNvbW1hbmQ6IFRQb2xpY3lDb21tYW5kO1xuICAgIHVzaW5nX2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG4gICAgd2l0aF9jaGVja19leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljUkxTID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHtcbiAgICByZWFkb25seSByZWxhdGlvbnM6IHJlYWRvbmx5IFRSZWxhdGlvblJMU1tdO1xuICAgIHJlYWRvbmx5IHBvbGljaWVzOiByZWFkb25seSBUUG9saWN5SW5mb1tdO1xufT4gPT4ge1xuICAgIGNvbnN0IFtyZWxhdGlvbnMsIHBvbGljaWVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcG9vbC5xdWVyeTxUUmVsYXRpb25STFM+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIGMucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgIGMucmVscm93c2VjdXJpdHkgQVMgcmxzX2VuYWJsZWQsXG4gICAgICAgICAgICAgICAgYy5yZWxmb3JjZXJvd3NlY3VyaXR5IEFTIHJsc19mb3JjZWRcbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBBTkQgYy5yZWxraW5kIElOICgncicsICdwJylcbiAgICAgICAgICAgICAgICBBTkQgKGMucmVscm93c2VjdXJpdHkgT1IgYy5yZWxmb3JjZXJvd3NlY3VyaXR5KVxuICAgICAgICAgICAgT1JERVIgQlkgYy5yZWxuYW1lXG4gICAgICAgIGApLFxuICAgICAgICBwb29sLnF1ZXJ5PFRQb2xpY3lJbmZvPihgXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICB0LnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICBwb2wucG9sbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgICAgIHBvbC5wb2xwZXJtaXNzaXZlIEFTIHBlcm1pc3NpdmUsXG4gICAgICAgICAgICAgICAgQ09BTEVTQ0UoXG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCBhcnJheV9hZ2coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIHIgPSAwIFRIRU4gJ3B1YmxpYycgRUxTRSBwZ19nZXRfdXNlcmJ5aWQocikgRU5EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSB1bm5lc3QocG9sLnBvbHJvbGVzKSBBUyByXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEFSUkFZW106OnRleHRbXVxuICAgICAgICAgICAgICAgICkgQVMgcm9sZXMsXG4gICAgICAgICAgICAgICAgQ0FTRSBwb2wucG9sY21kXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJyonIFRIRU4gJ0FMTCdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAncicgVEhFTiAnU0VMRUNUJ1xuICAgICAgICAgICAgICAgICAgICBXSEVOICdhJyBUSEVOICdJTlNFUlQnXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJ3cnIFRIRU4gJ1VQREFURSdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnREVMRVRFJ1xuICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLFxuICAgICAgICAgICAgICAgIHBnX2dldF9leHByKHBvbC5wb2xxdWFsLCBwb2wucG9scmVsaWQpIEFTIHVzaW5nX2V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIocG9sLnBvbHdpdGhjaGVjaywgcG9sLnBvbHJlbGlkKSBBUyB3aXRoX2NoZWNrX2V4cHJlc3Npb25cbiAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wb2xpY3kgcG9sXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IHBvbC5wb2xyZWxpZFxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC5yZWxuYW1lc3BhY2VcbiAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnJlbG5hbWUsIHBvbC5wb2xuYW1lXG4gICAgICAgIGApLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIHtyZWxhdGlvbnM6IHJlbGF0aW9ucy5yb3dzLCBwb2xpY2llczogcG9saWNpZXMucm93c307XG59O1xuIl19
@@ -1,16 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TSampleStrategy = 'distinct' | 'random';
3
- export type TColumnSample = {
4
- readonly column_name: string;
5
- readonly strategy: TSampleStrategy;
6
- readonly values: readonly string[];
7
- };
8
- export type TCompositeSubField = {
9
- readonly name: string;
10
- readonly data_type: string;
11
- };
12
- export type TRelationKind = 'table' | 'partitioned_table' | 'view' | 'materialized_view';
13
- export declare const sampleColumn: (pool: Pool, tableName: string, columnName: string, estimatedDistinct: number, estimatedRowCount: number, relationKind: TRelationKind) => Promise<TColumnSample>;
14
- export declare const sampleCompositeSubField: (pool: Pool, tableName: string, columnName: string, subFieldName: string, estimatedDistinct: number, estimatedRowCount: number, relationKind: TRelationKind) => Promise<TColumnSample>;
15
- export declare const fetchCompositeSubFields: (pool: Pool, typeName: string) => Promise<readonly TCompositeSubField[]>;
16
- //# sourceMappingURL=sample.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sample.d.mts","sourceRoot":"./src/","sources":["db/sample.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B,CAAC;AAiDF,MAAM,MAAM,aAAa,GACnB,OAAO,GACP,mBAAmB,GACnB,MAAM,GACN,mBAAmB,CAAC;AAO1B,eAAO,MAAM,YAAY,GACrB,MAAM,IAAI,EACV,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,mBAAmB,MAAM,EACzB,mBAAmB,MAAM,EACzB,cAAc,aAAa,KAC5B,OAAO,CAAC,aAAa,CA6BvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,EACV,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,cAAc,MAAM,EACpB,mBAAmB,MAAM,EACzB,mBAAmB,MAAM,EACzB,cAAc,aAAa,KAC5B,OAAO,CAAC,aAAa,CAqCvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,EACV,UAAU,MAAM,KACjB,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAcvC,CAAC"}
@@ -1,73 +0,0 @@
1
- const quoteIdent = (name) => `"${name.replace(/"/g, '""')}"`;
2
- const LOW_CARDINALITY_THRESHOLD = 256;
3
- const LOW_CARDINALITY_LIMIT = 256;
4
- const HIGH_CARDINALITY_LIMIT = 64;
5
- const BERNOULLI_OVERSAMPLE_FACTOR = 10;
6
- const sampleDistinct = async (pool, tableName, columnExpr, limit) => {
7
- const sql = `SELECT DISTINCT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} WHERE ${columnExpr} IS NOT NULL LIMIT $1`;
8
- const result = await pool.query(sql, [limit]);
9
- return result.rows.map((r) => r.val);
10
- };
11
- const sampleBernoulli = async (pool, tableName, columnExpr, estimatedRowCount, limit) => {
12
- const percentage = Math.min(100, (limit / Math.max(estimatedRowCount, 1)) *
13
- 100 *
14
- BERNOULLI_OVERSAMPLE_FACTOR);
15
- const sql = `SELECT DISTINCT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} TABLESAMPLE BERNOULLI($1) WHERE ${columnExpr} IS NOT NULL LIMIT $2`;
16
- const result = await pool.query(sql, [percentage, limit]);
17
- return result.rows.map((r) => r.val);
18
- };
19
- const samplePlainLimit = async (pool, tableName, columnExpr, limit) => {
20
- const sql = `SELECT ${columnExpr}::text AS val FROM ${quoteIdent(tableName)} WHERE ${columnExpr} IS NOT NULL LIMIT $1`;
21
- const result = await pool.query(sql, [limit]);
22
- return result.rows.map((r) => r.val);
23
- };
24
- const supportsTableSample = (kind) => kind === 'table' ||
25
- kind === 'partitioned_table' ||
26
- kind === 'materialized_view';
27
- export const sampleColumn = async (pool, tableName, columnName, estimatedDistinct, estimatedRowCount, relationKind) => {
28
- const columnExpr = quoteIdent(columnName);
29
- const isLowCardinality = estimatedDistinct > 0 && estimatedDistinct < LOW_CARDINALITY_THRESHOLD;
30
- if (isLowCardinality) {
31
- const values = await sampleDistinct(pool, tableName, columnExpr, LOW_CARDINALITY_LIMIT);
32
- return { column_name: columnName, strategy: 'distinct', values };
33
- }
34
- const limit = HIGH_CARDINALITY_LIMIT;
35
- const values = supportsTableSample(relationKind) && estimatedRowCount > 0
36
- ? await sampleBernoulli(pool, tableName, columnExpr, estimatedRowCount, limit)
37
- : await samplePlainLimit(pool, tableName, columnExpr, limit);
38
- return { column_name: columnName, strategy: 'random', values };
39
- };
40
- export const sampleCompositeSubField = async (pool, tableName, columnName, subFieldName, estimatedDistinct, estimatedRowCount, relationKind) => {
41
- const columnExpr = `(${quoteIdent(columnName)}).${quoteIdent(subFieldName)}`;
42
- const isLowCardinality = estimatedDistinct > 0 && estimatedDistinct < LOW_CARDINALITY_THRESHOLD;
43
- if (isLowCardinality) {
44
- const values = await sampleDistinct(pool, tableName, columnExpr, LOW_CARDINALITY_LIMIT);
45
- return {
46
- column_name: `${columnName}.${subFieldName}`,
47
- strategy: 'distinct',
48
- values,
49
- };
50
- }
51
- const limit = HIGH_CARDINALITY_LIMIT;
52
- const values = supportsTableSample(relationKind) && estimatedRowCount > 0
53
- ? await sampleBernoulli(pool, tableName, columnExpr, estimatedRowCount, limit)
54
- : await samplePlainLimit(pool, tableName, columnExpr, limit);
55
- return {
56
- column_name: `${columnName}.${subFieldName}`,
57
- strategy: 'random',
58
- values,
59
- };
60
- };
61
- export const fetchCompositeSubFields = async (pool, typeName) => {
62
- const result = await pool.query(`
63
- SELECT a.attname AS name, format_type(a.atttypid, a.atttypmod) AS data_type
64
- FROM pg_type t
65
- JOIN pg_attribute a ON a.attrelid = t.typrelid
66
- WHERE t.typname = $1
67
- AND a.attnum > 0
68
- AND NOT a.attisdropped
69
- ORDER BY a.attnum
70
- `, [typeName]);
71
- return result.rows;
72
- };
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3NhbXBsZS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUU3RSxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQ3hCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixLQUFhLEVBQ2EsRUFBRTtJQUM1QixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsVUFBVSxzQkFBc0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLFVBQVUsdUJBQXVCLENBQUM7SUFDaEksTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQ3pCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixpQkFBeUIsRUFDekIsS0FBYSxFQUNhLEVBQUU7SUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsR0FBRyxFQUNILENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEMsR0FBRztRQUNILDJCQUEyQixDQUNsQyxDQUFDO0lBQ0YsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLFVBQVUsc0JBQXNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsb0NBQW9DLFVBQVUsdUJBQXVCLENBQUM7SUFDMUosTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFnQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzFCLElBQVUsRUFDVixTQUFpQixFQUNqQixVQUFrQixFQUNsQixLQUFhLEVBQ2EsRUFBRTtJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLFVBQVUsc0JBQXNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxVQUFVLHVCQUF1QixDQUFDO0lBQ3ZILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBZ0IsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBUUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQW1CLEVBQVcsRUFBRSxDQUN6RCxJQUFJLEtBQUssT0FBTztJQUNoQixJQUFJLEtBQUssbUJBQW1CO0lBQzVCLElBQUksS0FBSyxtQkFBbUIsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUM3QixJQUFVLEVBQ1YsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsaUJBQXlCLEVBQ3pCLGlCQUF5QixFQUN6QixZQUEyQixFQUNMLEVBQUU7SUFDeEIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQ2xCLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUUzRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQy9CLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLHFCQUFxQixDQUN4QixDQUFDO1FBQ0YsT0FBTyxFQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQztRQUN0RCxDQUFDLENBQUMsTUFBTSxlQUFlLENBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixLQUFLLENBQ1I7UUFDSCxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxPQUFPLEVBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNWLFNBQWlCLEVBQ2pCLFVBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLGlCQUF5QixFQUN6QixpQkFBeUIsRUFDekIsWUFBMkIsRUFDTCxFQUFFO0lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQ2xCLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUUzRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQy9CLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLHFCQUFxQixDQUN4QixDQUFDO1FBQ0YsT0FBTztZQUNILFdBQVcsRUFBRSxHQUFHLFVBQVUsSUFBSSxZQUFZLEVBQUU7WUFDNUMsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTTtTQUNULENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQztRQUN0RCxDQUFDLENBQUMsTUFBTSxlQUFlLENBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixLQUFLLENBQ1I7UUFDSCxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxPQUFPO1FBQ0gsV0FBVyxFQUFFLEdBQUcsVUFBVSxJQUFJLFlBQVksRUFBRTtRQUM1QyxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNO0tBQ1QsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNWLFFBQWdCLEVBQ3NCLEVBQUU7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUMzQjs7Ozs7Ozs7U0FRQyxFQUNELENBQUMsUUFBUSxDQUFDLENBQ2IsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUU2FtcGxlU3RyYXRlZ3kgPSAnZGlzdGluY3QnIHwgJ3JhbmRvbSc7XG5cbmV4cG9ydCB0eXBlIFRDb2x1bW5TYW1wbGUgPSB7XG4gICAgcmVhZG9ubHkgY29sdW1uX25hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBzdHJhdGVneTogVFNhbXBsZVN0cmF0ZWd5O1xuICAgIHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlU3ViRmllbGQgPSB7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRhdGFfdHlwZTogc3RyaW5nO1xufTtcblxuY29uc3QgcXVvdGVJZGVudCA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gYFwiJHtuYW1lLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuXG5jb25zdCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEID0gMjU2O1xuY29uc3QgTE9XX0NBUkRJTkFMSVRZX0xJTUlUID0gMjU2O1xuY29uc3QgSElHSF9DQVJESU5BTElUWV9MSU1JVCA9IDY0O1xuY29uc3QgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SID0gMTA7XG5cbmNvbnN0IHNhbXBsZURpc3RpbmN0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuY29uc3Qgc2FtcGxlQmVybm91bGxpID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgbGltaXQ6IG51bWJlcixcbik6IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+ID0+IHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oXG4gICAgICAgIDEwMCxcbiAgICAgICAgKGxpbWl0IC8gTWF0aC5tYXgoZXN0aW1hdGVkUm93Q291bnQsIDEpKSAqXG4gICAgICAgICAgICAxMDAgKlxuICAgICAgICAgICAgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SLFxuICAgICk7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBUQUJMRVNBTVBMRSBCRVJOT1VMTEkoJDEpIFdIRVJFICR7Y29sdW1uRXhwcn0gSVMgTk9UIE5VTEwgTElNSVQgJDJgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e3ZhbDogc3RyaW5nfT4oc3FsLCBbcGVyY2VudGFnZSwgbGltaXRdKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3MubWFwKChyKSA9PiByLnZhbCk7XG59O1xuXG5jb25zdCBzYW1wbGVQbGFpbkxpbWl0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uS2luZCA9XG4gICAgfCAndGFibGUnXG4gICAgfCAncGFydGl0aW9uZWRfdGFibGUnXG4gICAgfCAndmlldydcbiAgICB8ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmNvbnN0IHN1cHBvcnRzVGFibGVTYW1wbGUgPSAoa2luZDogVFJlbGF0aW9uS2luZCk6IGJvb2xlYW4gPT5cbiAgICBraW5kID09PSAndGFibGUnIHx8XG4gICAga2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJyB8fFxuICAgIGtpbmQgPT09ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb2x1bW4gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgZXN0aW1hdGVkRGlzdGluY3Q6IG51bWJlcixcbiAgICBlc3RpbWF0ZWRSb3dDb3VudDogbnVtYmVyLFxuICAgIHJlbGF0aW9uS2luZDogVFJlbGF0aW9uS2luZCxcbik6IFByb21pc2U8VENvbHVtblNhbXBsZT4gPT4ge1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBxdW90ZUlkZW50KGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGlzTG93Q2FyZGluYWxpdHkgPVxuICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdCA+IDAgJiYgZXN0aW1hdGVkRGlzdGluY3QgPCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEO1xuXG4gICAgaWYgKGlzTG93Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgc2FtcGxlRGlzdGluY3QoXG4gICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgIExPV19DQVJESU5BTElUWV9MSU1JVCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtjb2x1bW5fbmFtZTogY29sdW1uTmFtZSwgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsIHZhbHVlc307XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXQgPSBISUdIX0NBUkRJTkFMSVRZX0xJTUlUO1xuXG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgc3VwcG9ydHNUYWJsZVNhbXBsZShyZWxhdGlvbktpbmQpICYmIGVzdGltYXRlZFJvd0NvdW50ID4gMFxuICAgICAgICAgICAgPyBhd2FpdCBzYW1wbGVCZXJub3VsbGkoXG4gICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFJvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlUGxhaW5MaW1pdChwb29sLCB0YWJsZU5hbWUsIGNvbHVtbkV4cHIsIGxpbWl0KTtcblxuICAgIHJldHVybiB7Y29sdW1uX25hbWU6IGNvbHVtbk5hbWUsIHN0cmF0ZWd5OiAncmFuZG9tJywgdmFsdWVzfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb21wb3NpdGVTdWJGaWVsZCA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBzdWJGaWVsZE5hbWU6IHN0cmluZyxcbiAgICBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgcmVsYXRpb25LaW5kOiBUUmVsYXRpb25LaW5kLFxuKTogUHJvbWlzZTxUQ29sdW1uU2FtcGxlPiA9PiB7XG4gICAgY29uc3QgY29sdW1uRXhwciA9IGAoJHtxdW90ZUlkZW50KGNvbHVtbk5hbWUpfSkuJHtxdW90ZUlkZW50KHN1YkZpZWxkTmFtZSl9YDtcbiAgICBjb25zdCBpc0xvd0NhcmRpbmFsaXR5ID1cbiAgICAgICAgZXN0aW1hdGVkRGlzdGluY3QgPiAwICYmIGVzdGltYXRlZERpc3RpbmN0IDwgTE9XX0NBUkRJTkFMSVRZX1RIUkVTSE9MRDtcblxuICAgIGlmIChpc0xvd0NhcmRpbmFsaXR5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHNhbXBsZURpc3RpbmN0KFxuICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICBMT1dfQ0FSRElOQUxJVFlfTElNSVQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgICAgIHN0cmF0ZWd5OiAnZGlzdGluY3QnLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ID0gSElHSF9DQVJESU5BTElUWV9MSU1JVDtcblxuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICAgIHN1cHBvcnRzVGFibGVTYW1wbGUocmVsYXRpb25LaW5kKSAmJiBlc3RpbWF0ZWRSb3dDb3VudCA+IDBcbiAgICAgICAgICAgID8gYXdhaXQgc2FtcGxlQmVybm91bGxpKFxuICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGF3YWl0IHNhbXBsZVBsYWluTGltaXQocG9vbCwgdGFibGVOYW1lLCBjb2x1bW5FeHByLCBsaW1pdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgc3RyYXRlZ3k6ICdyYW5kb20nLFxuICAgICAgICB2YWx1ZXMsXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaENvbXBvc2l0ZVN1YkZpZWxkcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRDb21wb3NpdGVTdWJGaWVsZFtdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7bmFtZTogc3RyaW5nOyBkYXRhX3R5cGU6IHN0cmluZ30+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVCBhLmF0dG5hbWUgQVMgbmFtZSwgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpIEFTIGRhdGFfdHlwZVxuICAgICAgICBGUk9NIHBnX3R5cGUgdFxuICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgIFdIRVJFIHQudHlwbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgIE9SREVSIEJZIGEuYXR0bnVtXG4gICAgICAgIGAsXG4gICAgICAgIFt0eXBlTmFtZV0sXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIl19
@@ -1,15 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TSequenceInfo = {
3
- name: string;
4
- data_type: string;
5
- start_value: string;
6
- min_value: string;
7
- max_value: string;
8
- increment: string;
9
- cycle: boolean;
10
- cache_size: string;
11
- owned_by_table: string | null;
12
- owned_by_column: string | null;
13
- };
14
- export declare const fetchPublicSequences: (pool: Pool) => Promise<TSequenceInfo[]>;
15
- //# sourceMappingURL=sequences.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequences.d.mts","sourceRoot":"./src/","sources":["db/sequences.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,aAAa,EAAE,CA8BzB,CAAC"}
@@ -1,31 +0,0 @@
1
- export const fetchPublicSequences = async (pool) => {
2
- const result = await pool.query(`
3
- SELECT
4
- s.sequencename AS name,
5
- s.data_type::text AS data_type,
6
- s.start_value::text AS start_value,
7
- s.min_value::text AS min_value,
8
- s.max_value::text AS max_value,
9
- s.increment_by::text AS increment,
10
- s.cycle AS cycle,
11
- s.cache_size::text AS cache_size,
12
- t.relname AS owned_by_table,
13
- a.attname AS owned_by_column
14
- FROM pg_catalog.pg_sequences s
15
- JOIN pg_catalog.pg_class c
16
- ON c.relname = s.sequencename
17
- AND c.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = s.schemaname)
18
- LEFT JOIN pg_catalog.pg_depend d
19
- ON d.objid = c.oid
20
- AND d.classid = 'pg_class'::regclass
21
- AND d.refclassid = 'pg_class'::regclass
22
- AND d.deptype = 'a'
23
- LEFT JOIN pg_catalog.pg_class t ON t.oid = d.refobjid
24
- LEFT JOIN pg_catalog.pg_attribute a
25
- ON a.attrelid = d.refobjid AND a.attnum = d.refobjsubid
26
- WHERE s.schemaname = 'public'
27
- ORDER BY s.sequencename
28
- `);
29
- return result.rows;
30
- };
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VzLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImRiL3NlcXVlbmNlcy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNyQyxJQUFVLEVBQ2MsRUFBRTtJQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTBCOUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRTZXF1ZW5jZUluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRhdGFfdHlwZTogc3RyaW5nO1xuICAgIHN0YXJ0X3ZhbHVlOiBzdHJpbmc7XG4gICAgbWluX3ZhbHVlOiBzdHJpbmc7XG4gICAgbWF4X3ZhbHVlOiBzdHJpbmc7XG4gICAgaW5jcmVtZW50OiBzdHJpbmc7XG4gICAgY3ljbGU6IGJvb2xlYW47XG4gICAgY2FjaGVfc2l6ZTogc3RyaW5nO1xuICAgIG93bmVkX2J5X3RhYmxlOiBzdHJpbmcgfCBudWxsO1xuICAgIG93bmVkX2J5X2NvbHVtbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1NlcXVlbmNlcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUU2VxdWVuY2VJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRTZXF1ZW5jZUluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnNlcXVlbmNlbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgcy5kYXRhX3R5cGU6OnRleHQgQVMgZGF0YV90eXBlLFxuICAgICAgICAgICAgcy5zdGFydF92YWx1ZTo6dGV4dCBBUyBzdGFydF92YWx1ZSxcbiAgICAgICAgICAgIHMubWluX3ZhbHVlOjp0ZXh0IEFTIG1pbl92YWx1ZSxcbiAgICAgICAgICAgIHMubWF4X3ZhbHVlOjp0ZXh0IEFTIG1heF92YWx1ZSxcbiAgICAgICAgICAgIHMuaW5jcmVtZW50X2J5Ojp0ZXh0IEFTIGluY3JlbWVudCxcbiAgICAgICAgICAgIHMuY3ljbGUgQVMgY3ljbGUsXG4gICAgICAgICAgICBzLmNhY2hlX3NpemU6OnRleHQgQVMgY2FjaGVfc2l6ZSxcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyBvd25lZF9ieV90YWJsZSxcbiAgICAgICAgICAgIGEuYXR0bmFtZSBBUyBvd25lZF9ieV9jb2x1bW5cbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3NlcXVlbmNlcyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgICAgICBPTiBjLnJlbG5hbWUgPSBzLnNlcXVlbmNlbmFtZVxuICAgICAgICAgICAgQU5EIGMucmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IHMuc2NoZW1hbmFtZSlcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfZGVwZW5kIGRcbiAgICAgICAgICAgIE9OIGQub2JqaWQgPSBjLm9pZFxuICAgICAgICAgICAgQU5EIGQuY2xhc3NpZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzXG4gICAgICAgICAgICBBTkQgZC5yZWZjbGFzc2lkID0gJ3BnX2NsYXNzJzo6cmVnY2xhc3NcbiAgICAgICAgICAgIEFORCBkLmRlcHR5cGUgPSAnYSdcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IGQucmVmb2JqaWRcbiAgICAgICAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFcbiAgICAgICAgICAgIE9OIGEuYXR0cmVsaWQgPSBkLnJlZm9iamlkIEFORCBhLmF0dG51bSA9IGQucmVmb2Jqc3ViaWRcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgT1JERVIgQlkgcy5zZXF1ZW5jZW5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iXX0=
@@ -1,12 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TAttributeStats = {
3
- attribute_name: string;
4
- estimated_distinct: number;
5
- };
6
- export type TRelationStats = {
7
- relation_name: string;
8
- estimated_row_count: number;
9
- attributes: TAttributeStats[];
10
- };
11
- export declare const fetchRelationStats: (pool: Pool, relationName: string) => Promise<TRelationStats>;
12
- //# sourceMappingURL=stats.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.d.mts","sourceRoot":"./src/","sources":["db/stats.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,eAAe,GAAG;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC3B,MAAM,IAAI,EACV,cAAc,MAAM,KACrB,OAAO,CAAC,cAAc,CAuCxB,CAAC"}
package/dist/db/stats.mjs DELETED
@@ -1,34 +0,0 @@
1
- export const fetchRelationStats = async (pool, relationName) => {
2
- const result = await pool.query(`
3
- SELECT
4
- s.tablename AS relation_name,
5
- c.reltuples::bigint AS estimated_row_count,
6
- s.attname AS attribute_name,
7
- CASE
8
- WHEN s.n_distinct > 0 THEN s.n_distinct
9
- ELSE abs(s.n_distinct) * c.reltuples
10
- END::bigint AS estimated_distinct
11
- FROM pg_catalog.pg_stats s
12
- JOIN pg_catalog.pg_class c ON c.relname = s.tablename
13
- JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace AND n.nspname = s.schemaname
14
- WHERE s.schemaname = 'public'
15
- AND s.tablename = $1
16
- ORDER BY s.attname
17
- `, [relationName]);
18
- if (result.rows.length === 0) {
19
- return {
20
- relation_name: relationName,
21
- estimated_row_count: 0,
22
- attributes: [],
23
- };
24
- }
25
- return {
26
- relation_name: result.rows[0].relation_name,
27
- estimated_row_count: Number(result.rows[0].estimated_row_count),
28
- attributes: result.rows.map(({ attribute_name, estimated_distinct }) => ({
29
- attribute_name,
30
- estimated_distinct: Number(estimated_distinct),
31
- })),
32
- };
33
- };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvc3RhdHMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDbkMsSUFBVSxFQUNWLFlBQW9CLEVBQ0csRUFBRTtJQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBRzNCOzs7Ozs7Ozs7Ozs7Ozs7U0FlQyxFQUNELENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDSCxhQUFhLEVBQUUsWUFBWTtZQUMzQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTztRQUNILGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDM0MsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFDL0QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxjQUFjO1lBQ2Qsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2pELENBQUMsQ0FBQztLQUNOLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlU3RhdHMgPSB7XG4gICAgYXR0cmlidXRlX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfZGlzdGluY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXI7XG4gICAgYXR0cmlidXRlczogVEF0dHJpYnV0ZVN0YXRzW107XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvblN0YXRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRSZWxhdGlvblN0YXRzPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxcbiAgICAgICAgVEF0dHJpYnV0ZVN0YXRzICYge3JlbGF0aW9uX25hbWU6IHN0cmluZzsgZXN0aW1hdGVkX3Jvd19jb3VudDogbnVtYmVyfVxuICAgID4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgYy5yZWx0dXBsZXM6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgcy5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gcy5uX2Rpc3RpbmN0ID4gMCBUSEVOIHMubl9kaXN0aW5jdFxuICAgICAgICAgICAgICAgIEVMU0UgYWJzKHMubl9kaXN0aW5jdCkgKiBjLnJlbHR1cGxlc1xuICAgICAgICAgICAgRU5EOjpiaWdpbnQgQVMgZXN0aW1hdGVkX2Rpc3RpbmN0XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMucmVsbmFtZSA9IHMudGFibGVuYW1lXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBzLnNjaGVtYW5hbWVcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBzLnRhYmxlbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIHMuYXR0bmFtZVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVsYXRpb25fbmFtZTogcmVsYXRpb25OYW1lLFxuICAgICAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogMCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHJlc3VsdC5yb3dzWzBdLnJlbGF0aW9uX25hbWUsXG4gICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IE51bWJlcihyZXN1bHQucm93c1swXS5lc3RpbWF0ZWRfcm93X2NvdW50KSxcbiAgICAgICAgYXR0cmlidXRlczogcmVzdWx0LnJvd3MubWFwKCh7YXR0cmlidXRlX25hbWUsIGVzdGltYXRlZF9kaXN0aW5jdH0pID0+ICh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGVzdGltYXRlZF9kaXN0aW5jdDogTnVtYmVyKGVzdGltYXRlZF9kaXN0aW5jdCksXG4gICAgICAgIH0pKSxcbiAgICB9O1xufTtcbiJdfQ==
@@ -1,11 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TTriggerInfo = {
3
- relation_name: string;
4
- name: string;
5
- definition: string;
6
- function_schema: string;
7
- function_name: string;
8
- is_enabled: boolean;
9
- };
10
- export declare const fetchPublicTriggers: (pool: Pool) => Promise<TTriggerInfo[]>;
11
- //# sourceMappingURL=triggers.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"triggers.d.mts","sourceRoot":"./src/","sources":["db/triggers.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,MAAM,IAAI,KACX,OAAO,CAAC,YAAY,EAAE,CAoBxB,CAAC"}
@@ -1,21 +0,0 @@
1
- export const fetchPublicTriggers = async (pool) => {
2
- const result = await pool.query(`
3
- SELECT
4
- t.relname AS relation_name,
5
- tg.tgname AS name,
6
- pg_get_triggerdef(tg.oid, true) AS definition,
7
- fn_ns.nspname AS function_schema,
8
- fn.proname AS function_name,
9
- tg.tgenabled <> 'D' AS is_enabled
10
- FROM pg_catalog.pg_trigger tg
11
- JOIN pg_catalog.pg_class t ON t.oid = tg.tgrelid
12
- JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace
13
- JOIN pg_catalog.pg_proc fn ON fn.oid = tg.tgfoid
14
- JOIN pg_catalog.pg_namespace fn_ns ON fn_ns.oid = fn.pronamespace
15
- WHERE n.nspname = 'public'
16
- AND NOT tg.tgisinternal
17
- ORDER BY t.relname, tg.tgname
18
- `);
19
- return result.rows;
20
- };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlcnMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvdHJpZ2dlcnMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDcEMsSUFBVSxFQUNhLEVBQUU7SUFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFlOzs7Ozs7Ozs7Ozs7Ozs7O0tBZ0I3QyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFRyaWdnZXJJbmZvID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVmaW5pdGlvbjogc3RyaW5nO1xuICAgIGZ1bmN0aW9uX3NjaGVtYTogc3RyaW5nO1xuICAgIGZ1bmN0aW9uX25hbWU6IHN0cmluZztcbiAgICBpc19lbmFibGVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljVHJpZ2dlcnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VFRyaWdnZXJJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRUcmlnZ2VySW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgdGcudGduYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBwZ19nZXRfdHJpZ2dlcmRlZih0Zy5vaWQsIHRydWUpIEFTIGRlZmluaXRpb24sXG4gICAgICAgICAgICBmbl9ucy5uc3BuYW1lIEFTIGZ1bmN0aW9uX3NjaGVtYSxcbiAgICAgICAgICAgIGZuLnByb25hbWUgQVMgZnVuY3Rpb25fbmFtZSxcbiAgICAgICAgICAgIHRnLnRnZW5hYmxlZCA8PiAnRCcgQVMgaXNfZW5hYmxlZFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHJpZ2dlciB0Z1xuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IHRnLnRncmVsaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC5yZWxuYW1lc3BhY2VcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX3Byb2MgZm4gT04gZm4ub2lkID0gdGcudGdmb2lkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgZm5fbnMgT04gZm5fbnMub2lkID0gZm4ucHJvbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgTk9UIHRnLnRnaXNpbnRlcm5hbFxuICAgICAgICBPUkRFUiBCWSB0LnJlbG5hbWUsIHRnLnRnbmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiJdfQ==
@@ -1,14 +0,0 @@
1
- import type { Pool } from 'pg';
2
- export type TPostgresVersion = {
3
- version: string;
4
- version_num: number;
5
- };
6
- export declare const fetchPostgresVersion: (pool: Pool) => Promise<TPostgresVersion>;
7
- export type TDatabaseIdentifier = {
8
- system_identifier: string;
9
- database_oid: number;
10
- database_name: string;
11
- };
12
- export declare const fetchDatabaseComment: (pool: Pool) => Promise<string | null>;
13
- export declare const fetchDatabaseIdentifier: (pool: Pool) => Promise<TDatabaseIdentifier>;
14
- //# sourceMappingURL=version.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.mts","sourceRoot":"./src/","sources":["db/version.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,gBAAgB,CAQ1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,KACX,OAAO,CAAC,mBAAmB,CAU7B,CAAC"}
@@ -1,27 +0,0 @@
1
- export const fetchPostgresVersion = async (pool) => {
2
- const result = await pool.query(`
3
- SELECT
4
- current_setting('server_version') AS version,
5
- current_setting('server_version_num')::int AS version_num
6
- `);
7
- return result.rows[0];
8
- };
9
- export const fetchDatabaseComment = async (pool) => {
10
- const result = await pool.query(`
11
- SELECT shobj_description(d.oid, 'pg_database') AS comment
12
- FROM pg_database d
13
- WHERE d.datname = current_database()
14
- `);
15
- return result.rows[0].comment;
16
- };
17
- export const fetchDatabaseIdentifier = async (pool) => {
18
- const result = await pool.query(`
19
- SELECT
20
- system_identifier::text AS system_identifier,
21
- (SELECT oid::int FROM pg_database WHERE datname = current_database()) AS database_oid,
22
- current_database() AS database_name
23
- FROM pg_control_system()
24
- `);
25
- return result.rows[0];
26
- };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi92ZXJzaW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3JDLElBQVUsRUFDZSxFQUFFO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBbUI7Ozs7S0FJakQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQVFGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDckMsSUFBVSxFQUNZLEVBQUU7SUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUEyQjs7OztLQUl6RCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNrQixFQUFFO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBc0I7Ozs7OztLQU1wRCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvc3RncmVzVmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9udW06IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFBvc3RncmVzVmVyc2lvbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUUG9zdGdyZXNWZXJzaW9uPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUG9zdGdyZXNWZXJzaW9uPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbicpIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpOjppbnQgQVMgdmVyc2lvbl9udW1cbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbn07XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIgPSB7XG4gICAgc3lzdGVtX2lkZW50aWZpZXI6IHN0cmluZztcbiAgICBkYXRhYmFzZV9vaWQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZV9uYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUNvbW1lbnQgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e2NvbW1lbnQ6IHN0cmluZyB8IG51bGx9PihgXG4gICAgICAgIFNFTEVDVCBzaG9ial9kZXNjcmlwdGlvbihkLm9pZCwgJ3BnX2RhdGFiYXNlJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2RhdGFiYXNlIGRcbiAgICAgICAgV0hFUkUgZC5kYXRuYW1lID0gY3VycmVudF9kYXRhYmFzZSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0uY29tbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaERhdGFiYXNlSWRlbnRpZmllciA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURGF0YWJhc2VJZGVudGlmaWVyPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURGF0YWJhc2VJZGVudGlmaWVyPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6OnRleHQgQVMgc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAoU0VMRUNUIG9pZDo6aW50IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9IGN1cnJlbnRfZGF0YWJhc2UoKSkgQVMgZGF0YWJhc2Vfb2lkLFxuICAgICAgICAgICAgY3VycmVudF9kYXRhYmFzZSgpIEFTIGRhdGFiYXNlX25hbWVcbiAgICAgICAgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuIl19