@rocicorp/zero 0.11.2025011402 → 0.11.2025011801
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/out/{chunk-AII6TS5B.js → chunk-QV5ZN4MA.js} +635 -1834
- package/out/chunk-QV5ZN4MA.js.map +7 -0
- package/out/react.js.map +2 -2
- package/out/shared/src/btree-set.d.ts +34 -0
- package/out/shared/src/btree-set.d.ts.map +1 -0
- package/out/shared/src/btree-set.js +528 -0
- package/out/shared/src/btree-set.js.map +1 -0
- package/out/shared/src/expand.d.ts +3 -0
- package/out/shared/src/expand.d.ts.map +1 -1
- package/out/solid.js +7 -2
- package/out/solid.js.map +2 -2
- package/out/zero-advanced/src/mod.d.ts +1 -1
- package/out/zero-advanced/src/mod.d.ts.map +1 -1
- package/out/zero-cache/src/auth/load-schema.d.ts +1 -1
- package/out/zero-cache/src/auth/load-schema.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +3 -6
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/db/lite-tables.d.ts +14 -1
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js +89 -6
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js +3 -1
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/db/postgres-replica-identity-enum.d.ts +9 -0
- package/out/zero-cache/src/db/postgres-replica-identity-enum.d.ts.map +1 -0
- package/out/zero-cache/src/db/postgres-replica-identity-enum.js +7 -0
- package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +1 -0
- package/out/zero-cache/src/db/specs.d.ts +39 -10
- package/out/zero-cache/src/db/specs.d.ts.map +1 -1
- package/out/zero-cache/src/db/specs.js +8 -1
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +1 -1
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts +2 -2
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +12 -3
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +11 -6
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/multi/config.d.ts +14 -14
- package/out/zero-cache/src/server/multi/config.d.ts.map +1 -1
- package/out/zero-cache/src/server/multi/config.js +24 -2
- package/out/zero-cache/src/server/multi/config.js.map +1 -1
- package/out/zero-cache/src/server/multi/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/multi/main.js +28 -8
- package/out/zero-cache/src/server/multi/main.js.map +1 -1
- package/out/zero-cache/src/server/multi/tenant-dispatcher.d.ts +1 -1
- package/out/zero-cache/src/server/multi/tenant-dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/server/multi/tenant-dispatcher.js +15 -3
- package/out/zero-cache/src/server/multi/tenant-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/replicator.js +2 -3
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +4 -4
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +50 -32
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +45 -25
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +6 -28
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +18 -10
- package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js +14 -7
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +7 -4
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +29 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js +8 -4
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/sync-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/sync-schema.js +1 -0
- package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +10 -10
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +17 -15
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +2 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/mod.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/mod.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/mod.js +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/mod.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +38 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.js +14 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +3 -13
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +3 -10
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +7 -3
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +30 -24
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +6 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +4 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +5 -5
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +3 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +18 -10
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.d.ts.map +1 -1
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js +2 -16
- package/out/zero-cache/src/services/dispatcher/websocket-handoff.js.map +1 -1
- package/out/zero-cache/src/services/http-service.d.ts +1 -1
- package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/http-service.js +1 -0
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +6 -2
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +15 -5
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +4 -2
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +20 -51
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +0 -5
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +18 -35
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/types/processes.d.ts.map +1 -1
- package/out/zero-cache/src/types/processes.js +17 -2
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
- package/out/zero-cache/src/types/row-key.js +7 -1
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/ws.d.ts +4 -0
- package/out/zero-cache/src/types/ws.d.ts.map +1 -0
- package/out/zero-cache/src/types/ws.js +19 -0
- package/out/zero-cache/src/types/ws.js.map +1 -0
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.d.ts +3 -4
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.d.ts +2 -2
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +3 -3
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +1 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/mod.d.ts +5 -4
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/use-query.d.ts +6 -5
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.d.ts +50 -0
- package/out/zero-schema/src/builder/relationship-builder.d.ts.map +1 -0
- package/out/zero-schema/src/builder/relationship-builder.js +24 -0
- package/out/zero-schema/src/builder/relationship-builder.js.map +1 -0
- package/out/zero-schema/src/builder/schema-builder.d.ts +40 -0
- package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -0
- package/out/zero-schema/src/builder/schema-builder.js +51 -0
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -0
- package/out/zero-schema/src/builder/table-builder.d.ts +69 -0
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -0
- package/out/zero-schema/src/builder/table-builder.js +102 -0
- package/out/zero-schema/src/builder/table-builder.js.map +1 -0
- package/out/zero-schema/src/mod.d.ts +2 -2
- package/out/zero-schema/src/mod.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.d.ts +11 -12
- package/out/zero-schema/src/permissions.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.d.ts +2 -4
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.js +12 -61
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-schema/src/table-schema.d.ts +28 -53
- package/out/zero-schema/src/table-schema.d.ts.map +1 -1
- package/out/zero-schema/src/table-schema.js +6 -13
- package/out/zero-schema/src/table-schema.js.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +4 -3
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/use-query.d.ts +5 -4
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero.js +17 -7
- package/out/zql/src/ivm/exists.d.ts +1 -1
- package/out/zql/src/ivm/exists.d.ts.map +1 -1
- package/out/zql/src/ivm/exists.js +3 -3
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.d.ts +1 -1
- package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-in.js +3 -2
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/filter.d.ts +1 -1
- package/out/zql/src/ivm/filter.d.ts.map +1 -1
- package/out/zql/src/ivm/filter.js +3 -3
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/join.d.ts +1 -1
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +2 -3
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/memory-source.js +8 -10
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/memory-storage.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.d.ts +5 -0
- package/out/zql/src/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.js +9 -0
- package/out/zql/src/ivm/operator.js.map +1 -1
- package/out/zql/src/ivm/skip.d.ts +1 -1
- package/out/zql/src/ivm/skip.d.ts.map +1 -1
- package/out/zql/src/ivm/skip.js +2 -3
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/take.d.ts +1 -1
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +2 -3
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/view.d.ts +3 -3
- package/out/zql/src/ivm/view.d.ts.map +1 -1
- package/out/zql/src/query/auth-query.d.ts +9 -10
- package/out/zql/src/query/auth-query.d.ts.map +1 -1
- package/out/zql/src/query/auth-query.js +6 -7
- package/out/zql/src/query/auth-query.js.map +1 -1
- package/out/zql/src/query/expression.d.ts +11 -13
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js +1 -1
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +26 -25
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +76 -52
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internal.d.ts +5 -5
- package/out/zql/src/query/query-internal.d.ts.map +1 -1
- package/out/zql/src/query/query.d.ts +37 -80
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/query.js +0 -1
- package/out/zql/src/query/query.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +33 -11
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +4 -4
- package/out/btree/b+tree.d.ts +0 -471
- package/out/btree/b+tree.d.ts.map +0 -1
- package/out/btree/b+tree.js +0 -1708
- package/out/btree/b+tree.js.map +0 -1
- package/out/btree/interfaces.d.ts +0 -270
- package/out/btree/interfaces.d.ts.map +0 -1
- package/out/btree/interfaces.js +0 -3
- package/out/btree/interfaces.js.map +0 -1
- package/out/btree/src/mod.d.ts +0 -2
- package/out/btree/src/mod.d.ts.map +0 -1
- package/out/btree/src/mod.js +0 -2
- package/out/btree/src/mod.js.map +0 -1
- package/out/chunk-AII6TS5B.js.map +0 -7
- package/out/shared/src/sorted-entries.d.ts +0 -2
- package/out/shared/src/sorted-entries.d.ts.map +0 -1
- package/out/shared/src/sorted-entries.js +0 -6
- package/out/shared/src/sorted-entries.js.map +0 -1
- package/out/zero-cache/src/db/queries.d.ts +0 -24
- package/out/zero-cache/src/db/queries.d.ts.map +0 -1
- package/out/zero-cache/src/db/queries.js +0 -60
- package/out/zero-cache/src/db/queries.js.map +0 -1
- package/out/zero-schema/src/column.d.ts +0 -79
- package/out/zero-schema/src/column.d.ts.map +0 -1
- package/out/zero-schema/src/normalize-table-schema.d.ts +0 -51
- package/out/zero-schema/src/normalize-table-schema.d.ts.map +0 -1
- package/out/zero-schema/src/normalize-table-schema.js +0 -122
- package/out/zero-schema/src/normalize-table-schema.js.map +0 -1
- package/out/zero-schema/src/normalized-schema.d.ts +0 -22
- package/out/zero-schema/src/normalized-schema.d.ts.map +0 -1
- package/out/zero-schema/src/normalized-schema.js +0 -48
- package/out/zero-schema/src/normalized-schema.js.map +0 -1
- package/out/zero-schema/src/schema.d.ts +0 -9
- package/out/zero-schema/src/schema.d.ts.map +0 -1
- package/out/zero-schema/src/schema.js +0 -9
- package/out/zero-schema/src/schema.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getVersionHistory, runSchemaMigrations, } from '../../../../db/migration.js';
|
|
2
2
|
import { AutoResetSignal } from '../../../change-streamer/schema/tables.js';
|
|
3
|
-
import { getPublicationInfo } from './published.js';
|
|
4
3
|
import { dropShard, setupTablesAndReplication, unescapedSchema, } from './shard.js';
|
|
5
4
|
/**
|
|
6
5
|
* Initializes a shard for initial sync.
|
|
@@ -27,34 +26,13 @@ async function runShardMigrations(lc, db, shardConfig) {
|
|
|
27
26
|
minSafeVersion: 1,
|
|
28
27
|
};
|
|
29
28
|
const schemaVersionMigrationMap = {
|
|
30
|
-
|
|
29
|
+
3: {
|
|
30
|
+
migrateSchema: () => {
|
|
31
|
+
throw new AutoResetSignal('resetting to upgrade shard schema');
|
|
32
|
+
},
|
|
33
|
+
minSafeVersion: 3,
|
|
34
|
+
},
|
|
31
35
|
};
|
|
32
36
|
await runSchemaMigrations(lc, `upstream-shard-${shardConfig.id}`, unescapedSchema(shardConfig.id), db, setupMigration, schemaVersionMigrationMap);
|
|
33
37
|
}
|
|
34
|
-
// v1 required superuser / event trigger installation.
|
|
35
|
-
// Therefore, to migrate from v1 to v2:
|
|
36
|
-
//
|
|
37
|
-
// - Add the "ddlDetection" and "initialSchema" columns to "shardConfig"
|
|
38
|
-
// - Set "ddlDetection" to true
|
|
39
|
-
// - Populate the "initialSchema" to the current published schema
|
|
40
|
-
//
|
|
41
|
-
// The last step technically may not match the "initial" schema, but
|
|
42
|
-
// currently it is only used for "ddlDetection = false" setups, so
|
|
43
|
-
// it does not matter.
|
|
44
|
-
async function migrateV1toV2(tx, shardID) {
|
|
45
|
-
const s = unescapedSchema(shardID);
|
|
46
|
-
const [{ publications }] = await tx `
|
|
47
|
-
SELECT publications FROM ${tx(s)}."shardConfig"
|
|
48
|
-
`;
|
|
49
|
-
const { tables, indexes } = await getPublicationInfo(tx, publications);
|
|
50
|
-
const publishedSchema = { tables, indexes };
|
|
51
|
-
void tx `
|
|
52
|
-
ALTER TABLE ${tx(s)}."shardConfig" ADD "ddlDetection" BOOL`.execute();
|
|
53
|
-
void tx `
|
|
54
|
-
ALTER TABLE ${tx(s)}."shardConfig" ADD "initialSchema" JSON`.execute();
|
|
55
|
-
await tx `
|
|
56
|
-
UPDATE ${tx(s)}."shardConfig"
|
|
57
|
-
SET "ddlDetection" = true,
|
|
58
|
-
"initialSchema" = ${publishedSchema}`;
|
|
59
|
-
}
|
|
60
38
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,eAAe,EAAC,MAAM,2CAA2C,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,eAAe,EAAC,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAc,EACd,EAAc,EACd,WAAwB;IAExB,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAc,EACd,EAAc,EACd,WAAwB;IAExB,MAAM,EAAC,EAAE,EAAC,GAAG,WAAW,CAAC;IACzB,MAAM,EAAC,aAAa,EAAC,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,EAAc,EACd,EAAc,EACd,WAAwB;IAExB,MAAM,cAAc,GAAc;QAChC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,yBAAyB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC;QACzE,cAAc,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,yBAAyB,GAA4B;QACzD,CAAC,EAAE;YACD,aAAa,EAAE,GAAG,EAAE;gBAClB,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;YACjE,CAAC;YACD,cAAc,EAAE,CAAC;SAClB;KACF,CAAC;IAEF,MAAM,mBAAmB,CACvB,EAAE,EACF,kBAAkB,WAAW,CAAC,EAAE,EAAE,EAClC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAC/B,EAAE,EACF,cAAc,EACd,yBAAyB,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -6,20 +6,20 @@ export declare const publishedSchema: v.ObjectType<Omit<{
|
|
|
6
6
|
tables: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
7
7
|
name: v.Type<string>;
|
|
8
8
|
columns: v.Type<Record<string, {
|
|
9
|
-
pgTypeClass?: "e" | "
|
|
9
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
10
10
|
characterMaximumLength?: number | null | undefined;
|
|
11
11
|
notNull?: boolean | null | undefined;
|
|
12
12
|
dflt?: string | null | undefined;
|
|
13
13
|
pos: number;
|
|
14
14
|
dataType: string;
|
|
15
15
|
}>>;
|
|
16
|
-
primaryKey: v.
|
|
16
|
+
primaryKey: v.Optional<string[]>;
|
|
17
17
|
}, "schema"> & {
|
|
18
18
|
schema: v.Type<string>;
|
|
19
|
-
}, "publications" | "oid" | "columns"> & {
|
|
19
|
+
}, "publications" | "oid" | "columns" | "replicaIdentity"> & {
|
|
20
20
|
oid: v.Type<number>;
|
|
21
21
|
columns: v.Type<Record<string, {
|
|
22
|
-
pgTypeClass?: "e" | "
|
|
22
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
23
23
|
characterMaximumLength?: number | null | undefined;
|
|
24
24
|
notNull?: boolean | null | undefined;
|
|
25
25
|
dflt?: string | null | undefined;
|
|
@@ -27,18 +27,22 @@ export declare const publishedSchema: v.ObjectType<Omit<{
|
|
|
27
27
|
dataType: string;
|
|
28
28
|
typeOID: number;
|
|
29
29
|
}>>;
|
|
30
|
+
replicaIdentity: v.Optional<"n" | "d" | "f" | "i">;
|
|
30
31
|
publications: v.Type<Record<string, {
|
|
31
32
|
rowFilter: string | null;
|
|
32
33
|
}>>;
|
|
33
34
|
}, undefined>>;
|
|
34
35
|
}, "indexes"> & {
|
|
35
|
-
indexes: v.ArrayType<v.ObjectType<Omit<{
|
|
36
|
+
indexes: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
36
37
|
name: v.Type<string>;
|
|
37
38
|
tableName: v.Type<string>;
|
|
38
39
|
unique: v.Type<boolean>;
|
|
39
40
|
columns: v.Type<Record<string, "ASC" | "DESC">>;
|
|
40
41
|
}, "schema"> & {
|
|
41
42
|
schema: v.Type<string>;
|
|
43
|
+
}, "isReplicaIdentity" | "isImmediate"> & {
|
|
44
|
+
isReplicaIdentity: v.Optional<boolean>;
|
|
45
|
+
isImmediate: v.Optional<boolean>;
|
|
42
46
|
}, undefined>>;
|
|
43
47
|
}, undefined>;
|
|
44
48
|
export type PublishedSchema = v.Infer<typeof publishedSchema>;
|
|
@@ -46,20 +50,20 @@ declare const publicationInfoSchema: v.ObjectType<Omit<Omit<{
|
|
|
46
50
|
tables: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
47
51
|
name: v.Type<string>;
|
|
48
52
|
columns: v.Type<Record<string, {
|
|
49
|
-
pgTypeClass?: "e" | "
|
|
53
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
50
54
|
characterMaximumLength?: number | null | undefined;
|
|
51
55
|
notNull?: boolean | null | undefined;
|
|
52
56
|
dflt?: string | null | undefined;
|
|
53
57
|
pos: number;
|
|
54
58
|
dataType: string;
|
|
55
59
|
}>>;
|
|
56
|
-
primaryKey: v.
|
|
60
|
+
primaryKey: v.Optional<string[]>;
|
|
57
61
|
}, "schema"> & {
|
|
58
62
|
schema: v.Type<string>;
|
|
59
|
-
}, "publications" | "oid" | "columns"> & {
|
|
63
|
+
}, "publications" | "oid" | "columns" | "replicaIdentity"> & {
|
|
60
64
|
oid: v.Type<number>;
|
|
61
65
|
columns: v.Type<Record<string, {
|
|
62
|
-
pgTypeClass?: "e" | "
|
|
66
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
63
67
|
characterMaximumLength?: number | null | undefined;
|
|
64
68
|
notNull?: boolean | null | undefined;
|
|
65
69
|
dflt?: string | null | undefined;
|
|
@@ -67,18 +71,22 @@ declare const publicationInfoSchema: v.ObjectType<Omit<Omit<{
|
|
|
67
71
|
dataType: string;
|
|
68
72
|
typeOID: number;
|
|
69
73
|
}>>;
|
|
74
|
+
replicaIdentity: v.Optional<"n" | "d" | "f" | "i">;
|
|
70
75
|
publications: v.Type<Record<string, {
|
|
71
76
|
rowFilter: string | null;
|
|
72
77
|
}>>;
|
|
73
78
|
}, undefined>>;
|
|
74
79
|
}, "indexes"> & {
|
|
75
|
-
indexes: v.ArrayType<v.ObjectType<Omit<{
|
|
80
|
+
indexes: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
76
81
|
name: v.Type<string>;
|
|
77
82
|
tableName: v.Type<string>;
|
|
78
83
|
unique: v.Type<boolean>;
|
|
79
84
|
columns: v.Type<Record<string, "ASC" | "DESC">>;
|
|
80
85
|
}, "schema"> & {
|
|
81
86
|
schema: v.Type<string>;
|
|
87
|
+
}, "isReplicaIdentity" | "isImmediate"> & {
|
|
88
|
+
isReplicaIdentity: v.Optional<boolean>;
|
|
89
|
+
isImmediate: v.Optional<boolean>;
|
|
82
90
|
}, undefined>>;
|
|
83
91
|
}, "publications"> & {
|
|
84
92
|
publications: v.ArrayType<v.ObjectType<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/published.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;AAG5D,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/published.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;AAG5D,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAuEzD;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,UA6D3D;AAKD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAE3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAY9D,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAEzB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,QAAQ,CAAC,GAAG,EACjB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,eAAe,CAAC,CAiD1B"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { literal } from 'pg-format';
|
|
2
2
|
import { equals } from '../../../../../../shared/src/set-utils.js';
|
|
3
3
|
import * as v from '../../../../../../shared/src/valita.js';
|
|
4
|
-
import {
|
|
4
|
+
import { publishedIndexSpec, publishedTableSpec } from '../../../../db/specs.js';
|
|
5
5
|
export function publishedTableQuery(publications) {
|
|
6
6
|
return `
|
|
7
7
|
WITH published_columns AS (SELECT
|
|
8
8
|
pc.oid::int8 AS "oid",
|
|
9
9
|
nspname AS "schema",
|
|
10
10
|
pc.relname AS "name",
|
|
11
|
+
pc.relreplident AS "replicaIdentity",
|
|
11
12
|
attnum AS "pos",
|
|
12
13
|
attname AS "col",
|
|
13
14
|
pt.typname AS "type",
|
|
@@ -37,6 +38,7 @@ tables AS (SELECT json_build_object(
|
|
|
37
38
|
'oid', "oid",
|
|
38
39
|
'schema', "schema",
|
|
39
40
|
'name', "name",
|
|
41
|
+
'replicaIdentity', "replicaIdentity",
|
|
40
42
|
'columns', json_object_agg(
|
|
41
43
|
DISTINCT
|
|
42
44
|
col,
|
|
@@ -67,7 +69,7 @@ tables AS (SELECT json_build_object(
|
|
|
67
69
|
"publication",
|
|
68
70
|
jsonb_build_object('rowFilter', "rowFilter")
|
|
69
71
|
)
|
|
70
|
-
) AS "table" FROM published_columns GROUP BY "schema", "name", "oid")
|
|
72
|
+
) AS "table" FROM published_columns GROUP BY "schema", "name", "oid", "replicaIdentity")
|
|
71
73
|
|
|
72
74
|
SELECT COALESCE(json_agg("table"), '[]'::json) as "tables" FROM tables
|
|
73
75
|
`;
|
|
@@ -92,7 +94,9 @@ export function indexDefinitionsQuery(publications) {
|
|
|
92
94
|
pg_indexes.indexname as "name",
|
|
93
95
|
index_column.name as "col",
|
|
94
96
|
CASE WHEN pg_index.indoption[index_column.pos-1] & 1 = 1 THEN 'DESC' ELSE 'ASC' END as "dir",
|
|
95
|
-
pg_index.indisunique as "unique"
|
|
97
|
+
pg_index.indisunique as "unique",
|
|
98
|
+
pg_index.indisreplident as "isReplicaIdentity",
|
|
99
|
+
pg_index.indimmediate as "isImmediate"
|
|
96
100
|
FROM pg_indexes
|
|
97
101
|
JOIN pg_namespace ON pg_indexes.schemaname = pg_namespace.nspname
|
|
98
102
|
JOIN pg_class pc ON
|
|
@@ -109,8 +113,9 @@ export function indexDefinitionsQuery(publications) {
|
|
|
109
113
|
) AS index_column ON true
|
|
110
114
|
LEFT JOIN pg_constraint ON pg_constraint.conindid = pc.oid
|
|
111
115
|
WHERE pb.pubname IN (${literal(publications)})
|
|
112
|
-
AND
|
|
113
|
-
AND
|
|
116
|
+
AND pg_index.indexprs IS NULL
|
|
117
|
+
AND pg_index.indpred IS NULL
|
|
118
|
+
AND (pg_constraint.contype IS NULL OR pg_constraint.contype IN ('p', 'u'))
|
|
114
119
|
ORDER BY
|
|
115
120
|
pg_indexes.schemaname,
|
|
116
121
|
pg_indexes.tablename,
|
|
@@ -122,15 +127,17 @@ export function indexDefinitionsQuery(publications) {
|
|
|
122
127
|
'tableName', "tableName",
|
|
123
128
|
'name', "name",
|
|
124
129
|
'unique', "unique",
|
|
130
|
+
'isReplicaIdentity', "isReplicaIdentity",
|
|
131
|
+
'isImmediate', "isImmediate",
|
|
125
132
|
'columns', json_object_agg(DISTINCT "col", "dir")
|
|
126
133
|
) AS index FROM indexed_columns
|
|
127
|
-
GROUP BY "schema", "tableName", "name", "unique")
|
|
134
|
+
GROUP BY "schema", "tableName", "name", "unique", "isReplicaIdentity", "isImmediate")
|
|
128
135
|
|
|
129
136
|
SELECT COALESCE(json_agg("index"), '[]'::json) as "indexes" FROM indexes
|
|
130
137
|
`;
|
|
131
138
|
}
|
|
132
139
|
const publishedTablesSchema = v.object({ tables: v.array(publishedTableSpec) });
|
|
133
|
-
const publishedIndexesSchema = v.object({ indexes: v.array(
|
|
140
|
+
const publishedIndexesSchema = v.object({ indexes: v.array(publishedIndexSpec) });
|
|
134
141
|
export const publishedSchema = publishedTablesSchema.extend(publishedIndexesSchema.shape);
|
|
135
142
|
const publicationSchema = v.object({
|
|
136
143
|
pubname: v.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"published.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/published.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,OAAO,EAAC,MAAM,EAAC,MAAM,2CAA2C,CAAC;AACjE,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;AAC5D,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"published.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/published.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,12 +15,13 @@ declare const internalShardConfigSchema: v.ObjectType<{
|
|
|
15
15
|
ddlDetection: v.Type<boolean>;
|
|
16
16
|
initialSchema: v.Type<{
|
|
17
17
|
tables: {
|
|
18
|
+
primaryKey?: string[] | undefined;
|
|
19
|
+
replicaIdentity?: "n" | "d" | "f" | "i" | undefined;
|
|
18
20
|
name: string;
|
|
19
21
|
schema: string;
|
|
20
|
-
primaryKey: string[];
|
|
21
22
|
oid: number;
|
|
22
23
|
columns: Record<string, {
|
|
23
|
-
pgTypeClass?: "e" | "
|
|
24
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
24
25
|
characterMaximumLength?: number | null | undefined;
|
|
25
26
|
notNull?: boolean | null | undefined;
|
|
26
27
|
dflt?: string | null | undefined;
|
|
@@ -33,11 +34,13 @@ declare const internalShardConfigSchema: v.ObjectType<{
|
|
|
33
34
|
}>;
|
|
34
35
|
}[];
|
|
35
36
|
indexes: {
|
|
37
|
+
isReplicaIdentity?: boolean | undefined;
|
|
38
|
+
isImmediate?: boolean | undefined;
|
|
36
39
|
name: string;
|
|
37
|
-
|
|
40
|
+
schema: string;
|
|
38
41
|
columns: Record<string, "ASC" | "DESC">;
|
|
42
|
+
tableName: string;
|
|
39
43
|
unique: boolean;
|
|
40
|
-
schema: string;
|
|
41
44
|
}[];
|
|
42
45
|
} | null>;
|
|
43
46
|
}, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;AAE5D,OAAO,KAAK,EAAC,UAAU,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAE7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAIxB,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,UACtB,MAAM,YACrB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,UAExC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,UAE9C;AAED,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,2BAA2B,WAAW,CAAC;AAOpD,eAAO,MAAM,YAAY,0nBAgBxB,CAAC;AA6CF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAI7B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAc5E,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EACf,EAAC,MAAM,EAAE,OAAO,EAAC,EAAE,eAAe,iBAKnC;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAO9B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,mBAAmB,EACvB,EAAC,EAAE,EAAE,YAAY,EAAC,EAAE,WAAW,iBA8DhC;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,QAkB3B"}
|
|
@@ -3,9 +3,10 @@ import { literal } from 'pg-format';
|
|
|
3
3
|
import postgres from 'postgres';
|
|
4
4
|
import { assert } from '../../../../../../shared/src/asserts.js';
|
|
5
5
|
import * as v from '../../../../../../shared/src/valita.js';
|
|
6
|
+
import { Default } from '../../../../db/postgres-replica-identity-enum.js';
|
|
6
7
|
import { id } from '../../../../types/sql.js';
|
|
7
8
|
import { createEventTriggerStatements } from './ddl.js';
|
|
8
|
-
import { publishedSchema, } from './published.js';
|
|
9
|
+
import { getPublicationInfo, publishedSchema, } from './published.js';
|
|
9
10
|
import { validate } from './validation.js';
|
|
10
11
|
// Creates a function that appends `_SHARD_ID` to the input.
|
|
11
12
|
export function append(shardID) {
|
|
@@ -152,6 +153,7 @@ export async function setupTablesAndReplication(lc, tx, { id, publications }) {
|
|
|
152
153
|
}
|
|
153
154
|
// Setup the global tables and shard tables / publications.
|
|
154
155
|
await tx.unsafe(GLOBAL_SETUP + shardSetup(id, allPublications));
|
|
156
|
+
await setReplicaIdentityForTablesWithoutPrimaryKeys(lc, tx, allPublications);
|
|
155
157
|
try {
|
|
156
158
|
await tx.savepoint(sub => sub.unsafe(triggerSetup(id, allPublications)));
|
|
157
159
|
}
|
|
@@ -180,4 +182,30 @@ export function validatePublications(lc, shardID, published) {
|
|
|
180
182
|
});
|
|
181
183
|
published.tables.forEach(table => validate(lc, shardID, table));
|
|
182
184
|
}
|
|
185
|
+
async function setReplicaIdentityForTablesWithoutPrimaryKeys(lc, db, publications) {
|
|
186
|
+
const pubs = await getPublicationInfo(db, publications);
|
|
187
|
+
for (const table of pubs.tables) {
|
|
188
|
+
if (!table.primaryKey?.length && table.replicaIdentity === Default) {
|
|
189
|
+
// Look for an index that can serve as the REPLICA IDENTITY USING INDEX. It must be:
|
|
190
|
+
// - UNIQUE
|
|
191
|
+
// - NOT NULL columns
|
|
192
|
+
// - not deferrable (i.e. isImmediate)
|
|
193
|
+
// - not partial (are already filtered out)
|
|
194
|
+
//
|
|
195
|
+
// https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY
|
|
196
|
+
const { schema, name: tableName } = table;
|
|
197
|
+
for (const { columns, name: indexName } of pubs.indexes.filter(idx => idx.schema === schema &&
|
|
198
|
+
idx.tableName === tableName &&
|
|
199
|
+
idx.unique &&
|
|
200
|
+
idx.isImmediate)) {
|
|
201
|
+
if (Object.keys(columns).some(col => !table.columns[col].notNull)) {
|
|
202
|
+
continue; // Only indexes with all NOT NULL columns are suitable.
|
|
203
|
+
}
|
|
204
|
+
lc.info?.(`setting "${indexName}" as the REPLICA IDENTITY for "${tableName}"`);
|
|
205
|
+
await db `ALTER TABLE ${db(schema)}.${db(tableName)} REPLICA IDENTITY USING INDEX ${db(indexName)}`;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
183
211
|
//# sourceMappingURL=shard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,MAAM,EAAC,MAAM,yCAAyC,CAAC;AAC/D,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function validate(lc: LogContext, shardID: string, table:
|
|
2
|
+
import type { PublishedTableSpec } from '../../../../db/specs.js';
|
|
3
|
+
export declare function validate(lc: LogContext, shardID: string, table: PublishedTableSpec): void;
|
|
4
4
|
export declare class UnsupportedTableSchemaError extends Error {
|
|
5
5
|
readonly name = "UnsupportedTableSchemaError";
|
|
6
6
|
constructor(msg: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAMhE,wBAAgB,QAAQ,CACtB,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,QAmC1B;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,iCAAiC;gBAElC,GAAG,EAAE,MAAM;CAGxB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { warnIfDataTypeSupported } from '../../../../db/pg-to-lite.js';
|
|
1
|
+
import { mapPostgresToLite, warnIfDataTypeSupported, } from '../../../../db/pg-to-lite.js';
|
|
2
|
+
import { Default } from '../../../../db/postgres-replica-identity-enum.js';
|
|
2
3
|
import { ZERO_VERSION_COLUMN_NAME } from '../../../replicator/schema/replication-state.js';
|
|
3
4
|
import { unescapedSchema } from './shard.js';
|
|
4
5
|
const ALLOWED_IDENTIFIER_CHARS = /^[A-Za-z_]+[A-Za-z0-9_-]*$/;
|
|
@@ -11,13 +12,16 @@ export function validate(lc, shardID, table) {
|
|
|
11
12
|
if (ZERO_VERSION_COLUMN_NAME in table.columns) {
|
|
12
13
|
throw new UnsupportedTableSchemaError(`Table "${table.name}" uses reserved column name "${ZERO_VERSION_COLUMN_NAME}"`);
|
|
13
14
|
}
|
|
14
|
-
if (table.primaryKey
|
|
15
|
-
|
|
15
|
+
if (!table.primaryKey?.length && table.replicaIdentity === Default) {
|
|
16
|
+
lc.warn?.(`\n\n\n` +
|
|
17
|
+
`Table "${table.name}" needs a primary key in order to be synced to clients. ` +
|
|
18
|
+
`Add one with 'ALTER TABLE "${table.name}" ADD PRIMARY KEY (...)'.` +
|
|
19
|
+
`\n\n\n`);
|
|
16
20
|
}
|
|
17
21
|
if (!ALLOWED_IDENTIFIER_CHARS.test(table.name)) {
|
|
18
22
|
throw new UnsupportedTableSchemaError(`Table "${table.name}" has invalid characters.`);
|
|
19
23
|
}
|
|
20
|
-
for (const [col, spec] of Object.entries(table.columns)) {
|
|
24
|
+
for (const [col, spec] of Object.entries(mapPostgresToLite(table).columns)) {
|
|
21
25
|
if (!ALLOWED_IDENTIFIER_CHARS.test(col)) {
|
|
22
26
|
throw new UnsupportedTableSchemaError(`Column "${col}" in table "${table.name}" has invalid characters.`);
|
|
23
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/validation.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/validation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAC,OAAO,EAAC,MAAM,kDAAkD,CAAC;AAEzE,OAAO,EAAC,wBAAwB,EAAC,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAE9D,MAAM,UAAU,QAAQ,CACtB,EAAc,EACd,OAAe,EACf,KAAyB;IAEzB,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,wFAAwF;QACxF,MAAM,IAAI,2BAA2B,CACnC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,IAAI,wBAAwB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,IAAI,2BAA2B,CACnC,UAAU,KAAK,CAAC,IAAI,gCAAgC,wBAAwB,GAAG,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO,EAAE,CAAC;QACnE,EAAE,CAAC,IAAI,EAAE,CACP,QAAQ;YACN,UAAU,KAAK,CAAC,IAAI,0DAA0D;YAC9E,8BAA8B,KAAK,CAAC,IAAI,2BAA2B;YACnE,QAAQ,CACX,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,2BAA2B,CACnC,UAAU,KAAK,CAAC,IAAI,2BAA2B,CAChD,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,2BAA2B,CACnC,WAAW,GAAG,eAAe,KAAK,CAAC,IAAI,2BAA2B,CACnE,CAAC;QACJ,CAAC;QACD,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,GAAG,6BAA6B,CAAC;IAE9C,YAAY,GAAW;QACrB,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-schema.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-source/pg/sync-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAQjD,OAAO,EAAc,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAEnD,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sync-schema.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-source/pg/sync-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAQjD,OAAO,EAAc,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAEnD,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
|
@@ -12,6 +12,7 @@ export async function initSyncSchema(log, debugName, shard, dbPath, upstreamURI,
|
|
|
12
12
|
migrateSchema: () => {
|
|
13
13
|
throw new AutoResetSignal('resetting replica at obsolete v1');
|
|
14
14
|
},
|
|
15
|
+
minSafeVersion: 2,
|
|
15
16
|
},
|
|
16
17
|
};
|
|
17
18
|
await runSchemaMigrations(log, debugName, dbPath, setupMigration, schemaVersionMigrationMap);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-schema.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-source/pg/sync-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,GAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAC,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAe,EACf,SAAiB,EACjB,KAAkB,EAClB,MAAc,EACd,WAAmB,EACnB,WAA+B;IAE/B,MAAM,cAAc,GAAc;QAChC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CACzB,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC;QACvD,cAAc,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,yBAAyB,GAA4B;QACzD,oEAAoE;QACpE,CAAC,EAAE;YACD,aAAa,EAAE,GAAG,EAAE;gBAClB,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;YAChE,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-schema.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-source/pg/sync-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,GAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAC,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAe,EACf,SAAiB,EACjB,KAAkB,EAClB,MAAc,EACd,WAAmB,EACnB,WAA+B;IAE/B,MAAM,cAAc,GAAc;QAChC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CACzB,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC;QACvD,cAAc,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,yBAAyB,GAA4B;QACzD,oEAAoE;QACpE,CAAC,EAAE;YACD,aAAa,EAAE,GAAG,EAAE;gBAClB,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;YAChE,CAAC;YACD,cAAc,EAAE,CAAC;SAClB;KACF,CAAC;IAEF,MAAM,mBAAmB,CACvB,GAAG,EACH,SAAS,EACT,MAAM,EACN,cAAc,EACd,yBAAyB,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -78,14 +78,14 @@ export declare const createTableSchema: v.ObjectType<{
|
|
|
78
78
|
spec: v.ObjectType<Omit<{
|
|
79
79
|
name: v.Type<string>;
|
|
80
80
|
columns: v.Type<Record<string, {
|
|
81
|
-
pgTypeClass?: "e" | "
|
|
81
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
82
82
|
characterMaximumLength?: number | null | undefined;
|
|
83
83
|
notNull?: boolean | null | undefined;
|
|
84
84
|
dflt?: string | null | undefined;
|
|
85
85
|
pos: number;
|
|
86
86
|
dataType: string;
|
|
87
87
|
}>>;
|
|
88
|
-
primaryKey: v.
|
|
88
|
+
primaryKey: v.Optional<string[]>;
|
|
89
89
|
}, "schema"> & {
|
|
90
90
|
schema: v.Type<string>;
|
|
91
91
|
}, undefined>;
|
|
@@ -112,7 +112,7 @@ export declare const addColumnSchema: v.ObjectType<{
|
|
|
112
112
|
spec: v.ObjectType<{
|
|
113
113
|
pos: v.Type<number>;
|
|
114
114
|
dataType: v.Type<string>;
|
|
115
|
-
pgTypeClass: v.Optional<"e" | "
|
|
115
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
116
116
|
characterMaximumLength: v.Optional<number | null>;
|
|
117
117
|
notNull: v.Optional<boolean | null>;
|
|
118
118
|
dflt: v.Optional<string | null>;
|
|
@@ -130,7 +130,7 @@ export declare const updateColumnSchema: v.ObjectType<{
|
|
|
130
130
|
spec: v.ObjectType<{
|
|
131
131
|
pos: v.Type<number>;
|
|
132
132
|
dataType: v.Type<string>;
|
|
133
|
-
pgTypeClass: v.Optional<"e" | "
|
|
133
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
134
134
|
characterMaximumLength: v.Optional<number | null>;
|
|
135
135
|
notNull: v.Optional<boolean | null>;
|
|
136
136
|
dflt: v.Optional<string | null>;
|
|
@@ -141,7 +141,7 @@ export declare const updateColumnSchema: v.ObjectType<{
|
|
|
141
141
|
spec: v.ObjectType<{
|
|
142
142
|
pos: v.Type<number>;
|
|
143
143
|
dataType: v.Type<string>;
|
|
144
|
-
pgTypeClass: v.Optional<"e" | "
|
|
144
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
145
145
|
characterMaximumLength: v.Optional<number | null>;
|
|
146
146
|
notNull: v.Optional<boolean | null>;
|
|
147
147
|
dflt: v.Optional<string | null>;
|
|
@@ -243,14 +243,14 @@ export declare const dataChangeSchema: v.UnionType<[v.ObjectType<{
|
|
|
243
243
|
spec: v.ObjectType<Omit<{
|
|
244
244
|
name: v.Type<string>;
|
|
245
245
|
columns: v.Type<Record<string, {
|
|
246
|
-
pgTypeClass?: "e" | "
|
|
246
|
+
pgTypeClass?: "e" | "d" | "b" | "c" | "p" | "r" | "m" | undefined;
|
|
247
247
|
characterMaximumLength?: number | null | undefined;
|
|
248
248
|
notNull?: boolean | null | undefined;
|
|
249
249
|
dflt?: string | null | undefined;
|
|
250
250
|
pos: number;
|
|
251
251
|
dataType: string;
|
|
252
252
|
}>>;
|
|
253
|
-
primaryKey: v.
|
|
253
|
+
primaryKey: v.Optional<string[]>;
|
|
254
254
|
}, "schema"> & {
|
|
255
255
|
schema: v.Type<string>;
|
|
256
256
|
}, undefined>;
|
|
@@ -275,7 +275,7 @@ export declare const dataChangeSchema: v.UnionType<[v.ObjectType<{
|
|
|
275
275
|
spec: v.ObjectType<{
|
|
276
276
|
pos: v.Type<number>;
|
|
277
277
|
dataType: v.Type<string>;
|
|
278
|
-
pgTypeClass: v.Optional<"e" | "
|
|
278
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
279
279
|
characterMaximumLength: v.Optional<number | null>;
|
|
280
280
|
notNull: v.Optional<boolean | null>;
|
|
281
281
|
dflt: v.Optional<string | null>;
|
|
@@ -292,7 +292,7 @@ export declare const dataChangeSchema: v.UnionType<[v.ObjectType<{
|
|
|
292
292
|
spec: v.ObjectType<{
|
|
293
293
|
pos: v.Type<number>;
|
|
294
294
|
dataType: v.Type<string>;
|
|
295
|
-
pgTypeClass: v.Optional<"e" | "
|
|
295
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
296
296
|
characterMaximumLength: v.Optional<number | null>;
|
|
297
297
|
notNull: v.Optional<boolean | null>;
|
|
298
298
|
dflt: v.Optional<string | null>;
|
|
@@ -303,7 +303,7 @@ export declare const dataChangeSchema: v.UnionType<[v.ObjectType<{
|
|
|
303
303
|
spec: v.ObjectType<{
|
|
304
304
|
pos: v.Type<number>;
|
|
305
305
|
dataType: v.Type<string>;
|
|
306
|
-
pgTypeClass: v.Optional<"e" | "
|
|
306
|
+
pgTypeClass: v.Optional<"e" | "d" | "b" | "c" | "p" | "r" | "m">;
|
|
307
307
|
characterMaximumLength: v.Optional<number | null>;
|
|
308
308
|
notNull: v.Optional<boolean | null>;
|
|
309
309
|
dflt: v.Optional<string | null>;
|