@antelopejs/postgres 0.2.0 → 0.2.2

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 (73) hide show
  1. package/dist/config.d.ts +5 -0
  2. package/dist/config.js +1 -0
  3. package/dist/config.js.map +1 -1
  4. package/dist/implementations/catalog/index.d.ts +7 -0
  5. package/dist/implementations/catalog/index.js +60 -0
  6. package/dist/implementations/catalog/index.js.map +1 -0
  7. package/dist/implementations/database/ddl.d.ts +1 -0
  8. package/dist/implementations/database/ddl.js +13 -4
  9. package/dist/implementations/database/ddl.js.map +1 -1
  10. package/dist/implementations/database/duplicate-key.d.ts +2 -0
  11. package/dist/implementations/database/duplicate-key.js +49 -0
  12. package/dist/implementations/database/duplicate-key.js.map +1 -0
  13. package/dist/implementations/database/external-catalog.d.ts +15 -0
  14. package/dist/implementations/database/external-catalog.js +22 -8
  15. package/dist/implementations/database/external-catalog.js.map +1 -1
  16. package/dist/implementations/database/external-column-profile.d.ts +18 -0
  17. package/dist/implementations/database/external-column-profile.js +223 -0
  18. package/dist/implementations/database/external-column-profile.js.map +1 -0
  19. package/dist/implementations/database/external-declarations.d.ts +9 -0
  20. package/dist/implementations/database/external-declarations.js +67 -0
  21. package/dist/implementations/database/external-declarations.js.map +1 -0
  22. package/dist/implementations/database/external-discovery.d.ts +39 -0
  23. package/dist/implementations/database/external-discovery.js +219 -0
  24. package/dist/implementations/database/external-discovery.js.map +1 -0
  25. package/dist/implementations/database/external-measures.d.ts +11 -0
  26. package/dist/implementations/database/external-measures.js +82 -0
  27. package/dist/implementations/database/external-measures.js.map +1 -0
  28. package/dist/implementations/database/external-profile.d.ts +4 -0
  29. package/dist/implementations/database/external-profile.js +129 -0
  30. package/dist/implementations/database/external-profile.js.map +1 -0
  31. package/dist/implementations/database/external-reference.d.ts +2 -0
  32. package/dist/implementations/database/external-reference.js +49 -0
  33. package/dist/implementations/database/external-reference.js.map +1 -0
  34. package/dist/implementations/database/external-rows.d.ts +2 -0
  35. package/dist/implementations/database/external-rows.js +81 -0
  36. package/dist/implementations/database/external-rows.js.map +1 -0
  37. package/dist/implementations/database/external-sample.d.ts +9 -0
  38. package/dist/implementations/database/external-sample.js +29 -0
  39. package/dist/implementations/database/external-sample.js.map +1 -0
  40. package/dist/implementations/database/external-schema.js +1 -11
  41. package/dist/implementations/database/external-schema.js.map +1 -1
  42. package/dist/implementations/database/external-types.d.ts +9 -1
  43. package/dist/implementations/database/external-types.js +14 -0
  44. package/dist/implementations/database/external-types.js.map +1 -1
  45. package/dist/implementations/database/query.js +16 -6
  46. package/dist/implementations/database/query.js.map +1 -1
  47. package/dist/implementations/database/schema.d.ts +1 -0
  48. package/dist/implementations/database/schema.js +16 -0
  49. package/dist/implementations/database/schema.js.map +1 -1
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/test/antelope.test.js +1 -0
  54. package/dist/test/antelope.test.js.map +1 -1
  55. package/dist/test/catalog-owned.test.d.ts +1 -0
  56. package/dist/test/catalog-owned.test.js +17 -0
  57. package/dist/test/catalog-owned.test.js.map +1 -0
  58. package/dist/test/duplicate-key.test.d.ts +1 -0
  59. package/dist/test/duplicate-key.test.js +100 -0
  60. package/dist/test/duplicate-key.test.js.map +1 -0
  61. package/dist/test/unit/ddl.spec.js +39 -0
  62. package/dist/test/unit/ddl.spec.js.map +1 -1
  63. package/dist/test/unit/external-comparisons.spec.js +2 -0
  64. package/dist/test/unit/external-comparisons.spec.js.map +1 -1
  65. package/dist/test/unit/external-types.spec.js +37 -0
  66. package/dist/test/unit/external-types.spec.js.map +1 -1
  67. package/dist/test-external/catalog.test.d.ts +1 -0
  68. package/dist/test-external/catalog.test.js +348 -0
  69. package/dist/test-external/catalog.test.js.map +1 -0
  70. package/dist/test-external/fixture.d.ts +1 -0
  71. package/dist/test-external/fixture.js +28 -1
  72. package/dist/test-external/fixture.js.map +1 -1
  73. package/package.json +5 -3
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const chai_1 = require("chai");
4
4
  const fields_1 = require("../../implementations/database/fields");
5
+ const external_declarations_1 = require("../../implementations/database/external-declarations");
5
6
  const external_types_1 = require("../../implementations/database/external-types");
6
7
  const COLUMN = '"t"."c"';
7
8
  function Column(type) {
@@ -17,6 +18,8 @@ function Column(type) {
17
18
  hasDefault: false,
18
19
  generated: false,
19
20
  identity: "",
21
+ comment: null,
22
+ enumLabels: null,
20
23
  };
21
24
  }
22
25
  function DescribeDeclared(declared, type) {
@@ -180,6 +183,40 @@ describe("external column readings", () => {
180
183
  });
181
184
  }
182
185
  });
186
+ describe("declarations a catalog offers for a column", () => {
187
+ const types = [...ACCEPTED, ...REFUSED].map((entry) => entry.type);
188
+ for (const type of types) {
189
+ const label = type.native ?? type.typname;
190
+ it(`offers only declarations registration takes over ${label}, with their losses`, () => {
191
+ for (const offered of (0, external_declarations_1.AcceptedDeclarations)(Column(type))) {
192
+ const described = DescribeDeclared(offered.declared, type);
193
+ (0, chai_1.expect)(described.lossy).to.equal(offered.lossy);
194
+ }
195
+ });
196
+ }
197
+ for (const { declared, type } of REFUSED) {
198
+ it(`never offers ${String(declared)} over ${type.typname}, which registration refuses`, () => {
199
+ const offered = (0, external_declarations_1.AcceptedDeclarations)(Column(type)).map((entry) => entry.declared);
200
+ (0, chai_1.expect)(offered).to.not.include(declared);
201
+ });
202
+ }
203
+ it("proposes number over a bigint, and offers string beside it", () => {
204
+ const offered = (0, external_declarations_1.AcceptedDeclarations)(Column({ typname: "int8" })).map((entry) => entry.declared);
205
+ (0, chai_1.expect)(offered[0]).to.equal("number");
206
+ (0, chai_1.expect)(offered).to.include("string");
207
+ });
208
+ it("proposes date over a timestamp and string over an enum", () => {
209
+ (0, chai_1.expect)((0, external_declarations_1.AcceptedDeclarations)(Column({ typname: "timestamp" }))[0].declared).to.equal("date");
210
+ (0, chai_1.expect)((0, external_declarations_1.AcceptedDeclarations)(Column({ typname: "status", typtype: "e" }))[0]
211
+ .declared).to.equal("string");
212
+ });
213
+ it("proposes the element's kind for an array", () => {
214
+ (0, chai_1.expect)((0, external_declarations_1.AcceptedDeclarations)(Column({ typname: "_int4", element: "int4", ...ARRAY }))[0].declared).to.equal("number[]");
215
+ });
216
+ it("offers nothing over a type no field type reads", () => {
217
+ (0, chai_1.expect)((0, external_declarations_1.AcceptedDeclarations)(Column({ typname: "bytea" }))).to.deep.equal([]);
218
+ });
219
+ });
183
220
  describe("external key columns", () => {
184
221
  it("reads a date key as its ISO text for _id", () => {
185
222
  (0, chai_1.expect)((0, external_types_1.DescribeKey)(Column({ typname: "date" }))?.value(COLUMN)).to.equal(`(${COLUMN})::text`);
@@ -1 +1 @@
1
- {"version":3,"file":"external-types.spec.js","sourceRoot":"","sources":["../../../src/test/unit/external-types.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external-types.spec.js","sourceRoot":"","sources":["../../../src/test/unit/external-types.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const interface_database_catalog_1 = require("@antelopejs/interface-database-catalog");
5
+ const schema_1 = require("@antelopejs/interface-database/schema");
6
+ const config_1 = require("../config");
7
+ const external_measures_1 = require("../implementations/database/external-measures");
8
+ const schema_2 = require("../implementations/database/schema");
9
+ const fixture_1 = require("./fixture");
10
+ const sales_1 = require("./sales");
11
+ const SALES = "sales";
12
+ const SAMPLE_THRESHOLD = 1_000_000;
13
+ function Named(relations, name) {
14
+ const found = relations.find((relation) => relation.name === name);
15
+ (0, chai_1.expect)(found, name).to.not.equal(undefined);
16
+ return found;
17
+ }
18
+ function Generated(relations) {
19
+ const definition = {};
20
+ for (const relation of relations) {
21
+ const fields = relation.key
22
+ ? { _id: "string" }
23
+ : {};
24
+ for (const column of relation.columns) {
25
+ if (column.accepts.length > 0) {
26
+ fields[column.name] = column.accepts[0].declared;
27
+ }
28
+ }
29
+ definition[relation.name] = { fields, indexes: {} };
30
+ }
31
+ return definition;
32
+ }
33
+ async function Mappable() {
34
+ const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
35
+ const names = listed
36
+ .filter((relation) => !relation.unmappable)
37
+ .map((relation) => `${SALES}.${relation.name}`);
38
+ return (0, interface_database_catalog_1.DescribeRelations)(names);
39
+ }
40
+ describe("the catalog of an external instance", function () {
41
+ this.timeout(120_000);
42
+ it("names the connection's database and role", async () => {
43
+ const info = await (0, interface_database_catalog_1.Info)();
44
+ (0, chai_1.expect)(info.engine).to.equal("postgresql");
45
+ (0, chai_1.expect)(info.role).to.equal(fixture_1.CLIENT_ROLE);
46
+ });
47
+ it("lists each relation with the key registration aliases _id to", async () => {
48
+ const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
49
+ (0, chai_1.expect)(Named(listed, "accounts").key).to.deep.equal({
50
+ columns: ["id"],
51
+ source: "primary",
52
+ });
53
+ (0, chai_1.expect)(Named(listed, "order_lines").key).to.deep.equal({
54
+ columns: ["order_id", "line_no"],
55
+ source: "primary",
56
+ });
57
+ (0, chai_1.expect)(Named(listed, "events").key).to.deep.equal({
58
+ columns: ["event_ref"],
59
+ source: "unique",
60
+ });
61
+ (0, chai_1.expect)(Named(listed, "tags").key).to.deep.equal({
62
+ columns: ["id"],
63
+ source: "primary",
64
+ });
65
+ for (const keyless of ["raw_log", "big_accounts", "daily_signups"]) {
66
+ (0, chai_1.expect)(Named(listed, keyless).key, keyless).to.equal(null);
67
+ }
68
+ });
69
+ it("lists a partitioned table once, without its partitions", async () => {
70
+ const names = (await (0, interface_database_catalog_1.ListRelations)([SALES])).map((relation) => relation.name);
71
+ (0, chai_1.expect)(names).to.include("tags");
72
+ (0, chai_1.expect)(names).to.not.include("tags_0");
73
+ (0, chai_1.expect)(Named(await (0, interface_database_catalog_1.ListRelations)([SALES]), "tags").kind).to.equal("partitioned");
74
+ });
75
+ it("estimates rows from statistics, from live tuples when never analyzed, and by plan for a view", async () => {
76
+ const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
77
+ (0, chai_1.expect)(Named(listed, "accounts")).to.include({
78
+ estimatedRows: 20000,
79
+ estimate: "statistics",
80
+ });
81
+ (0, chai_1.expect)(Named(listed, "big_events")).to.include({
82
+ estimatedRows: fixture_1.BIG_EVENTS_ROWS,
83
+ estimate: "live-tuples",
84
+ });
85
+ (0, chai_1.expect)(Named(listed, "big_accounts").estimate).to.equal("plan");
86
+ });
87
+ it("lists a relation with column-only grants as unmappable, saying why", async () => {
88
+ (0, chai_1.expect)(Named(await (0, interface_database_catalog_1.ListRelations)([SALES]), "people").unmappable).to.match(/some of its columns/);
89
+ });
90
+ it("reports what the connected role may write", async () => {
91
+ const listed = await (0, interface_database_catalog_1.ListRelations)([SALES]);
92
+ (0, chai_1.expect)(Named(listed, "w_accounts").writes).to.deep.equal({
93
+ insert: true,
94
+ update: true,
95
+ delete: true,
96
+ });
97
+ (0, chai_1.expect)(Named(listed, "accounts").writes.insert).to.equal(false);
98
+ });
99
+ it("describes foreign keys both ways, enum labels and comments", async () => {
100
+ const [accounts, contacts] = await (0, interface_database_catalog_1.DescribeRelations)([
101
+ "sales.accounts",
102
+ "sales.contacts",
103
+ ]);
104
+ const reference = {
105
+ name: "contacts_account_id_fkey",
106
+ from: { relation: "sales.contacts", columns: ["account_id"] },
107
+ to: { relation: "sales.accounts", columns: ["id"] },
108
+ };
109
+ (0, chai_1.expect)(contacts.references).to.deep.include(reference);
110
+ (0, chai_1.expect)(accounts.referencedBy).to.deep.include(reference);
111
+ const status = accounts.columns.find((column) => column.name === "status");
112
+ (0, chai_1.expect)(status?.enumLabels).to.deep.equal(["lead", "active", "churned"]);
113
+ (0, chai_1.expect)(accounts.comment).to.equal("Customer accounts");
114
+ (0, chai_1.expect)(accounts.columns.find((column) => column.name === "name")?.comment).to.equal("Display name");
115
+ });
116
+ it("marks generated, identity-always and array columns read-only", async () => {
117
+ const [accounts] = await (0, interface_database_catalog_1.DescribeRelations)(["sales.accounts"]);
118
+ const readOnly = accounts.columns
119
+ .filter((column) => column.readOnly)
120
+ .map((column) => column.name);
121
+ (0, chai_1.expect)(readOnly).to.include.members(["id", "name_upper", "tags"]);
122
+ (0, chai_1.expect)(readOnly).to.not.include("name");
123
+ });
124
+ it("refuses to describe a relation the role cannot see, naming it", async () => {
125
+ try {
126
+ await (0, interface_database_catalog_1.DescribeRelations)(["sales.nope"]);
127
+ }
128
+ catch (error) {
129
+ (0, chai_1.expect)(error.message).to.include("sales.nope");
130
+ return;
131
+ }
132
+ throw new Error("DescribeRelations was expected to refuse");
133
+ });
134
+ it("offers only declarations registration takes: a schema written from its first offers registers", async () => {
135
+ new schema_1.Schema(SALES, Generated(await Mappable()));
136
+ await (0, schema_2.WaitForSchemaReady)(SALES);
137
+ });
138
+ });
139
+ describe("a profile of an external relation", function () {
140
+ this.timeout(120_000);
141
+ let profiles;
142
+ before(async () => {
143
+ profiles = [];
144
+ for (const relation of await Mappable()) {
145
+ profiles.push(await (0, interface_database_catalog_1.Profile)({ relation: `${SALES}.${relation.name}` }));
146
+ }
147
+ });
148
+ function Of(name) {
149
+ return profiles.find((profile) => profile.relation === `${SALES}.${name}`);
150
+ }
151
+ it("never answers a text value, a text extreme or a value counted fewer than 5 times", () => {
152
+ const answered = JSON.stringify(profiles);
153
+ (0, chai_1.expect)(answered).to.not.match(/@Example\.com/i);
154
+ (0, chai_1.expect)(answered).to.not.include("Acct ");
155
+ (0, chai_1.expect)(answered).to.not.include("First1");
156
+ (0, chai_1.expect)(answered).to.not.include("disputed");
157
+ });
158
+ it("answers an enum's categories with their counts", async () => {
159
+ const status = Of("accounts").columns.find((column) => column.name === "status");
160
+ (0, chai_1.expect)(status.traits).to.include("enum-like");
161
+ const native = await (0, sales_1.Native)("SELECT status::text AS status, count(*) AS n FROM sales.accounts GROUP BY 1");
162
+ (0, chai_1.expect)(status.categories).to.deep.include({ status: "ok" });
163
+ const value = status.categories?.status === "ok" ? status.categories.value : undefined;
164
+ for (const row of native) {
165
+ (0, chai_1.expect)(value?.values).to.deep.include({
166
+ value: row.status,
167
+ rows: Number(row.n),
168
+ });
169
+ }
170
+ });
171
+ it("folds a value seen fewer than 5 times into other", () => {
172
+ const kind = Of("invoices").columns.find((column) => column.name === "kind");
173
+ (0, chai_1.expect)(kind.traits).to.include("enum-like");
174
+ (0, chai_1.expect)(kind.categories).to.deep.include({ status: "ok" });
175
+ if (kind.categories?.status === "ok") {
176
+ (0, chai_1.expect)(kind.categories.value.other).to.equal(2);
177
+ (0, chai_1.expect)(kind.categories.value.values).to.have.length(3);
178
+ }
179
+ });
180
+ it("finds a label, a time axis and a measure", () => {
181
+ const columns = Of("accounts").columns;
182
+ const traits = (name) => columns.find((column) => column.name === name).traits;
183
+ (0, chai_1.expect)(traits("name")).to.include("label-candidate");
184
+ (0, chai_1.expect)(traits("created_at")).to.include("time-axis");
185
+ (0, chai_1.expect)(traits("revenue")).to.include("measure");
186
+ (0, chai_1.expect)(traits("id")).to.not.include("measure");
187
+ });
188
+ it("counts children per parent over a foreign key", async () => {
189
+ const [reference] = Of("contacts").references;
190
+ (0, chai_1.expect)(reference.fanOut).to.deep.include({ status: "ok" });
191
+ const parents = await (0, sales_1.NativeCount)("SELECT count(DISTINCT account_id) FROM sales.contacts");
192
+ if (reference.fanOut.status === "ok") {
193
+ (0, chai_1.expect)(reference.fanOut.value.average).to.be.closeTo(20000 / parents, 1e-9);
194
+ }
195
+ });
196
+ it("samples a relation above the threshold, and says so", async () => {
197
+ const big = await (0, interface_database_catalog_1.Profile)({ relation: "sales.big_events" });
198
+ (0, chai_1.expect)(big.sample).to.not.equal(null);
199
+ (0, chai_1.expect)(big.sample.rows).to.be.above(0).and.below(SAMPLE_THRESHOLD);
200
+ (0, chai_1.expect)(big.rows).to.deep.equal({
201
+ status: "ok",
202
+ value: { rows: fixture_1.BIG_EVENTS_ROWS, exact: false },
203
+ });
204
+ });
205
+ it("answers timeout for a measure past its time, and still answers the profile", async () => {
206
+ (0, external_measures_1.SetMeasureTimeoutForTests)(1);
207
+ try {
208
+ const big = await (0, interface_database_catalog_1.Profile)({
209
+ relation: "sales.big_events",
210
+ columns: ["kind"],
211
+ });
212
+ const [kind] = big.columns;
213
+ (0, chai_1.expect)(kind.distinct).to.deep.equal({ status: "timeout" });
214
+ }
215
+ finally {
216
+ (0, external_measures_1.SetMeasureTimeoutForTests)();
217
+ }
218
+ const again = await (0, interface_database_catalog_1.Profile)({
219
+ relation: "sales.big_events",
220
+ columns: ["kind"],
221
+ });
222
+ (0, chai_1.expect)(again.columns[0].distinct?.status).to.equal("ok");
223
+ });
224
+ it("writes nothing, even through a role that may write", async () => {
225
+ const id = 987654321;
226
+ const outcome = await (0, external_measures_1.WithMeasures)((session) => session.measure(`INSERT INTO sales.w_big VALUES (${id}, 'x') RETURNING id`));
227
+ (0, chai_1.expect)(outcome).to.deep.equal({ status: "error", code: "25006" });
228
+ (0, chai_1.expect)(await (0, sales_1.NativeCount)(`SELECT count(*) FROM sales.w_big WHERE id = ${id}`)).to.equal(0);
229
+ });
230
+ });
231
+ describe("a sample of rows", function () {
232
+ this.timeout(60_000);
233
+ it("answers every value as text, cut at 200 characters", async () => {
234
+ const sample = await (0, interface_database_catalog_1.SampleRows)({
235
+ relation: "sales.attachments",
236
+ columns: ["id", "note"],
237
+ limit: 20,
238
+ });
239
+ (0, chai_1.expect)(sample.columns).to.deep.equal(["id", "note"]);
240
+ (0, chai_1.expect)(sample.sample).to.equal(null);
241
+ const byId = new Map(sample.rows.map((row) => [JSON.stringify(row[0]), row[1]]));
242
+ (0, chai_1.expect)(byId.get(JSON.stringify({ text: "1", truncated: false }))).to.deep.equal({
243
+ text: "n".repeat(200),
244
+ truncated: true,
245
+ });
246
+ (0, chai_1.expect)(byId.get(JSON.stringify({ text: "2", truncated: false }))).to.deep.equal({
247
+ text: "short",
248
+ truncated: false,
249
+ });
250
+ (0, chai_1.expect)(byId.get(JSON.stringify({ text: "3", truncated: false }))).to.equal(null);
251
+ });
252
+ it("answers a binary value by its length only", async () => {
253
+ const sample = await (0, interface_database_catalog_1.SampleRows)({
254
+ relation: "sales.attachments",
255
+ columns: ["body"],
256
+ limit: 20,
257
+ });
258
+ (0, chai_1.expect)(sample.rows.map((row) => row[0])).to.have.deep.members([
259
+ { bytes: 4 },
260
+ null,
261
+ { bytes: 1 },
262
+ ]);
263
+ });
264
+ it("answers at most the rows asked for, and refuses more than 20", async () => {
265
+ const sample = await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.accounts", limit: 3 });
266
+ (0, chai_1.expect)(sample.rows).to.have.length(3);
267
+ let refused;
268
+ try {
269
+ await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.accounts", limit: 21 });
270
+ }
271
+ catch (error) {
272
+ refused = error;
273
+ }
274
+ (0, chai_1.expect)(refused?.message).to.match(/from 1 to 20 rows/);
275
+ });
276
+ it("samples a relation above the threshold, and says so", async () => {
277
+ const sample = await (0, interface_database_catalog_1.SampleRows)({
278
+ relation: "sales.big_events",
279
+ limit: 5,
280
+ });
281
+ (0, chai_1.expect)(sample.sample).to.not.equal(null);
282
+ (0, chai_1.expect)(sample.rows).to.have.length(5);
283
+ });
284
+ it("reads inside a read-only transaction", async () => {
285
+ const sample = await (0, interface_database_catalog_1.SampleRows)({
286
+ relation: "sales.v_transaction",
287
+ limit: 1,
288
+ });
289
+ (0, chai_1.expect)(sample.rows).to.deep.equal([[{ text: "on", truncated: false }]]);
290
+ });
291
+ it("refuses a relation the role can read only in part", async () => {
292
+ let refused;
293
+ try {
294
+ await (0, interface_database_catalog_1.SampleRows)({ relation: "sales.people", limit: 5 });
295
+ }
296
+ catch (error) {
297
+ refused = error;
298
+ }
299
+ (0, chai_1.expect)(refused?.message).to.match(/cannot be read/);
300
+ });
301
+ });
302
+ describe("a reference the database does not declare", function () {
303
+ this.timeout(60_000);
304
+ it("is found whole when every value is in the target's key", async () => {
305
+ const match = await (0, interface_database_catalog_1.CheckReference)({
306
+ from: { relation: "sales.invoices", column: "account_ref" },
307
+ to: { relation: "sales.accounts", column: "id" },
308
+ });
309
+ (0, chai_1.expect)(match).to.deep.equal({
310
+ status: "ok",
311
+ value: {
312
+ containment: 1,
313
+ checkedRows: 1000,
314
+ sampled: false,
315
+ targetIsKey: true,
316
+ },
317
+ });
318
+ });
319
+ it("is found in part when some values have no target", async () => {
320
+ const match = await (0, interface_database_catalog_1.CheckReference)({
321
+ from: { relation: "sales.invoices", column: "broken_ref" },
322
+ to: { relation: "sales.accounts", column: "id" },
323
+ });
324
+ (0, chai_1.expect)(match.status).to.equal("ok");
325
+ if (match.status === "ok") {
326
+ (0, chai_1.expect)(match.value.containment).to.equal(0.75);
327
+ }
328
+ });
329
+ });
330
+ describe("the catalog outside development", () => {
331
+ it("refuses when the catalog is not enabled", async () => {
332
+ const options = (0, config_1.GetOptions)();
333
+ const enabled = options.catalog.enabled;
334
+ options.catalog.enabled = false;
335
+ try {
336
+ await (0, interface_database_catalog_1.Info)();
337
+ }
338
+ catch (error) {
339
+ (0, chai_1.expect)(error.message).to.match(/development tool/);
340
+ return;
341
+ }
342
+ finally {
343
+ options.catalog.enabled = enabled;
344
+ }
345
+ throw new Error("Info was expected to refuse");
346
+ });
347
+ });
348
+ //# sourceMappingURL=catalog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../src/test-external/catalog.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,uFAUgD;AAChD,kEAI+C;AAE/C,sCAAuC;AACvC,qFAGuD;AACvD,+DAAwE;AACxE,uCAAyD;AACzD,mCAA8C;AAE9C,MAAM,KAAK,GAAG,OAAO,CAAC;AACtB,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,SAAS,KAAK,CAAC,SAA4B,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnE,IAAA,aAAM,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,KAAM,CAAC;AAChB,CAAC;AAGD,SAAS,SAAS,CAAC,SAAgC;IACjD,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAA8B,QAAQ,CAAC,GAAG;YACpD,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;YACnB,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnD,CAAC;QACH,CAAC;QACD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM;SACjB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;SAC1C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO,IAAA,8CAAiB,EAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,QAAQ,CAAC,qCAAqC,EAAE;IAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAI,GAAE,CAAC;QAC1B,IAAA,aAAM,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAClD,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACrD,OAAO,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;YAChC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAChD,OAAO,EAAE,CAAC,WAAW,CAAC;YACtB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9C,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,CAAC;YACnE,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAC9C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAC5B,CAAC;QACF,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/D,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;YAC3C,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,YAAY;SACvB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;YAC7C,aAAa,EAAE,yBAAe;YAC9B,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CACvE,qBAAqB,CACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,IAAA,0CAAa,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACvD,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,8CAAiB,EAAC;YACnD,gBAAgB;YAChB,gBAAgB;SACjB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE;YAC7D,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;SACpD,CAAC;QACF,IAAA,aAAM,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,IAAA,aAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC3E,IAAA,aAAM,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACxE,IAAA,aAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvD,IAAA,aAAM,EACJ,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,OAAO,CACnE,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAA,8CAAiB,EAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;aAC9B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,IAAI,CAAC;YACH,MAAM,IAAA,8CAAiB,EAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,aAAM,EAAE,KAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,IAAI,eAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE;IAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB,IAAI,QAA2B,CAAC;IAEhC,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,QAAQ,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,QAAQ,IAAI,MAAM,QAAQ,EAAE,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAA,oCAAO,EAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,EAAE,CAAC,IAAY;QACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,GAAG,KAAK,IAAI,IAAI,EAAE,CAAE,CAAC;IAC9E,CAAC;IAED,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CACpC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,cAAM,EACzB,6EAA6E,CAC9E,CAAC;QACF,IAAA,aAAM,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,GACT,MAAM,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAA,aAAM,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;gBACpC,KAAK,EAAE,GAAG,CAAC,MAAM;gBACjB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CACtC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAClC,CAAC;QACH,IAAA,aAAM,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAA,aAAM,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;YACrC,IAAA,aAAM,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,IAAA,aAAM,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAE,CAAC,MAAM,CAAC;QACzD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAA,aAAM,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,IAAA,aAAM,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC;QAC9C,IAAA,aAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAW,EAC/B,uDAAuD,CACxD,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACrC,IAAA,aAAM,EAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAClD,KAAK,GAAG,OAAO,EACf,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAO,EAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5D,IAAA,aAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAA,aAAM,EAAC,GAAG,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAA,aAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,EAAE,IAAI,EAAE,yBAAe,EAAE,KAAK,EAAE,KAAK,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,IAAA,6CAAyB,EAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAO,EAAC;gBACxB,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,CAAC,MAAM,CAAC;aAClB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;YAC3B,IAAA,aAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,IAAA,6CAAyB,GAAE,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAO,EAAC;YAC1B,QAAQ,EAAE,kBAAkB;YAC5B,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,GAAG,SAAS,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAY,EAAC,CAAC,OAAO,EAAE,EAAE,CAC7C,OAAO,CAAC,OAAO,CACb,mCAAmC,EAAE,qBAAqB,CAC3D,CACF,CAAC;QACF,IAAA,aAAM,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,IAAA,aAAM,EACJ,MAAM,IAAA,mBAAW,EAAC,+CAA+C,EAAE,EAAE,CAAC,CACvE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE;IAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAU,EAAC;YAC9B,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;YACvB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAC;QACF,IAAA,aAAM,EACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAC1D,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,IAAA,aAAM,EACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAC1D,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACxE,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAU,EAAC;YAC9B,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5D,EAAE,KAAK,EAAE,CAAC,EAAE;YACZ,IAAI;YACJ,EAAE,KAAK,EAAE,CAAC,EAAE;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAU,EAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,OAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAA,uCAAU,EAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,KAAc,CAAC;QAC3B,CAAC;QACD,IAAA,aAAM,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAU,EAAC;YAC9B,QAAQ,EAAE,kBAAkB;YAC5B,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAU,EAAC;YAC9B,QAAQ,EAAE,qBAAqB;YAC/B,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,IAAI,OAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAA,uCAAU,EAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,KAAc,CAAC;QAC3B,CAAC;QACD,IAAA,aAAM,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE;IACpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,KAAK,GAAG,MAAM,IAAA,2CAAc,EAAC;YACjC,IAAI,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE;YAC3D,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;SACjD,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAG,MAAM,IAAA,2CAAc,EAAC;YACjC,IAAI,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE;YAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;SACjD,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAA,aAAM,EAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,IAAA,iCAAI,GAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,aAAM,EAAE,KAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -2,5 +2,6 @@ export declare const CLIENT_DATABASE = "antelopejs_external";
2
2
  export declare const CLIENT_ROLE = "dms_client";
3
3
  export declare const READER_PASSWORD = "reader";
4
4
  export declare const FIXTURE: readonly string[];
5
+ export declare const BIG_EVENTS_ROWS = 1100000;
5
6
  export declare function WriterGrants(role: string): string[];
6
7
  export declare function ReaderGrants(role: string): string[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FIXTURE = exports.READER_PASSWORD = exports.CLIENT_ROLE = exports.CLIENT_DATABASE = void 0;
3
+ exports.BIG_EVENTS_ROWS = exports.FIXTURE = exports.READER_PASSWORD = exports.CLIENT_ROLE = exports.CLIENT_DATABASE = void 0;
4
4
  exports.WriterGrants = WriterGrants;
5
5
  exports.ReaderGrants = ReaderGrants;
6
6
  exports.CLIENT_DATABASE = "antelopejs_external";
@@ -111,8 +111,33 @@ exports.FIXTURE = [
111
111
  `CREATE TABLE sales.w_lines (
112
112
  order_id int NOT NULL, line_no int NOT NULL, qty int, PRIMARY KEY (order_id, line_no)
113
113
  )`,
114
+ "COMMENT ON TABLE sales.accounts IS 'Customer accounts'",
115
+ "COMMENT ON COLUMN sales.accounts.name IS 'Display name'",
116
+ "CREATE TABLE sales.people (id int PRIMARY KEY, name text, ssn text)",
117
+ "INSERT INTO sales.people SELECT g, 'Person ' || g, lpad(g::text, 9, '0') FROM generate_series(1, 100) g",
118
+ "CREATE TABLE sales.attachments (id int PRIMARY KEY, note text, body bytea)",
119
+ "CREATE VIEW sales.v_transaction AS SELECT current_setting('transaction_read_only') AS read_only",
120
+ `INSERT INTO sales.attachments VALUES
121
+ (1, repeat('n', 300), decode('00010203', 'hex')),
122
+ (2, 'short', NULL),
123
+ (3, NULL, decode('ff', 'hex'))`,
124
+ `CREATE TABLE sales.invoices (
125
+ id int PRIMARY KEY, kind text NOT NULL, account_ref bigint, broken_ref bigint, issued_on date
126
+ )`,
127
+ `INSERT INTO sales.invoices
128
+ SELECT g, CASE WHEN g <= 2 THEN 'disputed' ELSE (ARRAY['paid', 'open', 'void'])[1 + g % 3] END,
129
+ 1 + (g % 20000), CASE WHEN g % 4 = 0 THEN 900000 + g ELSE 1 + g END,
130
+ date '2025-01-01' + (g % 400)
131
+ FROM generate_series(1, 1000) g`,
114
132
  "ANALYZE",
133
+ `CREATE TABLE sales.big_events (
134
+ id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, kind text NOT NULL, at timestamptz NOT NULL
135
+ ) WITH (autovacuum_enabled = false)`,
136
+ `INSERT INTO sales.big_events (kind, at)
137
+ SELECT (ARRAY['click', 'view', 'buy'])[1 + g % 3], timestamptz '2025-01-01' + (g || ' seconds')::interval
138
+ FROM generate_series(1, 1100000) g`,
115
139
  ];
140
+ exports.BIG_EVENTS_ROWS = 1_100_000;
116
141
  const WRITABLE_TABLES = [
117
142
  "sales.w_accounts",
118
143
  "sales.w_items",
@@ -131,6 +156,8 @@ function ReaderGrants(role) {
131
156
  return [
132
157
  `GRANT USAGE ON SCHEMA sales TO ${role}`,
133
158
  `GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ${role}`,
159
+ `REVOKE SELECT ON sales.people FROM ${role}`,
160
+ `GRANT SELECT (id, name) ON sales.people TO ${role}`,
134
161
  ];
135
162
  }
136
163
  //# sourceMappingURL=fixture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/test-external/fixture.ts"],"names":[],"mappings":";;;AAkIA,oCAKC;AAGD,oCAKC;AA1IY,QAAA,eAAe,GAAG,qBAAqB,CAAC;AAExC,QAAA,WAAW,GAAG,YAAY,CAAC;AAE3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAE3B,QAAA,OAAO,GAAsB;IACxC,uCAAuC;IACvC,qBAAqB;IACrB,gEAAgE;IAChE;;;;;;;;;;;;;;;;;;IAkBE;IACF,uDAAuD;IACvD,2DAA2D;IAC3D,8DAA8D;IAC9D,4DAA4D;IAC5D,+DAA+D;IAC/D,yDAAyD;IACzD,qDAAqD;IACrD,uDAAuD;IACvD;;;;;IAKE;IACF,8DAA8D;IAC9D,8DAA8D;IAC9D;;;IAGE;IACF,wFAAwF;IACxF,4DAA4D;IAC5D,6DAA6D;IAC7D,uDAAuD;IACvD,oEAAoE;IACpE,gEAAgE;IAChE,4EAA4E;IAC5E,iFAAiF;IACjF,4FAA4F;IAC5F,4FAA4F;IAC5F;;;;;;;;;qCASmC;IACnC;;;qCAGmC;IACnC,wGAAwG;IACxG;;oCAEkC;IAClC;4GAC0G;IAC1G,sEAAsE;IACtE,6EAA6E;IAC7E;gGAC8F;IAC9F;kFACgF;IAChF,oEAAoE;IACpE;;;;;;;;;;;;;IAaE;IACF;;;;IAIE;IACF,iEAAiE;IACjE,oEAAoE;IACpE,8DAA8D;IAC9D;;IAEE;IACF,SAAS;CACV,CAAC;AAGF,MAAM,eAAe,GAAsB;IACzC,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,aAAa;CACd,CAAC;AAGF,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;QAC1E,mDAAmD,IAAI,EAAE;KAC1D,CAAC;AACJ,CAAC;AAGD,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,kCAAkC,IAAI,EAAE;QACxC,iDAAiD,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/test-external/fixture.ts"],"names":[],"mappings":";;;AA6JA,oCAKC;AAGD,oCAOC;AAvKY,QAAA,eAAe,GAAG,qBAAqB,CAAC;AAExC,QAAA,WAAW,GAAG,YAAY,CAAC;AAE3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAE3B,QAAA,OAAO,GAAsB;IACxC,uCAAuC;IACvC,qBAAqB;IACrB,gEAAgE;IAChE;;;;;;;;;;;;;;;;;;IAkBE;IACF,uDAAuD;IACvD,2DAA2D;IAC3D,8DAA8D;IAC9D,4DAA4D;IAC5D,+DAA+D;IAC/D,yDAAyD;IACzD,qDAAqD;IACrD,uDAAuD;IACvD;;;;;IAKE;IACF,8DAA8D;IAC9D,8DAA8D;IAC9D;;;IAGE;IACF,wFAAwF;IACxF,4DAA4D;IAC5D,6DAA6D;IAC7D,uDAAuD;IACvD,oEAAoE;IACpE,gEAAgE;IAChE,4EAA4E;IAC5E,iFAAiF;IACjF,4FAA4F;IAC5F,4FAA4F;IAC5F;;;;;;;;;qCASmC;IACnC;;;qCAGmC;IACnC,wGAAwG;IACxG;;oCAEkC;IAClC;4GAC0G;IAC1G,sEAAsE;IACtE,6EAA6E;IAC7E;gGAC8F;IAC9F;kFACgF;IAChF,oEAAoE;IACpE;;;;;;;;;;;;;IAaE;IACF;;;;IAIE;IACF,iEAAiE;IACjE,oEAAoE;IACpE,8DAA8D;IAC9D;;IAEE;IACF,wDAAwD;IACxD,yDAAyD;IACzD,qEAAqE;IACrE,yGAAyG;IACzG,4EAA4E;IAC5E,iGAAiG;IACjG;;;mCAGiC;IACjC;;IAEE;IACF;;;;oCAIkC;IAClC,SAAS;IACT;;sCAEoC;IACpC;;uCAEqC;CACtC,CAAC;AAGW,QAAA,eAAe,GAAG,SAAS,CAAC;AAGzC,MAAM,eAAe,GAAsB;IACzC,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,aAAa;CACd,CAAC;AAGF,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;QAC1E,mDAAmD,IAAI,EAAE;KAC1D,CAAC;AACJ,CAAC;AAGD,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,kCAAkC,IAAI,EAAE;QACxC,iDAAiD,IAAI,EAAE;QACvD,sCAAsC,IAAI,EAAE;QAC5C,8CAA8C,IAAI,EAAE;KACrD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/postgres",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "PostgreSQL backend for AntelopeJS, implementing the Database interface on relational tables with native column types and indexes",
5
5
  "keywords": [
6
6
  "antelopejs",
@@ -43,7 +43,8 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@antelopejs/interface-core": ">=0.1.1 <1.0.0",
46
- "@antelopejs/interface-database": "^0.1.8",
46
+ "@antelopejs/interface-database": ">=0.1.11 <0.2.0",
47
+ "@antelopejs/interface-database-catalog": ">=0.0.3 <1.0.0",
47
48
  "pg": "^8.22.0"
48
49
  },
49
50
  "devDependencies": {
@@ -69,7 +70,8 @@
69
70
  "packageManager": "pnpm@10.6.5",
70
71
  "antelopeJs": {
71
72
  "implements": [
72
- "@antelopejs/interface-database"
73
+ "@antelopejs/interface-database",
74
+ "@antelopejs/interface-database-catalog"
73
75
  ],
74
76
  "defaultConfig": {
75
77
  "url": "postgres://postgres@localhost:5432/antelopejs",