@antelopejs/postgres 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +5 -0
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/implementations/catalog/index.d.ts +7 -0
- package/dist/implementations/catalog/index.js +60 -0
- package/dist/implementations/catalog/index.js.map +1 -0
- package/dist/implementations/database/external-catalog.d.ts +15 -0
- package/dist/implementations/database/external-catalog.js +22 -8
- package/dist/implementations/database/external-catalog.js.map +1 -1
- package/dist/implementations/database/external-column-profile.d.ts +18 -0
- package/dist/implementations/database/external-column-profile.js +223 -0
- package/dist/implementations/database/external-column-profile.js.map +1 -0
- package/dist/implementations/database/external-declarations.d.ts +9 -0
- package/dist/implementations/database/external-declarations.js +67 -0
- package/dist/implementations/database/external-declarations.js.map +1 -0
- package/dist/implementations/database/external-discovery.d.ts +39 -0
- package/dist/implementations/database/external-discovery.js +219 -0
- package/dist/implementations/database/external-discovery.js.map +1 -0
- package/dist/implementations/database/external-measures.d.ts +11 -0
- package/dist/implementations/database/external-measures.js +82 -0
- package/dist/implementations/database/external-measures.js.map +1 -0
- package/dist/implementations/database/external-profile.d.ts +4 -0
- package/dist/implementations/database/external-profile.js +129 -0
- package/dist/implementations/database/external-profile.js.map +1 -0
- package/dist/implementations/database/external-reference.d.ts +2 -0
- package/dist/implementations/database/external-reference.js +49 -0
- package/dist/implementations/database/external-reference.js.map +1 -0
- package/dist/implementations/database/external-rows.d.ts +2 -0
- package/dist/implementations/database/external-rows.js +81 -0
- package/dist/implementations/database/external-rows.js.map +1 -0
- package/dist/implementations/database/external-sample.d.ts +9 -0
- package/dist/implementations/database/external-sample.js +29 -0
- package/dist/implementations/database/external-sample.js.map +1 -0
- package/dist/implementations/database/external-schema.js +1 -11
- package/dist/implementations/database/external-schema.js.map +1 -1
- package/dist/implementations/database/external-types.d.ts +9 -1
- package/dist/implementations/database/external-types.js +14 -0
- package/dist/implementations/database/external-types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/test/antelope.test.js +1 -0
- package/dist/test/antelope.test.js.map +1 -1
- package/dist/test/catalog-owned.test.d.ts +1 -0
- package/dist/test/catalog-owned.test.js +17 -0
- package/dist/test/catalog-owned.test.js.map +1 -0
- package/dist/test/unit/external-comparisons.spec.js +2 -0
- package/dist/test/unit/external-comparisons.spec.js.map +1 -1
- package/dist/test/unit/external-types.spec.js +37 -0
- package/dist/test/unit/external-types.spec.js.map +1 -1
- package/dist/test-external/catalog.test.d.ts +1 -0
- package/dist/test-external/catalog.test.js +348 -0
- package/dist/test-external/catalog.test.js.map +1 -0
- package/dist/test-external/fixture.d.ts +1 -0
- package/dist/test-external/fixture.js +28 -1
- package/dist/test-external/fixture.js.map +1 -1
- package/package.json +4 -2
|
@@ -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":"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"}
|
|
@@ -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":";;;
|
|
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.
|
|
3
|
+
"version": "0.2.1",
|
|
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",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@antelopejs/interface-core": ">=0.1.1 <1.0.0",
|
|
46
46
|
"@antelopejs/interface-database": "^0.1.8",
|
|
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",
|