@antelopejs/postgres 0.0.1-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +152 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +14 -0
- package/dist/connection.js +128 -0
- package/dist/connection.js.map +1 -0
- package/dist/implementations/database/changes.d.ts +19 -0
- package/dist/implementations/database/changes.js +100 -0
- package/dist/implementations/database/changes.js.map +1 -0
- package/dist/implementations/database/coerce.d.ts +15 -0
- package/dist/implementations/database/coerce.js +195 -0
- package/dist/implementations/database/coerce.js.map +1 -0
- package/dist/implementations/database/context.d.ts +32 -0
- package/dist/implementations/database/context.js +50 -0
- package/dist/implementations/database/context.js.map +1 -0
- package/dist/implementations/database/cursors.d.ts +16 -0
- package/dist/implementations/database/cursors.js +269 -0
- package/dist/implementations/database/cursors.js.map +1 -0
- package/dist/implementations/database/ddl.d.ts +62 -0
- package/dist/implementations/database/ddl.js +355 -0
- package/dist/implementations/database/ddl.js.map +1 -0
- package/dist/implementations/database/expression.d.ts +7 -0
- package/dist/implementations/database/expression.js +30 -0
- package/dist/implementations/database/expression.js.map +1 -0
- package/dist/implementations/database/external-catalog.d.ts +22 -0
- package/dist/implementations/database/external-catalog.js +82 -0
- package/dist/implementations/database/external-catalog.js.map +1 -0
- package/dist/implementations/database/external-errors.d.ts +20 -0
- package/dist/implementations/database/external-errors.js +67 -0
- package/dist/implementations/database/external-errors.js.map +1 -0
- package/dist/implementations/database/external-payload.d.ts +32 -0
- package/dist/implementations/database/external-payload.js +206 -0
- package/dist/implementations/database/external-payload.js.map +1 -0
- package/dist/implementations/database/external-refusals.d.ts +5 -0
- package/dist/implementations/database/external-refusals.js +23 -0
- package/dist/implementations/database/external-refusals.js.map +1 -0
- package/dist/implementations/database/external-schema.d.ts +3 -0
- package/dist/implementations/database/external-schema.js +121 -0
- package/dist/implementations/database/external-schema.js.map +1 -0
- package/dist/implementations/database/external-types.d.ts +29 -0
- package/dist/implementations/database/external-types.js +373 -0
- package/dist/implementations/database/external-types.js.map +1 -0
- package/dist/implementations/database/external-writes.d.ts +3 -0
- package/dist/implementations/database/external-writes.js +298 -0
- package/dist/implementations/database/external-writes.js.map +1 -0
- package/dist/implementations/database/feed-pipeline.d.ts +12 -0
- package/dist/implementations/database/feed-pipeline.js +92 -0
- package/dist/implementations/database/feed-pipeline.js.map +1 -0
- package/dist/implementations/database/feeds.d.ts +34 -0
- package/dist/implementations/database/feeds.js +338 -0
- package/dist/implementations/database/feeds.js.map +1 -0
- package/dist/implementations/database/fields.d.ts +37 -0
- package/dist/implementations/database/fields.js +114 -0
- package/dist/implementations/database/fields.js.map +1 -0
- package/dist/implementations/database/identifier.d.ts +8 -0
- package/dist/implementations/database/identifier.js +62 -0
- package/dist/implementations/database/identifier.js.map +1 -0
- package/dist/implementations/database/instances.d.ts +4 -0
- package/dist/implementations/database/instances.js +57 -0
- package/dist/implementations/database/instances.js.map +1 -0
- package/dist/implementations/database/introspect.d.ts +3 -0
- package/dist/implementations/database/introspect.js +36 -0
- package/dist/implementations/database/introspect.js.map +1 -0
- package/dist/implementations/database/jsonb.d.ts +29 -0
- package/dist/implementations/database/jsonb.js +54 -0
- package/dist/implementations/database/jsonb.js.map +1 -0
- package/dist/implementations/database/listener.d.ts +3 -0
- package/dist/implementations/database/listener.js +93 -0
- package/dist/implementations/database/listener.js.map +1 -0
- package/dist/implementations/database/migrate.d.ts +6 -0
- package/dist/implementations/database/migrate.js +282 -0
- package/dist/implementations/database/migrate.js.map +1 -0
- package/dist/implementations/database/payload.d.ts +24 -0
- package/dist/implementations/database/payload.js +113 -0
- package/dist/implementations/database/payload.js.map +1 -0
- package/dist/implementations/database/pipeline.d.ts +10 -0
- package/dist/implementations/database/pipeline.js +56 -0
- package/dist/implementations/database/pipeline.js.map +1 -0
- package/dist/implementations/database/query.d.ts +11 -0
- package/dist/implementations/database/query.js +189 -0
- package/dist/implementations/database/query.js.map +1 -0
- package/dist/implementations/database/readings.d.ts +17 -0
- package/dist/implementations/database/readings.js +133 -0
- package/dist/implementations/database/readings.js.map +1 -0
- package/dist/implementations/database/reaper.d.ts +6 -0
- package/dist/implementations/database/reaper.js +121 -0
- package/dist/implementations/database/reaper.js.map +1 -0
- package/dist/implementations/database/relation.d.ts +65 -0
- package/dist/implementations/database/relation.js +237 -0
- package/dist/implementations/database/relation.js.map +1 -0
- package/dist/implementations/database/result.d.ts +4 -0
- package/dist/implementations/database/result.js +70 -0
- package/dist/implementations/database/result.js.map +1 -0
- package/dist/implementations/database/row-source.d.ts +64 -0
- package/dist/implementations/database/row-source.js +279 -0
- package/dist/implementations/database/row-source.js.map +1 -0
- package/dist/implementations/database/schema.d.ts +15 -0
- package/dist/implementations/database/schema.js +143 -0
- package/dist/implementations/database/schema.js.map +1 -0
- package/dist/implementations/database/selection.d.ts +18 -0
- package/dist/implementations/database/selection.js +129 -0
- package/dist/implementations/database/selection.js.map +1 -0
- package/dist/implementations/database/sql.d.ts +24 -0
- package/dist/implementations/database/sql.js +48 -0
- package/dist/implementations/database/sql.js.map +1 -0
- package/dist/implementations/database/stage.d.ts +22 -0
- package/dist/implementations/database/stage.js +76 -0
- package/dist/implementations/database/stage.js.map +1 -0
- package/dist/implementations/database/stages-aggregate.d.ts +11 -0
- package/dist/implementations/database/stages-aggregate.js +112 -0
- package/dist/implementations/database/stages-aggregate.js.map +1 -0
- package/dist/implementations/database/stages-array.d.ts +2 -0
- package/dist/implementations/database/stages-array.js +162 -0
- package/dist/implementations/database/stages-array.js.map +1 -0
- package/dist/implementations/database/stages-core.d.ts +2 -0
- package/dist/implementations/database/stages-core.js +107 -0
- package/dist/implementations/database/stages-core.js.map +1 -0
- package/dist/implementations/database/stages-date.d.ts +2 -0
- package/dist/implementations/database/stages-date.js +65 -0
- package/dist/implementations/database/stages-date.js.map +1 -0
- package/dist/implementations/database/stages-group.d.ts +5 -0
- package/dist/implementations/database/stages-group.js +151 -0
- package/dist/implementations/database/stages-group.js.map +1 -0
- package/dist/implementations/database/stages-join.d.ts +2 -0
- package/dist/implementations/database/stages-join.js +162 -0
- package/dist/implementations/database/stages-join.js.map +1 -0
- package/dist/implementations/database/stages-numeric.d.ts +2 -0
- package/dist/implementations/database/stages-numeric.js +152 -0
- package/dist/implementations/database/stages-numeric.js.map +1 -0
- package/dist/implementations/database/stages-object.d.ts +2 -0
- package/dist/implementations/database/stages-object.js +81 -0
- package/dist/implementations/database/stages-object.js.map +1 -0
- package/dist/implementations/database/stages-projection.d.ts +2 -0
- package/dist/implementations/database/stages-projection.js +75 -0
- package/dist/implementations/database/stages-projection.js.map +1 -0
- package/dist/implementations/database/stages-rows.d.ts +2 -0
- package/dist/implementations/database/stages-rows.js +101 -0
- package/dist/implementations/database/stages-rows.js.map +1 -0
- package/dist/implementations/database/stages-selection.d.ts +2 -0
- package/dist/implementations/database/stages-selection.js +146 -0
- package/dist/implementations/database/stages-selection.js.map +1 -0
- package/dist/implementations/database/stages-string.d.ts +2 -0
- package/dist/implementations/database/stages-string.js +101 -0
- package/dist/implementations/database/stages-string.js.map +1 -0
- package/dist/implementations/database/subquery.d.ts +4 -0
- package/dist/implementations/database/subquery.js +49 -0
- package/dist/implementations/database/subquery.js.map +1 -0
- package/dist/implementations/database/types.d.ts +37 -0
- package/dist/implementations/database/types.js +57 -0
- package/dist/implementations/database/types.js.map +1 -0
- package/dist/implementations/database/utils.d.ts +16 -0
- package/dist/implementations/database/utils.js +38 -0
- package/dist/implementations/database/utils.js.map +1 -0
- package/dist/implementations/database/value.d.ts +10 -0
- package/dist/implementations/database/value.js +153 -0
- package/dist/implementations/database/value.js.map +1 -0
- package/dist/implementations/database/writes-atomic.d.ts +6 -0
- package/dist/implementations/database/writes-atomic.js +93 -0
- package/dist/implementations/database/writes-atomic.js.map +1 -0
- package/dist/implementations/database/writes-identity.d.ts +4 -0
- package/dist/implementations/database/writes-identity.js +181 -0
- package/dist/implementations/database/writes-identity.js.map +1 -0
- package/dist/implementations/database/writes-insert.d.ts +2 -0
- package/dist/implementations/database/writes-insert.js +136 -0
- package/dist/implementations/database/writes-insert.js.map +1 -0
- package/dist/implementations/database/writes-shared.d.ts +36 -0
- package/dist/implementations/database/writes-shared.js +64 -0
- package/dist/implementations/database/writes-shared.js.map +1 -0
- package/dist/implementations/database/writes.d.ts +16 -0
- package/dist/implementations/database/writes.js +52 -0
- package/dist/implementations/database/writes.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -0
- package/dist/test/antelope.test.d.ts +2 -0
- package/dist/test/antelope.test.js +88 -0
- package/dist/test/antelope.test.js.map +1 -0
- package/dist/test/atomic.test.d.ts +1 -0
- package/dist/test/atomic.test.js +132 -0
- package/dist/test/atomic.test.js.map +1 -0
- package/dist/test/contention.test.d.ts +1 -0
- package/dist/test/contention.test.js +183 -0
- package/dist/test/contention.test.js.map +1 -0
- package/dist/test/indexes.test.d.ts +1 -0
- package/dist/test/indexes.test.js +311 -0
- package/dist/test/indexes.test.js.map +1 -0
- package/dist/test/unit/changes.spec.d.ts +1 -0
- package/dist/test/unit/changes.spec.js +103 -0
- package/dist/test/unit/changes.spec.js.map +1 -0
- package/dist/test/unit/coerce.spec.d.ts +1 -0
- package/dist/test/unit/coerce.spec.js +162 -0
- package/dist/test/unit/coerce.spec.js.map +1 -0
- package/dist/test/unit/config.spec.d.ts +1 -0
- package/dist/test/unit/config.spec.js +123 -0
- package/dist/test/unit/config.spec.js.map +1 -0
- package/dist/test/unit/connection.spec.d.ts +1 -0
- package/dist/test/unit/connection.spec.js +171 -0
- package/dist/test/unit/connection.spec.js.map +1 -0
- package/dist/test/unit/cursors.spec.d.ts +1 -0
- package/dist/test/unit/cursors.spec.js +823 -0
- package/dist/test/unit/cursors.spec.js.map +1 -0
- package/dist/test/unit/ddl.spec.d.ts +1 -0
- package/dist/test/unit/ddl.spec.js +571 -0
- package/dist/test/unit/ddl.spec.js.map +1 -0
- package/dist/test/unit/expression-array.spec.d.ts +1 -0
- package/dist/test/unit/expression-array.spec.js +488 -0
- package/dist/test/unit/expression-array.spec.js.map +1 -0
- package/dist/test/unit/expression-date.spec.d.ts +1 -0
- package/dist/test/unit/expression-date.spec.js +329 -0
- package/dist/test/unit/expression-date.spec.js.map +1 -0
- package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
- package/dist/test/unit/expression-numeric.spec.js +362 -0
- package/dist/test/unit/expression-numeric.spec.js.map +1 -0
- package/dist/test/unit/expression-object.spec.d.ts +1 -0
- package/dist/test/unit/expression-object.spec.js +230 -0
- package/dist/test/unit/expression-object.spec.js.map +1 -0
- package/dist/test/unit/expression-stages.spec.d.ts +1 -0
- package/dist/test/unit/expression-stages.spec.js +82 -0
- package/dist/test/unit/expression-stages.spec.js.map +1 -0
- package/dist/test/unit/expression-string.spec.d.ts +1 -0
- package/dist/test/unit/expression-string.spec.js +249 -0
- package/dist/test/unit/expression-string.spec.js.map +1 -0
- package/dist/test/unit/expression.spec.d.ts +1 -0
- package/dist/test/unit/expression.spec.js +449 -0
- package/dist/test/unit/expression.spec.js.map +1 -0
- package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
- package/dist/test/unit/external-comparisons.spec.js +145 -0
- package/dist/test/unit/external-comparisons.spec.js.map +1 -0
- package/dist/test/unit/external-types.spec.d.ts +1 -0
- package/dist/test/unit/external-types.spec.js +191 -0
- package/dist/test/unit/external-types.spec.js.map +1 -0
- package/dist/test/unit/feeds.spec.d.ts +1 -0
- package/dist/test/unit/feeds.spec.js +374 -0
- package/dist/test/unit/feeds.spec.js.map +1 -0
- package/dist/test/unit/fields.spec.d.ts +1 -0
- package/dist/test/unit/fields.spec.js +79 -0
- package/dist/test/unit/fields.spec.js.map +1 -0
- package/dist/test/unit/identifier.spec.d.ts +1 -0
- package/dist/test/unit/identifier.spec.js +50 -0
- package/dist/test/unit/identifier.spec.js.map +1 -0
- package/dist/test/unit/payload.spec.d.ts +1 -0
- package/dist/test/unit/payload.spec.js +278 -0
- package/dist/test/unit/payload.spec.js.map +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
- package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
- package/dist/test/unit/pipeline-fixture.d.ts +79 -0
- package/dist/test/unit/pipeline-fixture.js +277 -0
- package/dist/test/unit/pipeline-fixture.js.map +1 -0
- package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-group.spec.js +390 -0
- package/dist/test/unit/pipeline-group.spec.js.map +1 -0
- package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-join.spec.js +165 -0
- package/dist/test/unit/pipeline-join.spec.js.map +1 -0
- package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-lookup.spec.js +268 -0
- package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
- package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-projection.spec.js +183 -0
- package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-rows.spec.js +321 -0
- package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
- package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-selection.spec.js +257 -0
- package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
- package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
- package/dist/test/unit/pipeline-stages.spec.js +226 -0
- package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
- package/dist/test/unit/pipeline.spec.d.ts +1 -0
- package/dist/test/unit/pipeline.spec.js +72 -0
- package/dist/test/unit/pipeline.spec.js.map +1 -0
- package/dist/test/unit/query.spec.d.ts +1 -0
- package/dist/test/unit/query.spec.js +212 -0
- package/dist/test/unit/query.spec.js.map +1 -0
- package/dist/test/unit/reaper.spec.d.ts +1 -0
- package/dist/test/unit/reaper.spec.js +122 -0
- package/dist/test/unit/reaper.spec.js.map +1 -0
- package/dist/test/unit/relation.spec.d.ts +1 -0
- package/dist/test/unit/relation.spec.js +348 -0
- package/dist/test/unit/relation.spec.js.map +1 -0
- package/dist/test/unit/result.spec.d.ts +1 -0
- package/dist/test/unit/result.spec.js +128 -0
- package/dist/test/unit/result.spec.js.map +1 -0
- package/dist/test/unit/row-source.spec.d.ts +1 -0
- package/dist/test/unit/row-source.spec.js +141 -0
- package/dist/test/unit/row-source.spec.js.map +1 -0
- package/dist/test/unit/schema.spec.d.ts +1 -0
- package/dist/test/unit/schema.spec.js +44 -0
- package/dist/test/unit/schema.spec.js.map +1 -0
- package/dist/test/unit/selection.spec.d.ts +1 -0
- package/dist/test/unit/selection.spec.js +182 -0
- package/dist/test/unit/selection.spec.js.map +1 -0
- package/dist/test/unit/spec-fixture.d.ts +11 -0
- package/dist/test/unit/spec-fixture.js +71 -0
- package/dist/test/unit/spec-fixture.js.map +1 -0
- package/dist/test/unit/sql.spec.d.ts +1 -0
- package/dist/test/unit/sql.spec.js +38 -0
- package/dist/test/unit/sql.spec.js.map +1 -0
- package/dist/test/unit/subquery.spec.d.ts +1 -0
- package/dist/test/unit/subquery.spec.js +154 -0
- package/dist/test/unit/subquery.spec.js.map +1 -0
- package/dist/test/unit/types.spec.d.ts +1 -0
- package/dist/test/unit/types.spec.js +39 -0
- package/dist/test/unit/types.spec.js.map +1 -0
- package/dist/test/unit/utils.spec.d.ts +1 -0
- package/dist/test/unit/utils.spec.js +22 -0
- package/dist/test/unit/utils.spec.js.map +1 -0
- package/dist/test/unit/value.spec.d.ts +1 -0
- package/dist/test/unit/value.spec.js +195 -0
- package/dist/test/unit/value.spec.js.map +1 -0
- package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
- package/dist/test/unit/writes-atomic.spec.js +66 -0
- package/dist/test/unit/writes-atomic.spec.js.map +1 -0
- package/dist/test/unit/writes-insert.spec.d.ts +1 -0
- package/dist/test/unit/writes-insert.spec.js +270 -0
- package/dist/test/unit/writes-insert.spec.js.map +1 -0
- package/dist/test/unit/writes-replace.spec.d.ts +1 -0
- package/dist/test/unit/writes-replace.spec.js +100 -0
- package/dist/test/unit/writes-replace.spec.js.map +1 -0
- package/dist/test/unit/writes-target.spec.d.ts +1 -0
- package/dist/test/unit/writes-target.spec.js +118 -0
- package/dist/test/unit/writes-target.spec.js.map +1 -0
- package/dist/test/unit/writes-update.spec.d.ts +1 -0
- package/dist/test/unit/writes-update.spec.js +297 -0
- package/dist/test/unit/writes-update.spec.js.map +1 -0
- package/dist/test-external/fixture.d.ts +6 -0
- package/dist/test-external/fixture.js +136 -0
- package/dist/test-external/fixture.js.map +1 -0
- package/dist/test-external/native.test.d.ts +1 -0
- package/dist/test-external/native.test.js +132 -0
- package/dist/test-external/native.test.js.map +1 -0
- package/dist/test-external/reads.test.d.ts +1 -0
- package/dist/test-external/reads.test.js +232 -0
- package/dist/test-external/reads.test.js.map +1 -0
- package/dist/test-external/refusals.test.d.ts +1 -0
- package/dist/test-external/refusals.test.js +93 -0
- package/dist/test-external/refusals.test.js.map +1 -0
- package/dist/test-external/registration.test.d.ts +1 -0
- package/dist/test-external/registration.test.js +127 -0
- package/dist/test-external/registration.test.js.map +1 -0
- package/dist/test-external/sales.d.ts +5 -0
- package/dist/test-external/sales.js +126 -0
- package/dist/test-external/sales.js.map +1 -0
- package/dist/test-external/startup.test.d.ts +1 -0
- package/dist/test-external/startup.test.js +15 -0
- package/dist/test-external/startup.test.js.map +1 -0
- package/dist/test-external/writes.test.d.ts +1 -0
- package/dist/test-external/writes.test.js +315 -0
- package/dist/test-external/writes.test.js.map +1 -0
- package/package.json +75 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../../src/implementations/database/instances.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReadTable = ReadTable;
|
|
4
|
+
const COLUMNS_SQL = `
|
|
5
|
+
SELECT a.attname AS name, format_type(a.atttypid, a.atttypmod) AS type
|
|
6
|
+
FROM pg_attribute a
|
|
7
|
+
JOIN pg_class c ON c.oid = a.attrelid
|
|
8
|
+
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
9
|
+
WHERE n.nspname = $1 AND c.relname = $2 AND c.relkind = 'r'
|
|
10
|
+
AND a.attnum > 0 AND NOT a.attisdropped
|
|
11
|
+
ORDER BY a.attnum`;
|
|
12
|
+
const INDEXES_SQL = `
|
|
13
|
+
SELECT c.relname AS name, obj_description(c.oid, 'pg_class') AS signature,
|
|
14
|
+
i.indisvalid AS valid
|
|
15
|
+
FROM pg_index i
|
|
16
|
+
JOIN pg_class c ON c.oid = i.indexrelid
|
|
17
|
+
JOIN pg_class t ON t.oid = i.indrelid
|
|
18
|
+
JOIN pg_namespace n ON n.oid = t.relnamespace
|
|
19
|
+
WHERE n.nspname = $1 AND t.relname = $2 AND NOT i.indisprimary`;
|
|
20
|
+
function ReadIndex(row) {
|
|
21
|
+
return {
|
|
22
|
+
name: row.name,
|
|
23
|
+
signature: row.signature ?? undefined,
|
|
24
|
+
valid: row.valid,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function ReadTable(client, schemaName, tableName) {
|
|
28
|
+
const target = [schemaName, tableName];
|
|
29
|
+
const columns = await client.query(COLUMNS_SQL, target);
|
|
30
|
+
if (columns.rows.length === 0) {
|
|
31
|
+
return { columns: [], indexes: [] };
|
|
32
|
+
}
|
|
33
|
+
const indexes = await client.query(INDEXES_SQL, target);
|
|
34
|
+
return { columns: columns.rows, indexes: indexes.rows.map(ReadIndex) };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../../src/implementations/database/introspect.ts"],"names":[],"mappings":";;AAkDA,8BAYC;AAlDD,MAAM,WAAW,GAAG;;;;;;;oBAOA,CAAC;AAErB,MAAM,WAAW,GAAG;;;;;;;iEAO6C,CAAC;AAElE,SAAS,SAAS,CAAC,GAAa;IAC9B,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAcM,KAAK,UAAU,SAAS,CAC7B,MAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAY,WAAW,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAW,WAAW,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Compiled } from "./sql";
|
|
2
|
+
export declare function TextArray(names: readonly string[]): string;
|
|
3
|
+
export declare const OBJECT_TYPEOF = "object";
|
|
4
|
+
export declare const ARRAY_TYPEOF = "array";
|
|
5
|
+
export declare function GuardJson(value: Compiled, expected: string, body: string): string;
|
|
6
|
+
type ColumnRendering = (column: string) => string;
|
|
7
|
+
export interface HeldValue {
|
|
8
|
+
value: string;
|
|
9
|
+
column: string;
|
|
10
|
+
alias: string;
|
|
11
|
+
select: ColumnRendering;
|
|
12
|
+
guard: ColumnRendering;
|
|
13
|
+
}
|
|
14
|
+
export declare function HeldOnce(held: HeldValue): string;
|
|
15
|
+
export declare const VALUE_COLUMN = "value";
|
|
16
|
+
export declare const ORDINAL_COLUMN = "ord";
|
|
17
|
+
export declare const EMPTY_ARRAY = "'[]'::jsonb";
|
|
18
|
+
export declare function WalkColumn(alias: string, name: string): string;
|
|
19
|
+
export declare function Collected(order: string | undefined, target: string, distinct?: boolean): string;
|
|
20
|
+
export interface ElementWalk {
|
|
21
|
+
func: string;
|
|
22
|
+
json: string;
|
|
23
|
+
alias: string;
|
|
24
|
+
columns: readonly string[];
|
|
25
|
+
aggregate: string;
|
|
26
|
+
predicate?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function Walk(walk: ElementWalk): string;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EMPTY_ARRAY = exports.ORDINAL_COLUMN = exports.VALUE_COLUMN = exports.ARRAY_TYPEOF = exports.OBJECT_TYPEOF = void 0;
|
|
7
|
+
exports.TextArray = TextArray;
|
|
8
|
+
exports.GuardJson = GuardJson;
|
|
9
|
+
exports.HeldOnce = HeldOnce;
|
|
10
|
+
exports.WalkColumn = WalkColumn;
|
|
11
|
+
exports.Collected = Collected;
|
|
12
|
+
exports.Walk = Walk;
|
|
13
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
14
|
+
const types_1 = require("./types");
|
|
15
|
+
const sql_1 = require("./sql");
|
|
16
|
+
function TextArray(names) {
|
|
17
|
+
const literals = names.map(sql_1.QuoteLiteral);
|
|
18
|
+
return `array[${literals.join(", ")}]::${(0, types_1.PhysicalType)(types_1.TEXT)}[]`;
|
|
19
|
+
}
|
|
20
|
+
exports.OBJECT_TYPEOF = "object";
|
|
21
|
+
exports.ARRAY_TYPEOF = "array";
|
|
22
|
+
function GuardJson(value, expected, body) {
|
|
23
|
+
return `(CASE WHEN jsonb_typeof(${value.sql}) = '${expected}' THEN ${body} END)`;
|
|
24
|
+
}
|
|
25
|
+
function HeldOnce(held) {
|
|
26
|
+
const relation = (0, sql_1.QuoteIdentifier)(held.alias);
|
|
27
|
+
const column = (0, sql_1.QualifiedColumn)(held.alias, held.column);
|
|
28
|
+
const source = `(SELECT ${held.value} AS ${(0, sql_1.QuoteIdentifier)(held.column)})`;
|
|
29
|
+
const selected = held.select(column);
|
|
30
|
+
return `(SELECT ${selected} FROM ${source} AS ${relation} WHERE ${held.guard(column)})`;
|
|
31
|
+
}
|
|
32
|
+
exports.VALUE_COLUMN = "value";
|
|
33
|
+
exports.ORDINAL_COLUMN = "ord";
|
|
34
|
+
exports.EMPTY_ARRAY = "'[]'::jsonb";
|
|
35
|
+
const ORDINALITY = "WITH ORDINALITY";
|
|
36
|
+
function WalkColumn(alias, name) {
|
|
37
|
+
return (0, sql_1.QualifiedColumn)(alias, name);
|
|
38
|
+
}
|
|
39
|
+
function Collected(order, target, distinct = false) {
|
|
40
|
+
(0, node_assert_1.default)(!distinct || order === undefined, "A collected aggregate orders its elements or dedups them, never both");
|
|
41
|
+
const deduped = distinct ? "DISTINCT " : "";
|
|
42
|
+
const ordered = order === undefined ? "" : ` ORDER BY ${order}`;
|
|
43
|
+
return `COALESCE(jsonb_agg(${deduped}${target}${ordered}), ${exports.EMPTY_ARRAY})`;
|
|
44
|
+
}
|
|
45
|
+
function Walk(walk) {
|
|
46
|
+
const columns = [...walk.columns, exports.ORDINAL_COLUMN]
|
|
47
|
+
.map(sql_1.QuoteIdentifier)
|
|
48
|
+
.join(", ");
|
|
49
|
+
const relation = `${(0, sql_1.QuoteIdentifier)(walk.alias)}(${columns})`;
|
|
50
|
+
const source = `${walk.func}(${walk.json}) ${ORDINALITY} AS ${relation}`;
|
|
51
|
+
const where = walk.predicate ? ` WHERE ${walk.predicate}` : "";
|
|
52
|
+
return `(SELECT ${walk.aggregate} FROM ${source}${where})`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=jsonb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonb.js","sourceRoot":"","sources":["../../../src/implementations/database/jsonb.ts"],"names":[],"mappings":";;;;;;AAWA,8BAGC;AAOD,8BAMC;AA4BD,4BAMC;AAgBD,gCAEC;AAyBD,8BAYC;AAoBD,oBAQC;AAhJD,8DAAiC;AAEjC,mCAA6C;AAC7C,+BAKe;AAGf,SAAgB,SAAS,CAAC,KAAwB;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAY,CAAC,CAAC;IACzC,OAAO,SAAS,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,IAAI,CAAC;AAClE,CAAC;AAGY,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,YAAY,GAAG,OAAO,CAAC;AAGpC,SAAgB,SAAS,CACvB,KAAe,EACf,QAAgB,EAChB,IAAY;IAEZ,OAAO,2BAA2B,KAAK,CAAC,GAAG,QAAQ,QAAQ,UAAU,IAAI,OAAO,CAAC;AACnF,CAAC;AA4BD,SAAgB,QAAQ,CAAC,IAAe;IACtC,MAAM,QAAQ,GAAG,IAAA,qBAAe,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,qBAAe,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,WAAW,IAAI,CAAC,KAAK,OAAO,IAAA,qBAAe,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,WAAW,QAAQ,SAAS,MAAM,OAAO,QAAQ,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1F,CAAC;AAEY,QAAA,YAAY,GAAG,OAAO,CAAC;AACvB,QAAA,cAAc,GAAG,KAAK,CAAC;AAUvB,QAAA,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC,SAAgB,UAAU,CAAC,KAAa,EAAE,IAAY;IACpD,OAAO,IAAA,qBAAe,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAyBD,SAAgB,SAAS,CACvB,KAAyB,EACzB,MAAc,EACd,QAAQ,GAAG,KAAK;IAEhB,IAAA,qBAAM,EACJ,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAChC,sEAAsE,CACvE,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC;IAChE,OAAO,sBAAsB,OAAO,GAAG,MAAM,GAAG,OAAO,MAAM,mBAAW,GAAG,CAAC;AAC9E,CAAC;AAoBD,SAAgB,IAAI,CAAC,IAAiB;IACpC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,sBAAc,CAAC;SAC9C,GAAG,CAAC,qBAAe,CAAC;SACpB,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,GAAG,IAAA,qBAAe,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC;IAC9D,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,OAAO,QAAQ,EAAE,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO,WAAW,IAAI,CAAC,SAAS,SAAS,MAAM,GAAG,KAAK,GAAG,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubscribeToChanges = SubscribeToChanges;
|
|
4
|
+
exports.EnsureListening = EnsureListening;
|
|
5
|
+
const pg_1 = require("pg");
|
|
6
|
+
const logger_1 = require("../../logger");
|
|
7
|
+
const sql_1 = require("./sql");
|
|
8
|
+
const config_1 = require("../../config");
|
|
9
|
+
const changes_1 = require("./changes");
|
|
10
|
+
const connection_1 = require("../../connection");
|
|
11
|
+
const NOTIFICATION = "notification";
|
|
12
|
+
const ERROR = "error";
|
|
13
|
+
const LISTEN = `LISTEN ${(0, sql_1.QuoteIdentifier)(changes_1.CHANGE_CHANNEL)}`;
|
|
14
|
+
const FIRST_BACKOFF_MS = 50;
|
|
15
|
+
const LARGEST_BACKOFF_MS = 5_000;
|
|
16
|
+
const BACKOFF_FACTOR = 2;
|
|
17
|
+
const LISTENER_FAILED = "the PostgreSQL change listener's connection failed and is being re-established";
|
|
18
|
+
const subscribers = new Set();
|
|
19
|
+
let listening;
|
|
20
|
+
let client;
|
|
21
|
+
let backoffMs = FIRST_BACKOFF_MS;
|
|
22
|
+
let retry;
|
|
23
|
+
let isStopped = false;
|
|
24
|
+
function SubscribeToChanges(subscriber) {
|
|
25
|
+
subscribers.add(subscriber);
|
|
26
|
+
return () => {
|
|
27
|
+
subscribers.delete(subscriber);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function Announce(target) {
|
|
31
|
+
for (const subscriber of subscribers) {
|
|
32
|
+
subscriber(target);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function CaughtUp() {
|
|
36
|
+
Announce();
|
|
37
|
+
}
|
|
38
|
+
function Connected(created) {
|
|
39
|
+
return created.connect().then(() => {
|
|
40
|
+
void created.query(LISTEN);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function Reconnect() {
|
|
44
|
+
if (isStopped || retry) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
retry = setTimeout(() => {
|
|
48
|
+
retry = undefined;
|
|
49
|
+
listening = Establish().then(CaughtUp, () => {
|
|
50
|
+
backoffMs = Math.min(backoffMs * BACKOFF_FACTOR, LARGEST_BACKOFF_MS);
|
|
51
|
+
Reconnect();
|
|
52
|
+
});
|
|
53
|
+
}, backoffMs);
|
|
54
|
+
retry.unref();
|
|
55
|
+
}
|
|
56
|
+
function Failed(err) {
|
|
57
|
+
logger_1.Logger.Warn(LISTENER_FAILED, err);
|
|
58
|
+
client = undefined;
|
|
59
|
+
Reconnect();
|
|
60
|
+
}
|
|
61
|
+
async function Establish() {
|
|
62
|
+
const created = new pg_1.Client({ connectionString: (0, config_1.GetOptions)().url });
|
|
63
|
+
created.on(ERROR, Failed);
|
|
64
|
+
created.on(NOTIFICATION, (message) => {
|
|
65
|
+
Announce(message.payload);
|
|
66
|
+
});
|
|
67
|
+
await Connected(created);
|
|
68
|
+
client = created;
|
|
69
|
+
backoffMs = FIRST_BACKOFF_MS;
|
|
70
|
+
}
|
|
71
|
+
function EnsureListening() {
|
|
72
|
+
isStopped = false;
|
|
73
|
+
if (!listening) {
|
|
74
|
+
listening = Establish().catch(Failed);
|
|
75
|
+
}
|
|
76
|
+
return listening;
|
|
77
|
+
}
|
|
78
|
+
async function StopListening() {
|
|
79
|
+
isStopped = true;
|
|
80
|
+
if (retry) {
|
|
81
|
+
clearTimeout(retry);
|
|
82
|
+
retry = undefined;
|
|
83
|
+
}
|
|
84
|
+
const open = client;
|
|
85
|
+
client = undefined;
|
|
86
|
+
listening = undefined;
|
|
87
|
+
backoffMs = FIRST_BACKOFF_MS;
|
|
88
|
+
if (open) {
|
|
89
|
+
await open.end().catch(() => undefined);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
(0, connection_1.RegisterBeforeDisconnect)(StopListening);
|
|
93
|
+
//# sourceMappingURL=listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/implementations/database/listener.ts"],"names":[],"mappings":";;AAsCA,gDAKC;AAmED,0CAMC;AApHD,2BAA4B;AAE5B,yCAAsC;AACtC,+BAAwC;AACxC,yCAA0C;AAC1C,uCAA2C;AAC3C,iDAA4D;AAW5D,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,MAAM,MAAM,GAAG,UAAU,IAAA,qBAAe,EAAC,wBAAc,CAAC,EAAE,CAAC;AAE3D,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,eAAe,GACnB,gFAAgF,CAAC;AAEnF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEhD,IAAI,SAAoC,CAAC;AACzC,IAAI,MAA0B,CAAC;AAC/B,IAAI,SAAS,GAAG,gBAAgB,CAAC;AACjC,IAAI,KAAiC,CAAC;AACtC,IAAI,SAAS,GAAG,KAAK,CAAC;AAGtB,SAAgB,kBAAkB,CAAC,UAA4B;IAC7D,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE;QACV,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAe;IAC/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAGD,SAAS,QAAQ;IACf,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACjC,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAGD,SAAS,SAAS;IAChB,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QACtB,KAAK,GAAG,SAAS,CAAC;QAClB,SAAS,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC1C,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,cAAc,EAAE,kBAAkB,CAAC,CAAC;YACrE,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,SAAS,CAAC,CAAC;IACd,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,GAAY;IAC1B,eAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,SAAS,CAAC;IACnB,SAAS,EAAE,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,OAAO,GAAG,IAAI,WAAM,CAAC,EAAE,gBAAgB,EAAE,IAAA,mBAAU,GAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;QACnC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,GAAG,OAAO,CAAC;IACjB,SAAS,GAAG,gBAAgB,CAAC;AAC/B,CAAC;AAkBD,SAAgB,eAAe;IAC7B,SAAS,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,KAAK,UAAU,aAAa;IAC1B,SAAS,GAAG,IAAI,CAAC;IACjB,IAAI,KAAK,EAAE,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC;IACpB,MAAM,GAAG,SAAS,CAAC;IACnB,SAAS,GAAG,SAAS,CAAC;IACtB,SAAS,GAAG,gBAAgB,CAAC;IAC7B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,IAAA,qCAAwB,EAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SchemaDefinition } from "@antelopejs/interface-database/schema";
|
|
2
|
+
import type { SchemaShape } from "./fields";
|
|
3
|
+
import { type TablePlan } from "./ddl";
|
|
4
|
+
export declare function EnsureTriggers(schemaId: string, tableId: string): Promise<void>;
|
|
5
|
+
export declare function ConvergeTables(schemaId: string, schema: SchemaDefinition, shape: SchemaShape): Promise<TablePlan[]>;
|
|
6
|
+
export declare function BuildIndexes(schemaId: string, plans: readonly TablePlan[]): Promise<void>;
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnsureTriggers = EnsureTriggers;
|
|
4
|
+
exports.ConvergeTables = ConvergeTables;
|
|
5
|
+
exports.BuildIndexes = BuildIndexes;
|
|
6
|
+
const pg_1 = require("pg");
|
|
7
|
+
const logger_1 = require("../../logger");
|
|
8
|
+
const introspect_1 = require("./introspect");
|
|
9
|
+
const identifier_1 = require("./identifier");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
11
|
+
const instances_1 = require("./instances");
|
|
12
|
+
const config_1 = require("../../config");
|
|
13
|
+
const changes_1 = require("./changes");
|
|
14
|
+
const connection_1 = require("../../connection");
|
|
15
|
+
const ddl_1 = require("./ddl");
|
|
16
|
+
const DUPLICATE_OBJECT_CODES = new Set(["23505", "42P06", "42P07", "42710"]);
|
|
17
|
+
const CONVERGENCE_RETRIES = 2;
|
|
18
|
+
const BEGIN = "BEGIN";
|
|
19
|
+
const COMMIT = "COMMIT";
|
|
20
|
+
const ROLLBACK = "ROLLBACK";
|
|
21
|
+
const UNLIMITED_STATEMENT_TIMEOUT = "SET LOCAL statement_timeout = 0";
|
|
22
|
+
const TRANSACTION_PROLOGUE = [BEGIN, UNLIMITED_STATEMENT_TIMEOUT];
|
|
23
|
+
const TABLES_LOCK_NAMESPACE = "antelopejs:converge:tables:";
|
|
24
|
+
const INDEXES_LOCK_NAMESPACE = "antelopejs:converge:indexes:";
|
|
25
|
+
const TABLES_LOCK_SQL = "SELECT pg_advisory_xact_lock(hashtextextended($1, 0))";
|
|
26
|
+
const TRY_INDEXES_LOCK_SQL = "SELECT pg_try_advisory_lock(hashtextextended($1, 0)) AS locked";
|
|
27
|
+
const INDEXES_UNLOCK_SQL = "SELECT pg_advisory_unlock(hashtextextended($1, 0))";
|
|
28
|
+
const CANCEL_BACKEND_SQL = "SELECT pg_cancel_backend($1)";
|
|
29
|
+
const BACKEND_PID_SQL = "SELECT pg_backend_pid() AS pid";
|
|
30
|
+
const UNLIMITED_SESSION_STATEMENT_TIMEOUT = "SET statement_timeout = 0";
|
|
31
|
+
const RESTORE_SESSION_STATEMENT_TIMEOUT = "RESET statement_timeout";
|
|
32
|
+
const INDEX_BUILD_STOPPED = new Error("PostgreSQL index build stopped: the adapter is disconnecting");
|
|
33
|
+
const ABORTED_TRANSACTION = new Error("PostgreSQL client discarded: its migration transaction could not be rolled back");
|
|
34
|
+
const BOOTSTRAP_STATEMENTS = [
|
|
35
|
+
...instances_1.REGISTRY_STATEMENTS,
|
|
36
|
+
...changes_1.CHANGE_LOG_STATEMENTS,
|
|
37
|
+
];
|
|
38
|
+
const MEMO_SEPARATOR = "\u0000";
|
|
39
|
+
const NOTHING_TO_CONVERGE = 0;
|
|
40
|
+
const warned = new Set();
|
|
41
|
+
let registryReady;
|
|
42
|
+
let registryFor;
|
|
43
|
+
const triggersReady = new Map();
|
|
44
|
+
const indexBuilds = new Set();
|
|
45
|
+
const indexPhases = new Set();
|
|
46
|
+
function IsDuplicateObject(err) {
|
|
47
|
+
if (err instanceof pg_1.DatabaseError) {
|
|
48
|
+
return err.code !== undefined && DUPLICATE_OBJECT_CODES.has(err.code);
|
|
49
|
+
}
|
|
50
|
+
return err instanceof Error && IsDuplicateObject(err.cause);
|
|
51
|
+
}
|
|
52
|
+
async function RetryOnDuplicateObject(work) {
|
|
53
|
+
for (let remaining = CONVERGENCE_RETRIES; remaining > 0; remaining--) {
|
|
54
|
+
try {
|
|
55
|
+
return await work();
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (!IsDuplicateObject(err)) {
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return work();
|
|
64
|
+
}
|
|
65
|
+
function Describe(cause) {
|
|
66
|
+
return cause instanceof Error ? cause.message : String(cause);
|
|
67
|
+
}
|
|
68
|
+
function MigrationError(schemaName, statement, cause) {
|
|
69
|
+
return new Error(`Migrating schema '${schemaName}' failed on statement: ${statement} — ${Describe(cause)}`, { cause });
|
|
70
|
+
}
|
|
71
|
+
async function RunEach(client, schemaName, statements) {
|
|
72
|
+
for (const statement of statements) {
|
|
73
|
+
try {
|
|
74
|
+
await client.query(statement);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
throw MigrationError(schemaName, statement, err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function Rollback(client) {
|
|
82
|
+
try {
|
|
83
|
+
await client.query(ROLLBACK);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function InTransaction(schemaName, work) {
|
|
91
|
+
const client = await (0, connection_1.AcquireClient)();
|
|
92
|
+
try {
|
|
93
|
+
await RunEach(client, schemaName, TRANSACTION_PROLOGUE);
|
|
94
|
+
await work(client);
|
|
95
|
+
await RunEach(client, schemaName, [COMMIT]);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
const rolledBack = await Rollback(client);
|
|
99
|
+
client.release(rolledBack ? undefined : ABORTED_TRANSACTION);
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
client.release();
|
|
103
|
+
}
|
|
104
|
+
async function Apply(schemaName, statements) {
|
|
105
|
+
if (statements.length === 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
await InTransaction(schemaName, (client) => RunEach(client, schemaName, statements));
|
|
109
|
+
}
|
|
110
|
+
function EnsureRegistry() {
|
|
111
|
+
const pool = (0, connection_1.GetPool)();
|
|
112
|
+
if (registryReady && registryFor === pool) {
|
|
113
|
+
return registryReady;
|
|
114
|
+
}
|
|
115
|
+
triggersReady.clear();
|
|
116
|
+
const pending = RetryOnDuplicateObject(() => Apply(utils_1.REGISTRY_SCHEMA, BOOTSTRAP_STATEMENTS)).catch((err) => {
|
|
117
|
+
if (registryReady === pending) {
|
|
118
|
+
registryReady = undefined;
|
|
119
|
+
registryFor = undefined;
|
|
120
|
+
}
|
|
121
|
+
throw err;
|
|
122
|
+
});
|
|
123
|
+
registryReady = pending;
|
|
124
|
+
registryFor = pool;
|
|
125
|
+
return pending;
|
|
126
|
+
}
|
|
127
|
+
async function InstallTriggers(schemaId, tableId) {
|
|
128
|
+
await EnsureRegistry();
|
|
129
|
+
await Apply((0, identifier_1.SchemaName)(schemaId), (0, changes_1.TriggerStatements)(schemaId, tableId));
|
|
130
|
+
}
|
|
131
|
+
function EnsureTriggers(schemaId, tableId) {
|
|
132
|
+
const key = `${schemaId}${MEMO_SEPARATOR}${tableId}`;
|
|
133
|
+
const known = triggersReady.get(key);
|
|
134
|
+
if (known) {
|
|
135
|
+
return known;
|
|
136
|
+
}
|
|
137
|
+
const pending = InstallTriggers(schemaId, tableId).catch((err) => {
|
|
138
|
+
if (triggersReady.get(key) === pending) {
|
|
139
|
+
triggersReady.delete(key);
|
|
140
|
+
}
|
|
141
|
+
throw err;
|
|
142
|
+
});
|
|
143
|
+
triggersReady.set(key, pending);
|
|
144
|
+
return pending;
|
|
145
|
+
}
|
|
146
|
+
function WarnOnce(warnings) {
|
|
147
|
+
for (const warning of warnings) {
|
|
148
|
+
if (warned.has(warning)) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
warned.add(warning);
|
|
152
|
+
logger_1.Logger.Warn(warning);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function SeedStatements(schemaName) {
|
|
156
|
+
return [(0, ddl_1.CreateSchemaSql)(schemaName)];
|
|
157
|
+
}
|
|
158
|
+
async function PlanSchema(client, schemaName, plans, mode) {
|
|
159
|
+
const merged = {
|
|
160
|
+
statements: SeedStatements(schemaName),
|
|
161
|
+
warnings: [],
|
|
162
|
+
};
|
|
163
|
+
for (const plan of plans) {
|
|
164
|
+
const actual = await (0, introspect_1.ReadTable)(client, schemaName, plan.table);
|
|
165
|
+
const table = (0, ddl_1.PlanTable)(schemaName, plan, actual, mode);
|
|
166
|
+
merged.statements.push(...table.statements);
|
|
167
|
+
merged.warnings.push(...table.warnings);
|
|
168
|
+
}
|
|
169
|
+
return merged;
|
|
170
|
+
}
|
|
171
|
+
function ReportConvergence(schemaName, changed) {
|
|
172
|
+
if (changed <= NOTHING_TO_CONVERGE) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
logger_1.Logger.Info(`converged schema '${schemaName}' in ${changed} statements`);
|
|
176
|
+
}
|
|
177
|
+
function ReportIndexBuilds(schemaName, applied) {
|
|
178
|
+
if (applied <= NOTHING_TO_CONVERGE) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
logger_1.Logger.Info(`converged the indexes of schema '${schemaName}' in ${applied} statements`);
|
|
182
|
+
}
|
|
183
|
+
function LockKey(namespace, schemaName) {
|
|
184
|
+
return [`${namespace}${schemaName}`];
|
|
185
|
+
}
|
|
186
|
+
function ConvergeTablesLocked(schemaName, plans) {
|
|
187
|
+
const baseline = SeedStatements(schemaName).length;
|
|
188
|
+
return InTransaction(schemaName, async (client) => {
|
|
189
|
+
await client.query(TABLES_LOCK_SQL, LockKey(TABLES_LOCK_NAMESPACE, schemaName));
|
|
190
|
+
const mode = (0, config_1.GetOptions)().migrations;
|
|
191
|
+
const changes = await PlanSchema(client, schemaName, plans, mode);
|
|
192
|
+
await RunEach(client, schemaName, changes.statements);
|
|
193
|
+
ReportConvergence(schemaName, changes.statements.length - baseline);
|
|
194
|
+
WarnOnce(changes.warnings);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async function ConvergeTables(schemaId, schema, shape) {
|
|
198
|
+
const schemaName = (0, identifier_1.SchemaName)(schemaId);
|
|
199
|
+
const plans = (0, ddl_1.BuildSchemaPlan)(schema, shape);
|
|
200
|
+
await EnsureRegistry();
|
|
201
|
+
await RetryOnDuplicateObject(() => ConvergeTablesLocked(schemaName, plans));
|
|
202
|
+
return plans;
|
|
203
|
+
}
|
|
204
|
+
async function PlanIndexPhase(client, schemaName, plans) {
|
|
205
|
+
const statements = [];
|
|
206
|
+
for (const plan of plans) {
|
|
207
|
+
const actual = await (0, introspect_1.ReadTable)(client, schemaName, plan.table);
|
|
208
|
+
statements.push(...(0, ddl_1.PlanIndexStatements)(schemaName, plan, actual));
|
|
209
|
+
}
|
|
210
|
+
return statements;
|
|
211
|
+
}
|
|
212
|
+
async function RunIndexStatements(build, schemaName, statements) {
|
|
213
|
+
for (const statement of statements) {
|
|
214
|
+
if (build.isStopping) {
|
|
215
|
+
throw INDEX_BUILD_STOPPED;
|
|
216
|
+
}
|
|
217
|
+
await RunEach(build.client, schemaName, [statement]);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async function TryIndexesLock(client, key) {
|
|
221
|
+
const result = await client.query(TRY_INDEXES_LOCK_SQL, [...key]);
|
|
222
|
+
return result.rows[0].locked;
|
|
223
|
+
}
|
|
224
|
+
async function BuildIndexesLocked(build, schemaName, plans) {
|
|
225
|
+
const { client } = build;
|
|
226
|
+
const key = LockKey(INDEXES_LOCK_NAMESPACE, schemaName);
|
|
227
|
+
await client.query(UNLIMITED_SESSION_STATEMENT_TIMEOUT);
|
|
228
|
+
if (await TryIndexesLock(client, key)) {
|
|
229
|
+
const statements = await PlanIndexPhase(client, schemaName, plans);
|
|
230
|
+
await RunIndexStatements(build, schemaName, statements);
|
|
231
|
+
await client.query(INDEXES_UNLOCK_SQL, key);
|
|
232
|
+
ReportIndexBuilds(schemaName, statements.length);
|
|
233
|
+
}
|
|
234
|
+
await client.query(RESTORE_SESSION_STATEMENT_TIMEOUT);
|
|
235
|
+
}
|
|
236
|
+
function AsError(cause) {
|
|
237
|
+
return cause instanceof Error ? cause : new Error(Describe(cause));
|
|
238
|
+
}
|
|
239
|
+
async function BackendPid(client) {
|
|
240
|
+
const result = await client.query(BACKEND_PID_SQL);
|
|
241
|
+
return result.rows[0].pid;
|
|
242
|
+
}
|
|
243
|
+
async function RunIndexPhase(schemaName, plans) {
|
|
244
|
+
const client = await (0, connection_1.AcquireClient)();
|
|
245
|
+
const build = { client, pid: 0, isStopping: false };
|
|
246
|
+
indexBuilds.add(build);
|
|
247
|
+
try {
|
|
248
|
+
build.pid = await BackendPid(client);
|
|
249
|
+
await BuildIndexesLocked(build, schemaName, plans);
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
client.release(AsError(err));
|
|
253
|
+
if (build.isStopping) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
throw err;
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
indexBuilds.delete(build);
|
|
260
|
+
}
|
|
261
|
+
client.release();
|
|
262
|
+
}
|
|
263
|
+
function ReportIndexFailure(schemaName, err) {
|
|
264
|
+
logger_1.Logger.Error(`Building the indexes of schema '${schemaName}' failed; the next registration retries it`, err);
|
|
265
|
+
}
|
|
266
|
+
function BuildIndexes(schemaId, plans) {
|
|
267
|
+
const schemaName = (0, identifier_1.SchemaName)(schemaId);
|
|
268
|
+
const phase = RunIndexPhase(schemaName, plans).catch((err) => ReportIndexFailure(schemaName, err));
|
|
269
|
+
indexPhases.add(phase);
|
|
270
|
+
void phase.finally(() => indexPhases.delete(phase));
|
|
271
|
+
return phase;
|
|
272
|
+
}
|
|
273
|
+
async function StopIndexBuilds() {
|
|
274
|
+
const running = [...indexBuilds];
|
|
275
|
+
for (const build of running) {
|
|
276
|
+
build.isStopping = true;
|
|
277
|
+
}
|
|
278
|
+
await Promise.allSettled(running.map((build) => (0, connection_1.Query)(CANCEL_BACKEND_SQL, [build.pid])));
|
|
279
|
+
await Promise.allSettled(indexPhases);
|
|
280
|
+
}
|
|
281
|
+
(0, connection_1.RegisterBeforeDisconnect)(StopIndexBuilds);
|
|
282
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/implementations/database/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Compiled } from "./sql";
|
|
2
|
+
import type { DecodingContext } from "./context";
|
|
3
|
+
import type { TableShape } from "./fields";
|
|
4
|
+
interface PayloadMember {
|
|
5
|
+
column: string;
|
|
6
|
+
value: Compiled;
|
|
7
|
+
}
|
|
8
|
+
export interface PayloadSplit {
|
|
9
|
+
members: PayloadMember[];
|
|
10
|
+
cleared: string[];
|
|
11
|
+
extra?: Compiled;
|
|
12
|
+
removed: string[];
|
|
13
|
+
identity?: Compiled;
|
|
14
|
+
}
|
|
15
|
+
export declare function MembersByColumn(split: PayloadSplit): Map<string, Compiled>;
|
|
16
|
+
export type IdDisposition = (split: PayloadSplit, value: Compiled) => void;
|
|
17
|
+
export declare const ID_AS_KEY: IdDisposition;
|
|
18
|
+
export declare const ID_AS_ASSERTION: IdDisposition;
|
|
19
|
+
export interface PayloadOptions {
|
|
20
|
+
id: IdDisposition;
|
|
21
|
+
}
|
|
22
|
+
export declare function NoIdSupplied(value: unknown): boolean;
|
|
23
|
+
export declare function SplitPayload(document: Record<string, unknown>, shape: TableShape, context: DecodingContext, options: PayloadOptions): PayloadSplit;
|
|
24
|
+
export {};
|