@rocicorp/zero 1.12.0-canary.1 → 1.12.0-canary.11
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/_virtual/{_@oxc-project_runtime@0.130.0/helpers → _@oxc-project_runtime@0.154.0/helpers/esm}/usingCtx.js +2 -2
- package/out/analyze-query/src/analyze-cli.d.ts.map +1 -1
- package/out/analyze-query/src/analyze-cli.js +6 -4
- package/out/analyze-query/src/analyze-cli.js.map +1 -1
- package/out/analyze-query/src/bin-transform.js +4 -3
- package/out/analyze-query/src/bin-transform.js.map +1 -1
- package/out/analyze-query/src/zql-chain.d.ts +23 -0
- package/out/analyze-query/src/zql-chain.d.ts.map +1 -0
- package/out/analyze-query/src/zql-chain.js +170 -0
- package/out/analyze-query/src/zql-chain.js.map +1 -0
- package/out/ast-to-zql/src/ast-to-zql.d.ts.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.js +61 -20
- package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
- package/out/ast-to-zql/src/bin.js +4 -3
- package/out/ast-to-zql/src/bin.js.map +1 -1
- package/out/ast-to-zql/src/format.js.map +1 -1
- package/out/datadog/src/datadog-log-sink.js +5 -4
- package/out/datadog/src/datadog-log-sink.js.map +1 -1
- package/out/otel/src/log-options.js.map +1 -1
- package/out/replicache/src/btree/node.d.ts +0 -2
- package/out/replicache/src/btree/node.d.ts.map +1 -1
- package/out/replicache/src/btree/node.js +14 -12
- package/out/replicache/src/btree/node.js.map +1 -1
- package/out/replicache/src/btree/read.js +4 -2
- package/out/replicache/src/btree/read.js.map +1 -1
- package/out/replicache/src/btree/splice.js.map +1 -1
- package/out/replicache/src/btree/write.js +9 -5
- package/out/replicache/src/btree/write.js.map +1 -1
- package/out/replicache/src/config.js +1 -2
- package/out/replicache/src/connection-loop.d.ts.map +1 -1
- package/out/replicache/src/connection-loop.js +1 -1
- package/out/replicache/src/connection-loop.js.map +1 -1
- package/out/replicache/src/dag/chunk.js +1 -1
- package/out/replicache/src/dag/gc.js.map +1 -1
- package/out/replicache/src/dag/lazy-store.js +8 -7
- package/out/replicache/src/dag/lazy-store.js.map +1 -1
- package/out/replicache/src/dag/store-impl.js +1 -1
- package/out/replicache/src/dag/store-impl.js.map +1 -1
- package/out/replicache/src/dag/visitor.js.map +1 -1
- package/out/replicache/src/db/commit.d.ts +0 -1
- package/out/replicache/src/db/commit.d.ts.map +1 -1
- package/out/replicache/src/db/commit.js +5 -3
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/read.js +1 -1
- package/out/replicache/src/db/read.js.map +1 -1
- package/out/replicache/src/db/rebase.js.map +1 -1
- package/out/replicache/src/db/write.d.ts +0 -2
- package/out/replicache/src/db/write.d.ts.map +1 -1
- package/out/replicache/src/db/write.js +5 -2
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/deleted-clients.d.ts +0 -2
- package/out/replicache/src/deleted-clients.d.ts.map +1 -1
- package/out/replicache/src/deleted-clients.js +5 -3
- package/out/replicache/src/deleted-clients.js.map +1 -1
- package/out/replicache/src/expo-sqlite.js +1 -2
- package/out/replicache/src/frozen-json.d.ts +0 -1
- package/out/replicache/src/frozen-json.d.ts.map +1 -1
- package/out/replicache/src/frozen-json.js +1 -1
- package/out/replicache/src/frozen-json.js.map +1 -1
- package/out/replicache/src/get-default-puller.js +1 -1
- package/out/replicache/src/hash.js +1 -1
- package/out/replicache/src/hash.js.map +1 -1
- package/out/replicache/src/impl.js +1 -2
- package/out/replicache/src/index-defs.d.ts +0 -2
- package/out/replicache/src/index-defs.d.ts.map +1 -1
- package/out/replicache/src/index-defs.js +5 -3
- package/out/replicache/src/index-defs.js.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts +0 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/idb-store.js +2 -2
- package/out/replicache/src/kv/idb-store.js.map +1 -1
- package/out/replicache/src/kv/mem-fallback-store.js +1 -1
- package/out/replicache/src/kv/mem-fallback-store.js.map +1 -1
- package/out/replicache/src/kv/mem-store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
- package/out/replicache/src/kv/read-impl.js.map +1 -1
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/kv/sqlite-store.js +8 -4
- package/out/replicache/src/kv/sqlite-store.js.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.d.ts +0 -3
- package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -1
- package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
- package/out/replicache/src/kv/write-impl-base.js +4 -1
- package/out/replicache/src/kv/write-impl-base.js.map +1 -1
- package/out/replicache/src/kv/write-impl.js.map +1 -1
- package/out/replicache/src/log-options.js +2 -1
- package/out/replicache/src/log-options.js.map +1 -1
- package/out/replicache/src/make-idb-name.js +1 -1
- package/out/replicache/src/new-client-channel.js +9 -7
- package/out/replicache/src/new-client-channel.js.map +1 -1
- package/out/replicache/src/on-persist-channel.js +1 -1
- package/out/replicache/src/on-persist-channel.js.map +1 -1
- package/out/replicache/src/op-sqlite.js +1 -2
- package/out/replicache/src/pending-mutations.js +2 -1
- package/out/replicache/src/pending-mutations.js.map +1 -1
- package/out/replicache/src/persist/client-gc.js +2 -2
- package/out/replicache/src/persist/client-gc.js.map +1 -1
- package/out/replicache/src/persist/client-group-gc.d.ts +0 -7
- package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
- package/out/replicache/src/persist/client-group-gc.js +1 -1
- package/out/replicache/src/persist/client-group-gc.js.map +1 -1
- package/out/replicache/src/persist/client-groups.js +1 -1
- package/out/replicache/src/persist/client-groups.js.map +1 -1
- package/out/replicache/src/persist/clients.js +1 -1
- package/out/replicache/src/persist/clients.js.map +1 -1
- package/out/replicache/src/persist/collect-idb-databases.js +5 -4
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
- package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
- package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
- package/out/replicache/src/persist/heartbeat.js +2 -2
- package/out/replicache/src/persist/heartbeat.js.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.js +1 -1
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
- package/out/replicache/src/persist/make-client-id.js +1 -1
- package/out/replicache/src/persist/make-client-id.js.map +1 -1
- package/out/replicache/src/persist/persist.js +3 -2
- package/out/replicache/src/persist/persist.js.map +1 -1
- package/out/replicache/src/persist/refresh.js +8 -5
- package/out/replicache/src/persist/refresh.js.map +1 -1
- package/out/replicache/src/process-scheduler.js +1 -1
- package/out/replicache/src/process-scheduler.js.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts +2 -7
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js +21 -18
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/scan-iterator.js.map +1 -1
- package/out/replicache/src/scan-options.js +7 -6
- package/out/replicache/src/scan-options.js.map +1 -1
- package/out/replicache/src/sqlite.js +1 -2
- package/out/replicache/src/subscriptions.js +1 -1
- package/out/replicache/src/subscriptions.js.map +1 -1
- package/out/replicache/src/sync/diff.js +3 -1
- package/out/replicache/src/sync/diff.js.map +1 -1
- package/out/replicache/src/sync/ids.js.map +1 -1
- package/out/replicache/src/sync/patch.d.ts +0 -5
- package/out/replicache/src/sync/patch.d.ts.map +1 -1
- package/out/replicache/src/sync/patch.js +2 -4
- package/out/replicache/src/sync/patch.js.map +1 -1
- package/out/replicache/src/sync/pull.d.ts +0 -1
- package/out/replicache/src/sync/pull.d.ts.map +1 -1
- package/out/replicache/src/sync/pull.js +3 -1
- package/out/replicache/src/sync/pull.js.map +1 -1
- package/out/replicache/src/sync/push.d.ts +2 -1
- package/out/replicache/src/sync/push.d.ts.map +1 -1
- package/out/replicache/src/sync/push.js.map +1 -1
- package/out/replicache/src/sync/request-id.js +1 -1
- package/out/replicache/src/sync/request-id.js.map +1 -1
- package/out/replicache/src/transactions.js +1 -1
- package/out/replicache/src/transactions.js.map +1 -1
- package/out/replicache/src/types.d.ts +2 -1
- package/out/replicache/src/types.d.ts.map +1 -1
- package/out/shared/src/arrays.js +4 -1
- package/out/shared/src/arrays.js.map +1 -1
- package/out/shared/src/asserts.d.ts +0 -5
- package/out/shared/src/asserts.d.ts.map +1 -1
- package/out/shared/src/asserts.js.map +1 -1
- package/out/shared/src/bigint-json.d.ts +9 -0
- package/out/shared/src/bigint-json.d.ts.map +1 -1
- package/out/shared/src/bigint-json.js +27 -2
- package/out/shared/src/bigint-json.js.map +1 -1
- package/out/shared/src/broadcast-channel.js +1 -1
- package/out/shared/src/browser-env.d.ts +0 -17
- package/out/shared/src/browser-env.d.ts.map +1 -1
- package/out/shared/src/browser-env.js.map +1 -1
- package/out/shared/src/btree-set.js +11 -8
- package/out/shared/src/btree-set.js.map +1 -1
- package/out/shared/src/cache.js.map +1 -1
- package/out/shared/src/config.js +1 -1
- package/out/shared/src/custom-key-map.js.map +1 -1
- package/out/shared/src/custom-key-set.js.map +1 -1
- package/out/shared/src/deep-clone.d.ts +0 -1
- package/out/shared/src/deep-clone.d.ts.map +1 -1
- package/out/shared/src/deep-clone.js.map +1 -1
- package/out/shared/src/document-visible.js +1 -1
- package/out/shared/src/document-visible.js.map +1 -1
- package/out/shared/src/dotenv.js.map +1 -1
- package/out/shared/src/error.js +1 -1
- package/out/shared/src/error.js.map +1 -1
- package/out/shared/src/expand.d.ts +0 -3
- package/out/shared/src/expand.d.ts.map +1 -1
- package/out/shared/src/hash.js +2 -2
- package/out/shared/src/hash.js.map +1 -1
- package/out/shared/src/immutable.d.ts +1 -1
- package/out/shared/src/immutable.d.ts.map +1 -1
- package/out/shared/src/iterables.d.ts +0 -1
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/json-schema.js.map +1 -1
- package/out/shared/src/json.js.map +1 -1
- package/out/shared/src/logging-test-utils.js.map +1 -1
- package/out/shared/src/logging.js +1 -1
- package/out/shared/src/logging.js.map +1 -1
- package/out/shared/src/navigator.js +1 -1
- package/out/shared/src/options-types.d.ts +1 -1
- package/out/shared/src/options-types.d.ts.map +1 -1
- package/out/shared/src/options.d.ts +2 -3
- package/out/shared/src/options.d.ts.map +1 -1
- package/out/shared/src/options.js +8 -11
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/promise-race.js +1 -1
- package/out/shared/src/promise-race.js.map +1 -1
- package/out/shared/src/queue.js +1 -1
- package/out/shared/src/queue.js.map +1 -1
- package/out/shared/src/record-proxy.js.map +1 -1
- package/out/shared/src/resolved-promises.d.ts +0 -4
- package/out/shared/src/resolved-promises.d.ts.map +1 -1
- package/out/shared/src/resolved-promises.js +0 -1
- package/out/shared/src/resolved-promises.js.map +1 -1
- package/out/shared/src/resolver.d.ts +9 -0
- package/out/shared/src/resolver.d.ts.map +1 -0
- package/out/shared/src/resolver.js +6 -0
- package/out/shared/src/resolver.js.map +1 -0
- package/out/shared/src/ring-buffer.js.map +1 -1
- package/out/shared/src/size-of-value.js +7 -10
- package/out/shared/src/size-of-value.js.map +1 -1
- package/out/shared/src/sleep.js +1 -1
- package/out/shared/src/sleep.js.map +1 -1
- package/out/shared/src/sorted-entries.js.map +1 -1
- package/out/shared/src/tdigest-schema.js.map +1 -1
- package/out/shared/src/tdigest.d.ts +0 -1
- package/out/shared/src/tdigest.d.ts.map +1 -1
- package/out/shared/src/tdigest.js.map +1 -1
- package/out/shared/src/valita.js +1 -1
- package/out/shared/src/valita.js.map +1 -1
- package/out/z2s/src/compiler.d.ts +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +344 -9
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/z2s/src/sql.d.ts +9 -5
- package/out/z2s/src/sql.d.ts.map +1 -1
- package/out/z2s/src/sql.js +58 -11
- package/out/z2s/src/sql.js.map +1 -1
- package/out/zero/package.js +210 -189
- package/out/zero/package.js.map +1 -1
- package/out/zero/src/adapters/drizzle.js +1 -2
- package/out/zero/src/adapters/kysely.js +1 -2
- package/out/zero/src/adapters/pg.js +1 -2
- package/out/zero/src/adapters/postgresjs.js +1 -2
- package/out/zero/src/adapters/prisma.js +1 -2
- package/out/zero/src/analyze.js +1 -2
- package/out/zero/src/bindings.js +4 -4
- package/out/zero/src/change-protocol/v0.js +1 -2
- package/out/zero/src/expo-sqlite.js +1 -2
- package/out/zero/src/op-sqlite.js +1 -2
- package/out/zero/src/react-native.js.map +1 -1
- package/out/zero/src/sqlite.js +1 -2
- package/out/zero/src/zero-cache-dev.js +11 -10
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero/src/zero-out.js +2 -1
- package/out/zero/src/zero-out.js.map +1 -1
- package/out/zero-cache/src/auth/auth.js +1 -1
- package/out/zero-cache/src/auth/auth.js.map +1 -1
- package/out/zero-cache/src/auth/jwt.js +4 -1
- package/out/zero-cache/src/auth/jwt.js.map +1 -1
- package/out/zero-cache/src/auth/load-permissions.js +1 -1
- package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +3 -2
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +16 -20
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/network.js +1 -1
- package/out/zero-cache/src/config/network.js.map +1 -1
- package/out/zero-cache/src/config/server-context.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +23 -11
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +51 -4
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +1 -1
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
- package/out/zero-cache/src/db/create.js +1 -1
- package/out/zero-cache/src/db/create.js.map +1 -1
- package/out/zero-cache/src/db/index-predicate.js.map +1 -1
- package/out/zero-cache/src/db/lite-tables.d.ts +2 -2
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +1 -1
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.js +5 -3
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy-binary.js +4 -3
- package/out/zero-cache/src/db/pg-copy-binary.js.map +1 -1
- package/out/zero-cache/src/db/pg-copy.js +0 -1
- package/out/zero-cache/src/db/pg-copy.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
- package/out/zero-cache/src/db/run-transaction.js.map +1 -1
- package/out/zero-cache/src/db/specs.d.ts +3 -4
- package/out/zero-cache/src/db/specs.d.ts.map +1 -1
- package/out/zero-cache/src/db/specs.js +1 -1
- package/out/zero-cache/src/db/specs.js.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
- package/out/zero-cache/src/db/statements.d.ts.map +1 -1
- package/out/zero-cache/src/db/statements.js +9 -2
- package/out/zero-cache/src/db/statements.js.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +6 -4
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/db/warmup.js.map +1 -1
- package/out/zero-cache/src/observability/events.js +1 -1
- package/out/zero-cache/src/observability/events.js.map +1 -1
- package/out/zero-cache/src/observability/log-throttle.js.map +1 -1
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +5 -3
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +2 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +35 -11
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
- package/out/zero-cache/src/server/logging.js +1 -1
- package/out/zero-cache/src/server/logging.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/otel-log-sink.js.map +1 -1
- package/out/zero-cache/src/server/otel-start.js.map +1 -1
- package/out/zero-cache/src/server/reaper.js +2 -2
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.js +1 -1
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +12 -8
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/runner/runtime.js +2 -1
- package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts +9 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/zero-dispatcher.js +29 -2
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
- package/out/zero-cache/src/server/slot-keeper.js.map +1 -1
- package/out/zero-cache/src/server/syncer-assigner.js.map +1 -1
- package/out/zero-cache/src/server/syncer.js +10 -5
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/worker-urls.js.map +1 -1
- package/out/zero-cache/src/services/analyze.js +2 -2
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +3 -3
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/init-cleanup.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +4 -4
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +3 -3
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +3 -3
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js +52 -27
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +70 -15
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js +2 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/fork-request.js +54 -0
- package/out/zero-cache/src/services/change-source/pg/fork-request.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +9 -7
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +4 -3
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.d.ts +0 -2
- package/out/zero-cache/src/services/change-source/pg/lsn.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js +2 -2
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +9 -3
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +0 -12
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +5 -3
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +13 -12
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/published.js +2 -2
- package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +9 -6
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +3 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js +2 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current.js +1 -1
- package/out/zero-cache/src/services/change-source/protocol/mod.js +1 -2
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.js +1 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +6 -6
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +56 -21
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +2 -2
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js +2 -3
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +3 -3
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +4 -2
- 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.js +49 -30
- 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.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.js +1 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +11 -10
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +81 -12
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +4 -4
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.js +2 -2
- package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.js +12 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.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/change-streamer/schema/tables.js +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/server-start-metrics.js +42 -0
- package/out/zero-cache/src/services/change-streamer/server-start-metrics.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js +1 -2
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +2 -2
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +2 -2
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +4 -6
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +3 -5
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +4 -4
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +8 -7
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js +0 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -1
- package/out/zero-cache/src/services/heapz.js +2 -1
- package/out/zero-cache/src/services/heapz.js.map +1 -1
- package/out/zero-cache/src/services/http-service.d.ts +8 -2
- package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/http-service.js +19 -5
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts +19 -0
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +55 -3
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +4 -2
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +4 -4
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +2 -2
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -1
- package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
- package/out/zero-cache/src/services/litestream/restore-progress.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +3 -4
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +61 -17
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/plannerz.d.ts +4 -12
- package/out/zero-cache/src/services/plannerz.d.ts.map +1 -1
- package/out/zero-cache/src/services/plannerz.js +6 -7
- package/out/zero-cache/src/services/plannerz.js.map +1 -1
- package/out/zero-cache/src/services/profz.js +5 -3
- package/out/zero-cache/src/services/profz.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-db.js +4 -3
- package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/drain-handler.js +1 -1
- package/out/zero-cache/src/services/replicator/drain-handler.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +4 -4
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.js +4 -3
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +2 -2
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts +2 -11
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.js +2 -2
- package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +19 -17
- 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 +31 -15
- package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts +0 -7
- package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +10 -7
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js +2 -2
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker.js +3 -3
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +1 -1
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/runner.js.map +1 -1
- package/out/zero-cache/src/services/running-state.js +1 -1
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -1
- package/out/zero-cache/src/services/statz.js +4 -3
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +2 -2
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/batch-pacer.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +71 -24
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.js +46 -6
- package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +2 -2
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +12 -7
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +12 -4
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js +1 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +2 -2
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +2 -2
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +6 -4
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +112 -21
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/plan-warnings.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/push-cost.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/push-cutoff.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.js +2 -2
- package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-shape.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.js +1 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js +2 -2
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +2 -16
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js +7 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +13 -9
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +52 -28
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/error-with-level.js.map +1 -1
- package/out/zero-cache/src/types/lexi-version.js.map +1 -1
- package/out/zero-cache/src/types/lite.d.ts +0 -1
- package/out/zero-cache/src/types/lite.d.ts.map +1 -1
- package/out/zero-cache/src/types/lite.js +1 -1
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.js +1 -1
- package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
- package/out/zero-cache/src/types/pg-types.d.ts +0 -40
- package/out/zero-cache/src/types/pg-types.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg-types.js.map +1 -1
- package/out/zero-cache/src/types/pg.js +6 -4
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/types/poke-chunk.d.ts +0 -1
- package/out/zero-cache/src/types/poke-chunk.d.ts.map +1 -1
- package/out/zero-cache/src/types/poke-chunk.js +1 -1
- package/out/zero-cache/src/types/poke-chunk.js.map +1 -1
- package/out/zero-cache/src/types/processes.js +5 -5
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/profiler.js +1 -1
- package/out/zero-cache/src/types/profiler.js.map +1 -1
- package/out/zero-cache/src/types/row-key.d.ts +0 -5
- package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
- package/out/zero-cache/src/types/row-key.js +8 -1
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/sql.js.map +1 -1
- package/out/zero-cache/src/types/streams.d.ts.map +1 -1
- package/out/zero-cache/src/types/streams.js +11 -10
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/strings.js.map +1 -1
- package/out/zero-cache/src/types/subscription.js +1 -1
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/types/timeout.js +1 -1
- package/out/zero-cache/src/types/websocket-handoff.d.ts +4 -7
- package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.js +16 -2
- package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
- package/out/zero-cache/src/types/ws.d.ts +2 -1
- package/out/zero-cache/src/types/ws.d.ts.map +1 -1
- package/out/zero-cache/src/types/ws.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +1 -2
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +10 -8
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/mutator.js +1 -1
- package/out/zero-cache/src/workers/mutator.js.map +1 -1
- package/out/zero-cache/src/workers/rehome.d.ts +15 -0
- package/out/zero-cache/src/workers/rehome.d.ts.map +1 -0
- package/out/zero-cache/src/workers/rehome.js +36 -0
- package/out/zero-cache/src/workers/rehome.js.map +1 -0
- package/out/zero-cache/src/workers/replicator.js +5 -4
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +9 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +32 -7
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.js +2 -2
- package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/bindings.d.ts +1 -1
- package/out/zero-client/src/client/bindings.d.ts.map +1 -1
- package/out/zero-client/src/client/bindings.js +11 -11
- package/out/zero-client/src/client/connection-manager.js +1 -1
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/connection.js +1 -1
- package/out/zero-client/src/client/connection.js.map +1 -1
- package/out/zero-client/src/client/context.d.ts +7 -1
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/context.js +7 -0
- package/out/zero-client/src/client/context.js.map +1 -1
- package/out/zero-client/src/client/crud-impl.d.ts.map +1 -1
- package/out/zero-client/src/client/crud-impl.js +172 -3
- package/out/zero-client/src/client/crud-impl.js.map +1 -1
- package/out/zero-client/src/client/crud.d.ts +2 -8
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +0 -2
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +42 -3
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/enable-analytics.d.ts +0 -1
- package/out/zero-client/src/client/enable-analytics.d.ts.map +1 -1
- package/out/zero-client/src/client/enable-analytics.js +1 -0
- package/out/zero-client/src/client/enable-analytics.js.map +1 -1
- package/out/zero-client/src/client/error.d.ts +4 -5
- package/out/zero-client/src/client/error.d.ts.map +1 -1
- package/out/zero-client/src/client/error.js.map +1 -1
- package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
- package/out/zero-client/src/client/inspector/client.js.map +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js +1 -1
- package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
- package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
- package/out/zero-client/src/client/inspector/query.js.map +1 -1
- package/out/zero-client/src/client/ivm-branch.d.ts +62 -2
- package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
- package/out/zero-client/src/client/ivm-branch.js +153 -34
- package/out/zero-client/src/client/ivm-branch.js.map +1 -1
- package/out/zero-client/src/client/keys.d.ts +33 -1
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.js +49 -7
- package/out/zero-client/src/client/keys.js.map +1 -1
- package/out/zero-client/src/client/log-options.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +5 -3
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/metrics.js +3 -5
- package/out/zero-client/src/client/metrics.js.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.js +1 -1
- package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +0 -4
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/query-manager.js +2 -2
- package/out/zero-client/src/client/query-manager.js.map +1 -1
- package/out/zero-client/src/client/reload-error-handler.js +4 -3
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
- package/out/zero-client/src/client/replicache-types.d.ts +3 -2
- package/out/zero-client/src/client/replicache-types.d.ts.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -2
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +30 -2
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
- package/out/zero-client/src/client/zero-rep.d.ts +1 -1
- package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-rep.js +2 -15
- package/out/zero-client/src/client/zero-rep.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +1 -5
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +21 -13
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.d.ts +3 -3
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-client/src/mod.js +23 -23
- package/out/zero-client/src/types/client-state.d.ts +0 -6
- package/out/zero-client/src/types/client-state.d.ts.map +1 -1
- package/out/zero-client/src/util/nanoid.js.map +1 -1
- package/out/zero-permissions/src/permissions.d.ts +1 -12
- package/out/zero-permissions/src/permissions.d.ts.map +1 -1
- package/out/zero-permissions/src/permissions.js +3 -3
- package/out/zero-permissions/src/permissions.js.map +1 -1
- package/out/zero-pg/src/mod.js +9 -9
- package/out/zero-protocol/src/aggregate-table.d.ts +15 -0
- package/out/zero-protocol/src/aggregate-table.d.ts.map +1 -0
- package/out/zero-protocol/src/aggregate-table.js +5 -0
- package/out/zero-protocol/src/aggregate-table.js.map +1 -0
- package/out/zero-protocol/src/analyze-query-result.js +1 -1
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/application-error.js.map +1 -1
- package/out/zero-protocol/src/ast.d.ts +140 -8
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +264 -28
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.d.ts +0 -20
- package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
- package/out/zero-protocol/src/client-schema.d.ts +2 -5
- package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
- package/out/zero-protocol/src/client-schema.js.map +1 -1
- package/out/zero-protocol/src/close-connection.d.ts +0 -8
- package/out/zero-protocol/src/close-connection.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +0 -12
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/custom-queries.d.ts +3 -17
- package/out/zero-protocol/src/custom-queries.d.ts.map +1 -1
- package/out/zero-protocol/src/custom-queries.js.map +1 -1
- package/out/zero-protocol/src/data.d.ts +0 -1
- package/out/zero-protocol/src/data.d.ts.map +1 -1
- package/out/zero-protocol/src/data.js +3 -1
- package/out/zero-protocol/src/data.js.map +1 -1
- package/out/zero-protocol/src/delete-clients.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +27 -27
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/error.js.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +1 -3
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/inspect-up.d.ts +0 -28
- package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/mutate-server.d.ts +0 -21
- package/out/zero-protocol/src/mutate-server.d.ts.map +1 -1
- package/out/zero-protocol/src/mutate-server.js.map +1 -1
- package/out/zero-protocol/src/mutation-id.js.map +1 -1
- package/out/zero-protocol/src/mutation-type-enum.d.ts +0 -1
- package/out/zero-protocol/src/mutation-type-enum.d.ts.map +1 -1
- package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
- package/out/zero-protocol/src/mutation.d.ts +2 -4
- package/out/zero-protocol/src/mutation.d.ts.map +1 -1
- package/out/zero-protocol/src/mutation.js.map +1 -1
- package/out/zero-protocol/src/mutations-patch.d.ts +0 -33
- package/out/zero-protocol/src/mutations-patch.d.ts.map +1 -1
- package/out/zero-protocol/src/mutations-patch.js.map +1 -1
- package/out/zero-protocol/src/ping.d.ts +0 -2
- package/out/zero-protocol/src/ping.d.ts.map +1 -1
- package/out/zero-protocol/src/ping.js.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +3 -2
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +1 -1
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/pong.d.ts +0 -2
- package/out/zero-protocol/src/pong.d.ts.map +1 -1
- package/out/zero-protocol/src/pong.js.map +1 -1
- package/out/zero-protocol/src/primary-key.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -0
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/pull.d.ts +2 -7
- package/out/zero-protocol/src/pull.d.ts.map +1 -1
- package/out/zero-protocol/src/pull.js.map +1 -1
- package/out/zero-protocol/src/push.d.ts +1 -3
- package/out/zero-protocol/src/push.d.ts.map +1 -1
- package/out/zero-protocol/src/push.js.map +1 -1
- package/out/zero-protocol/src/queries-patch.d.ts +0 -16
- package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
- package/out/zero-protocol/src/queries-patch.js +1 -1
- package/out/zero-protocol/src/queries-patch.js.map +1 -1
- package/out/zero-protocol/src/query-hash-visitor.d.ts.map +1 -1
- package/out/zero-protocol/src/query-hash-visitor.js +38 -0
- package/out/zero-protocol/src/query-hash-visitor.js.map +1 -1
- package/out/zero-protocol/src/query-hash.js +2 -2
- package/out/zero-protocol/src/query-server.d.ts +2 -41
- package/out/zero-protocol/src/query-server.d.ts.map +1 -1
- package/out/zero-protocol/src/query-server.js.map +1 -1
- package/out/zero-protocol/src/row-patch.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +60 -60
- package/out/zero-protocol/src/up.js +1 -1
- package/out/zero-protocol/src/up.js.map +1 -1
- package/out/zero-protocol/src/update-auth.js.map +1 -1
- package/out/zero-protocol/src/version.d.ts +0 -1
- package/out/zero-protocol/src/version.d.ts.map +1 -1
- package/out/zero-protocol/src/version.js.map +1 -1
- package/out/zero-react/src/bindings.js +11 -11
- package/out/zero-react/src/mod.js +5 -5
- package/out/zero-react/src/use-query.d.ts +3 -1
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/use-query.js +6 -4
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +1 -1
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.js +2 -1
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-react/src/zero.js +23 -23
- package/out/zero-schema/src/builder/relationship-builder.d.ts +0 -2
- package/out/zero-schema/src/builder/relationship-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.js +5 -2
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +1 -1
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-schema/src/compiled-permissions.js.map +1 -1
- package/out/zero-schema/src/name-mapper.d.ts.map +1 -1
- package/out/zero-schema/src/name-mapper.js +14 -9
- package/out/zero-schema/src/name-mapper.js.map +1 -1
- package/out/zero-schema/src/schema-config.d.ts +0 -1
- package/out/zero-schema/src/schema-config.d.ts.map +1 -1
- package/out/zero-schema/src/schema-config.js +1 -1
- package/out/zero-schema/src/schema-config.js.map +1 -1
- package/out/zero-schema/src/table-schema.d.ts +3 -11
- package/out/zero-schema/src/table-schema.d.ts.map +1 -1
- package/out/zero-server/src/adapters/drizzle.js.map +1 -1
- package/out/zero-server/src/adapters/kysely.js.map +1 -1
- package/out/zero-server/src/adapters/pg.js.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/adapters/prisma.js.map +1 -1
- package/out/zero-server/src/closable-db-transaction.js.map +1 -1
- package/out/zero-server/src/custom.js +2 -2
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/mod.js +8 -8
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/out/zero-server/src/queries/process-queries.d.ts +2 -4
- package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
- package/out/zero-server/src/queries/process-queries.js +2 -1
- package/out/zero-server/src/queries/process-queries.js.map +1 -1
- package/out/zero-server/src/schema.d.ts.map +1 -1
- package/out/zero-server/src/schema.js +20 -9
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/bindings.js +11 -11
- package/out/zero-solid/src/mod.js +5 -5
- package/out/zero-solid/src/solid-view.d.ts +0 -2
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +4 -4
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/use-connection-state.js +2 -1
- package/out/zero-solid/src/use-connection-state.js.map +1 -1
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero-online.js +2 -1
- package/out/zero-solid/src/use-zero-online.js.map +1 -1
- package/out/zero-solid/src/use-zero.js +3 -2
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-solid/src/zero.js +23 -23
- package/out/zero-types/src/format.d.ts +13 -0
- package/out/zero-types/src/format.d.ts.map +1 -1
- package/out/zero-types/src/format.js.map +1 -1
- package/out/zero-types/src/name-mapper.d.ts +16 -1
- package/out/zero-types/src/name-mapper.d.ts.map +1 -1
- package/out/zero-types/src/name-mapper.js +12 -0
- package/out/zero-types/src/name-mapper.js.map +1 -1
- package/out/zero-types/src/schema-value.d.ts +5 -2
- package/out/zero-types/src/schema-value.d.ts.map +1 -1
- package/out/zero-types/src/schema-value.js +15 -0
- package/out/zero-types/src/schema-value.js.map +1 -0
- package/out/zero-types/src/schema.d.ts +1 -1
- package/out/zero-types/src/schema.d.ts.map +1 -1
- package/out/zero-types/src/server-schema.d.ts +18 -0
- package/out/zero-types/src/server-schema.d.ts.map +1 -1
- package/out/zql/src/builder/builder.d.ts +124 -9
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +295 -23
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/correlated-predicate-pushdown.js.map +1 -1
- package/out/zql/src/builder/debug-delegate.js.map +1 -1
- package/out/zql/src/builder/filter.d.ts +1 -2
- package/out/zql/src/builder/filter.d.ts.map +1 -1
- package/out/zql/src/builder/filter.js +41 -3
- package/out/zql/src/builder/filter.js.map +1 -1
- package/out/zql/src/builder/like.js +0 -1
- package/out/zql/src/builder/like.js.map +1 -1
- package/out/zql/src/error.d.ts +0 -5
- package/out/zql/src/error.d.ts.map +1 -1
- package/out/zql/src/error.js.map +1 -1
- package/out/zql/src/ivm/aggregate.d.ts +188 -0
- package/out/zql/src/ivm/aggregate.d.ts.map +1 -0
- package/out/zql/src/ivm/aggregate.js +470 -0
- package/out/zql/src/ivm/aggregate.js.map +1 -0
- package/out/zql/src/ivm/array-view.d.ts +1 -1
- package/out/zql/src/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/ivm/array-view.js +3 -3
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/cap.d.ts +1 -1
- package/out/zql/src/ivm/cap.d.ts.map +1 -1
- package/out/zql/src/ivm/cap.js +14 -6
- package/out/zql/src/ivm/cap.js.map +1 -1
- package/out/zql/src/ivm/constraint.d.ts +0 -7
- package/out/zql/src/ivm/constraint.d.ts.map +1 -1
- package/out/zql/src/ivm/constraint.js +3 -2
- package/out/zql/src/ivm/constraint.js.map +1 -1
- package/out/zql/src/ivm/data.d.ts +15 -2
- package/out/zql/src/ivm/data.d.ts.map +1 -1
- package/out/zql/src/ivm/data.js +15 -1
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/deferred-input.js +1 -1
- package/out/zql/src/ivm/deferred-input.js.map +1 -1
- package/out/zql/src/ivm/exists.d.ts.map +1 -1
- package/out/zql/src/ivm/exists.js +32 -22
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.js +1 -1
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter-operators.d.ts +5 -0
- package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
- package/out/zql/src/ivm/filter-operators.js +1 -1
- package/out/zql/src/ivm/filter-operators.js.map +1 -1
- package/out/zql/src/ivm/filter-push.js.map +1 -1
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +4 -5
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/group-by.d.ts +98 -0
- package/out/zql/src/ivm/group-by.d.ts.map +1 -0
- package/out/zql/src/ivm/group-by.js +384 -0
- package/out/zql/src/ivm/group-by.js.map +1 -0
- package/out/zql/src/ivm/join-index-tap.js.map +1 -1
- package/out/zql/src/ivm/join-index.d.ts.map +1 -1
- package/out/zql/src/ivm/join-index.js +2 -1
- package/out/zql/src/ivm/join-index.js.map +1 -1
- package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
- package/out/zql/src/ivm/join-utils.js +13 -14
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +7 -4
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/lift-field.d.ts +54 -0
- package/out/zql/src/ivm/lift-field.d.ts.map +1 -0
- package/out/zql/src/ivm/lift-field.js +168 -0
- package/out/zql/src/ivm/lift-field.js.map +1 -0
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts +3 -2
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +36 -27
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/memory-storage.js.map +1 -1
- package/out/zql/src/ivm/operator.d.ts +6 -0
- package/out/zql/src/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.js +2 -2
- package/out/zql/src/ivm/operator.js.map +1 -1
- package/out/zql/src/ivm/push-accumulated.js +1 -2
- package/out/zql/src/ivm/push-accumulated.js.map +1 -1
- package/out/zql/src/ivm/schema.d.ts +1 -0
- package/out/zql/src/ivm/schema.d.ts.map +1 -1
- package/out/zql/src/ivm/skip-yields.js.map +1 -1
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/source.d.ts +21 -0
- package/out/zql/src/ivm/source.d.ts.map +1 -1
- package/out/zql/src/ivm/source.js.map +1 -1
- package/out/zql/src/ivm/stream.d.ts +0 -1
- package/out/zql/src/ivm/stream.d.ts.map +1 -1
- package/out/zql/src/ivm/stream.js.map +1 -1
- package/out/zql/src/ivm/take-gate.js.map +1 -1
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +8 -9
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.d.ts +0 -1
- package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +1 -1
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/union-fan-out.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts +8 -33
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +23 -3
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +1 -3
- package/out/zql/src/mutate/crud.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.js +2 -1
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +1 -1
- package/out/zql/src/mutate/mutator.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator.js.map +1 -1
- package/out/zql/src/planner/planner-builder.js +1 -1
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-connection.js.map +1 -1
- package/out/zql/src/planner/planner-debug.d.ts +11 -10
- package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
- package/out/zql/src/planner/planner-debug.js +4 -0
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-fan-in.js.map +1 -1
- package/out/zql/src/planner/planner-fan-out.js.map +1 -1
- package/out/zql/src/planner/planner-filter.js.map +1 -1
- package/out/zql/src/planner/planner-graph.js +1 -5
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-join.js +1 -1
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/out/zql/src/planner/planner-node.d.ts +0 -1
- package/out/zql/src/planner/planner-node.d.ts.map +1 -1
- package/out/zql/src/planner/planner-node.js.map +1 -1
- package/out/zql/src/planner/planner-source.js.map +1 -1
- package/out/zql/src/planner/planner-terminus.js.map +1 -1
- package/out/zql/src/planner/planner-warnings.d.ts +3 -3
- package/out/zql/src/planner/planner-warnings.d.ts.map +1 -1
- package/out/zql/src/planner/planner-warnings.js.map +1 -1
- package/out/zql/src/query/create-builder.js +2 -1
- package/out/zql/src/query/create-builder.js.map +1 -1
- package/out/zql/src/query/expression.d.ts +49 -24
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js +62 -6
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/measure-push-operator.js +1 -1
- package/out/zql/src/query/measure-push-operator.js.map +1 -1
- package/out/zql/src/query/named.js +2 -1
- package/out/zql/src/query/named.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts +8 -7
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +14 -6
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-delegate.d.ts +1 -4
- package/out/zql/src/query/query-delegate.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +17 -3
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +242 -9
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internals.d.ts +0 -3
- package/out/zql/src/query/query-internals.d.ts.map +1 -1
- package/out/zql/src/query/query-internals.js.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +5 -5
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.js +1 -1
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query-transitions.js +1 -1
- package/out/zql/src/query/query-transitions.js.map +1 -1
- package/out/zql/src/query/query.d.ts +321 -20
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.d.ts +1 -19
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +2 -1
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/static-query.js.map +1 -1
- package/out/zql/src/query/ttl.d.ts +2 -3
- package/out/zql/src/query/ttl.d.ts.map +1 -1
- package/out/zql/src/query/ttl.js +8 -8
- package/out/zql/src/query/ttl.js.map +1 -1
- package/out/zql/src/query/validate-input.js.map +1 -1
- package/out/zqlite/src/database-storage.js +195 -26
- package/out/zqlite/src/database-storage.js.map +1 -1
- package/out/zqlite/src/db.d.ts +47 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +121 -21
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/explain-queries.js.map +1 -1
- package/out/zqlite/src/fetch-sql.d.ts +27 -0
- package/out/zqlite/src/fetch-sql.d.ts.map +1 -0
- package/out/zqlite/src/fetch-sql.js +112 -0
- package/out/zqlite/src/fetch-sql.js.map +1 -0
- package/out/zqlite/src/index-usage.js.map +1 -1
- package/out/zqlite/src/internal/sql-inline.js.map +1 -1
- package/out/zqlite/src/internal/sql.js.map +1 -1
- package/out/zqlite/src/internal/statement-cache.d.ts +7 -0
- package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -1
- package/out/zqlite/src/internal/statement-cache.js +11 -4
- package/out/zqlite/src/internal/statement-cache.js.map +1 -1
- package/out/zqlite/src/mod.js +5 -5
- package/out/zqlite/src/pending-delta.d.ts.map +1 -1
- package/out/zqlite/src/pending-delta.js +4 -3
- package/out/zqlite/src/pending-delta.js.map +1 -1
- package/out/zqlite/src/query-builder.d.ts +23 -4
- package/out/zqlite/src/query-builder.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.js +135 -19
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/query-delegate.js.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +2 -5
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +3 -2
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
- package/out/zqlite/src/table-source.d.ts +20 -3
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +110 -42
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +39 -39
- package/out/analyze-query/src/bin-analyze.d.ts +0 -2
- package/out/analyze-query/src/bin-analyze.d.ts.map +0 -1
- package/out/analyze-query/src/bin-analyze.js +0 -283
- package/out/analyze-query/src/bin-analyze.js.map +0 -1
- package/out/otel/src/maybe-time.d.ts +0 -3
- package/out/otel/src/maybe-time.d.ts.map +0 -1
- package/out/otel/src/maybe-time.js +0 -15
- package/out/otel/src/maybe-time.js.map +0 -1
- package/out/shared/src/cache.d.ts +0 -22
- package/out/shared/src/cache.d.ts.map +0 -1
- package/out/shared/src/custom-key-map.d.ts +0 -26
- package/out/shared/src/custom-key-map.d.ts.map +0 -1
- package/out/shared/src/custom-key-set.d.ts +0 -25
- package/out/shared/src/custom-key-set.d.ts.map +0 -1
- package/out/shared/src/logging-test-utils.d.ts +0 -12
- package/out/shared/src/logging-test-utils.d.ts.map +0 -1
- package/out/shared/src/sorted-entries.d.ts +0 -2
- package/out/shared/src/sorted-entries.d.ts.map +0 -1
- package/out/zero/src/analyze-query.d.ts +0 -3
- package/out/zero/src/analyze-query.d.ts.map +0 -1
- package/out/zero/src/analyze-query.js +0 -3
- package/out/zero/src/server/change-streamer.d.ts +0 -2
- package/out/zero/src/server/change-streamer.d.ts.map +0 -1
- package/out/zero/src/server/main.d.ts +0 -2
- package/out/zero/src/server/main.d.ts.map +0 -1
- package/out/zero/src/server/reaper.d.ts +0 -2
- package/out/zero/src/server/reaper.d.ts.map +0 -1
- package/out/zero/src/server/replicator.d.ts +0 -2
- package/out/zero/src/server/replicator.d.ts.map +0 -1
- package/out/zero/src/server/syncer.d.ts +0 -2
- package/out/zero/src/server/syncer.d.ts.map +0 -1
- package/out/zero-cache/src/auth/jwt.d.ts +0 -12
- package/out/zero-cache/src/auth/jwt.d.ts.map +0 -1
- package/out/zero-cache/src/auth/load-permissions.d.ts +0 -17
- package/out/zero-cache/src/auth/load-permissions.d.ts.map +0 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts +0 -28
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +0 -1
- package/out/zero-cache/src/config/server-context.d.ts +0 -16
- package/out/zero-cache/src/config/server-context.d.ts.map +0 -1
- package/out/zero-cache/src/custom/fetch.d.ts +0 -38
- package/out/zero-cache/src/custom/fetch.d.ts.map +0 -1
- package/out/zero-cache/src/custom/metrics.d.ts +0 -31
- package/out/zero-cache/src/custom/metrics.d.ts.map +0 -1
- package/out/zero-cache/src/custom-queries/transform-query.d.ts +0 -68
- package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +0 -1
- package/out/zero-cache/src/db/create.d.ts +0 -12
- package/out/zero-cache/src/db/create.d.ts.map +0 -1
- package/out/zero-cache/src/db/delete-lite-db.d.ts +0 -2
- package/out/zero-cache/src/db/delete-lite-db.d.ts.map +0 -1
- package/out/zero-cache/src/db/index-predicate.d.ts +0 -4
- package/out/zero-cache/src/db/index-predicate.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration-lite.d.ts +0 -78
- package/out/zero-cache/src/db/migration-lite.d.ts.map +0 -1
- package/out/zero-cache/src/db/migration.d.ts +0 -80
- package/out/zero-cache/src/db/migration.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-copy-binary.d.ts +0 -101
- package/out/zero-cache/src/db/pg-copy-binary.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-copy.d.ts +0 -30
- package/out/zero-cache/src/db/pg-copy.d.ts.map +0 -1
- package/out/zero-cache/src/db/pg-type-parser.d.ts +0 -15
- package/out/zero-cache/src/db/pg-type-parser.d.ts.map +0 -1
- package/out/zero-cache/src/db/transaction-pool.d.ts +0 -205
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +0 -1
- package/out/zero-cache/src/db/warmup.d.ts +0 -4
- package/out/zero-cache/src/db/warmup.d.ts.map +0 -1
- package/out/zero-cache/src/observability/events.d.ts +0 -15
- package/out/zero-cache/src/observability/events.d.ts.map +0 -1
- package/out/zero-cache/src/observability/log-throttle.d.ts +0 -44
- package/out/zero-cache/src/observability/log-throttle.d.ts.map +0 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +0 -21
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +0 -1
- package/out/zero-cache/src/server/change-streamer.d.ts +0 -3
- package/out/zero-cache/src/server/change-streamer.d.ts.map +0 -1
- package/out/zero-cache/src/server/inspector-delegate.d.ts +0 -71
- package/out/zero-cache/src/server/inspector-delegate.d.ts.map +0 -1
- package/out/zero-cache/src/server/main.d.ts +0 -3
- package/out/zero-cache/src/server/main.d.ts.map +0 -1
- package/out/zero-cache/src/server/otel-diag-logger.d.ts +0 -16
- package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +0 -1
- package/out/zero-cache/src/server/otel-start.d.ts +0 -3
- package/out/zero-cache/src/server/otel-start.d.ts.map +0 -1
- package/out/zero-cache/src/server/priority-op.d.ts +0 -8
- package/out/zero-cache/src/server/priority-op.d.ts.map +0 -1
- package/out/zero-cache/src/server/reaper.d.ts +0 -3
- package/out/zero-cache/src/server/reaper.d.ts.map +0 -1
- package/out/zero-cache/src/server/replicator.d.ts +0 -10
- package/out/zero-cache/src/server/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/server/slot-keeper.d.ts +0 -26
- package/out/zero-cache/src/server/slot-keeper.d.ts.map +0 -1
- package/out/zero-cache/src/server/syncer.d.ts +0 -3
- package/out/zero-cache/src/server/syncer.d.ts.map +0 -1
- package/out/zero-cache/src/services/analyze.d.ts +0 -9
- package/out/zero-cache/src/services/analyze.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/change-source.d.ts +0 -32
- package/out/zero-cache/src/services/change-source/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts +0 -57
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts +0 -55
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts +0 -24
- package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +0 -115
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +0 -14
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +0 -25
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts +0 -14
- package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts +0 -36
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts +0 -65
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +0 -115
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +0 -155
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +0 -17
- package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts +0 -28
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts +0 -76
- package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +0 -169
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts +0 -16
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts +0 -15
- package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +0 -127
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +0 -9
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts +0 -68
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts +0 -72
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts +0 -50
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +0 -14
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +0 -18
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +0 -98
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +0 -34
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts +0 -34
- package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts +0 -158
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts +0 -19
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -78
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +0 -143
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +0 -586
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts +0 -24
- package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts +0 -15
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +0 -49
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts +0 -53
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts +0 -88
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +0 -15
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts +0 -243
- package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +0 -6
- package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +0 -152
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts +0 -11
- package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts +0 -92
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +0 -36
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +0 -22
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +0 -99
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts +0 -83
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts +0 -121
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts +0 -73
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +0 -62
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +0 -114
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +0 -276
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts +0 -485
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +0 -194
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts +0 -52
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +0 -1
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts +0 -57
- package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +0 -77
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +0 -78
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/metrics.d.ts +0 -31
- package/out/zero-cache/src/services/litestream/metrics.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts +0 -24
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts.map +0 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +0 -40
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +0 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +0 -63
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts +0 -368
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts +0 -56
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +0 -37
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/drain-handler.d.ts +0 -82
- package/out/zero-cache/src/services/replicator/drain-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +0 -25
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/notifier.d.ts +0 -9
- package/out/zero-cache/src/services/replicator/notifier.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/replication-status.d.ts +0 -71
- package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +0 -86
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +0 -55
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +0 -132
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts +0 -120
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts.map +0 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +0 -111
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +0 -1
- package/out/zero-cache/src/services/run-ast.d.ts +0 -39
- package/out/zero-cache/src/services/run-ast.d.ts.map +0 -1
- package/out/zero-cache/src/services/runner.d.ts +0 -19
- package/out/zero-cache/src/services/runner.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +0 -17
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts +0 -26
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts +0 -79
- package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +0 -79
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts +0 -5
- package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts +0 -184
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +0 -22
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +0 -128
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +0 -294
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts +0 -81
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +0 -45
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts +0 -53
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +0 -33
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +0 -51
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +0 -34
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +0 -296
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts +0 -7
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/push-cost.d.ts +0 -132
- package/out/zero-cache/src/services/view-syncer/push-cost.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts +0 -55
- package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts +0 -28
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts +0 -25
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts +0 -89
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts +0 -90
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts +0 -17
- package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +0 -86
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts +0 -5
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +0 -563
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts +0 -95
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +0 -412
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts +0 -2
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts +0 -10
- package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts.map +0 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +0 -133
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +0 -1
- package/out/zero-cache/src/types/pg-patch.d.ts +0 -21
- package/out/zero-cache/src/types/pg-patch.d.ts.map +0 -1
- package/out/zero-cache/src/types/pg-versions.d.ts +0 -3
- package/out/zero-cache/src/types/pg-versions.d.ts.map +0 -1
- package/out/zero-cache/src/workers/replicator.d.ts +0 -57
- package/out/zero-cache/src/workers/replicator.d.ts.map +0 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts +0 -14
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +0 -1
- package/out/zero-cache/src/workers/syncer.d.ts +0 -67
- package/out/zero-cache/src/workers/syncer.d.ts.map +0 -1
- package/out/zero-events/src/index.d.ts +0 -27
- package/out/zero-events/src/index.d.ts.map +0 -1
- package/out/zero-events/src/json.d.ts +0 -20
- package/out/zero-events/src/json.d.ts.map +0 -1
- package/out/zero-events/src/status.d.ts +0 -144
- package/out/zero-events/src/status.d.ts.map +0 -1
- package/out/zqlite/src/database-storage.d.ts +0 -24
- package/out/zqlite/src/database-storage.d.ts.map +0 -1
- package/out/zqlite/src/explain-queries.d.ts +0 -4
- package/out/zqlite/src/explain-queries.d.ts.map +0 -1
- package/out/zqlite/src/internal/sql-inline.d.ts +0 -13
- package/out/zqlite/src/internal/sql-inline.d.ts.map +0 -1
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +0 -72
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +0 -1
- package/out/zqlite/src/sqlite-cost-model.d.ts +0 -17
- package/out/zqlite/src/sqlite-cost-model.d.ts.map +0 -1
- package/out/zqlite/src/sqlite-stat-fanout.d.ts +0 -121
- package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/group-by.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { assert, unreachable } from "../../../shared/src/asserts.js";
|
|
2
|
+
import { must } from "../../../shared/src/must.js";
|
|
3
|
+
import { assignProperty } from "../../../shared/src/objects.js";
|
|
4
|
+
import { makeAddChange, makeEditChange, makeRemoveChange } from "./change.js";
|
|
5
|
+
import { makeComparator, normalizeUndefined, valueToKey } from "./data.js";
|
|
6
|
+
import { throwOutput } from "./operator.js";
|
|
7
|
+
import { AGGREGATE_KEY_COLUMN, AGGREGATE_ROWS_COLUMN, AGGREGATE_VALUE_COLUMN, aggregateSourceSchema, carriesComponents, isInvertible } from "./aggregate.js";
|
|
8
|
+
import { emptyArray } from "../../../shared/src/sentinels.js";
|
|
9
|
+
import { rowEqualsForCompoundKey } from "./join-utils.js";
|
|
10
|
+
//#region ../zql/src/ivm/group-by.ts
|
|
11
|
+
/**
|
|
12
|
+
* The synthetic schema (columns, primary key and sort) of the rows
|
|
13
|
+
* {@link GroupBy} emits: the group columns, the key of the group (`_0_key`)
|
|
14
|
+
* and the aggregate's payload (`_0_value`, and for sum/avg its components and
|
|
15
|
+
* the group's number of rows, `_0_rows`).
|
|
16
|
+
* Shared by the operator (compute mode) and the client query builder
|
|
17
|
+
* (`aggregatesFromSource` mode) so both agree on the synthetic source's shape.
|
|
18
|
+
*
|
|
19
|
+
* The key is the group's values encoded as one string, rather than the
|
|
20
|
+
* columns themselves, because a synced row key can't hold a `null`, and `null`
|
|
21
|
+
* is a value like any other.
|
|
22
|
+
*/
|
|
23
|
+
function groupSourceSchema(inputColumns, ordering, reducer) {
|
|
24
|
+
const { columns } = aggregateSourceSchema(inputColumns, ordering.map(([col]) => col), reducer.fn, reducer.field, reducer.path);
|
|
25
|
+
columns[AGGREGATE_KEY_COLUMN] = { type: "string" };
|
|
26
|
+
if (carriesComponents(reducer.fn)) columns[AGGREGATE_ROWS_COLUMN] = { type: "number" };
|
|
27
|
+
return {
|
|
28
|
+
columns,
|
|
29
|
+
primaryKey: [AGGREGATE_KEY_COLUMN],
|
|
30
|
+
sort: [...ordering, [AGGREGATE_KEY_COLUMN, "asc"]]
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The `_0_key` of a group, which also keys its state in the operator's
|
|
35
|
+
* storage: as for Take and Cap, `valueToKey` of the value when there is one
|
|
36
|
+
* column, and otherwise the values in column order, JSON encoded. One query
|
|
37
|
+
* always has the same number of columns, so the two forms never meet.
|
|
38
|
+
*/
|
|
39
|
+
function groupKey(values) {
|
|
40
|
+
return values.length === 1 ? valueToKey(values[0]) : JSON.stringify(values);
|
|
41
|
+
}
|
|
42
|
+
/** A row's values of the group `columns`, in their order. */
|
|
43
|
+
function groupValues(row, columns) {
|
|
44
|
+
return columns.map((col) => normalizeUndefined(row[col]));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* GroupBy groups its input by `columns` and reduces each group with an
|
|
48
|
+
* aggregate function, as `GROUP BY` does: one row per combination of the
|
|
49
|
+
* columns' values, `{...columns, _0_key, _0_value}`, plus the sum and count
|
|
50
|
+
* components for sum/avg. `null` is a value like any other.
|
|
51
|
+
*
|
|
52
|
+
* A distinct is a GroupBy with a count, whose value a view doesn't show.
|
|
53
|
+
*
|
|
54
|
+
* It sits at the end of a top-level pipeline whose rows are sorted by the
|
|
55
|
+
* group columns first, so the rows of a group are adjacent and a fetch reads
|
|
56
|
+
* them in one pass. It keeps the state of every group, so a push adds a row
|
|
57
|
+
* when a group gets its first input row, removes it when it loses its last,
|
|
58
|
+
* and otherwise edits it when its value changes. Like {@link Aggregate}, a
|
|
59
|
+
* min/max whose extreme a push removes is re-read from the input in
|
|
60
|
+
* {@link reconcile}.
|
|
61
|
+
*/
|
|
62
|
+
var GroupBy = class {
|
|
63
|
+
#input;
|
|
64
|
+
#storage;
|
|
65
|
+
#columns;
|
|
66
|
+
#reducer;
|
|
67
|
+
#carriesRows;
|
|
68
|
+
#schema;
|
|
69
|
+
#groupSource;
|
|
70
|
+
#hydrated = false;
|
|
71
|
+
/**
|
|
72
|
+
* min/max groups whose extreme a push removed, by storage key, with a row
|
|
73
|
+
* of the group, to re-read in {@link reconcile}. Until then their storage
|
|
74
|
+
* keeps the value last sent downstream, with the current count.
|
|
75
|
+
*/
|
|
76
|
+
#dirtyGroups = /* @__PURE__ */ new Map();
|
|
77
|
+
#output = throwOutput;
|
|
78
|
+
/**
|
|
79
|
+
* @param ordering The order of the groups, which names each group column
|
|
80
|
+
* once. The input must be sorted by it first.
|
|
81
|
+
*/
|
|
82
|
+
constructor(input, storage, ordering, tableName, reducer, groupSource) {
|
|
83
|
+
assert(ordering.length > 0, "GroupBy: needs at least one column");
|
|
84
|
+
this.#input = input;
|
|
85
|
+
this.#storage = storage;
|
|
86
|
+
this.#columns = ordering.map(([col]) => col);
|
|
87
|
+
this.#reducer = reducer;
|
|
88
|
+
this.#carriesRows = carriesComponents(reducer.fn);
|
|
89
|
+
this.#groupSource = reducer.fn === "count" ? groupSource : void 0;
|
|
90
|
+
input.setOutput(this);
|
|
91
|
+
const inputSchema = input.getSchema();
|
|
92
|
+
const inputSort = inputSchema.sort ?? [];
|
|
93
|
+
assert(ordering.every(([col, dir], i) => inputSort[i]?.[0] === col && inputSort[i][1] === dir), "GroupBy: the input must be sorted by the group columns first");
|
|
94
|
+
const { columns, primaryKey, sort } = groupSourceSchema(inputSchema.columns, ordering, reducer);
|
|
95
|
+
this.#schema = {
|
|
96
|
+
tableName,
|
|
97
|
+
columns,
|
|
98
|
+
primaryKey,
|
|
99
|
+
relationships: {},
|
|
100
|
+
isHidden: false,
|
|
101
|
+
isAggregate: true,
|
|
102
|
+
system: inputSchema.system,
|
|
103
|
+
sort,
|
|
104
|
+
compareRows: makeComparator(sort)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
setOutput(output) {
|
|
108
|
+
this.#output = output;
|
|
109
|
+
}
|
|
110
|
+
getSchema() {
|
|
111
|
+
return this.#schema;
|
|
112
|
+
}
|
|
113
|
+
destroy() {
|
|
114
|
+
this.#input.destroy();
|
|
115
|
+
this.#storage.destroy();
|
|
116
|
+
}
|
|
117
|
+
fetch(req) {
|
|
118
|
+
assert(req.constraint === void 0 && req.start === void 0 && !req.reverse, "GroupBy: fetch takes no constraint, start or reverse");
|
|
119
|
+
this.#hydrated = true;
|
|
120
|
+
const groups = this.#groupSource?.groupCounts?.(this.#columns);
|
|
121
|
+
if (groups === void 0) return this.#fetchGroups();
|
|
122
|
+
const nodes = groups.map(({ row, count }) => this.#store(this.#groupValues(row), {
|
|
123
|
+
...this.#reducer.empty(),
|
|
124
|
+
count
|
|
125
|
+
}));
|
|
126
|
+
nodes.sort((a, b) => this.#schema.compareRows(a.row, b.row));
|
|
127
|
+
return nodes;
|
|
128
|
+
}
|
|
129
|
+
/** Reads the input and folds each run of a group into its row. */
|
|
130
|
+
*#fetchGroups() {
|
|
131
|
+
let first;
|
|
132
|
+
let state;
|
|
133
|
+
for (const node of this.#input.fetch({})) {
|
|
134
|
+
if (node === "yield") {
|
|
135
|
+
yield node;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (first === void 0 || !rowEqualsForCompoundKey(first, node.row, this.#columns)) {
|
|
139
|
+
if (first !== void 0) yield this.#store(this.#groupValues(first), must(state));
|
|
140
|
+
first = node.row;
|
|
141
|
+
state = this.#reducer.empty();
|
|
142
|
+
}
|
|
143
|
+
this.#reducer.contribute(must(state), node.row);
|
|
144
|
+
}
|
|
145
|
+
if (first !== void 0) yield this.#store(this.#groupValues(first), must(state));
|
|
146
|
+
}
|
|
147
|
+
push(change) {
|
|
148
|
+
if (!this.#hydrated) return emptyArray;
|
|
149
|
+
switch (change[0]) {
|
|
150
|
+
case 0: return this.#add(change[1].row);
|
|
151
|
+
case 1: return this.#remove(change[1].row);
|
|
152
|
+
case 2: {
|
|
153
|
+
const oldRow = change[2].row;
|
|
154
|
+
const row = change[1].row;
|
|
155
|
+
return rowEqualsForCompoundKey(oldRow, row, this.#columns) ? this.#update(oldRow, row) : this.#move(oldRow, row);
|
|
156
|
+
}
|
|
157
|
+
case 3: return emptyArray;
|
|
158
|
+
default: unreachable(change);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Phase 2 of the two-phase push: re-read the min/max groups whose extreme
|
|
163
|
+
* Phase 1 removed, now that everything upstream has settled, then forward
|
|
164
|
+
* the signal for operators downstream.
|
|
165
|
+
*/
|
|
166
|
+
reconcile(_pusher) {
|
|
167
|
+
if (this.#dirtyGroups.size > 0) return this.#reconcileDirty();
|
|
168
|
+
return this.#output.reconcile ? this.#output.reconcile(this) : emptyArray;
|
|
169
|
+
}
|
|
170
|
+
*#reconcileDirty() {
|
|
171
|
+
const dirty = [...this.#dirtyGroups];
|
|
172
|
+
this.#dirtyGroups.clear();
|
|
173
|
+
for (const [key, groupRow] of dirty) {
|
|
174
|
+
const stored = this.#state(key);
|
|
175
|
+
if (stored === void 0) continue;
|
|
176
|
+
const state = this.#reducer.empty();
|
|
177
|
+
for (const node of this.#input.fetch({ constraint: this.#constraint(groupRow) })) {
|
|
178
|
+
if (node === "yield") {
|
|
179
|
+
yield node;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (rowEqualsForCompoundKey(node.row, groupRow, this.#columns)) this.#reducer.contribute(state, node.row);
|
|
183
|
+
}
|
|
184
|
+
yield* this.#emitIfChanged(this.#groupValues(groupRow), stored, state);
|
|
185
|
+
}
|
|
186
|
+
if (this.#output.reconcile) yield* this.#output.reconcile(this);
|
|
187
|
+
}
|
|
188
|
+
/** An edit that moves its row from one group to another. */
|
|
189
|
+
*#move(oldRow, row) {
|
|
190
|
+
yield* this.#remove(oldRow);
|
|
191
|
+
yield* this.#add(row);
|
|
192
|
+
}
|
|
193
|
+
#add(row) {
|
|
194
|
+
const values = this.#groupValues(row);
|
|
195
|
+
const key = groupKey(values);
|
|
196
|
+
const stored = this.#state(key);
|
|
197
|
+
if (stored === void 0) {
|
|
198
|
+
const state = this.#reducer.empty();
|
|
199
|
+
this.#reducer.contribute(state, row);
|
|
200
|
+
return this.#output.push(makeAddChange(this.#store(values, state)), this);
|
|
201
|
+
}
|
|
202
|
+
const state = { ...stored };
|
|
203
|
+
if (this.#dirtyGroups.has(key)) {
|
|
204
|
+
state.count++;
|
|
205
|
+
this.#storage.set(key, state);
|
|
206
|
+
return emptyArray;
|
|
207
|
+
}
|
|
208
|
+
this.#reducer.contribute(state, row);
|
|
209
|
+
return this.#emitIfChanged(values, stored, state);
|
|
210
|
+
}
|
|
211
|
+
#remove(row) {
|
|
212
|
+
const values = this.#groupValues(row);
|
|
213
|
+
const key = groupKey(values);
|
|
214
|
+
const stored = must(this.#state(key), "GroupBy: removed a row of a group it lacks");
|
|
215
|
+
if (stored.count === 1) {
|
|
216
|
+
this.#storage.del(key);
|
|
217
|
+
this.#dirtyGroups.delete(key);
|
|
218
|
+
return this.#output.push(makeRemoveChange(this.#makeNode(values, stored)), this);
|
|
219
|
+
}
|
|
220
|
+
const state = { ...stored };
|
|
221
|
+
if (isInvertible(this.#reducer.fn)) this.#reducer.applyInvertible(state, row, -1);
|
|
222
|
+
else if (this.#dirtyGroups.has(key) || !this.#reducer.pushExtreme(state, makeRemoveChange({
|
|
223
|
+
row,
|
|
224
|
+
relationships: {}
|
|
225
|
+
}))) {
|
|
226
|
+
this.#dirtyGroups.set(key, row);
|
|
227
|
+
this.#storage.set(key, {
|
|
228
|
+
...stored,
|
|
229
|
+
count: stored.count - 1
|
|
230
|
+
});
|
|
231
|
+
return emptyArray;
|
|
232
|
+
}
|
|
233
|
+
return this.#emitIfChanged(values, stored, state);
|
|
234
|
+
}
|
|
235
|
+
/** An edit within a group. */
|
|
236
|
+
#update(oldRow, row) {
|
|
237
|
+
const values = this.#groupValues(row);
|
|
238
|
+
const key = groupKey(values);
|
|
239
|
+
const stored = this.#state(key);
|
|
240
|
+
if (stored === void 0 || this.#dirtyGroups.has(key) || this.#reducer.sameValue(oldRow, row)) return emptyArray;
|
|
241
|
+
const state = { ...stored };
|
|
242
|
+
if (!isInvertible(this.#reducer.fn)) {
|
|
243
|
+
this.#dirtyGroups.set(key, row);
|
|
244
|
+
return emptyArray;
|
|
245
|
+
}
|
|
246
|
+
this.#reducer.applyInvertible(state, oldRow, -1, true);
|
|
247
|
+
this.#reducer.applyInvertible(state, row, 1, true);
|
|
248
|
+
return this.#emitIfChanged(values, stored, state);
|
|
249
|
+
}
|
|
250
|
+
/** Stores `state` and sends the move from `stored` downstream, if any. */
|
|
251
|
+
#emitIfChanged(values, stored, state) {
|
|
252
|
+
this.#storage.set(groupKey(values), state);
|
|
253
|
+
if (!this.#reducer.changed(stored, state) && !(this.#carriesRows && stored.count !== state.count)) return emptyArray;
|
|
254
|
+
return this.#output.push(makeEditChange(this.#makeNode(values, state), this.#makeNode(values, stored)), this);
|
|
255
|
+
}
|
|
256
|
+
#state(key) {
|
|
257
|
+
return this.#storage.get(key);
|
|
258
|
+
}
|
|
259
|
+
/** Records `state` for the group and returns its row. */
|
|
260
|
+
#store(values, state) {
|
|
261
|
+
this.#storage.set(groupKey(values), state);
|
|
262
|
+
return this.#makeNode(values, state);
|
|
263
|
+
}
|
|
264
|
+
#makeNode(values, state) {
|
|
265
|
+
const row = {};
|
|
266
|
+
for (let i = 0; i < this.#columns.length; i++) assignProperty(row, this.#columns[i], values[i]);
|
|
267
|
+
row[AGGREGATE_KEY_COLUMN] = groupKey(values);
|
|
268
|
+
this.#reducer.writePayload(row, state);
|
|
269
|
+
if (this.#carriesRows) row[AGGREGATE_ROWS_COLUMN] = state.count;
|
|
270
|
+
return {
|
|
271
|
+
row,
|
|
272
|
+
relationships: {}
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* A constraint that reads the rows of `row`'s group. It leaves out the
|
|
277
|
+
* `null` values, which a constraint never matches, so it can read rows of
|
|
278
|
+
* other groups too, which the caller skips.
|
|
279
|
+
*/
|
|
280
|
+
#constraint(row) {
|
|
281
|
+
let constraint;
|
|
282
|
+
for (const col of this.#columns) {
|
|
283
|
+
const value = normalizeUndefined(row[col]);
|
|
284
|
+
if (value !== null) assignProperty(constraint ??= {}, col, value);
|
|
285
|
+
}
|
|
286
|
+
return constraint;
|
|
287
|
+
}
|
|
288
|
+
#groupValues(row) {
|
|
289
|
+
return groupValues(row, this.#columns);
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Turns the rows of a {@link GroupBy}, or of the synthetic source a synced
|
|
294
|
+
* client reads them from, into the rows a view of the query shows: the group
|
|
295
|
+
* columns under the query's column names, and, for a `groupBy()` with an
|
|
296
|
+
* aggregate, its value under `valueName` (`count`, `sum`, …). A `distinct()`
|
|
297
|
+
* shows no value, so an edit, which only moves its count, doesn't reach the
|
|
298
|
+
* view.
|
|
299
|
+
*/
|
|
300
|
+
var GroupProjection = class {
|
|
301
|
+
#input;
|
|
302
|
+
#columns;
|
|
303
|
+
#valueName;
|
|
304
|
+
#schema;
|
|
305
|
+
#output = throwOutput;
|
|
306
|
+
constructor(input, columns, valueName) {
|
|
307
|
+
this.#input = input;
|
|
308
|
+
this.#columns = columns;
|
|
309
|
+
this.#valueName = valueName;
|
|
310
|
+
assert(valueName === void 0 || columns.every(([out]) => out !== valueName), () => `groupBy(): the column "${valueName}" has the same name as the ${valueName}() value`);
|
|
311
|
+
input.setOutput(this);
|
|
312
|
+
const inputSchema = input.getSchema();
|
|
313
|
+
const viewName = new Map(columns.map(([out, from]) => [from, out]));
|
|
314
|
+
const sort = must(inputSchema.sort).filter(([col]) => viewName.has(col)).map(([col, dir]) => [must(viewName.get(col)), dir]);
|
|
315
|
+
const viewColumns = {};
|
|
316
|
+
for (const [out, from] of columns) assignProperty(viewColumns, out, must(inputSchema.columns[from]));
|
|
317
|
+
if (valueName !== void 0) assignProperty(viewColumns, valueName, must(inputSchema.columns[AGGREGATE_VALUE_COLUMN]));
|
|
318
|
+
this.#schema = {
|
|
319
|
+
tableName: inputSchema.tableName,
|
|
320
|
+
columns: viewColumns,
|
|
321
|
+
primaryKey: columns.map(([out]) => out),
|
|
322
|
+
relationships: {},
|
|
323
|
+
isHidden: false,
|
|
324
|
+
system: inputSchema.system,
|
|
325
|
+
sort,
|
|
326
|
+
compareRows: makeComparator(sort)
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
setOutput(output) {
|
|
330
|
+
this.#output = output;
|
|
331
|
+
}
|
|
332
|
+
getSchema() {
|
|
333
|
+
return this.#schema;
|
|
334
|
+
}
|
|
335
|
+
destroy() {
|
|
336
|
+
this.#input.destroy();
|
|
337
|
+
}
|
|
338
|
+
*fetch(req) {
|
|
339
|
+
for (const node of this.#input.fetch(req)) yield node === "yield" ? node : this.#project(node);
|
|
340
|
+
}
|
|
341
|
+
push(change) {
|
|
342
|
+
switch (change[0]) {
|
|
343
|
+
case 0: return this.#output.push(makeAddChange(this.#project(change[1])), this);
|
|
344
|
+
case 1: return this.#output.push(makeRemoveChange(this.#project(change[1])), this);
|
|
345
|
+
case 2: {
|
|
346
|
+
const node = change[1];
|
|
347
|
+
const old = change[2];
|
|
348
|
+
if (this.#valueName === void 0 || node.row["_0_value"] === old.row["_0_value"]) return emptyArray;
|
|
349
|
+
return this.#output.push(makeEditChange(this.#project(node), this.#project(old)), this);
|
|
350
|
+
}
|
|
351
|
+
case 3: return emptyArray;
|
|
352
|
+
default: unreachable(change);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
reconcile(_pusher) {
|
|
356
|
+
return this.#output.reconcile ? this.#output.reconcile(this) : emptyArray;
|
|
357
|
+
}
|
|
358
|
+
#project(node) {
|
|
359
|
+
const row = {};
|
|
360
|
+
for (const [out, from] of this.#columns) assignProperty(row, out, node.row[from]);
|
|
361
|
+
if (this.#valueName !== void 0) assignProperty(row, this.#valueName, node.row[AGGREGATE_VALUE_COLUMN]);
|
|
362
|
+
return {
|
|
363
|
+
row,
|
|
364
|
+
relationships: {}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
/**
|
|
369
|
+
* The order of a grouped query's rows (its `groupBy`, or the columns a count
|
|
370
|
+
* of distinct combinations groups by): its `orderBy`, which names only those
|
|
371
|
+
* columns, then the rest of them ascending. Other columns, such as the
|
|
372
|
+
* primary key a completed ordering ends with, are left out.
|
|
373
|
+
*/
|
|
374
|
+
function groupOrdering(ast) {
|
|
375
|
+
const columns = must(ast.groupBy ?? ast.aggregate?.distinct);
|
|
376
|
+
const ordering = [];
|
|
377
|
+
for (const [col, dir] of ast.orderBy ?? []) if (columns.includes(col) && !ordering.some(([c]) => c === col)) ordering.push([col, dir]);
|
|
378
|
+
for (const col of columns) if (!ordering.some(([c]) => c === col)) ordering.push([col, "asc"]);
|
|
379
|
+
return ordering;
|
|
380
|
+
}
|
|
381
|
+
//#endregion
|
|
382
|
+
export { GroupBy, GroupProjection, groupKey, groupOrdering, groupSourceSchema, groupValues };
|
|
383
|
+
|
|
384
|
+
//# sourceMappingURL=group-by.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by.js","names":[],"sources":["../../../../../zql/src/ivm/group-by.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {assignProperty} from '../../../shared/src/objects.ts';\nimport {emptyArray} from '../../../shared/src/sentinels.ts';\nimport type {\n AST,\n CompoundKey,\n Ordering,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport type {SchemaValue} from '../../../zero-types/src/schema-value.ts';\nimport {\n AGGREGATE_KEY_COLUMN,\n AGGREGATE_ROWS_COLUMN,\n AGGREGATE_VALUE_COLUMN,\n aggregateSourceSchema,\n carriesComponents,\n isInvertible,\n type AggState,\n type AggStorage,\n type Reducer,\n} from './aggregate.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport {\n makeAddChange,\n makeEditChange,\n makeRemoveChange,\n type Change,\n} from './change.ts';\nimport type {Constraint} from './constraint.ts';\nimport {\n makeComparator,\n normalizeUndefined,\n valueToKey,\n type Node,\n type NormalizedValue,\n} from './data.ts';\nimport {rowEqualsForCompoundKey} from './join-utils.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type InputBase,\n type Operator,\n type Output,\n type Storage,\n} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {SourceInput} from './source.ts';\nimport type {Stream} from './stream.ts';\n\n/**\n * The synthetic schema (columns, primary key and sort) of the rows\n * {@link GroupBy} emits: the group columns, the key of the group (`_0_key`)\n * and the aggregate's payload (`_0_value`, and for sum/avg its components and\n * the group's number of rows, `_0_rows`).\n * Shared by the operator (compute mode) and the client query builder\n * (`aggregatesFromSource` mode) so both agree on the synthetic source's shape.\n *\n * The key is the group's values encoded as one string, rather than the\n * columns themselves, because a synced row key can't hold a `null`, and `null`\n * is a value like any other.\n */\nexport function groupSourceSchema(\n inputColumns: Record<string, SchemaValue>,\n ordering: Ordering,\n reducer: Pick<Reducer, 'fn' | 'field' | 'path'>,\n): {\n columns: Record<string, SchemaValue>;\n primaryKey: PrimaryKey;\n sort: Ordering;\n} {\n const {columns} = aggregateSourceSchema(\n inputColumns,\n ordering.map(([col]) => col),\n reducer.fn,\n reducer.field,\n reducer.path,\n );\n columns[AGGREGATE_KEY_COLUMN] = {type: 'string'};\n if (carriesComponents(reducer.fn)) {\n columns[AGGREGATE_ROWS_COLUMN] = {type: 'number'};\n }\n return {\n columns,\n primaryKey: [AGGREGATE_KEY_COLUMN],\n // The key is unique and determined by the columns, so it only makes the\n // order total.\n sort: [...ordering, [AGGREGATE_KEY_COLUMN, 'asc']],\n };\n}\n\n/**\n * The `_0_key` of a group, which also keys its state in the operator's\n * storage: as for Take and Cap, `valueToKey` of the value when there is one\n * column, and otherwise the values in column order, JSON encoded. One query\n * always has the same number of columns, so the two forms never meet.\n */\nexport function groupKey(values: readonly NormalizedValue[]): string {\n return values.length === 1 ? valueToKey(values[0]) : JSON.stringify(values);\n}\n\n/** A row's values of the group `columns`, in their order. */\nexport function groupValues(\n row: Row,\n columns: readonly string[],\n): NormalizedValue[] {\n return columns.map(col => normalizeUndefined(row[col]));\n}\n\n/**\n * GroupBy groups its input by `columns` and reduces each group with an\n * aggregate function, as `GROUP BY` does: one row per combination of the\n * columns' values, `{...columns, _0_key, _0_value}`, plus the sum and count\n * components for sum/avg. `null` is a value like any other.\n *\n * A distinct is a GroupBy with a count, whose value a view doesn't show.\n *\n * It sits at the end of a top-level pipeline whose rows are sorted by the\n * group columns first, so the rows of a group are adjacent and a fetch reads\n * them in one pass. It keeps the state of every group, so a push adds a row\n * when a group gets its first input row, removes it when it loses its last,\n * and otherwise edits it when its value changes. Like {@link Aggregate}, a\n * min/max whose extreme a push removes is re-read from the input in\n * {@link reconcile}.\n */\nexport class GroupBy implements Operator {\n readonly #input: Input;\n readonly #storage: AggStorage;\n readonly #columns: CompoundKey;\n readonly #reducer: Reducer;\n // A sum/avg row also carries its group's row count (`_0_rows`).\n readonly #carriesRows: boolean;\n readonly #schema: SourceSchema;\n // The source connection `input` reads straight from, when nothing between\n // them drops rows. It can count the groups without the rows being read\n // (see fetch).\n readonly #groupSource: SourceInput | undefined;\n // Set by the first fetch. Until then nothing downstream has the rows, so a\n // push has nothing to update.\n #hydrated = false;\n\n /**\n * min/max groups whose extreme a push removed, by storage key, with a row\n * of the group, to re-read in {@link reconcile}. Until then their storage\n * keeps the value last sent downstream, with the current count.\n */\n readonly #dirtyGroups = new Map<string, Row>();\n\n #output: Output = throwOutput;\n\n /**\n * @param ordering The order of the groups, which names each group column\n * once. The input must be sorted by it first.\n */\n constructor(\n input: Input,\n storage: Storage,\n ordering: Ordering,\n tableName: string,\n reducer: Reducer,\n groupSource?: SourceInput | undefined,\n ) {\n assert(ordering.length > 0, 'GroupBy: needs at least one column');\n this.#input = input;\n this.#storage = storage as AggStorage;\n this.#columns = ordering.map(([col]) => col) as unknown as CompoundKey;\n this.#reducer = reducer;\n this.#carriesRows = carriesComponents(reducer.fn);\n this.#groupSource = reducer.fn === 'count' ? groupSource : undefined;\n input.setOutput(this);\n\n const inputSchema = input.getSchema();\n const inputSort = inputSchema.sort ?? [];\n assert(\n ordering.every(\n ([col, dir], i) => inputSort[i]?.[0] === col && inputSort[i][1] === dir,\n ),\n 'GroupBy: the input must be sorted by the group columns first',\n );\n const {columns, primaryKey, sort} = groupSourceSchema(\n inputSchema.columns,\n ordering,\n reducer,\n );\n this.#schema = {\n // The rows are routed (e.g. by the view-syncer streamer) to this\n // synthetic table, apart from the input table's rows.\n tableName,\n columns,\n primaryKey,\n relationships: {},\n isHidden: false,\n isAggregate: true,\n system: inputSchema.system,\n sort,\n compareRows: makeComparator(sort),\n };\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n getSchema(): SourceSchema {\n return this.#schema;\n }\n\n destroy(): void {\n this.#input.destroy();\n this.#storage.destroy();\n }\n\n fetch(req: FetchRequest): Stream<Node | 'yield'> {\n // A top-level query without a bound, so the view reads every row once.\n assert(\n req.constraint === undefined && req.start === undefined && !req.reverse,\n 'GroupBy: fetch takes no constraint, start or reverse',\n );\n this.#hydrated = true;\n const groups = this.#groupSource?.groupCounts?.(this.#columns);\n if (groups === undefined) {\n return this.#fetchGroups();\n }\n const nodes = groups.map(({row, count}) =>\n this.#store(this.#groupValues(row), {...this.#reducer.empty(), count}),\n );\n nodes.sort((a, b) => this.#schema.compareRows(a.row, b.row));\n return nodes;\n }\n\n /** Reads the input and folds each run of a group into its row. */\n *#fetchGroups(): Stream<Node | 'yield'> {\n // The first row of the current run, and its group's state.\n let first: Row | undefined;\n let state: AggState | undefined;\n for (const node of this.#input.fetch({})) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n if (\n first === undefined ||\n !rowEqualsForCompoundKey(first, node.row, this.#columns)\n ) {\n if (first !== undefined) {\n yield this.#store(this.#groupValues(first), must(state));\n }\n first = node.row;\n state = this.#reducer.empty();\n }\n this.#reducer.contribute(must(state), node.row);\n }\n if (first !== undefined) {\n yield this.#store(this.#groupValues(first), must(state));\n }\n }\n\n push(change: Change): Stream<'yield'> {\n if (!this.#hydrated) {\n return emptyArray;\n }\n switch (change[ChangeIndex.TYPE]) {\n case ChangeType.ADD:\n return this.#add(change[ChangeIndex.NODE].row);\n case ChangeType.REMOVE:\n return this.#remove(change[ChangeIndex.NODE].row);\n case ChangeType.EDIT: {\n const oldRow = change[ChangeIndex.OLD_NODE].row;\n const row = change[ChangeIndex.NODE].row;\n return rowEqualsForCompoundKey(oldRow, row, this.#columns)\n ? this.#update(oldRow, row)\n : this.#move(oldRow, row);\n }\n case ChangeType.CHILD:\n // The input has no relationships the group rows show.\n return emptyArray;\n default:\n unreachable(change);\n }\n }\n\n /**\n * Phase 2 of the two-phase push: re-read the min/max groups whose extreme\n * Phase 1 removed, now that everything upstream has settled, then forward\n * the signal for operators downstream.\n */\n reconcile(_pusher: InputBase): Stream<'yield'> {\n if (this.#dirtyGroups.size > 0) {\n return this.#reconcileDirty();\n }\n return this.#output.reconcile ? this.#output.reconcile(this) : emptyArray;\n }\n\n *#reconcileDirty(): Stream<'yield'> {\n const dirty = [...this.#dirtyGroups];\n this.#dirtyGroups.clear();\n for (const [key, groupRow] of dirty) {\n const stored = this.#state(key);\n if (stored === undefined) {\n continue; // its last row went in the meantime\n }\n const state = this.#reducer.empty();\n for (const node of this.#input.fetch({\n constraint: this.#constraint(groupRow),\n })) {\n if (node === 'yield') {\n yield node;\n continue;\n }\n if (rowEqualsForCompoundKey(node.row, groupRow, this.#columns)) {\n this.#reducer.contribute(state, node.row);\n }\n }\n yield* this.#emitIfChanged(this.#groupValues(groupRow), stored, state);\n }\n if (this.#output.reconcile) {\n yield* this.#output.reconcile(this);\n }\n }\n\n /** An edit that moves its row from one group to another. */\n *#move(oldRow: Row, row: Row): Stream<'yield'> {\n yield* this.#remove(oldRow);\n yield* this.#add(row);\n }\n\n #add(row: Row): Stream<'yield'> {\n const values = this.#groupValues(row);\n const key = groupKey(values);\n const stored = this.#state(key);\n if (stored === undefined) {\n const state = this.#reducer.empty();\n this.#reducer.contribute(state, row);\n return this.#output.push(makeAddChange(this.#store(values, state)), this);\n }\n const state = {...stored};\n if (this.#dirtyGroups.has(key)) {\n // Re-read in reconcile; only the count is kept up to date.\n state.count++;\n this.#storage.set(key, state);\n return emptyArray;\n }\n this.#reducer.contribute(state, row);\n return this.#emitIfChanged(values, stored, state);\n }\n\n #remove(row: Row): Stream<'yield'> {\n const values = this.#groupValues(row);\n const key = groupKey(values);\n const stored = must(\n this.#state(key),\n 'GroupBy: removed a row of a group it lacks',\n );\n if (stored.count === 1) {\n this.#storage.del(key);\n this.#dirtyGroups.delete(key);\n return this.#output.push(\n makeRemoveChange(this.#makeNode(values, stored)),\n this,\n );\n }\n const state = {...stored};\n if (isInvertible(this.#reducer.fn)) {\n this.#reducer.applyInvertible(state, row, -1);\n } else if (\n this.#dirtyGroups.has(key) ||\n !this.#reducer.pushExtreme(\n state,\n makeRemoveChange({row, relationships: {}}),\n )\n ) {\n // Keep what was last sent downstream, with the count down by one.\n this.#dirtyGroups.set(key, row);\n this.#storage.set(key, {...stored, count: stored.count - 1});\n return emptyArray;\n }\n return this.#emitIfChanged(values, stored, state);\n }\n\n /** An edit within a group. */\n #update(oldRow: Row, row: Row): Stream<'yield'> {\n const values = this.#groupValues(row);\n const key = groupKey(values);\n const stored = this.#state(key);\n if (\n stored === undefined ||\n this.#dirtyGroups.has(key) ||\n this.#reducer.sameValue(oldRow, row)\n ) {\n return emptyArray;\n }\n const state = {...stored};\n if (!isInvertible(this.#reducer.fn)) {\n // The extreme may have moved in either direction.\n this.#dirtyGroups.set(key, row);\n return emptyArray;\n }\n this.#reducer.applyInvertible(state, oldRow, -1, true);\n this.#reducer.applyInvertible(state, row, 1, true);\n return this.#emitIfChanged(values, stored, state);\n }\n\n /** Stores `state` and sends the move from `stored` downstream, if any. */\n #emitIfChanged(\n values: readonly NormalizedValue[],\n stored: AggState,\n state: AggState,\n ): Stream<'yield'> {\n this.#storage.set(groupKey(values), state);\n if (\n !this.#reducer.changed(stored, state) &&\n // A row whose field is null moves only a sum/avg group's row count.\n !(this.#carriesRows && stored.count !== state.count)\n ) {\n return emptyArray;\n }\n return this.#output.push(\n makeEditChange(\n this.#makeNode(values, state),\n this.#makeNode(values, stored),\n ),\n this,\n );\n }\n\n #state(key: string): AggState | undefined {\n return this.#storage.get(key);\n }\n\n /** Records `state` for the group and returns its row. */\n #store(values: readonly NormalizedValue[], state: AggState): Node {\n this.#storage.set(groupKey(values), state);\n return this.#makeNode(values, state);\n }\n\n #makeNode(values: readonly NormalizedValue[], state: AggState): Node {\n const row: Record<string, Value> = {};\n for (let i = 0; i < this.#columns.length; i++) {\n assignProperty(row, this.#columns[i], values[i]);\n }\n row[AGGREGATE_KEY_COLUMN] = groupKey(values);\n this.#reducer.writePayload(row, state);\n if (this.#carriesRows) {\n row[AGGREGATE_ROWS_COLUMN] = state.count;\n }\n return {row, relationships: {}};\n }\n\n /**\n * A constraint that reads the rows of `row`'s group. It leaves out the\n * `null` values, which a constraint never matches, so it can read rows of\n * other groups too, which the caller skips.\n */\n #constraint(row: Row): Constraint | undefined {\n let constraint: Record<string, Value> | undefined;\n for (const col of this.#columns) {\n const value = normalizeUndefined(row[col]);\n if (value !== null) {\n assignProperty((constraint ??= {}), col, value);\n }\n }\n return constraint;\n }\n\n #groupValues(row: Row): NormalizedValue[] {\n return groupValues(row, this.#columns);\n }\n}\n\n/**\n * Turns the rows of a {@link GroupBy}, or of the synthetic source a synced\n * client reads them from, into the rows a view of the query shows: the group\n * columns under the query's column names, and, for a `groupBy()` with an\n * aggregate, its value under `valueName` (`count`, `sum`, …). A `distinct()`\n * shows no value, so an edit, which only moves its count, doesn't reach the\n * view.\n */\nexport class GroupProjection implements Operator {\n readonly #input: Input;\n // [the view's name, the input's name] of each group column.\n readonly #columns: readonly (readonly [string, string])[];\n readonly #valueName: string | undefined;\n readonly #schema: SourceSchema;\n\n #output: Output = throwOutput;\n\n constructor(\n input: Input,\n columns: readonly (readonly [string, string])[],\n valueName?: string | undefined,\n ) {\n this.#input = input;\n this.#columns = columns;\n this.#valueName = valueName;\n // The value would overwrite the group column. The query builder rejects\n // such a query; a hand-built AST can still name one.\n assert(\n valueName === undefined || columns.every(([out]) => out !== valueName),\n () =>\n `groupBy(): the column \"${valueName}\" has the same name as the ${valueName}() value`,\n );\n input.setOutput(this);\n\n const inputSchema = input.getSchema();\n const viewName = new Map(columns.map(([out, from]) => [from, out]));\n const sort: Ordering = must(inputSchema.sort)\n .filter(([col]) => viewName.has(col))\n .map(([col, dir]) => [must(viewName.get(col)), dir] as const);\n const viewColumns: Record<string, SchemaValue> = {};\n for (const [out, from] of columns) {\n assignProperty(viewColumns, out, must(inputSchema.columns[from]));\n }\n if (valueName !== undefined) {\n assignProperty(\n viewColumns,\n valueName,\n must(inputSchema.columns[AGGREGATE_VALUE_COLUMN]),\n );\n }\n this.#schema = {\n tableName: inputSchema.tableName,\n columns: viewColumns,\n primaryKey: columns.map(([out]) => out) as unknown as PrimaryKey,\n relationships: {},\n isHidden: false,\n system: inputSchema.system,\n sort,\n compareRows: makeComparator(sort),\n };\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n getSchema(): SourceSchema {\n return this.#schema;\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n\n *fetch(req: FetchRequest): Stream<Node | 'yield'> {\n for (const node of this.#input.fetch(req)) {\n yield node === 'yield' ? node : this.#project(node);\n }\n }\n\n push(change: Change): Stream<'yield'> {\n switch (change[ChangeIndex.TYPE]) {\n case ChangeType.ADD:\n return this.#output.push(\n makeAddChange(this.#project(change[ChangeIndex.NODE])),\n this,\n );\n case ChangeType.REMOVE:\n return this.#output.push(\n makeRemoveChange(this.#project(change[ChangeIndex.NODE])),\n this,\n );\n case ChangeType.EDIT: {\n // A row's key is its group's values, so an edit only moves its\n // value, which a distinct doesn't show. Nothing is copied unless\n // the value changed.\n const node = change[ChangeIndex.NODE];\n const old = change[ChangeIndex.OLD_NODE];\n if (\n this.#valueName === undefined ||\n node.row[AGGREGATE_VALUE_COLUMN] === old.row[AGGREGATE_VALUE_COLUMN]\n ) {\n return emptyArray;\n }\n return this.#output.push(\n makeEditChange(this.#project(node), this.#project(old)),\n this,\n );\n }\n case ChangeType.CHILD:\n return emptyArray;\n default:\n unreachable(change);\n }\n }\n\n reconcile(_pusher: InputBase): Stream<'yield'> {\n return this.#output.reconcile ? this.#output.reconcile(this) : emptyArray;\n }\n\n #project(node: Node): Node {\n const row: Record<string, Value> = {};\n for (const [out, from] of this.#columns) {\n assignProperty(row, out, node.row[from]);\n }\n if (this.#valueName !== undefined) {\n assignProperty(row, this.#valueName, node.row[AGGREGATE_VALUE_COLUMN]);\n }\n return {row, relationships: {}};\n }\n}\n\n/**\n * The order of a grouped query's rows (its `groupBy`, or the columns a count\n * of distinct combinations groups by): its `orderBy`, which names only those\n * columns, then the rest of them ascending. Other columns, such as the\n * primary key a completed ordering ends with, are left out.\n */\nexport function groupOrdering(ast: AST): Ordering {\n const columns = must(ast.groupBy ?? ast.aggregate?.distinct);\n const ordering: [string, 'asc' | 'desc'][] = [];\n for (const [col, dir] of ast.orderBy ?? []) {\n if (columns.includes(col) && !ordering.some(([c]) => c === col)) {\n ordering.push([col, dir]);\n }\n }\n for (const col of columns) {\n if (!ordering.some(([c]) => c === col)) {\n ordering.push([col, 'asc']);\n }\n }\n return ordering;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-index-tap.js","names":[
|
|
1
|
+
{"version":3,"file":"join-index-tap.js","names":[],"sources":["../../../../../zql/src/ivm/join-index-tap.ts"],"sourcesContent":["import {unreachable} from '../../../shared/src/asserts.ts';\nimport {ChangeIndex} from './change-index.ts';\nimport {ChangeType} from './change-type.ts';\nimport type {Change} from './change.ts';\nimport type {Node} from './data.ts';\nimport type {JoinIndex} from './join-index.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type InputBase,\n type Operator,\n type Output,\n} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport type {Stream} from './stream.ts';\n\n/**\n * Keeps the parent indexes of a pipeline's EXISTS joins equal to the rows\n * the pipeline emits: rows it yields on fetch or adds on push are indexed,\n * and rows it removes are dropped.\n *\n * An EXISTS join sits upstream of the conditions and the limit, so it sees\n * every parent the pipeline scans, including those a condition rejects or the\n * limit never keeps. Indexing them there would grow with the scan (the whole\n * table for an unlimited or selective EXISTS). This operator is placed after\n * the limit instead, where a row is only seen once it is part of the result,\n * and a row the limit evicts arrives as a remove.\n *\n * It cannot live in the Exists filter: an OR does not evaluate the branches\n * after the first that passes, but every branch's relationship is still\n * synced for the emitted row.\n */\nexport class JoinIndexTap implements Operator {\n readonly #input: Input;\n readonly #indexes: readonly JoinIndex[];\n\n #output: Output = throwOutput;\n\n constructor(input: Input, indexes: readonly JoinIndex[]) {\n this.#input = input;\n this.#indexes = indexes;\n input.setOutput(this);\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n\n *fetch(req: FetchRequest): Stream<Node | 'yield'> {\n for (const node of this.#input.fetch(req)) {\n if (node !== 'yield') {\n for (const index of this.#indexes) {\n index.add(node.row);\n }\n }\n yield node;\n }\n }\n\n push(change: Change): Stream<'yield'> {\n switch (change[ChangeIndex.TYPE]) {\n case ChangeType.ADD:\n for (const index of this.#indexes) {\n index.add(change[ChangeIndex.NODE].row);\n }\n break;\n case ChangeType.REMOVE:\n for (const index of this.#indexes) {\n index.remove(change[ChangeIndex.NODE].row);\n }\n break;\n case ChangeType.EDIT:\n for (const index of this.#indexes) {\n index.remove(change[ChangeIndex.OLD_NODE].row);\n index.add(change[ChangeIndex.NODE].row);\n }\n break;\n case ChangeType.CHILD:\n break;\n default:\n unreachable(change);\n }\n return this.#output.push(change, this);\n }\n\n *reconcile(_pusher: InputBase): Stream<'yield'> {\n if (this.#output.reconcile) {\n yield* this.#output.reconcile(this);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiCA,IAAa,eAAb,MAA8C;CAC5C;CACA;CAEA,UAAkB;CAElB,YAAY,OAAc,SAA+B;EACvD,KAAK,SAAS;EACd,KAAK,WAAW;EAChB,MAAM,UAAU,IAAI;CACtB;CAEA,UAAU,QAAsB;EAC9B,KAAK,UAAU;CACjB;CAEA,YAA0B;EACxB,OAAO,KAAK,OAAO,UAAU;CAC/B;CAEA,UAAgB;EACd,KAAK,OAAO,QAAQ;CACtB;CAEA,CAAC,MAAM,KAA2C;EAChD,KAAK,MAAM,QAAQ,KAAK,OAAO,MAAM,GAAG,GAAG;GACzC,IAAI,SAAS,SACX,KAAK,MAAM,SAAS,KAAK,UACvB,MAAM,IAAI,KAAK,GAAG;GAGtB,MAAM;EACR;CACF;CAEA,KAAK,QAAiC;EACpC,QAAQ,OAAO,IAAf;GACE,KAAK;IACH,KAAK,MAAM,SAAS,KAAK,UACvB,MAAM,IAAI,OAAO,EAAiB,CAAC,GAAG;IAExC;GACF,KAAK;IACH,KAAK,MAAM,SAAS,KAAK,UACvB,MAAM,OAAO,OAAO,EAAiB,CAAC,GAAG;IAE3C;GACF,KAAK;IACH,KAAK,MAAM,SAAS,KAAK,UAAU;KACjC,MAAM,OAAO,OAAO,EAAqB,CAAC,GAAG;KAC7C,MAAM,IAAI,OAAO,EAAiB,CAAC,GAAG;IACxC;IACA;GACF,KAAK,GACH;GACF,SACE,YAAY,MAAM;EACtB;EACA,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI;CACvC;CAEA,CAAC,UAAU,SAAqC;EAC9C,IAAI,KAAK,QAAQ,WACf,OAAO,KAAK,QAAQ,UAAU,IAAI;CAEtC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-index.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"join-index.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,oCAAoC,CAAC;AAGnE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;AAS9E;;;;;;;;GAQG;AACH,qBAAa,SAAS;;IAUpB,YACE,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,WAAW,EACvB,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,EAQvC;IAED,8CAA8C;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAuClB;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAuCrB;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAG,gBAAgB,GAAG,SAAS,CAazE;IAED;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAiBlC;CAKF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { must } from "../../../shared/src/must.js";
|
|
2
|
+
import { assignProperty } from "../../../shared/src/objects.js";
|
|
2
3
|
import { canonicalKey } from "./join-utils.js";
|
|
3
4
|
//#region ../zql/src/ivm/join-index.ts
|
|
4
5
|
var UNPARTITIONED = [void 0];
|
|
@@ -56,7 +57,7 @@ var JoinIndex = class {
|
|
|
56
57
|
let partition = partitions.get(partKey);
|
|
57
58
|
if (partition === void 0) {
|
|
58
59
|
const constraint = {};
|
|
59
|
-
for (const key of partitionKey) constraint
|
|
60
|
+
for (const key of partitionKey) assignProperty(constraint, key, row[key]);
|
|
60
61
|
partition = {
|
|
61
62
|
constraint,
|
|
62
63
|
pks: /* @__PURE__ */ new Set()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-index.js","names":[
|
|
1
|
+
{"version":3,"file":"join-index.js","names":[],"sources":["../../../../../zql/src/ivm/join-index.ts"],"sourcesContent":["import {must} from '../../../shared/src/must.ts';\nimport {assignProperty} from '../../../shared/src/objects.ts';\nimport type {CompoundKey} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport {canonicalKey} from './join-utils.ts';\n\n/**\n * The partitions of the indexed parents that share a join key, as fetch\n * constraints. An unpartitioned index reports a single `undefined`.\n */\nexport type ParentPartitions = readonly (Record<string, Value> | undefined)[];\n\nconst UNPARTITIONED: ParentPartitions = [undefined];\n\ntype Partition = {\n readonly constraint: Record<string, Value>;\n readonly pks: Set<string>;\n};\n\n/**\n * An in-memory index from a join key to the parent rows that have it. Join\n * and FlippedJoin look up a child change's join key here to skip the parent\n * fetch when no indexed parent can see the change.\n *\n * Parents are tracked by primary key so that adding or removing a row twice\n * is harmless. Lookups only report whether any parent has the key and, when\n * the index is partitioned, in which partitions.\n */\nexport class JoinIndex {\n readonly #parentKey: CompoundKey;\n readonly #primaryKey: CompoundKey;\n /** The join key is the primary key, so one string serves as both. */\n readonly #joinKeyIsPK: boolean;\n readonly #partitionKey: CompoundKey | undefined;\n readonly #unpartitioned = new Map<string, Set<string>>();\n readonly #partitioned = new Map<string, Map<string, Partition>>();\n #size = 0;\n\n constructor(\n parentKey: CompoundKey,\n primaryKey: CompoundKey,\n partitionKey?: CompoundKey | undefined,\n ) {\n this.#parentKey = parentKey;\n this.#primaryKey = primaryKey;\n this.#joinKeyIsPK =\n parentKey.length === primaryKey.length &&\n parentKey.every((k, i) => k === primaryKey[i]);\n this.#partitionKey = partitionKey;\n }\n\n /** The number of parent rows in the index. */\n get size(): number {\n return this.#size;\n }\n\n add(row: Row): void {\n const joinKey = joinKeyOf(row, this.#parentKey);\n if (joinKey === undefined) {\n return;\n }\n const pk = this.#pkOf(row, joinKey);\n const partitionKey = this.#partitionKey;\n if (partitionKey === undefined) {\n let pks = this.#unpartitioned.get(joinKey);\n if (pks === undefined) {\n pks = new Set();\n this.#unpartitioned.set(joinKey, pks);\n }\n if (!pks.has(pk)) {\n pks.add(pk);\n this.#size++;\n }\n return;\n }\n\n const partKey = canonicalKey(row, partitionKey);\n let partitions = this.#partitioned.get(joinKey);\n if (partitions === undefined) {\n partitions = new Map();\n this.#partitioned.set(joinKey, partitions);\n }\n let partition = partitions.get(partKey);\n if (partition === undefined) {\n const constraint: Record<string, Value> = {};\n for (const key of partitionKey) {\n assignProperty(constraint, key, row[key]);\n }\n partition = {constraint, pks: new Set()};\n partitions.set(partKey, partition);\n }\n if (!partition.pks.has(pk)) {\n partition.pks.add(pk);\n this.#size++;\n }\n }\n\n remove(row: Row): void {\n const joinKey = joinKeyOf(row, this.#parentKey);\n if (joinKey === undefined) {\n return;\n }\n const pk = this.#pkOf(row, joinKey);\n const partitionKey = this.#partitionKey;\n if (partitionKey === undefined) {\n const pks = this.#unpartitioned.get(joinKey);\n if (pks === undefined) {\n return;\n }\n if (pks.delete(pk)) {\n this.#size--;\n if (pks.size === 0) {\n this.#unpartitioned.delete(joinKey);\n }\n }\n return;\n }\n\n const partitions = this.#partitioned.get(joinKey);\n if (partitions === undefined) {\n return;\n }\n const partKey = canonicalKey(row, partitionKey);\n const partition = partitions.get(partKey);\n if (partition === undefined) {\n return;\n }\n if (partition.pks.delete(pk)) {\n this.#size--;\n if (partition.pks.size === 0) {\n partitions.delete(partKey);\n if (partitions.size === 0) {\n this.#partitioned.delete(joinKey);\n }\n }\n }\n }\n\n /**\n * The partitions of the indexed parents whose join key matches `childRow`\n * over `childKey`, or `undefined` if there are none.\n */\n lookup(childRow: Row, childKey: CompoundKey): ParentPartitions | undefined {\n const joinKey = joinKeyOf(childRow, childKey);\n if (joinKey === undefined) {\n return undefined;\n }\n if (this.#partitionKey === undefined) {\n return this.#unpartitioned.has(joinKey) ? UNPARTITIONED : undefined;\n }\n const partitions = this.#partitioned.get(joinKey);\n if (partitions === undefined) {\n return undefined;\n }\n return Array.from(partitions.values(), p => p.constraint);\n }\n\n /**\n * The index as the operator storage entries it replaced, keyed\n * `j\\0<joinKey>\\0[<partitionKey>\\0]<primaryKey>`. For tests.\n */\n entriesForTest(): Record<string, 1> {\n const entries: Record<string, 1> = {};\n for (const [joinKey, pks] of this.#unpartitioned) {\n for (const pk of pks) {\n entries[`j\\x00${joinKey}\\x00${pk}`] = 1;\n }\n }\n for (const [joinKey, partitions] of this.#partitioned) {\n const partitionKey = must(this.#partitionKey);\n for (const {constraint, pks} of partitions.values()) {\n const partKey = canonicalKey(constraint, partitionKey);\n for (const pk of pks) {\n entries[`j\\x00${joinKey}\\x00${partKey}\\x00${pk}`] = 1;\n }\n }\n }\n return entries;\n }\n\n #pkOf(row: Row, joinKey: string): string {\n return this.#joinKeyIsPK ? joinKey : canonicalKey(row, this.#primaryKey);\n }\n}\n\n/**\n * The canonical join key of `row`, or `undefined` if any part of it is null:\n * a null key cannot match anything.\n */\nfunction joinKeyOf(row: Row, key: CompoundKey): string | undefined {\n for (const k of key) {\n if (row[k] === null) {\n return undefined;\n }\n }\n return canonicalKey(row, key);\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,oCAAoC,CAAC;AAGnE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAA6B,KAAK,IAAI,EAAC,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAExC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,IAAI,CAAC,CAEd;AAED,wBAAiB,mBAAmB,CAClC,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,CAqGxB;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,IAAI,CAAC,CAEd;AAED,wBAAiB,4BAA4B,CAC3C,MAAM,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,CAkExB;AAED,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,GAAG,EACN,CAAC,EAAE,GAAG,EACN,GAAG,EAAE,WAAW,GACf,OAAO,CAOT;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,WAAW,WAQtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,WAAW,GACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAUnC;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,EACzC,IAAI,EAAE,WAAW,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC,EACzC,IAAI,EAAE,WAAW,GAChB,MAAM,CAUR"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../shared/src/asserts.js";
|
|
2
|
+
import { assignProperty } from "../../../shared/src/objects.js";
|
|
2
3
|
import { compareValues, valuesEqual } from "./data.js";
|
|
3
4
|
//#region ../zql/src/ivm/join-utils.ts
|
|
4
5
|
function generateWithOverlayNoYield(stream, overlay, schema) {
|
|
@@ -39,19 +40,17 @@ function* generateWithOverlay(stream, overlay, schema) {
|
|
|
39
40
|
yieldNode = false;
|
|
40
41
|
}
|
|
41
42
|
break;
|
|
42
|
-
case 3:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
relationships
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
break;
|
|
43
|
+
case 3: if (schema.compareRows(overlay[1].row, node.row) === 0) {
|
|
44
|
+
applied = true;
|
|
45
|
+
yield {
|
|
46
|
+
row: node.row,
|
|
47
|
+
relationships: {
|
|
48
|
+
...node.relationships,
|
|
49
|
+
[overlay[2].relationshipName]: () => generateWithOverlay(node.relationships[overlay[2].relationshipName](), overlay[2].change, schema.relationships[overlay[2].relationshipName])
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
yieldNode = false;
|
|
53
|
+
}
|
|
55
54
|
}
|
|
56
55
|
if (yieldNode) yield node;
|
|
57
56
|
}
|
|
@@ -120,7 +119,7 @@ function buildJoinConstraint(sourceRow, sourceKey, targetKey) {
|
|
|
120
119
|
for (let i = 0; i < targetKey.length; i++) {
|
|
121
120
|
const value = sourceRow[sourceKey[i]];
|
|
122
121
|
if (value === null) return;
|
|
123
|
-
constraint
|
|
122
|
+
assignProperty(constraint, targetKey[i], value);
|
|
124
123
|
}
|
|
125
124
|
return constraint;
|
|
126
125
|
}
|