@rocicorp/zero 0.2.2024101100 → 0.3.2024102300
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/react.js +92 -39
- package/out/react.js.map +2 -2
- package/out/replicache/src/async-iterable-to-array.js +8 -0
- package/out/replicache/src/async-iterable-to-array.js.map +1 -0
- package/out/replicache/src/bg-interval.js +38 -0
- package/out/replicache/src/bg-interval.js.map +1 -0
- package/out/replicache/src/binary-search.js +31 -0
- package/out/replicache/src/binary-search.js.map +1 -0
- package/out/replicache/src/broadcast-channel.js +29 -0
- package/out/replicache/src/broadcast-channel.js.map +1 -0
- package/out/replicache/src/btree/diff.js +6 -0
- package/out/replicache/src/btree/diff.js.map +1 -0
- package/out/replicache/src/btree/node.js +392 -0
- package/out/replicache/src/btree/node.js.map +1 -0
- package/out/replicache/src/btree/read.js +227 -0
- package/out/replicache/src/btree/read.js.map +1 -0
- package/out/replicache/src/btree/splice.js +79 -0
- package/out/replicache/src/btree/splice.js.map +1 -0
- package/out/replicache/src/btree/write.js +154 -0
- package/out/replicache/src/btree/write.js.map +1 -0
- package/out/replicache/src/call-default-fetch.js +37 -0
- package/out/replicache/src/call-default-fetch.js.map +1 -0
- package/out/replicache/src/config.js +13 -0
- package/out/replicache/src/config.js.map +1 -0
- package/out/replicache/src/connection-loop-delegates.js +30 -0
- package/out/replicache/src/connection-loop-delegates.js.map +1 -0
- package/out/replicache/src/connection-loop.js +268 -0
- package/out/replicache/src/connection-loop.js.map +1 -0
- package/out/replicache/src/cookies.js +41 -0
- package/out/replicache/src/cookies.js.map +1 -0
- package/out/replicache/src/dag/chunk.js +60 -0
- package/out/replicache/src/dag/chunk.js.map +1 -0
- package/out/replicache/src/dag/gc.js +126 -0
- package/out/replicache/src/dag/gc.js.map +1 -0
- package/out/replicache/src/dag/key-type-enum.js +6 -0
- package/out/replicache/src/dag/key-type-enum.js.map +1 -0
- package/out/replicache/src/dag/key.js +54 -0
- package/out/replicache/src/dag/key.js.map +1 -0
- package/out/replicache/src/dag/lazy-store.js +532 -0
- package/out/replicache/src/dag/lazy-store.js.map +1 -0
- package/out/replicache/src/dag/store-impl.js +175 -0
- package/out/replicache/src/dag/store-impl.js.map +1 -0
- package/out/replicache/src/dag/store.js +22 -0
- package/out/replicache/src/dag/store.js.map +1 -0
- package/out/replicache/src/dag/visitor.js +22 -0
- package/out/replicache/src/dag/visitor.js.map +1 -0
- package/out/replicache/src/db/commit.js +443 -0
- package/out/replicache/src/db/commit.js.map +1 -0
- package/out/replicache/src/db/index-operation-enum.js +4 -0
- package/out/replicache/src/db/index-operation-enum.js.map +1 -0
- package/out/replicache/src/db/index.js +170 -0
- package/out/replicache/src/db/index.js.map +1 -0
- package/out/replicache/src/db/meta-type-enum.js +7 -0
- package/out/replicache/src/db/meta-type-enum.js.map +1 -0
- package/out/replicache/src/db/read.js +59 -0
- package/out/replicache/src/db/read.js.map +1 -0
- package/out/replicache/src/db/rebase.js +56 -0
- package/out/replicache/src/db/rebase.js.map +1 -0
- package/out/replicache/src/db/scan.js +2 -0
- package/out/replicache/src/db/scan.js.map +1 -0
- package/out/replicache/src/db/write.js +260 -0
- package/out/replicache/src/db/write.js.map +1 -0
- package/out/replicache/src/error-responses.js +30 -0
- package/out/replicache/src/error-responses.js.map +1 -0
- package/out/replicache/src/filter-async-iterable.js +15 -0
- package/out/replicache/src/filter-async-iterable.js.map +1 -0
- package/out/replicache/src/format-version-enum.js +9 -0
- package/out/replicache/src/format-version-enum.js.map +1 -0
- package/out/replicache/src/format-version.js +8 -0
- package/out/replicache/src/format-version.js.map +1 -0
- package/out/replicache/src/frozen-json.js +151 -0
- package/out/replicache/src/frozen-json.js.map +1 -0
- package/out/replicache/src/get-default-puller.js +74 -0
- package/out/replicache/src/get-default-puller.js.map +1 -0
- package/out/replicache/src/get-default-pusher.js +36 -0
- package/out/replicache/src/get-default-pusher.js.map +1 -0
- package/out/replicache/src/hash.js +73 -0
- package/out/replicache/src/hash.js.map +1 -0
- package/out/replicache/src/http-request-info.js +7 -0
- package/out/replicache/src/http-request-info.js.map +1 -0
- package/out/replicache/src/impl.js +2 -0
- package/out/replicache/src/impl.js.map +1 -0
- package/out/replicache/src/index-defs.js +28 -0
- package/out/replicache/src/index-defs.js.map +1 -0
- package/out/replicache/src/invoke-kind-enum.js +4 -0
- package/out/replicache/src/invoke-kind-enum.js.map +1 -0
- package/out/replicache/src/iterable-union.js +5 -0
- package/out/replicache/src/iterable-union.js.map +1 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js +93 -0
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
- package/out/replicache/src/kv/idb-store.js +179 -0
- package/out/replicache/src/kv/idb-store.js.map +1 -0
- package/out/replicache/src/kv/mem-store.js +61 -0
- package/out/replicache/src/kv/mem-store.js.map +1 -0
- package/out/replicache/src/kv/read-impl.js +23 -0
- package/out/replicache/src/kv/read-impl.js.map +1 -0
- package/out/replicache/src/kv/store.js +2 -0
- package/out/replicache/src/kv/store.js.map +1 -0
- package/out/replicache/src/kv/write-impl-base.js +48 -0
- package/out/replicache/src/kv/write-impl-base.js.map +1 -0
- package/out/replicache/src/kv/write-impl.js +25 -0
- package/out/replicache/src/kv/write-impl.js.map +1 -0
- package/out/replicache/src/lazy.js +10 -0
- package/out/replicache/src/lazy.js.map +1 -0
- package/out/replicache/src/log-options.js +13 -0
- package/out/replicache/src/log-options.js.map +1 -0
- package/out/replicache/src/merge-async-iterables.js +61 -0
- package/out/replicache/src/merge-async-iterables.js.map +1 -0
- package/out/replicache/src/mod.js +14 -0
- package/out/replicache/src/mod.js.map +1 -0
- package/out/replicache/src/mutation-recovery.js +439 -0
- package/out/replicache/src/mutation-recovery.js.map +1 -0
- package/out/replicache/src/new-client-channel.js +77 -0
- package/out/replicache/src/new-client-channel.js.map +1 -0
- package/out/replicache/src/on-persist-channel.js +33 -0
- package/out/replicache/src/on-persist-channel.js.map +1 -0
- package/out/replicache/src/patch-operation.js +37 -0
- package/out/replicache/src/patch-operation.js.map +1 -0
- package/out/replicache/src/pending-mutations.js +18 -0
- package/out/replicache/src/pending-mutations.js.map +1 -0
- package/out/replicache/src/persist/client-gc.js +38 -0
- package/out/replicache/src/persist/client-gc.js.map +1 -0
- package/out/replicache/src/persist/client-group-gc.js +38 -0
- package/out/replicache/src/persist/client-group-gc.js.map +1 -0
- package/out/replicache/src/persist/client-groups.js +180 -0
- package/out/replicache/src/persist/client-groups.js.map +1 -0
- package/out/replicache/src/persist/clients.js +390 -0
- package/out/replicache/src/persist/clients.js.map +1 -0
- package/out/replicache/src/persist/collect-idb-databases.js +174 -0
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.js +25 -0
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -0
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
- package/out/replicache/src/persist/heartbeat.js +37 -0
- package/out/replicache/src/persist/heartbeat.js.map +1 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.js +18 -0
- package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
- package/out/replicache/src/persist/idb-databases-store.js +90 -0
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -0
- package/out/replicache/src/persist/make-client-id.js +13 -0
- package/out/replicache/src/persist/make-client-id.js.map +1 -0
- package/out/replicache/src/persist/persist.js +132 -0
- package/out/replicache/src/persist/persist.js.map +1 -0
- package/out/replicache/src/persist/refresh.js +147 -0
- package/out/replicache/src/persist/refresh.js.map +1 -0
- package/out/replicache/src/process-scheduler.js +93 -0
- package/out/replicache/src/process-scheduler.js.map +1 -0
- package/out/replicache/src/puller.js +2 -0
- package/out/replicache/src/puller.js.map +1 -0
- package/out/replicache/src/pusher.js +32 -0
- package/out/replicache/src/pusher.js.map +1 -0
- package/out/replicache/src/replicache-impl.js +1007 -0
- package/out/replicache/src/replicache-impl.js.map +1 -0
- package/out/replicache/src/replicache-options.js +2 -0
- package/out/replicache/src/replicache-options.js.map +1 -0
- package/out/replicache/src/replicache.js +387 -0
- package/out/replicache/src/replicache.js.map +1 -0
- package/out/replicache/src/request-idle.js +15 -0
- package/out/replicache/src/request-idle.js.map +1 -0
- package/out/replicache/src/scan-iterator.js +202 -0
- package/out/replicache/src/scan-iterator.js.map +1 -0
- package/out/replicache/src/scan-options.js +45 -0
- package/out/replicache/src/scan-options.js.map +1 -0
- package/out/replicache/src/set-interval-with-signal.js +7 -0
- package/out/replicache/src/set-interval-with-signal.js.map +1 -0
- package/out/replicache/src/size-of-value.js +77 -0
- package/out/replicache/src/size-of-value.js.map +1 -0
- package/out/replicache/src/subscriptions.js +357 -0
- package/out/replicache/src/subscriptions.js.map +1 -0
- package/out/replicache/src/sync/diff.js +75 -0
- package/out/replicache/src/sync/diff.js.map +1 -0
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +5 -0
- package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +1 -0
- package/out/replicache/src/sync/ids.js +4 -0
- package/out/replicache/src/sync/ids.js.map +1 -0
- package/out/replicache/src/sync/patch.js +41 -0
- package/out/replicache/src/sync/patch.js.map +1 -0
- package/out/replicache/src/sync/pull-error.js +16 -0
- package/out/replicache/src/sync/pull-error.js.map +1 -0
- package/out/replicache/src/sync/pull.js +375 -0
- package/out/replicache/src/sync/pull.js.map +1 -0
- package/out/replicache/src/sync/push.js +141 -0
- package/out/replicache/src/sync/push.js.map +1 -0
- package/out/replicache/src/sync/request-id.js +31 -0
- package/out/replicache/src/sync/request-id.js.map +1 -0
- package/out/replicache/src/sync/sync-head-name.js +2 -0
- package/out/replicache/src/sync/sync-head-name.js.map +1 -0
- package/out/replicache/src/test-license-key.js +3 -0
- package/out/replicache/src/test-license-key.js.map +1 -0
- package/out/replicache/src/to-error.js +7 -0
- package/out/replicache/src/to-error.js.map +1 -0
- package/out/replicache/src/transaction-closed-error.js +17 -0
- package/out/replicache/src/transaction-closed-error.js.map +1 -0
- package/out/replicache/src/transactions.js +144 -0
- package/out/replicache/src/transactions.js.map +1 -0
- package/out/replicache/src/types.js +2 -0
- package/out/replicache/src/types.js.map +1 -0
- package/out/replicache/src/version.js +5 -0
- package/out/replicache/src/version.js.map +1 -0
- package/out/replicache/src/with-transactions.js +28 -0
- package/out/replicache/src/with-transactions.js.map +1 -0
- package/out/shared/src/browser-env.js +14 -0
- package/out/shared/src/browser-env.js.map +1 -0
- package/out/shared/src/document-visible.js +76 -0
- package/out/shared/src/document-visible.js.map +1 -0
- package/out/shared/src/immutable.js +2 -0
- package/out/shared/src/immutable.js.map +1 -0
- package/out/shared/src/iterables.d.ts +2 -2
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js +40 -0
- package/out/shared/src/iterables.js.map +1 -0
- package/out/shared/src/navigator.js +3 -0
- package/out/shared/src/navigator.js.map +1 -0
- package/out/shared/src/random-uint64.js +8 -0
- package/out/shared/src/random-uint64.js.map +1 -0
- package/out/shared/src/random-values.d.ts +1 -0
- package/out/shared/src/random-values.d.ts.map +1 -1
- package/out/shared/src/random-values.js +22 -0
- package/out/shared/src/random-values.js.map +1 -0
- package/out/shared/src/set-utils.d.ts +1 -1
- package/out/shared/src/set-utils.d.ts.map +1 -1
- package/out/shared/src/set-utils.js +6 -4
- package/out/shared/src/set-utils.js.map +1 -1
- package/out/shared/src/sorted-entries.d.ts +2 -0
- package/out/shared/src/sorted-entries.d.ts.map +1 -0
- package/out/shared/src/sorted-entries.js +6 -0
- package/out/shared/src/sorted-entries.js.map +1 -0
- package/out/shared/src/types.js +2 -0
- package/out/shared/src/types.js.map +1 -0
- package/out/shared/src/valita.d.ts +1 -1
- package/out/shared/src/valita.d.ts.map +1 -1
- package/out/shared/src/valita.js.map +1 -1
- package/out/shared/src/writable.d.ts +4 -0
- package/out/shared/src/writable.d.ts.map +1 -0
- package/out/shared/src/writable.js +2 -0
- package/out/shared/src/writable.js.map +1 -0
- package/out/zero/src/config.d.ts +2 -0
- package/out/zero/src/config.d.ts.map +1 -0
- package/out/zero/src/config.js +2 -0
- package/out/zero/src/config.js.map +1 -0
- package/out/zero-cache/src/config/config-query.d.ts +18 -0
- package/out/zero-cache/src/config/config-query.d.ts.map +1 -0
- package/out/zero-cache/src/config/config-query.js +19 -0
- package/out/zero-cache/src/config/config-query.js.map +1 -0
- package/out/zero-cache/src/config/define-config.d.ts +43 -0
- package/out/zero-cache/src/config/define-config.d.ts.map +1 -0
- package/out/zero-cache/src/config/define-config.js +120 -0
- package/out/zero-cache/src/config/define-config.js.map +1 -0
- package/out/zero-cache/src/config/refs.d.ts +3 -0
- package/out/zero-cache/src/config/refs.d.ts.map +1 -0
- package/out/zero-cache/src/config/refs.js +14 -0
- package/out/zero-cache/src/config/refs.js.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +126 -686
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +43 -159
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/create.d.ts +8 -0
- package/out/zero-cache/src/db/create.d.ts.map +1 -0
- package/out/zero-cache/src/db/create.js +39 -0
- package/out/zero-cache/src/db/create.js.map +1 -0
- package/out/zero-cache/src/db/lite-tables.d.ts +3 -3
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js +29 -20
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/{migration-lite.d.ts → old-migration-lite.d.ts} +1 -1
- package/out/zero-cache/src/db/old-migration-lite.d.ts.map +1 -0
- package/out/zero-cache/src/db/{migration-lite.js → old-migration-lite.js} +1 -1
- package/out/zero-cache/src/db/old-migration-lite.js.map +1 -0
- package/out/zero-cache/src/db/{migration.d.ts → old-migration.d.ts} +1 -1
- package/out/zero-cache/src/db/old-migration.d.ts.map +1 -0
- package/out/zero-cache/src/db/{migration.js → old-migration.js} +1 -1
- package/out/zero-cache/src/db/old-migration.js.map +1 -0
- package/out/zero-cache/src/db/pg-to-lite.d.ts +11 -0
- package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -0
- package/out/zero-cache/src/{services/change-streamer/pg/schema/lite.js → db/pg-to-lite.js} +27 -15
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -0
- package/out/zero-cache/src/db/specs.d.ts +73 -0
- package/out/zero-cache/src/db/specs.d.ts.map +1 -0
- package/out/zero-cache/src/db/specs.js +30 -0
- package/out/zero-cache/src/db/specs.js.map +1 -0
- package/out/zero-cache/src/db/statements.d.ts +1 -1
- package/out/zero-cache/src/db/statements.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +9 -5
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/main.js +2 -2
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +2 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +1 -1
- 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 +1 -4
- 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.d.ts +455 -13
- 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 +16 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- 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 +311 -86
- 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 +7 -51
- 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 +239 -59
- 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 +263 -183
- 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/published.d.ts +4 -4
- 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 +14 -19
- 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/zero.d.ts +2 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js +51 -6
- package/out/zero-cache/src/services/change-streamer/pg/schema/zero.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/sync-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.d.ts +325 -26
- 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 +84 -1
- package/out/zero-cache/src/services/change-streamer/schema/change.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts +1 -0
- package/out/zero-cache/src/services/dispatcher/connect-params.d.ts.map +1 -1
- package/out/zero-cache/src/services/dispatcher/connect-params.js +5 -2
- package/out/zero-cache/src/services/dispatcher/connect-params.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +17 -19
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/write-authorizer.js +18 -9
- package/out/zero-cache/src/services/mutagen/write-authorizer.js.map +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 +120 -16
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +20 -3
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.js +44 -12
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +3 -2
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +21 -18
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +5 -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 +49 -8
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/database-storage.js +1 -1
- package/out/zero-cache/src/services/view-syncer/database-storage.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +31 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +53 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +11 -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 +17 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +2 -2
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/pg-migrations.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +11 -11
- package/out/zero-cache/src/services/view-syncer/schema/types.js +2 -2
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +12 -4
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +59 -49
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -3
- 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 +50 -10
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/pg.d.ts +7 -1
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +14 -1
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +3 -1
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +19 -1
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts +2 -1
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +20 -9
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/context.d.ts +1 -1
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/context.js +99 -0
- package/out/zero-client/src/client/context.js.map +1 -0
- package/out/zero-client/src/client/crud.d.ts +8 -10
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js +181 -0
- package/out/zero-client/src/client/crud.js.map +1 -0
- package/out/zero-client/src/client/enable-analytics.js +21 -0
- package/out/zero-client/src/client/enable-analytics.js.map +1 -0
- package/out/zero-client/src/client/http-string.js +14 -0
- package/out/zero-client/src/client/http-string.js.map +1 -0
- package/out/zero-client/src/client/keys.d.ts +3 -2
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.js +32 -0
- package/out/zero-client/src/client/keys.js.map +1 -0
- package/out/zero-client/src/client/log-options.js +57 -0
- package/out/zero-client/src/client/log-options.js.map +1 -0
- package/out/zero-client/src/client/metrics.js +268 -0
- package/out/zero-client/src/client/metrics.js.map +1 -0
- package/out/zero-client/src/client/normalized-schema.d.ts +17 -0
- package/out/zero-client/src/client/normalized-schema.d.ts.map +1 -0
- package/out/zero-client/src/client/normalized-schema.js +31 -0
- package/out/zero-client/src/client/normalized-schema.js.map +1 -0
- package/out/zero-client/src/client/options.js +2 -0
- package/out/zero-client/src/client/options.js.map +1 -0
- package/out/zero-client/src/client/query-manager.d.ts +18 -3
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.js +149 -0
- package/out/zero-client/src/client/query-manager.js.map +1 -0
- package/out/zero-client/src/client/reload-error-handler.js +23 -0
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
- package/out/zero-client/src/client/replicache-types.js +2 -0
- package/out/zero-client/src/client/replicache-types.js.map +1 -0
- package/out/zero-client/src/client/server-error.js +22 -0
- package/out/zero-client/src/client/server-error.js.map +1 -0
- package/out/zero-client/src/client/server-option.js +37 -0
- package/out/zero-client/src/client/server-option.js.map +1 -0
- package/out/zero-client/src/client/version.js +5 -0
- package/out/zero-client/src/client/version.js.map +1 -0
- 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-poke-handler.js +240 -0
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
- package/out/zero-client/src/client/zero.d.ts +3 -2
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +1212 -0
- package/out/zero-client/src/client/zero.js.map +1 -0
- package/out/zero-client/src/mod.js +4 -0
- package/out/zero-client/src/mod.js.map +1 -0
- package/out/zero-client/src/util/nanoid.js +34 -0
- package/out/zero-client/src/util/nanoid.js.map +1 -0
- package/out/zero-client/src/util/socket.js +4 -0
- package/out/zero-client/src/util/socket.js.map +1 -0
- package/out/zero-protocol/src/ast.d.ts +87 -1
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +53 -0
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.d.ts +6 -6
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/clients-patch.d.ts +1 -1
- package/out/zero-protocol/src/connect.d.ts +15 -8
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +21 -0
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/data.d.ts +36 -0
- package/out/zero-protocol/src/data.d.ts.map +1 -0
- package/out/zero-protocol/src/data.js +4 -0
- package/out/zero-protocol/src/data.js.map +1 -0
- package/out/zero-protocol/src/delete-clients.d.ts +4 -4
- package/out/zero-protocol/src/delete-clients.d.ts.map +1 -1
- package/out/zero-protocol/src/down.d.ts +18 -16
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/down.js +2 -1
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/mod.d.ts +1 -2
- package/out/zero-protocol/src/mod.d.ts.map +1 -1
- package/out/zero-protocol/src/mod.js +2 -2
- package/out/zero-protocol/src/mod.js.map +1 -1
- package/out/zero-protocol/src/ping.d.ts +1 -1
- package/out/zero-protocol/src/ping.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +26 -26
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +8 -5
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.d.ts +1 -1
- package/out/zero-protocol/src/pong.d.ts.map +1 -1
- package/out/zero-protocol/src/primary-key.d.ts +2 -3
- package/out/zero-protocol/src/primary-key.d.ts.map +1 -1
- package/out/zero-protocol/src/primary-key.js +1 -3
- package/out/zero-protocol/src/primary-key.js.map +1 -1
- package/out/zero-protocol/src/pull.d.ts +4 -4
- package/out/zero-protocol/src/pull.d.ts.map +1 -1
- package/out/zero-protocol/src/push.d.ts +105 -98
- package/out/zero-protocol/src/push.d.ts.map +1 -1
- package/out/zero-protocol/src/push.js +17 -13
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.d.ts +4 -4
- package/out/zero-protocol/src/row-patch.d.ts +38 -0
- package/out/zero-protocol/src/row-patch.d.ts.map +1 -0
- package/out/zero-protocol/src/{entities-patch.js → row-patch.js} +10 -11
- package/out/zero-protocol/src/row-patch.js.map +1 -0
- package/out/zero-protocol/src/up.d.ts +28 -27
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-protocol/src/warm.d.ts +10 -0
- package/out/zero-protocol/src/warm.d.ts.map +1 -0
- package/out/zero-protocol/src/warm.js +6 -0
- package/out/zero-protocol/src/warm.js.map +1 -0
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero.js +499 -208
- package/out/zero.js.map +4 -4
- package/out/zql/src/zql/builder/builder.d.ts +3 -3
- package/out/zql/src/zql/builder/builder.d.ts.map +1 -1
- package/out/zql/src/zql/builder/builder.js +1 -1
- package/out/zql/src/zql/builder/builder.js.map +1 -1
- package/out/zql/src/zql/builder/filter.d.ts +2 -2
- package/out/zql/src/zql/builder/filter.d.ts.map +1 -1
- package/out/zql/src/zql/builder/filter.js.map +1 -1
- package/out/zql/src/zql/ivm/array-view.d.ts +1 -1
- package/out/zql/src/zql/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/array-view.js +232 -0
- package/out/zql/src/zql/ivm/array-view.js.map +1 -0
- package/out/zql/src/zql/ivm/change.d.ts +2 -1
- package/out/zql/src/zql/ivm/change.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/data.d.ts +2 -33
- package/out/zql/src/zql/ivm/data.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/data.js.map +1 -1
- package/out/zql/src/zql/ivm/filter.d.ts +2 -1
- package/out/zql/src/zql/ivm/filter.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/filter.js.map +1 -1
- package/out/zql/src/zql/ivm/join.d.ts +1 -1
- package/out/zql/src/zql/ivm/join.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/join.js +68 -24
- package/out/zql/src/zql/ivm/join.js.map +1 -1
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
- package/out/zql/src/zql/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/memory-source.d.ts +8 -6
- package/out/zql/src/zql/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/memory-source.js +2 -0
- package/out/zql/src/zql/ivm/memory-source.js.map +1 -1
- package/out/zql/src/zql/ivm/memory-storage.js +33 -0
- package/out/zql/src/zql/ivm/memory-storage.js.map +1 -0
- package/out/zql/src/zql/ivm/operator.d.ts +2 -1
- package/out/zql/src/zql/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/schema.d.ts +3 -3
- package/out/zql/src/zql/ivm/schema.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/schema.js.map +1 -1
- package/out/zql/src/zql/ivm/skip.d.ts +2 -1
- package/out/zql/src/zql/ivm/skip.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/skip.js.map +1 -1
- package/out/zql/src/zql/ivm/source.d.ts +2 -2
- package/out/zql/src/zql/ivm/source.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/take.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/take.js.map +1 -1
- package/out/zql/src/zql/query/normalize-table-schema.d.ts +48 -0
- package/out/zql/src/zql/query/normalize-table-schema.d.ts.map +1 -0
- package/out/zql/src/zql/query/normalize-table-schema.js +116 -0
- package/out/zql/src/zql/query/normalize-table-schema.js.map +1 -0
- package/out/zql/src/zql/query/query-impl.d.ts +6 -5
- package/out/zql/src/zql/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/zql/query/query-impl.js +263 -0
- package/out/zql/src/zql/query/query-impl.js.map +1 -0
- package/out/zql/src/zql/query/query.d.ts +1 -1
- package/out/zql/src/zql/query/query.d.ts.map +1 -1
- package/out/zql/src/zql/query/query.js +3 -0
- package/out/zql/src/zql/query/query.js.map +1 -0
- package/out/zql/src/zql/query/schema.d.ts +13 -4
- package/out/zql/src/zql/query/schema.d.ts.map +1 -1
- package/out/zql/src/zql/query/schema.js +7 -0
- package/out/zql/src/zql/query/schema.js.map +1 -0
- package/out/zql/src/zql/query/typed-view.js +2 -0
- package/out/zql/src/zql/query/typed-view.js.map +1 -0
- package/out/zqlite/src/db.d.ts +1 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +1 -1
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +2 -2
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +10 -8
- package/deps/sqlite3/sqlite3.c +0 -260574
- package/deps/sqlite3/sqlite3.h +0 -13572
- package/deps/sqlite3/sqlite3ext.h +0 -719
- package/out/zero-cache/src/db/migration-lite.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration-lite.js.map +0 -1
- package/out/zero-cache/src/db/migration.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js +0 -29
- package/out/zero-cache/src/services/change-streamer/pg/schema/create.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/lite.js.map +0 -1
- package/out/zero-cache/src/types/specs.d.ts +0 -29
- package/out/zero-cache/src/types/specs.d.ts.map +0 -1
- package/out/zero-cache/src/types/specs.js +0 -2
- package/out/zero-cache/src/types/specs.js.map +0 -1
- package/out/zero-client/src/client/make-id-from-primary-key.d.ts +0 -5
- package/out/zero-client/src/client/make-id-from-primary-key.d.ts.map +0 -1
- package/out/zero-protocol/src/entities-patch.d.ts +0 -66
- package/out/zero-protocol/src/entities-patch.d.ts.map +0 -1
- package/out/zero-protocol/src/entities-patch.js.map +0 -1
- package/out/zql/src/zql/ast/ast.d.ts +0 -84
- package/out/zql/src/zql/ast/ast.d.ts.map +0 -1
- package/out/zql/src/zql/ast/ast.js +0 -54
- package/out/zql/src/zql/ast/ast.js.map +0 -1
- package/tool/install-sqlite3.js +0 -37
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ident as id, literal as lit } from 'pg-format';
|
|
2
2
|
import * as v from '../../../../../../shared/src/valita.js';
|
|
3
|
+
import { filteredTableSpec, indexSpec } from '../../../../db/specs.js';
|
|
3
4
|
import { indexDefinitionsQuery, publishedTableQuery } from './published.js';
|
|
4
|
-
// Sent in the 'version' tag of "
|
|
5
|
-
// that the message constructed in the upstream
|
|
6
|
-
// with the code processing it in the zero-cache.
|
|
5
|
+
// Sent in the 'version' tag of "ddlStart" and "ddlUpdate" event messages.
|
|
6
|
+
// This is used to ensure that the message constructed in the upstream
|
|
7
|
+
// Trigger function is compatible with the code processing it in the zero-cache.
|
|
7
8
|
//
|
|
8
9
|
// Increment this when changing the format of the contents of the "ddl" events.
|
|
9
10
|
// This will allow old / incompatible code to detect the change and abort.
|
|
@@ -11,46 +12,124 @@ export const PROTOCOL_VERSION = 1;
|
|
|
11
12
|
const triggerEvent = v.object({
|
|
12
13
|
context: v.object({ query: v.string() }).rest(v.string()),
|
|
13
14
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
indexes: v.array(jsonObjectSchema.map(t => t)), // TODO: Define IndexSpec schema.
|
|
15
|
+
// The Schema type encapsulates a snapshot of the tables and indexes that
|
|
16
|
+
// are published / relevant to the shard.
|
|
17
|
+
const publishedSchema = v.object({
|
|
18
|
+
tables: v.array(filteredTableSpec),
|
|
19
|
+
indexes: v.array(indexSpec),
|
|
20
20
|
});
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
// All DDL events contain a snapshot of the current tables and indexes that
|
|
22
|
+
// are published / relevant to the shard.
|
|
23
|
+
export const ddlEventSchema = triggerEvent.extend({
|
|
24
|
+
version: v.literal(PROTOCOL_VERSION),
|
|
25
|
+
schema: publishedSchema,
|
|
24
26
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
// The `ddlStart` message is computed before every DDL event, regardless of
|
|
28
|
+
// whether the subsequent event affects the shard. Downstream processing should
|
|
29
|
+
// capture the contained schema information in order to determine the schema
|
|
30
|
+
// changes necessary to apply a subsequent `ddlUpdate` message. Note that a
|
|
31
|
+
// `ddlUpdate` message may not follow, as updates determined to be irrelevant
|
|
32
|
+
// to the shard will not result in a message. However, all `ddlUpdate` messages
|
|
33
|
+
// are guaranteed to be preceded by a `ddlStart` message.
|
|
34
|
+
export const ddlStartEventSchema = ddlEventSchema.extend({
|
|
35
|
+
type: v.literal('ddlStart'),
|
|
32
36
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
/**
|
|
38
|
+
* An tableEvent indicates the table that was created or altered. Note that
|
|
39
|
+
* this may result in changes to indexes.
|
|
40
|
+
*
|
|
41
|
+
* Note that a table alteration can only consistent of a single change, whether
|
|
42
|
+
* that be the name of the table, or an aspect of a single column. In particular,
|
|
43
|
+
* if the update contains a new column and removes an old column, that must
|
|
44
|
+
* necessarily mean that the old column was renamed.
|
|
45
|
+
*
|
|
46
|
+
* tableEvents are only emitted for tables published to the shard.
|
|
47
|
+
*/
|
|
48
|
+
const tableEvent = v.object({
|
|
49
|
+
tag: v.union(v.literal('CREATE TABLE'), v.literal('ALTER TABLE')),
|
|
50
|
+
table: v.object({ schema: v.string(), name: v.string() }),
|
|
36
51
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
52
|
+
/**
|
|
53
|
+
* An indexEvent indicates an index that was manually created.
|
|
54
|
+
*
|
|
55
|
+
* indexEvents are only emitted for (indexes of) tables published to the shard.
|
|
56
|
+
*/
|
|
57
|
+
const indexEvent = v.object({
|
|
58
|
+
tag: v.literal('CREATE INDEX'),
|
|
59
|
+
index: v.object({ schema: v.string(), name: v.string() }),
|
|
40
60
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
61
|
+
/**
|
|
62
|
+
* A drop event indicates the dropping of table(s) or index(es). Note
|
|
63
|
+
* that a `DROP TABLE` event can result in the dropping of both tables
|
|
64
|
+
* and their indexes.
|
|
65
|
+
*
|
|
66
|
+
* Drop events are emitted to all shards. It is up to the downstream
|
|
67
|
+
* processor to determine (from the preceding {@link DdlStartEvent})
|
|
68
|
+
* whether the dropped objects are relevant to the shard.
|
|
69
|
+
*/
|
|
70
|
+
const dropEvent = v.object({
|
|
71
|
+
tag: v.union(v.literal('DROP TABLE'), v.literal('DROP INDEX')),
|
|
45
72
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
73
|
+
/**
|
|
74
|
+
* A publication event indicates a change in the visibility of tables
|
|
75
|
+
* and/or columns. This can mean any number of columns added or
|
|
76
|
+
* removed. However, it will never represent table or column renames
|
|
77
|
+
* (as those are only possible with `ALTER TABLE` statements).
|
|
78
|
+
*
|
|
79
|
+
* Publication events are not emitted if the altered publication is
|
|
80
|
+
* known and not included by the shard. However, due to the way
|
|
81
|
+
* Postgres Triggers work, the publication is not always known, and
|
|
82
|
+
* so it is possible for a shard to receive irrelevant publication
|
|
83
|
+
* events.
|
|
84
|
+
*/
|
|
85
|
+
const publicationEvent = v.object({
|
|
86
|
+
tag: v.literal('ALTER PUBLICATION'),
|
|
49
87
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
/**
|
|
89
|
+
* The {@link DdlUpdateEvent} contains an updated schema resulting from
|
|
90
|
+
* a particular ddl event. The event type provides information
|
|
91
|
+
* (i.e. constraints) on the difference from the schema of the preceding
|
|
92
|
+
* {@link DdlStartEvent}.
|
|
93
|
+
*
|
|
94
|
+
* Note that in almost all cases (the exception being `CREATE` events),
|
|
95
|
+
* it is possible that there is no relevant difference between the
|
|
96
|
+
* ddl-start schema and the ddl-update schema, as many aspects of the
|
|
97
|
+
* schema (e.g. column constraints) are not relevant to downstream
|
|
98
|
+
* replication.
|
|
99
|
+
*/
|
|
100
|
+
export const ddlUpdateEventSchema = ddlEventSchema.extend({
|
|
101
|
+
type: v.literal('ddlUpdate'),
|
|
102
|
+
event: v.union(tableEvent, indexEvent, dropEvent, publicationEvent),
|
|
103
|
+
});
|
|
104
|
+
export const replicationEventSchema = v.union(ddlStartEventSchema, ddlUpdateEventSchema);
|
|
105
|
+
// Creates a function that appends `_SHARD_ID` to the input.
|
|
106
|
+
function append(shardID) {
|
|
107
|
+
return (name) => id(name + '_' + shardID);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Event trigger functions contain the core logic that are invoked by triggers.
|
|
111
|
+
*
|
|
112
|
+
* Note that although many of these functions can theoretically be parameterized and
|
|
113
|
+
* shared across shards, it is advantageous to keep the functions in each shard
|
|
114
|
+
* isolated from each other in order to avoid the complexity of shared-function
|
|
115
|
+
* versioning.
|
|
116
|
+
*
|
|
117
|
+
* In a sense, shards (and their triggers and functions) should be thought of as
|
|
118
|
+
* execution environments that can be updated at different schedules. If per-shard
|
|
119
|
+
* triggers called into shared functions, we would have to consider versioning the
|
|
120
|
+
* functions when changing their behavior, backwards compatibility, removal of
|
|
121
|
+
* unused versions, etc. (not unlike versioning of npm packages).
|
|
122
|
+
*
|
|
123
|
+
* Instead, we opt for the simplicity and isolation of having each shard
|
|
124
|
+
* completely own (and maintain) the entirety of its trigger/function stack.
|
|
125
|
+
*/
|
|
126
|
+
function createEventFunctionStatements(shardID, publications) {
|
|
127
|
+
const schema = append(shardID)('zero'); // e.g. "zero_SHARD_ID"
|
|
128
|
+
return `
|
|
129
|
+
CREATE SCHEMA IF NOT EXISTS ${schema};
|
|
130
|
+
|
|
131
|
+
CREATE OR REPLACE FUNCTION ${schema}.get_trigger_context()
|
|
132
|
+
RETURNS record AS $$
|
|
54
133
|
DECLARE
|
|
55
134
|
result record;
|
|
56
135
|
BEGIN
|
|
@@ -59,179 +138,180 @@ BEGIN
|
|
|
59
138
|
END
|
|
60
139
|
$$ LANGUAGE plpgsql;
|
|
61
140
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
AS $$
|
|
65
|
-
DECLARE
|
|
66
|
-
event text;
|
|
141
|
+
|
|
142
|
+
CREATE OR REPLACE FUNCTION ${schema}.notice_ignore(object_id TEXT)
|
|
143
|
+
RETURNS void AS $$
|
|
67
144
|
BEGIN
|
|
68
|
-
|
|
69
|
-
'type', 'error',
|
|
70
|
-
'event', json_build_object(
|
|
71
|
-
'context', zero.get_trigger_context(),
|
|
72
|
-
'message', message
|
|
73
|
-
)
|
|
74
|
-
) into event;
|
|
75
|
-
|
|
76
|
-
PERFORM pg_logical_emit_message(true, 'zero', event);
|
|
145
|
+
RAISE NOTICE 'zero(%) ignoring %', ${lit(shardID)}, object_id;
|
|
77
146
|
END
|
|
78
147
|
$$ LANGUAGE plpgsql;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
RETURNS event_trigger
|
|
84
|
-
AS $$
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
CREATE OR REPLACE FUNCTION ${schema}.schema_specs()
|
|
151
|
+
RETURNS TEXT AS $$
|
|
85
152
|
DECLARE
|
|
86
|
-
tag text;
|
|
87
153
|
tables record;
|
|
88
154
|
indexes record;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
155
|
+
BEGIN
|
|
156
|
+
${publishedTableQuery(publications)} INTO tables;
|
|
157
|
+
${indexDefinitionsQuery(publications)} INTO indexes;
|
|
158
|
+
RETURN json_build_object(
|
|
159
|
+
'tables', tables.tables,
|
|
160
|
+
'indexes', indexes.indexes
|
|
161
|
+
);
|
|
162
|
+
END
|
|
163
|
+
$$ LANGUAGE plpgsql;
|
|
98
164
|
|
|
99
|
-
IF json_array_length(tables.tables) = 0
|
|
100
|
-
THEN RETURN; END IF; -- not a table published by "pubPrefix"
|
|
101
165
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
END IF;
|
|
166
|
+
CREATE OR REPLACE FUNCTION ${schema}.emit_ddl_start()
|
|
167
|
+
RETURNS event_trigger AS $$
|
|
168
|
+
DECLARE
|
|
169
|
+
schema_specs TEXT;
|
|
170
|
+
message TEXT;
|
|
171
|
+
BEGIN
|
|
172
|
+
SELECT ${schema}.schema_specs() INTO schema_specs;
|
|
110
173
|
|
|
111
|
-
${indexDefinitionsQuery(undefined, `JOIN pg_event_trigger_ddl_commands() ddl on ddl.objid = pg_index.indrelid`)} INTO indexes;
|
|
112
|
-
|
|
113
174
|
SELECT json_build_object(
|
|
114
|
-
'type', '
|
|
175
|
+
'type', 'ddlStart',
|
|
115
176
|
'version', ${PROTOCOL_VERSION},
|
|
116
|
-
'
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
) INTO event;
|
|
123
|
-
|
|
124
|
-
PERFORM pg_logical_emit_message(true, 'zero', event);
|
|
125
|
-
END
|
|
177
|
+
'schema', schema_specs::json,
|
|
178
|
+
'context', ${schema}.get_trigger_context()
|
|
179
|
+
) INTO message;
|
|
180
|
+
|
|
181
|
+
PERFORM pg_logical_emit_message(true, ${lit('zero/' + shardID)}, message);
|
|
182
|
+
END
|
|
126
183
|
$$ LANGUAGE plpgsql;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
CREATE OR REPLACE FUNCTION zero.replicate_create_index()
|
|
132
|
-
RETURNS event_trigger
|
|
133
|
-
AS $$
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
CREATE OR REPLACE FUNCTION ${schema}.emit_ddl_end(tag TEXT)
|
|
187
|
+
RETURNS void AS $$
|
|
134
188
|
DECLARE
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
189
|
+
publications TEXT[];
|
|
190
|
+
cmd RECORD;
|
|
191
|
+
target RECORD;
|
|
192
|
+
pub RECORD;
|
|
193
|
+
in_shard RECORD;
|
|
194
|
+
schema_specs TEXT;
|
|
195
|
+
message TEXT;
|
|
196
|
+
event TEXT;
|
|
197
|
+
BEGIN
|
|
198
|
+
publications := ARRAY[${lit(publications)}];
|
|
199
|
+
|
|
200
|
+
SELECT objid, object_type, object_identity FROM pg_event_trigger_ddl_commands() LIMIT 1 INTO cmd;
|
|
201
|
+
|
|
202
|
+
-- Filter DDL updates that are not relevant to the shard (i.e. publications) when possible.
|
|
203
|
+
|
|
204
|
+
IF cmd.object_type = 'table' OR cmd.object_type = 'table column' THEN
|
|
205
|
+
SELECT ns.nspname as "schema", c.relname as "name" FROM pg_class AS c
|
|
206
|
+
JOIN pg_namespace As ns ON c.relnamespace = ns.oid
|
|
207
|
+
JOIN pg_publication_tables AS pb ON pb.schemaname = ns.nspname AND pb.tablename = c.relname
|
|
208
|
+
WHERE c.oid = cmd.objid AND pb.pubname = ANY (publications)
|
|
209
|
+
INTO target;
|
|
210
|
+
IF target IS NULL THEN
|
|
211
|
+
PERFORM ${schema}.notice_ignore(cmd.object_identity);
|
|
212
|
+
RETURN;
|
|
213
|
+
END IF;
|
|
214
|
+
|
|
215
|
+
cmd.object_type := 'table'; -- normalize the 'table column' target to 'table'
|
|
216
|
+
|
|
217
|
+
ELSIF cmd.object_type = 'index' THEN
|
|
218
|
+
SELECT ns.nspname as "schema", c.relname as "name" FROM pg_class AS c
|
|
219
|
+
JOIN pg_namespace As ns ON c.relnamespace = ns.oid
|
|
220
|
+
JOIN pg_indexes as ind ON ind.schemaname = ns.nspname AND ind.indexname = c.relname
|
|
221
|
+
JOIN pg_publication_tables AS pb ON pb.schemaname = ns.nspname AND pb.tablename = ind.tablename
|
|
222
|
+
WHERE c.oid = cmd.objid AND pb.pubname = ANY (publications)
|
|
223
|
+
INTO target;
|
|
224
|
+
IF target IS NULL THEN
|
|
225
|
+
PERFORM ${schema}.notice_ignore(cmd.object_identity);
|
|
226
|
+
RETURN;
|
|
227
|
+
END IF;
|
|
228
|
+
|
|
229
|
+
ELSIF cmd.object_type = 'publication relation' THEN
|
|
230
|
+
SELECT pb.pubname FROM pg_publication_rel AS rel
|
|
231
|
+
JOIN pg_publication AS pb ON pb.oid = rel.prpubid
|
|
232
|
+
WHERE rel.oid = cmd.objid AND pb.pubname = ANY (publications)
|
|
233
|
+
INTO pub;
|
|
234
|
+
IF pub IS NULL THEN
|
|
235
|
+
PERFORM ${schema}.notice_ignore(cmd.object_identity);
|
|
236
|
+
RETURN;
|
|
237
|
+
END IF;
|
|
238
|
+
|
|
239
|
+
ELSIF cmd.object_type = 'publication namespace' THEN
|
|
240
|
+
SELECT pb.pubname FROM pg_publication_namespace AS ns
|
|
241
|
+
JOIN pg_publication AS pb ON pb.oid = ns.pnpubid
|
|
242
|
+
WHERE ns.oid = cmd.objid AND pb.pubname = ANY (publications)
|
|
243
|
+
INTO pub;
|
|
244
|
+
IF pub IS NULL THEN
|
|
245
|
+
PERFORM ${schema}.notice_ignore(cmd.object_identity);
|
|
246
|
+
RETURN;
|
|
247
|
+
END IF;
|
|
248
|
+
END IF;
|
|
139
249
|
|
|
140
|
-
|
|
141
|
-
THEN RETURN; END IF; -- not an index published by "pubPrefix"
|
|
250
|
+
-- Construct and emit the DdlUpdateEvent message.
|
|
142
251
|
|
|
143
|
-
IF
|
|
252
|
+
IF target IS NOT NULL
|
|
144
253
|
THEN
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
);
|
|
149
|
-
RETURN;
|
|
254
|
+
SELECT json_build_object('tag', tag, cmd.object_type, target) INTO event;
|
|
255
|
+
ELSE
|
|
256
|
+
SELECT json_build_object('tag', tag) INTO event;
|
|
150
257
|
END IF;
|
|
151
258
|
|
|
259
|
+
SELECT ${schema}.schema_specs() INTO schema_specs;
|
|
260
|
+
|
|
152
261
|
SELECT json_build_object(
|
|
153
|
-
'type', '
|
|
262
|
+
'type', 'ddlUpdate',
|
|
154
263
|
'version', ${PROTOCOL_VERSION},
|
|
155
|
-
'
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
PERFORM pg_logical_emit_message(true, 'zero', event);
|
|
264
|
+
'schema', schema_specs::json,
|
|
265
|
+
'event', event::json,
|
|
266
|
+
'context', ${schema}.get_trigger_context()
|
|
267
|
+
) INTO message;
|
|
268
|
+
|
|
269
|
+
PERFORM pg_logical_emit_message(true, ${lit('zero/' + shardID)}, message);
|
|
163
270
|
END
|
|
164
271
|
$$ LANGUAGE plpgsql;
|
|
165
|
-
|
|
272
|
+
`;
|
|
166
273
|
}
|
|
167
|
-
const
|
|
168
|
-
CREATE
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
274
|
+
const TAGS = [
|
|
275
|
+
'CREATE TABLE',
|
|
276
|
+
'ALTER TABLE',
|
|
277
|
+
'CREATE INDEX',
|
|
278
|
+
'DROP TABLE',
|
|
279
|
+
'DROP INDEX',
|
|
280
|
+
'ALTER PUBLICATION',
|
|
281
|
+
];
|
|
282
|
+
export function createEventTriggerStatements(shardID, publications) {
|
|
283
|
+
// Unlike functions, which are namespaced in shard-specific schemas,
|
|
284
|
+
// EVENT TRIGGER names are in the global namespace and instead have the shardID appended.
|
|
285
|
+
const sharded = append(shardID);
|
|
286
|
+
const schema = sharded('zero');
|
|
287
|
+
const triggers = [createEventFunctionStatements(shardID, publications)];
|
|
288
|
+
// A single ddl_command_start trigger covering all relevant tags.
|
|
289
|
+
triggers.push(`
|
|
290
|
+
DROP EVENT TRIGGER IF EXISTS ${sharded('zero_ddl_start')};
|
|
291
|
+
CREATE EVENT TRIGGER ${sharded('zero_ddl_start')}
|
|
292
|
+
ON ddl_command_start
|
|
293
|
+
WHEN TAG IN (${lit(TAGS)})
|
|
294
|
+
EXECUTE PROCEDURE ${schema}.emit_ddl_start();
|
|
295
|
+
`);
|
|
296
|
+
// A per-tag ddl_command_end trigger that dispatches to ${schema}.emit_ddl_end(tag)
|
|
297
|
+
for (const tag of TAGS) {
|
|
298
|
+
const tagID = tag.toLowerCase().replace(' ', '_');
|
|
299
|
+
triggers.push(`
|
|
300
|
+
CREATE OR REPLACE FUNCTION ${schema}.emit_${tagID}()
|
|
301
|
+
RETURNS event_trigger AS $$
|
|
173
302
|
BEGIN
|
|
174
|
-
|
|
175
|
-
'type', 'ddl',
|
|
176
|
-
'version', ${PROTOCOL_VERSION},
|
|
177
|
-
'event', json_build_object(
|
|
178
|
-
'context', zero.get_trigger_context(),
|
|
179
|
-
'tag', tag,
|
|
180
|
-
dropped, json_agg(json_build_object(
|
|
181
|
-
'schema', schema_name,
|
|
182
|
-
'objectIdentity', object_identity
|
|
183
|
-
))
|
|
184
|
-
)
|
|
185
|
-
) FROM pg_event_trigger_dropped_objects()
|
|
186
|
-
WHERE object_type = type
|
|
187
|
-
INTO event;
|
|
188
|
-
|
|
189
|
-
PERFORM pg_logical_emit_message(true, 'zero', event);
|
|
303
|
+
PERFORM ${schema}.emit_ddl_end(${lit(tag)});
|
|
190
304
|
END
|
|
191
305
|
$$ LANGUAGE plpgsql;
|
|
192
306
|
|
|
193
|
-
CREATE OR REPLACE FUNCTION zero.replicate_drop_table()
|
|
194
|
-
RETURNS event_trigger
|
|
195
|
-
AS $$
|
|
196
|
-
BEGIN
|
|
197
|
-
PERFORM zero.replicate_drop_event('DROP TABLE', 'table', 'tables');
|
|
198
|
-
END
|
|
199
|
-
$$ LANGUAGE plpgsql;
|
|
200
307
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
export function createEventTriggerStatements() {
|
|
210
|
-
return [
|
|
211
|
-
COMMON_TRIGGER_FUNCTIONS,
|
|
212
|
-
replicateCreateOrAlterTable(),
|
|
213
|
-
`DROP EVENT TRIGGER IF EXISTS zero_replicate_create_or_alter_table`,
|
|
214
|
-
`CREATE EVENT TRIGGER zero_replicate_create_or_alter_table
|
|
215
|
-
ON ddl_command_end
|
|
216
|
-
WHEN TAG IN ('CREATE TABLE', 'ALTER TABLE')
|
|
217
|
-
EXECUTE PROCEDURE zero.replicate_create_or_alter_table()`,
|
|
218
|
-
replicateCreateIndex(),
|
|
219
|
-
`DROP EVENT TRIGGER IF EXISTS zero_replicate_create_index`,
|
|
220
|
-
`CREATE EVENT TRIGGER zero_replicate_create_index
|
|
221
|
-
ON ddl_command_end
|
|
222
|
-
WHEN TAG IN ('CREATE INDEX')
|
|
223
|
-
EXECUTE PROCEDURE zero.replicate_create_index()`,
|
|
224
|
-
DROP_EVENT_TRIGGERS,
|
|
225
|
-
`DROP EVENT TRIGGER IF EXISTS zero_replicate_drop_table`,
|
|
226
|
-
`CREATE EVENT TRIGGER zero_replicate_drop_table
|
|
227
|
-
ON sql_drop
|
|
228
|
-
WHEN TAG IN ('DROP TABLE')
|
|
229
|
-
EXECUTE PROCEDURE zero.replicate_drop_table()`,
|
|
230
|
-
`DROP EVENT TRIGGER IF EXISTS zero_replicate_drop_index`,
|
|
231
|
-
`CREATE EVENT TRIGGER zero_replicate_drop_index
|
|
232
|
-
ON sql_drop
|
|
233
|
-
WHEN TAG IN ('DROP INDEX')
|
|
234
|
-
EXECUTE PROCEDURE zero.replicate_drop_index()`,
|
|
235
|
-
].join(';\n');
|
|
308
|
+
DROP EVENT TRIGGER IF EXISTS ${sharded(`zero_${tagID}`)};
|
|
309
|
+
CREATE EVENT TRIGGER ${sharded(`zero_${tagID}`)}
|
|
310
|
+
ON ddl_command_end
|
|
311
|
+
WHEN TAG IN (${lit(tag)})
|
|
312
|
+
EXECUTE PROCEDURE ${schema}.emit_${tagID}();
|
|
313
|
+
`);
|
|
314
|
+
}
|
|
315
|
+
return triggers.join('');
|
|
236
316
|
}
|
|
237
317
|
//# sourceMappingURL=ddl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/ddl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-streamer/pg/schema/ddl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type postgres from 'postgres';
|
|
2
2
|
import * as v from '../../../../../../shared/src/valita.js';
|
|
3
|
-
import type { FilteredTableSpec, IndexSpec } from '../../../../
|
|
4
|
-
export declare function publishedTableQuery(publications: string[]
|
|
5
|
-
export declare function indexDefinitionsQuery(publications: string[]
|
|
3
|
+
import type { FilteredTableSpec, IndexSpec } from '../../../../db/specs.js';
|
|
4
|
+
export declare function publishedTableQuery(publications: string[]): string;
|
|
5
|
+
export declare function indexDefinitionsQuery(publications: string[]): string;
|
|
6
6
|
declare const publicationSchema: v.ObjectType<{
|
|
7
7
|
pubname: v.Type<string>;
|
|
8
8
|
pubinsert: v.Type<boolean>;
|
|
@@ -21,6 +21,6 @@ export type PublicationInfo = {
|
|
|
21
21
|
* publications that start with "zero_" or "_zero_", but this can be
|
|
22
22
|
* overridden by specifying a specific set of `publications`.
|
|
23
23
|
*/
|
|
24
|
-
export declare function getPublicationInfo(sql: postgres.Sql, publications
|
|
24
|
+
export declare function getPublicationInfo(sql: postgres.Sql, publications: string[]): Promise<PublicationInfo>;
|
|
25
25
|
export {};
|
|
26
26
|
//# sourceMappingURL=published.d.ts.map
|
|
@@ -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;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAC,MAAM,
|
|
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;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAM1E,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAgEzD;AAMD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,UAwD3D;AAED,QAAA,MAAM,iBAAiB;;;;;;aAMrB,CAAC;AAIH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,QAAQ,CAAC,GAAG,EACjB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,eAAe,CAAC,CAiD1B"}
|
|
@@ -1,14 +1,7 @@
|
|
|
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
|
-
|
|
5
|
-
function restrictTo(publications) {
|
|
6
|
-
return publications !== undefined
|
|
7
|
-
? `pb.pubname IN (${literal(publications)})`
|
|
8
|
-
: `( STARTS_WITH(pb.pubname, ${literal(APP_PUBLICATION_PREFIX)})
|
|
9
|
-
OR STARTS_WITH(pb.pubname, ${literal(INTERNAL_PUBLICATION_PREFIX)}) )`;
|
|
10
|
-
}
|
|
11
|
-
export function publishedTableQuery(publications, join = '') {
|
|
4
|
+
export function publishedTableQuery(publications) {
|
|
12
5
|
return `
|
|
13
6
|
WITH published_columns AS (SELECT
|
|
14
7
|
nspname AS "schema",
|
|
@@ -32,10 +25,9 @@ JOIN pg_publication_tables as pb ON
|
|
|
32
25
|
pb.schemaname = nspname AND
|
|
33
26
|
pb.tablename = pc.relname AND
|
|
34
27
|
attname = ANY(pb.attnames)
|
|
35
|
-
${join}
|
|
36
28
|
LEFT JOIN pg_constraint pk ON pk.contype = 'p' AND pk.connamespace = relnamespace AND pk.conrelid = attrelid
|
|
37
29
|
LEFT JOIN pg_attrdef pd ON pd.adrelid = attrelid AND pd.adnum = attnum
|
|
38
|
-
WHERE ${
|
|
30
|
+
WHERE pb.pubname IN (${literal(publications)})
|
|
39
31
|
ORDER BY nspname, pc.relname),
|
|
40
32
|
|
|
41
33
|
tables AS (SELECT json_build_object(
|
|
@@ -74,7 +66,7 @@ tables AS (SELECT json_build_object(
|
|
|
74
66
|
SELECT COALESCE(json_agg("table"), '[]'::json) as "tables" FROM tables
|
|
75
67
|
`;
|
|
76
68
|
}
|
|
77
|
-
export function indexDefinitionsQuery(publications
|
|
69
|
+
export function indexDefinitionsQuery(publications) {
|
|
78
70
|
// Note: pg_attribute contains column names for tables and for indexes.
|
|
79
71
|
// However, the latter does not get updated when a column in a table is
|
|
80
72
|
// renamed.
|
|
@@ -84,12 +76,16 @@ export function indexDefinitionsQuery(publications, join = '') {
|
|
|
84
76
|
// To address this, the pg_attribute rows are looked up for the index's
|
|
85
77
|
// table rather than the index itself, using the pg_index.indkey array
|
|
86
78
|
// to determine the set and order of columns to include.
|
|
79
|
+
//
|
|
80
|
+
// Note: The first bit of indoption is 1 for DESC and 0 for ASC:
|
|
81
|
+
// https://github.com/postgres/postgres/blob/4e1fad37872e49a711adad5d9870516e5c71a375/src/include/catalog/pg_index.h#L89
|
|
87
82
|
return `
|
|
88
83
|
WITH indexed_columns AS (SELECT
|
|
89
|
-
pg_indexes.schemaname as "
|
|
84
|
+
pg_indexes.schemaname as "schema",
|
|
90
85
|
pg_indexes.tablename as "tableName",
|
|
91
86
|
pg_indexes.indexname as "name",
|
|
92
87
|
index_column.name as "col",
|
|
88
|
+
CASE WHEN pg_index.indoption[index_column.pos-1] & 1 = 1 THEN 'DESC' ELSE 'ASC' END as "dir",
|
|
93
89
|
pg_index.indisunique as "unique"
|
|
94
90
|
FROM pg_indexes
|
|
95
91
|
JOIN pg_namespace ON pg_indexes.schemaname = pg_namespace.nspname
|
|
@@ -105,9 +101,8 @@ export function indexDefinitionsQuery(publications, join = '') {
|
|
|
105
101
|
FROM UNNEST(pg_index.indkey) WITH ORDINALITY as col(table_pos, index_pos)
|
|
106
102
|
JOIN pg_attribute ON attrelid = pg_index.indrelid AND attnum = col.table_pos
|
|
107
103
|
) AS index_column ON true
|
|
108
|
-
${join}
|
|
109
104
|
LEFT JOIN pg_constraint ON pg_constraint.conindid = pc.oid
|
|
110
|
-
WHERE ${
|
|
105
|
+
WHERE pb.pubname IN (${literal(publications)})
|
|
111
106
|
AND pg_constraint.contype is distinct from 'p'
|
|
112
107
|
AND pg_constraint.contype is distinct from 'f'
|
|
113
108
|
ORDER BY
|
|
@@ -117,13 +112,13 @@ export function indexDefinitionsQuery(publications, join = '') {
|
|
|
117
112
|
index_column.pos ASC),
|
|
118
113
|
|
|
119
114
|
indexes AS (SELECT json_build_object(
|
|
120
|
-
'
|
|
115
|
+
'schema', "schema",
|
|
121
116
|
'tableName', "tableName",
|
|
122
117
|
'name', "name",
|
|
123
118
|
'unique', "unique",
|
|
124
|
-
'columns',
|
|
119
|
+
'columns', json_object_agg(DISTINCT "col", "dir")
|
|
125
120
|
) AS index FROM indexed_columns
|
|
126
|
-
GROUP BY "
|
|
121
|
+
GROUP BY "schema", "tableName", "name", "unique")
|
|
127
122
|
|
|
128
123
|
SELECT COALESCE(json_agg("index"), '[]'::json) as "indexes" FROM indexes
|
|
129
124
|
`;
|
|
@@ -148,11 +143,11 @@ export async function getPublicationInfo(sql, publications) {
|
|
|
148
143
|
tablename AS "table",
|
|
149
144
|
json_object_agg(pubname, attnames) AS "publications"
|
|
150
145
|
FROM pg_publication_tables pb
|
|
151
|
-
WHERE ${
|
|
146
|
+
WHERE pb.pubname IN (${literal(publications)})
|
|
152
147
|
GROUP BY schemaname, tablename;
|
|
153
148
|
|
|
154
149
|
SELECT ${Object.keys(publicationSchema.shape).join(',')} FROM pg_publication pb
|
|
155
|
-
WHERE ${
|
|
150
|
+
WHERE pb.pubname IN (${literal(publications)})
|
|
156
151
|
ORDER BY pubname;
|
|
157
152
|
|
|
158
153
|
${publishedTableQuery(publications)};
|