@rocicorp/zero 0.5.2024110200 → 0.6.2024111700
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/{internal.js → advanced.js} +2 -2
- package/out/{chunk-YCMA66NH.js → chunk-5UY46OAF.js} +5 -2
- package/out/{chunk-YCMA66NH.js.map → chunk-5UY46OAF.js.map} +2 -2
- package/out/{chunk-INJ4WJHS.js → chunk-PIFWXXO2.js} +1209 -586
- package/out/chunk-PIFWXXO2.js.map +7 -0
- package/out/react.js.map +2 -2
- package/out/shared/src/browser-env.d.ts +17 -0
- package/out/shared/src/browser-env.d.ts.map +1 -1
- package/out/shared/src/expand.d.ts +7 -0
- package/out/shared/src/expand.d.ts.map +1 -0
- package/out/solid.js +5 -5
- package/out/solid.js.map +2 -2
- package/out/zero-cache/src/auth/load-authorization.d.ts +3 -0
- package/out/zero-cache/src/auth/load-authorization.d.ts.map +1 -0
- package/out/zero-cache/src/auth/load-authorization.js +21 -0
- package/out/zero-cache/src/auth/load-authorization.js.map +1 -0
- package/out/zero-cache/src/config/config.d.ts +112 -0
- package/out/zero-cache/src/config/config.d.ts.map +1 -0
- package/out/zero-cache/src/config/config.js +246 -0
- package/out/zero-cache/src/config/config.js.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +145 -964
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +242 -115
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/delete-lite-db.d.ts +2 -0
- package/out/zero-cache/src/db/delete-lite-db.d.ts.map +1 -0
- package/out/zero-cache/src/db/delete-lite-db.js +7 -0
- package/out/zero-cache/src/db/delete-lite-db.js.map +1 -0
- package/out/zero-cache/src/db/migration.d.ts +1 -0
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +17 -7
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.d.ts +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 +7 -3
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/db/short-lived-client.d.ts +16 -0
- package/out/zero-cache/src/db/short-lived-client.d.ts.map +1 -0
- package/out/zero-cache/src/db/short-lived-client.js +50 -0
- package/out/zero-cache/src/db/short-lived-client.js.map +1 -0
- package/out/zero-cache/src/db/specs.d.ts +12 -3
- package/out/zero-cache/src/db/specs.d.ts.map +1 -1
- package/out/zero-cache/src/db/specs.js +6 -1
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.d.ts +8 -2
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +43 -9
- package/out/zero-cache/src/db/transaction-pool.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 +34 -9
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +2 -3
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/logging.d.ts.map +1 -1
- package/out/zero-cache/src/server/logging.js +2 -15
- package/out/zero-cache/src/server/logging.js.map +1 -1
- package/out/zero-cache/src/server/main.js +28 -10
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +6 -5
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +16 -12
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -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 +2 -3
- 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 +153 -2
- 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 +136 -19
- 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 +17 -9
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js +4 -2
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -0
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +9 -2
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts +10 -0
- package/out/zero-cache/src/services/change-streamer/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js +171 -24
- package/out/zero-cache/src/services/change-streamer/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js +33 -19
- package/out/zero-cache/src/services/change-streamer/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts +62 -39
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js +8 -40
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts +8 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.js +41 -8
- package/out/zero-cache/src/services/change-streamer/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts +83 -13
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js +15 -5
- package/out/zero-cache/src/services/change-streamer/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts +39 -3
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js +67 -36
- package/out/zero-cache/src/services/change-streamer/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/validation.d.ts +8 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/validation.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/validation.js +33 -0
- package/out/zero-cache/src/services/change-streamer/pg/schema/validation.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts +5 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.js +3 -0
- package/out/zero-cache/src/services/change-streamer/schema/change.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +4 -6
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +6 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +19 -4
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +29 -2
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +90 -8
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +1 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +18 -3
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts +5 -3
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.js +20 -5
- package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +6 -5
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +26 -20
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts +7 -6
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.js +10 -18
- package/out/zero-cache/src/services/mutagen/write-authorizer.js.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 +8 -8
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +1 -10
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/running-state.d.ts +6 -1
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/running-state.js +23 -5
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +49 -29
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +2 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/lexi-version.d.ts +3 -2
- package/out/zero-cache/src/types/lexi-version.d.ts.map +1 -1
- package/out/zero-cache/src/types/lexi-version.js +8 -6
- package/out/zero-cache/src/types/lexi-version.js.map +1 -1
- package/out/zero-cache/src/types/processes.d.ts.map +1 -1
- package/out/zero-cache/src/types/processes.js +1 -0
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +2 -4
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +1 -1
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/crud.d.ts +56 -25
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/http-string.d.ts +1 -0
- package/out/zero-client/src/client/http-string.d.ts.map +1 -1
- package/out/zero-client/src/client/log-options.d.ts +2 -1
- package/out/zero-client/src/client/log-options.d.ts.map +1 -1
- package/out/zero-client/src/client/options.d.ts +8 -8
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/protocol-version.d.ts +2 -0
- package/out/zero-client/src/client/protocol-version.d.ts.map +1 -0
- package/out/zero-client/src/client/server-option.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +26 -14
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/mod.d.ts +4 -2
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.d.ts +37 -21
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +21 -6
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.d.ts +16 -8
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +16 -8
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/down.d.ts +16 -8
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +32 -16
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/push.d.ts +18 -18
- package/out/zero-protocol/src/push.d.ts.map +1 -1
- package/out/zero-protocol/src/push.js +5 -5
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.d.ts +24 -12
- package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
- package/out/zero-protocol/src/up.d.ts +18 -10
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-react/src/use-zero.d.ts.map +1 -1
- package/out/zero-schema/src/authorization.d.ts +25 -0
- package/out/zero-schema/src/authorization.d.ts.map +1 -0
- package/out/zero-schema/src/compiled-authorization.d.ts +379 -0
- package/out/zero-schema/src/compiled-authorization.d.ts.map +1 -0
- package/out/zero-schema/src/compiled-authorization.js +15 -0
- package/out/zero-schema/src/compiled-authorization.js.map +1 -0
- package/out/zero-schema/src/mod.d.ts +1 -0
- package/out/zero-schema/src/mod.d.ts.map +1 -1
- package/out/{zero-client/src/client → zero-schema/src}/normalized-schema.d.ts +2 -2
- package/out/zero-schema/src/normalized-schema.d.ts.map +1 -0
- package/out/zero-schema/src/table-schema.d.ts +15 -7
- package/out/zero-schema/src/table-schema.d.ts.map +1 -1
- package/out/zero-schema/src/table-schema.js.map +1 -1
- package/out/zero.js +10 -14
- package/out/zql/src/builder/builder.d.ts +1 -1
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +136 -30
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/filter.d.ts +2 -1
- package/out/zql/src/builder/filter.d.ts.map +1 -1
- package/out/zql/src/builder/filter.js +18 -0
- package/out/zql/src/builder/filter.js.map +1 -1
- package/out/zql/src/builder/like.d.ts +2 -2
- package/out/zql/src/builder/like.d.ts.map +1 -1
- package/out/zql/src/ivm/change.d.ts +1 -0
- package/out/zql/src/ivm/change.d.ts.map +1 -1
- package/out/zql/src/ivm/change.js +4 -1
- package/out/zql/src/ivm/change.js.map +1 -1
- package/out/zql/src/ivm/exists.d.ts +18 -0
- package/out/zql/src/ivm/exists.d.ts.map +1 -0
- package/out/zql/src/ivm/exists.js +186 -0
- package/out/zql/src/ivm/exists.js.map +1 -0
- 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 -3
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-out.js +4 -7
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter.js +1 -1
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts +10 -6
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +60 -75
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/skip.js +1 -1
- 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 +11 -7
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/query/auth-query.d.ts +7 -3
- package/out/zql/src/query/auth-query.d.ts.map +1 -1
- package/out/zql/src/query/dnf.d.ts +10 -0
- package/out/zql/src/query/dnf.d.ts.map +1 -0
- package/out/zql/src/query/expression.d.ts +40 -23
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +7 -6
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query.d.ts +17 -46
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +19 -6
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +12 -3
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +81 -2
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +7 -11
- package/out/chunk-INJ4WJHS.js.map +0 -7
- package/out/datadog/src/datadog-log-sink.js +0 -231
- package/out/datadog/src/datadog-log-sink.js.map +0 -1
- package/out/datadog/src/mod.js +0 -2
- package/out/datadog/src/mod.js.map +0 -1
- package/out/shared/src/immutable.js +0 -2
- package/out/shared/src/immutable.js.map +0 -1
- package/out/shared/src/sorted-entries.js +0 -6
- package/out/shared/src/sorted-entries.js.map +0 -1
- package/out/shared/src/writable.js +0 -2
- package/out/shared/src/writable.js.map +0 -1
- package/out/zero/src/config.d.ts +0 -2
- package/out/zero/src/config.d.ts.map +0 -1
- package/out/zero/src/config.js +0 -2
- package/out/zero/src/config.js.map +0 -1
- package/out/zero-cache/src/config/config-query.d.ts +0 -19
- package/out/zero-cache/src/config/config-query.d.ts.map +0 -1
- package/out/zero-cache/src/config/config-query.js +0 -22
- package/out/zero-cache/src/config/config-query.js.map +0 -1
- package/out/zero-cache/src/config/define-config.d.ts +0 -43
- package/out/zero-cache/src/config/define-config.d.ts.map +0 -1
- package/out/zero-cache/src/config/define-config.js +0 -121
- package/out/zero-cache/src/config/define-config.js.map +0 -1
- package/out/zero-cache/src/config/refs.d.ts +0 -3
- package/out/zero-cache/src/config/refs.d.ts.map +0 -1
- package/out/zero-cache/src/config/refs.js +0 -14
- package/out/zero-cache/src/config/refs.js.map +0 -1
- package/out/zero-client/src/client/normalized-schema.d.ts.map +0 -1
- package/out/zero-client/src/client/normalized-schema.js +0 -31
- package/out/zero-client/src/client/normalized-schema.js.map +0 -1
- package/out/zero-protocol/src/ast-hash.js +0 -14
- package/out/zero-protocol/src/ast-hash.js.map +0 -1
- package/out/zero-schema/src/mod.js +0 -4
- package/out/zero-schema/src/mod.js.map +0 -1
- package/out/zero-schema/src/normalize-table-schema.js +0 -116
- package/out/zero-schema/src/normalize-table-schema.js.map +0 -1
- package/out/zero-schema/src/schema.js +0 -4
- package/out/zero-schema/src/schema.js.map +0 -1
- package/out/zql/src/ivm/array-view.js +0 -70
- package/out/zql/src/ivm/array-view.js.map +0 -1
- package/out/zql/src/ivm/view-apply-change.js +0 -156
- package/out/zql/src/ivm/view-apply-change.js.map +0 -1
- package/out/zql/src/ivm/view.js +0 -2
- package/out/zql/src/ivm/view.js.map +0 -1
- package/out/zql/src/query/auth-query.js +0 -26
- package/out/zql/src/query/auth-query.js.map +0 -1
- package/out/zql/src/query/expression.js +0 -121
- package/out/zql/src/query/expression.js.map +0 -1
- package/out/zql/src/query/query-impl.js +0 -291
- package/out/zql/src/query/query-impl.js.map +0 -1
- package/out/zql/src/query/query-internal.js +0 -2
- package/out/zql/src/query/query-internal.js.map +0 -1
- package/out/zql/src/query/query.js +0 -3
- package/out/zql/src/query/query.js.map +0 -1
- package/out/zql/src/query/typed-view.js +0 -2
- package/out/zql/src/query/typed-view.js.map +0 -1
- /package/out/{internal.js.map → advanced.js.map} +0 -0
|
@@ -1,21 +1,91 @@
|
|
|
1
1
|
import type postgres from 'postgres';
|
|
2
2
|
import * as v from '../../../../../../shared/src/valita.js';
|
|
3
|
-
import type { FilteredTableSpec, IndexSpec } from '../../../../db/specs.js';
|
|
4
3
|
export declare function publishedTableQuery(publications: string[]): string;
|
|
5
4
|
export declare function indexDefinitionsQuery(publications: string[]): string;
|
|
6
|
-
declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export declare const publishedSchema: v.ObjectType<Omit<{
|
|
6
|
+
tables: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
7
|
+
name: v.Type<string>;
|
|
8
|
+
columns: v.Type<Record<string, {
|
|
9
|
+
characterMaximumLength?: number | null | undefined;
|
|
10
|
+
notNull?: boolean | null | undefined;
|
|
11
|
+
dflt?: string | null | undefined;
|
|
12
|
+
pos: number;
|
|
13
|
+
dataType: string;
|
|
14
|
+
}>>;
|
|
15
|
+
primaryKey: v.ArrayType<v.Type<string>>;
|
|
16
|
+
}, "schema"> & {
|
|
17
|
+
schema: v.Type<string>;
|
|
18
|
+
}, "publications" | "columns" | "oid"> & {
|
|
19
|
+
oid: v.Type<number>;
|
|
20
|
+
columns: v.Type<Record<string, {
|
|
21
|
+
characterMaximumLength?: number | null | undefined;
|
|
22
|
+
notNull?: boolean | null | undefined;
|
|
23
|
+
dflt?: string | null | undefined;
|
|
24
|
+
pos: number;
|
|
25
|
+
dataType: string;
|
|
26
|
+
typeOID: number;
|
|
27
|
+
}>>;
|
|
28
|
+
publications: v.Type<Record<string, {
|
|
29
|
+
rowFilter: string | null;
|
|
30
|
+
}>>;
|
|
31
|
+
}, undefined>>;
|
|
32
|
+
}, "indexes"> & {
|
|
33
|
+
indexes: v.ArrayType<v.ObjectType<Omit<{
|
|
34
|
+
name: v.Type<string>;
|
|
35
|
+
tableName: v.Type<string>;
|
|
36
|
+
unique: v.Type<boolean>;
|
|
37
|
+
columns: v.Type<Record<string, "ASC" | "DESC">>;
|
|
38
|
+
}, "schema"> & {
|
|
39
|
+
schema: v.Type<string>;
|
|
40
|
+
}, undefined>>;
|
|
12
41
|
}, undefined>;
|
|
13
|
-
export type
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
42
|
+
export type PublishedSchema = v.Infer<typeof publishedSchema>;
|
|
43
|
+
declare const publicationInfoSchema: v.ObjectType<Omit<Omit<{
|
|
44
|
+
tables: v.ArrayType<v.ObjectType<Omit<Omit<{
|
|
45
|
+
name: v.Type<string>;
|
|
46
|
+
columns: v.Type<Record<string, {
|
|
47
|
+
characterMaximumLength?: number | null | undefined;
|
|
48
|
+
notNull?: boolean | null | undefined;
|
|
49
|
+
dflt?: string | null | undefined;
|
|
50
|
+
pos: number;
|
|
51
|
+
dataType: string;
|
|
52
|
+
}>>;
|
|
53
|
+
primaryKey: v.ArrayType<v.Type<string>>;
|
|
54
|
+
}, "schema"> & {
|
|
55
|
+
schema: v.Type<string>;
|
|
56
|
+
}, "publications" | "columns" | "oid"> & {
|
|
57
|
+
oid: v.Type<number>;
|
|
58
|
+
columns: v.Type<Record<string, {
|
|
59
|
+
characterMaximumLength?: number | null | undefined;
|
|
60
|
+
notNull?: boolean | null | undefined;
|
|
61
|
+
dflt?: string | null | undefined;
|
|
62
|
+
pos: number;
|
|
63
|
+
dataType: string;
|
|
64
|
+
typeOID: number;
|
|
65
|
+
}>>;
|
|
66
|
+
publications: v.Type<Record<string, {
|
|
67
|
+
rowFilter: string | null;
|
|
68
|
+
}>>;
|
|
69
|
+
}, undefined>>;
|
|
70
|
+
}, "indexes"> & {
|
|
71
|
+
indexes: v.ArrayType<v.ObjectType<Omit<{
|
|
72
|
+
name: v.Type<string>;
|
|
73
|
+
tableName: v.Type<string>;
|
|
74
|
+
unique: v.Type<boolean>;
|
|
75
|
+
columns: v.Type<Record<string, "ASC" | "DESC">>;
|
|
76
|
+
}, "schema"> & {
|
|
77
|
+
schema: v.Type<string>;
|
|
78
|
+
}, undefined>>;
|
|
79
|
+
}, "publications"> & {
|
|
80
|
+
publications: v.ArrayType<v.ObjectType<{
|
|
81
|
+
pubname: v.Type<string>;
|
|
82
|
+
pubinsert: v.Type<boolean>;
|
|
83
|
+
pubupdate: v.Type<boolean>;
|
|
84
|
+
pubdelete: v.Type<boolean>;
|
|
85
|
+
pubtruncate: v.Type<boolean>;
|
|
86
|
+
}, undefined>>;
|
|
87
|
+
}, undefined>;
|
|
88
|
+
export type PublicationInfo = v.Infer<typeof publicationInfoSchema>;
|
|
19
89
|
/**
|
|
20
90
|
* Retrieves published tables and columns. By default, includes all
|
|
21
91
|
* publications that start with "zero_" or "_zero_", but this can be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/published.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"published.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/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,UAmEzD;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,UAwD3D;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,15 +1,17 @@
|
|
|
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 { indexSpec, publishedTableSpec } from '../../../../db/specs.js';
|
|
4
5
|
export function publishedTableQuery(publications) {
|
|
5
6
|
return `
|
|
6
7
|
WITH published_columns AS (SELECT
|
|
8
|
+
pc.oid::int8 AS "oid",
|
|
7
9
|
nspname AS "schema",
|
|
8
10
|
pc.relname AS "name",
|
|
9
11
|
attnum AS "pos",
|
|
10
12
|
attname AS "col",
|
|
11
13
|
pt.typname AS "type",
|
|
12
|
-
atttypid AS "
|
|
14
|
+
atttypid::int8 AS "typeOID",
|
|
13
15
|
NULLIF(atttypmod, -1) AS "maxLen",
|
|
14
16
|
attndims "arrayDims",
|
|
15
17
|
attnotnull AS "notNull",
|
|
@@ -31,6 +33,7 @@ WHERE pb.pubname IN (${literal(publications)})
|
|
|
31
33
|
ORDER BY nspname, pc.relname),
|
|
32
34
|
|
|
33
35
|
tables AS (SELECT json_build_object(
|
|
36
|
+
'oid', "oid",
|
|
34
37
|
'schema', "schema",
|
|
35
38
|
'name', "name",
|
|
36
39
|
'columns', json_object_agg(
|
|
@@ -41,8 +44,9 @@ tables AS (SELECT json_build_object(
|
|
|
41
44
|
'dataType', CASE WHEN "arrayDims" = 0
|
|
42
45
|
THEN "type"
|
|
43
46
|
ELSE substring("type" from 2) || repeat('[]', "arrayDims") END,
|
|
47
|
+
'typeOID', "typeOID",
|
|
44
48
|
-- https://stackoverflow.com/a/52376230
|
|
45
|
-
'characterMaximumLength', CASE WHEN "
|
|
49
|
+
'characterMaximumLength', CASE WHEN "typeOID" = 1043 OR "typeOID" = 1042
|
|
46
50
|
THEN "maxLen" - 4
|
|
47
51
|
ELSE "maxLen" END,
|
|
48
52
|
'notNull', "notNull",
|
|
@@ -61,7 +65,7 @@ tables AS (SELECT json_build_object(
|
|
|
61
65
|
"publication",
|
|
62
66
|
jsonb_build_object('rowFilter', "rowFilter")
|
|
63
67
|
)
|
|
64
|
-
) AS "table" FROM published_columns GROUP BY "schema", "name")
|
|
68
|
+
) AS "table" FROM published_columns GROUP BY "schema", "name", "oid")
|
|
65
69
|
|
|
66
70
|
SELECT COALESCE(json_agg("table"), '[]'::json) as "tables" FROM tables
|
|
67
71
|
`;
|
|
@@ -123,6 +127,9 @@ export function indexDefinitionsQuery(publications) {
|
|
|
123
127
|
SELECT COALESCE(json_agg("index"), '[]'::json) as "indexes" FROM indexes
|
|
124
128
|
`;
|
|
125
129
|
}
|
|
130
|
+
const publishedTablesSchema = v.object({ tables: v.array(publishedTableSpec) });
|
|
131
|
+
const publishedIndexesSchema = v.object({ indexes: v.array(indexSpec) });
|
|
132
|
+
export const publishedSchema = publishedTablesSchema.extend(publishedIndexesSchema.shape);
|
|
126
133
|
const publicationSchema = v.object({
|
|
127
134
|
pubname: v.string(),
|
|
128
135
|
pubinsert: v.boolean(),
|
|
@@ -131,6 +138,9 @@ const publicationSchema = v.object({
|
|
|
131
138
|
pubtruncate: v.boolean(),
|
|
132
139
|
});
|
|
133
140
|
const publicationsResultSchema = v.array(publicationSchema);
|
|
141
|
+
const publicationInfoSchema = publishedSchema.extend({
|
|
142
|
+
publications: publicationsResultSchema,
|
|
143
|
+
});
|
|
134
144
|
/**
|
|
135
145
|
* Retrieves published tables and columns. By default, includes all
|
|
136
146
|
* publications that start with "zero_" or "_zero_", but this can be
|
|
@@ -173,8 +183,8 @@ export async function getPublicationInfo(sql, publications) {
|
|
|
173
183
|
}
|
|
174
184
|
return {
|
|
175
185
|
publications: v.parse(result[1], publicationsResultSchema),
|
|
176
|
-
|
|
177
|
-
|
|
186
|
+
...v.parse(result[2][0], publishedTablesSchema),
|
|
187
|
+
...v.parse(result[3][0], publishedIndexesSchema),
|
|
178
188
|
};
|
|
179
189
|
}
|
|
180
190
|
//# sourceMappingURL=published.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"published.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/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;
|
|
1
|
+
{"version":3,"file":"published.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/published.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import * as v from '../../../../../../shared/src/valita.js';
|
|
2
3
|
import type { PostgresDB, PostgresTransaction } from '../../../../types/pg.js';
|
|
3
4
|
import type { ShardConfig } from '../shard-config.js';
|
|
5
|
+
import { type PublicationInfo, type PublishedSchema } from './published.js';
|
|
4
6
|
export declare function append(shardID: string): (name: string) => string;
|
|
5
7
|
export declare function schemaFor(shardID: string): string;
|
|
6
8
|
export declare function unescapedSchema(shardID: string): string;
|
|
7
9
|
export declare const APP_PUBLICATION_PREFIX = "zero_";
|
|
8
10
|
export declare const INTERNAL_PUBLICATION_PREFIX = "_zero_";
|
|
9
|
-
export declare
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
export declare const GLOBAL_SETUP = "\n CREATE SCHEMA IF NOT EXISTS zero;\n\n CREATE TABLE IF NOT EXISTS zero.\"schemaVersions\" (\n \"minSupportedVersion\" INT4,\n \"maxSupportedVersion\" INT4,\n\n -- Ensure that there is only a single row in the table.\n -- Application code can be agnostic to this column, and\n -- simply invoke UPDATE statements on the version columns.\n \"lock\" BOOL PRIMARY KEY DEFAULT true,\n CONSTRAINT zero_schema_versions_single_row_constraint CHECK (lock)\n );\n\n INSERT INTO zero.\"schemaVersions\" (\"lock\", \"minSupportedVersion\", \"maxSupportedVersion\")\n VALUES (true, 1, 1) ON CONFLICT DO NOTHING;\n";
|
|
12
|
+
export declare function dropShard(shardID: string): string;
|
|
13
|
+
declare const internalShardConfigSchema: v.ObjectType<{
|
|
14
|
+
publications: v.ArrayType<v.Type<string>>;
|
|
15
|
+
ddlDetection: v.Type<boolean>;
|
|
16
|
+
initialSchema: v.Type<{
|
|
17
|
+
tables: {
|
|
18
|
+
name: string;
|
|
19
|
+
schema: string;
|
|
20
|
+
primaryKey: string[];
|
|
21
|
+
oid: number;
|
|
22
|
+
columns: Record<string, {
|
|
23
|
+
characterMaximumLength?: number | null | undefined;
|
|
24
|
+
notNull?: boolean | null | undefined;
|
|
25
|
+
dflt?: string | null | undefined;
|
|
26
|
+
pos: number;
|
|
27
|
+
dataType: string;
|
|
28
|
+
typeOID: number;
|
|
29
|
+
}>;
|
|
30
|
+
publications: Record<string, {
|
|
31
|
+
rowFilter: string | null;
|
|
32
|
+
}>;
|
|
33
|
+
}[];
|
|
34
|
+
indexes: {
|
|
35
|
+
name: string;
|
|
36
|
+
columns: Record<string, "ASC" | "DESC">;
|
|
37
|
+
tableName: string;
|
|
38
|
+
unique: boolean;
|
|
39
|
+
schema: string;
|
|
40
|
+
}[];
|
|
41
|
+
} | null>;
|
|
42
|
+
}, undefined>;
|
|
43
|
+
export type InternalShardConfig = v.Infer<typeof internalShardConfigSchema>;
|
|
44
|
+
export declare function setInitialSchema(db: PostgresDB, shardID: string, { tables, indexes }: PublishedSchema): Promise<void>;
|
|
45
|
+
export declare function getInternalShardConfig(db: PostgresDB, shardID: string): Promise<InternalShardConfig>;
|
|
12
46
|
/**
|
|
13
47
|
* Sets up and returns all publications (including internal ones) for
|
|
14
48
|
* the given shard.
|
|
15
49
|
*/
|
|
16
50
|
export declare function setupTablesAndReplication(lc: LogContext, tx: PostgresTransaction, { id, publications }: ShardConfig): Promise<void>;
|
|
51
|
+
export declare function validatePublications(lc: LogContext, shardID: string, published: PublicationInfo): void;
|
|
52
|
+
export {};
|
|
17
53
|
//# sourceMappingURL=shard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/shard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/shard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,CAAC,MAAM,wCAAwC,CAAC;AAC5D,OAAO,KAAK,EAAC,UAAU,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAE7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAEL,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,CAUjD;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,iBA+DhC;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,QAkB3B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { PG_INSUFFICIENT_PRIVILEGE } from '@drdgvhbh/postgres-error-codes';
|
|
1
2
|
import { literal } from 'pg-format';
|
|
3
|
+
import postgres from 'postgres';
|
|
2
4
|
import { assert } from '../../../../../../shared/src/asserts.js';
|
|
3
|
-
import
|
|
5
|
+
import * as v from '../../../../../../shared/src/valita.js';
|
|
4
6
|
import { id } from '../../../../types/sql.js';
|
|
5
|
-
import { ZERO_VERSION_COLUMN_NAME } from '../../../replicator/schema/replication-state.js';
|
|
6
7
|
import { createEventTriggerStatements } from './ddl.js';
|
|
7
|
-
import {
|
|
8
|
+
import { publishedSchema, } from './published.js';
|
|
9
|
+
import { validate } from './validation.js';
|
|
8
10
|
// Creates a function that appends `_SHARD_ID` to the input.
|
|
9
11
|
export function append(shardID) {
|
|
10
12
|
return (name) => id(name + '_' + shardID);
|
|
@@ -20,7 +22,8 @@ export const INTERNAL_PUBLICATION_PREFIX = '_zero_';
|
|
|
20
22
|
const DEFAULT_APP_PUBLICATION = APP_PUBLICATION_PREFIX + 'public';
|
|
21
23
|
const METADATA_PUBLICATION_PREFIX = INTERNAL_PUBLICATION_PREFIX + 'metadata_';
|
|
22
24
|
// The GLOBAL_SETUP must be idempotent as it can be run multiple times for different shards.
|
|
23
|
-
|
|
25
|
+
// Exported for testing.
|
|
26
|
+
export const GLOBAL_SETUP = `
|
|
24
27
|
CREATE SCHEMA IF NOT EXISTS zero;
|
|
25
28
|
|
|
26
29
|
CREATE TABLE IF NOT EXISTS zero."schemaVersions" (
|
|
@@ -43,7 +46,7 @@ function shardSetup(shardID, publications) {
|
|
|
43
46
|
const metadataPublication = METADATA_PUBLICATION_PREFIX + shardID;
|
|
44
47
|
publications.push(metadataPublication);
|
|
45
48
|
publications.sort();
|
|
46
|
-
return
|
|
49
|
+
return `
|
|
47
50
|
CREATE SCHEMA IF NOT EXISTS ${schema};
|
|
48
51
|
|
|
49
52
|
CREATE TABLE ${schema}."clients" (
|
|
@@ -59,22 +62,59 @@ function shardSetup(shardID, publications) {
|
|
|
59
62
|
|
|
60
63
|
CREATE TABLE ${schema}."shardConfig" (
|
|
61
64
|
"publications" TEXT[] NOT NULL,
|
|
65
|
+
"ddlDetection" BOOL NOT NULL,
|
|
66
|
+
"initialSchema" JSON,
|
|
62
67
|
|
|
63
68
|
-- Ensure that there is only a single row in the table.
|
|
64
69
|
"lock" BOOL PRIMARY KEY DEFAULT true,
|
|
65
70
|
CONSTRAINT ${sharded('single_row_shard_config')} CHECK (lock)
|
|
66
71
|
);
|
|
67
72
|
|
|
68
|
-
INSERT INTO ${schema}."shardConfig"
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
INSERT INTO ${schema}."shardConfig"
|
|
74
|
+
("lock", "publications", "ddlDetection", "initialSchema")
|
|
75
|
+
VALUES (true,
|
|
76
|
+
ARRAY[${literal(publications)}],
|
|
77
|
+
false, -- set in SAVEPOINT with triggerSetup() statements
|
|
78
|
+
null -- set in initial-sync at consistent_point LSN.
|
|
79
|
+
);
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
export function dropShard(shardID) {
|
|
83
|
+
const schema = schemaFor(shardID);
|
|
84
|
+
const metadataPublication = METADATA_PUBLICATION_PREFIX + shardID;
|
|
85
|
+
// DROP SCHEMA ... CASCADE does not drop dependent PUBLICATIONS,
|
|
86
|
+
// so the PUBLICATION must be dropped explicitly.
|
|
87
|
+
return `
|
|
88
|
+
DROP PUBLICATION IF EXISTS ${id(metadataPublication)};
|
|
89
|
+
DROP SCHEMA IF EXISTS ${schema} CASCADE;
|
|
90
|
+
`;
|
|
71
91
|
}
|
|
72
|
-
|
|
92
|
+
const internalShardConfigSchema = v.object({
|
|
93
|
+
publications: v.array(v.string()),
|
|
94
|
+
ddlDetection: v.boolean(),
|
|
95
|
+
initialSchema: publishedSchema.nullable(),
|
|
96
|
+
});
|
|
97
|
+
// triggerSetup is run separately in a sub-transaction (i.e. SAVEPOINT) so
|
|
98
|
+
// that a failure (e.g. due to lack of superuser permissions) can be handled
|
|
99
|
+
// by continuing in a degraded mode (ddlDetection = false).
|
|
100
|
+
function triggerSetup(shardID, publications) {
|
|
101
|
+
const schema = schemaFor(shardID);
|
|
102
|
+
return (createEventTriggerStatements(shardID, publications) +
|
|
103
|
+
`UPDATE ${schema}."shardConfig" SET "ddlDetection" = true;`);
|
|
104
|
+
}
|
|
105
|
+
// Called in initial-sync to store the exact schema that was initially synced.
|
|
106
|
+
export async function setInitialSchema(db, shardID, { tables, indexes }) {
|
|
107
|
+
const schema = unescapedSchema(shardID);
|
|
108
|
+
const synced = { tables, indexes };
|
|
109
|
+
await db `UPDATE ${db(schema)}."shardConfig" SET "initialSchema" = ${synced}`;
|
|
110
|
+
}
|
|
111
|
+
export async function getInternalShardConfig(db, shardID) {
|
|
73
112
|
const result = await db `
|
|
74
|
-
SELECT publications
|
|
113
|
+
SELECT "publications", "ddlDetection", "initialSchema"
|
|
114
|
+
FROM ${db(unescapedSchema(shardID))}."shardConfig";
|
|
75
115
|
`;
|
|
76
116
|
assert(result.length === 1);
|
|
77
|
-
return result[0];
|
|
117
|
+
return v.parse(result[0], internalShardConfigSchema);
|
|
78
118
|
}
|
|
79
119
|
/**
|
|
80
120
|
* Sets up and returns all publications (including internal ones) for
|
|
@@ -111,11 +151,22 @@ export async function setupTablesAndReplication(lc, tx, { id, publications }) {
|
|
|
111
151
|
}
|
|
112
152
|
// Setup the global tables and shard tables / publications.
|
|
113
153
|
await tx.unsafe(GLOBAL_SETUP + shardSetup(id, allPublications));
|
|
114
|
-
|
|
115
|
-
|
|
154
|
+
try {
|
|
155
|
+
await tx.savepoint(sub => sub.unsafe(triggerSetup(id, allPublications)));
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
if (!(e instanceof postgres.PostgresError &&
|
|
159
|
+
e.code === PG_INSUFFICIENT_PRIVILEGE)) {
|
|
160
|
+
throw e;
|
|
161
|
+
}
|
|
162
|
+
// If triggerSetup() fails, replication continues in ddlDetection=false mode.
|
|
163
|
+
lc.warn?.(`Unable to create event triggers for schema change detection:\n\n` +
|
|
164
|
+
`"${e.hint ?? e.message}"\n\n` +
|
|
165
|
+
`Proceeding in degraded mode: schema changes will halt replication,\n` +
|
|
166
|
+
`after which the operator is responsible for resyncing the replica.`);
|
|
167
|
+
}
|
|
116
168
|
}
|
|
117
|
-
|
|
118
|
-
function validatePublications(lc, shardSchema, published) {
|
|
169
|
+
export function validatePublications(lc, shardID, published) {
|
|
119
170
|
// Verify that all publications export the proper events.
|
|
120
171
|
published.publications.forEach(pub => {
|
|
121
172
|
if (!pub.pubinsert ||
|
|
@@ -126,26 +177,6 @@ function validatePublications(lc, shardSchema, published) {
|
|
|
126
177
|
throw new Error(`PUBLICATION ${pub.pubname} must publish insert, update, delete, and truncate`);
|
|
127
178
|
}
|
|
128
179
|
});
|
|
129
|
-
published.tables.forEach(table =>
|
|
130
|
-
if (!['public', 'zero', shardSchema].includes(table.schema)) {
|
|
131
|
-
// This may be relaxed in the future. We would need a plan for support in the AST first.
|
|
132
|
-
throw new Error('Only the default "public" schema is supported.');
|
|
133
|
-
}
|
|
134
|
-
if (ZERO_VERSION_COLUMN_NAME in table.columns) {
|
|
135
|
-
throw new Error(`Table "${table.name}" uses reserved column name "${ZERO_VERSION_COLUMN_NAME}"`);
|
|
136
|
-
}
|
|
137
|
-
if (table.primaryKey.length === 0) {
|
|
138
|
-
throw new Error(`Table "${table.name}" does not have a PRIMARY KEY`);
|
|
139
|
-
}
|
|
140
|
-
if (!ALLOWED_IDENTIFIER_CHARS.test(table.name)) {
|
|
141
|
-
throw new Error(`Table "${table.name}" has invalid characters.`);
|
|
142
|
-
}
|
|
143
|
-
for (const [col, spec] of Object.entries(table.columns)) {
|
|
144
|
-
if (!ALLOWED_IDENTIFIER_CHARS.test(col)) {
|
|
145
|
-
throw new Error(`Column "${col}" in table "${table.name}" has invalid characters.`);
|
|
146
|
-
}
|
|
147
|
-
warnIfDataTypeSupported(lc, spec.dataType, table.name, col);
|
|
148
|
-
}
|
|
149
|
-
});
|
|
180
|
+
published.tables.forEach(table => validate(lc, shardID, table));
|
|
150
181
|
}
|
|
151
182
|
//# sourceMappingURL=shard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/shard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/shard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LogContext } from '@rocicorp/logger';
|
|
2
|
+
import type { TableSpec } from '../../../../db/specs.js';
|
|
3
|
+
export declare function validate(lc: LogContext, shardID: string, table: TableSpec): void;
|
|
4
|
+
export declare class UnsupportedTableSchemaError extends Error {
|
|
5
|
+
readonly name = "UnsupportedTableSchemaError";
|
|
6
|
+
constructor(msg: string);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAMvD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,QA+BzE;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,iCAAiC;gBAElC,GAAG,EAAE,MAAM;CAGxB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { warnIfDataTypeSupported } from '../../../../db/pg-to-lite.js';
|
|
2
|
+
import { ZERO_VERSION_COLUMN_NAME } from '../../../replicator/schema/replication-state.js';
|
|
3
|
+
import { unescapedSchema } from './shard.js';
|
|
4
|
+
const ALLOWED_IDENTIFIER_CHARS = /^[A-Za-z_]+[A-Za-z0-9_-]*$/;
|
|
5
|
+
export function validate(lc, shardID, table) {
|
|
6
|
+
const shardSchema = unescapedSchema(shardID);
|
|
7
|
+
if (!['public', 'zero', shardSchema].includes(table.schema)) {
|
|
8
|
+
// This may be relaxed in the future. We would need a plan for support in the AST first.
|
|
9
|
+
throw new UnsupportedTableSchemaError('Only the default "public" schema is supported.');
|
|
10
|
+
}
|
|
11
|
+
if (ZERO_VERSION_COLUMN_NAME in table.columns) {
|
|
12
|
+
throw new UnsupportedTableSchemaError(`Table "${table.name}" uses reserved column name "${ZERO_VERSION_COLUMN_NAME}"`);
|
|
13
|
+
}
|
|
14
|
+
if (table.primaryKey.length === 0) {
|
|
15
|
+
throw new UnsupportedTableSchemaError(`Table "${table.name}" does not have a PRIMARY KEY`);
|
|
16
|
+
}
|
|
17
|
+
if (!ALLOWED_IDENTIFIER_CHARS.test(table.name)) {
|
|
18
|
+
throw new UnsupportedTableSchemaError(`Table "${table.name}" has invalid characters.`);
|
|
19
|
+
}
|
|
20
|
+
for (const [col, spec] of Object.entries(table.columns)) {
|
|
21
|
+
if (!ALLOWED_IDENTIFIER_CHARS.test(col)) {
|
|
22
|
+
throw new UnsupportedTableSchemaError(`Column "${col}" in table "${table.name}" has invalid characters.`);
|
|
23
|
+
}
|
|
24
|
+
warnIfDataTypeSupported(lc, spec.dataType, table.name, col);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class UnsupportedTableSchemaError extends Error {
|
|
28
|
+
name = 'UnsupportedTableSchemaError';
|
|
29
|
+
constructor(msg) {
|
|
30
|
+
super(msg);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAErE,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,CAAC,EAAc,EAAE,OAAe,EAAE,KAAgB;IACxE,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,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,2BAA2B,CACnC,UAAU,KAAK,CAAC,IAAI,+BAA+B,CACpD,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,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,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"}
|
|
@@ -7,6 +7,9 @@ export declare const beginSchema: v.ObjectType<{
|
|
|
7
7
|
export declare const commitSchema: v.ObjectType<{
|
|
8
8
|
tag: v.Type<"commit">;
|
|
9
9
|
}, undefined>;
|
|
10
|
+
export declare const rollbackSchema: v.ObjectType<{
|
|
11
|
+
tag: v.Type<"rollback">;
|
|
12
|
+
}, undefined>;
|
|
10
13
|
export declare const relationSchema: v.ObjectType<{
|
|
11
14
|
tag: v.Type<"relation">;
|
|
12
15
|
schema: v.Type<string>;
|
|
@@ -171,6 +174,7 @@ export declare const dropIndexSchema: v.ObjectType<{
|
|
|
171
174
|
}, undefined>;
|
|
172
175
|
export type MessageBegin = v.Infer<typeof beginSchema>;
|
|
173
176
|
export type MessageCommit = v.Infer<typeof commitSchema>;
|
|
177
|
+
export type MessageRollback = v.Infer<typeof rollbackSchema>;
|
|
174
178
|
export type MessageRelation = v.Infer<typeof relationSchema>;
|
|
175
179
|
export type MessageInsert = v.Infer<typeof insertSchema>;
|
|
176
180
|
export type MessageUpdate = v.Infer<typeof updateSchema>;
|
|
@@ -324,7 +328,7 @@ export declare const dataChangeSchema: v.UnionType<[v.ObjectType<{
|
|
|
324
328
|
}, undefined>]>;
|
|
325
329
|
export type DataChange = Satisfies<JSONObject, // guarantees serialization over IPC or network
|
|
326
330
|
v.Infer<typeof dataChangeSchema>>;
|
|
327
|
-
export type Change = MessageBegin | DataChange | MessageCommit;
|
|
331
|
+
export type Change = MessageBegin | DataChange | MessageCommit | MessageRollback;
|
|
328
332
|
export type ChangeTag = Change['tag'];
|
|
329
333
|
export {};
|
|
330
334
|
//# sourceMappingURL=change.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qCAAqC,CAAC;AAEzD,OAAO,EAAkB,KAAK,UAAU,EAAC,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAE3D,eAAO,MAAM,WAAW;;aAEtB,CAAC;AAEH,eAAO,MAAM,YAAY;;aAEvB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;aAWzB,CAAC;AAEH,eAAO,MAAM,SAAS,2EAA4B,CAAC;AAEnD,eAAO,MAAM,YAAY;;;;;;;;;;aAIvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;aAMvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;aAIvB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;aAGzB,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;aAGpB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;aAG5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;aAI5B,CAAC;AAOH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;aAI1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;aAK7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;aAI3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;aAG1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;aAG5B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;aAG1B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/change.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,9 @@ export const beginSchema = v.object({
|
|
|
7
7
|
export const commitSchema = v.object({
|
|
8
8
|
tag: v.literal('commit'),
|
|
9
9
|
});
|
|
10
|
+
export const rollbackSchema = v.object({
|
|
11
|
+
tag: v.literal('rollback'),
|
|
12
|
+
});
|
|
10
13
|
export const relationSchema = v.object({
|
|
11
14
|
tag: v.literal('relation'),
|
|
12
15
|
schema: v.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/change.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/change.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qCAAqC,CAAC;AACzD,OAAO,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAC,eAAe,EAAkB,MAAM,+BAA+B,CAAC;AAG/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,eAAe,EAAE,CAAC,CAAC,KAAK,CACtB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CACnB;IACD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxB,QAAQ,EAAE,cAAc;IACxB,GAAG,EAAE,SAAS;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxB,QAAQ,EAAE,cAAc;IACxB,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE;IACzB,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE;IACzB,GAAG,EAAE,SAAS;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxB,QAAQ,EAAE,cAAc;IACxB,GAAG,EAAE,SAAS;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,IAAI,EAAE,SAAS;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,gBAAgB;CACtB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,UAAU;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC5B,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IAC/B,KAAK,EAAE,gBAAgB;IACvB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC5B,EAAE,EAAE,gBAAgB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,IAAI,EAAE,SAAS;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC5B,EAAE,EAAE,gBAAgB;CACrB,CAAC,CAAC;AAqBH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CACrC,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,eAAe,CAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAC,UAAU,EAAsB,MAAM,sBAAsB,CAAC;AAY1E,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -5,14 +5,12 @@ const setupMigration = {
|
|
|
5
5
|
minSafeVersion: 1,
|
|
6
6
|
};
|
|
7
7
|
const schemaVersionMigrationMap = {
|
|
8
|
-
|
|
9
|
-
// There are no incremental migrations yet, but if we were to, say introduce
|
|
10
|
-
// another column, setupCDCTables would be updated to create the table with
|
|
11
|
-
// the new column, and then there would be an incremental migration here at
|
|
12
|
-
// version `2` that adds the column for databases that were initialized to
|
|
13
|
-
// version `1`.
|
|
8
|
+
2: { migrateSchema: migrateV1toV2 },
|
|
14
9
|
};
|
|
15
10
|
export async function initChangeStreamerSchema(log, db) {
|
|
16
11
|
await runSchemaMigrations(log, 'change-streamer', PG_SCHEMA, db, setupMigration, schemaVersionMigrationMap);
|
|
17
12
|
}
|
|
13
|
+
async function migrateV1toV2(_, db) {
|
|
14
|
+
await db `ALTER TABLE cdc."replicationConfig" ADD "resetRequired" BOOL`;
|
|
15
|
+
}
|
|
18
16
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AAEtD,MAAM,cAAc,GAAc;IAChC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,yBAAyB,GAA4B;IACzD,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/change-streamer/schema/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AAEtD,MAAM,cAAc,GAAc;IAChC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,yBAAyB,GAA4B;IACzD,CAAC,EAAE,EAAC,aAAa,EAAE,aAAa,EAAC;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAe,EACf,EAAc;IAEd,MAAM,mBAAmB,CACvB,GAAG,EACH,iBAAiB,EACjB,SAAS,EACT,EAAE,EACF,cAAc,EACd,yBAAyB,CAC1B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,CAAa,EAAE,EAAuB;IACjE,MAAM,EAAE,CAAA,8DAA8D,CAAC;AACzE,CAAC"}
|