@rocicorp/zero 1.11.0-canary.3 → 1.11.0-canary.30
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/analyze-query/src/analyze-cli.js +4 -4
- package/out/analyze-query/src/analyze-cli.js.map +1 -1
- package/out/analyze-query/src/bin-analyze.js +13 -12
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/analyze-query/src/bin-transform.js +1 -1
- package/out/analyze-query/src/bin-transform.js.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.d.ts +8 -1
- package/out/ast-to-zql/src/ast-to-zql.d.ts.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.js +25 -25
- package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
- package/out/otel/src/log-options.d.ts +16 -0
- package/out/otel/src/log-options.d.ts.map +1 -1
- package/out/otel/src/log-options.js +60 -6
- package/out/otel/src/log-options.js.map +1 -1
- package/out/replicache/src/bg-interval.d.ts +2 -1
- package/out/replicache/src/bg-interval.d.ts.map +1 -1
- package/out/replicache/src/bg-interval.js +13 -4
- package/out/replicache/src/bg-interval.js.map +1 -1
- package/out/replicache/src/btree/node.d.ts.map +1 -1
- package/out/replicache/src/btree/node.js +3 -6
- package/out/replicache/src/btree/node.js.map +1 -1
- package/out/replicache/src/dag/gc.d.ts.map +1 -1
- package/out/replicache/src/dag/gc.js +8 -11
- package/out/replicache/src/dag/gc.js.map +1 -1
- package/out/replicache/src/dag/invalid-ref-count-error.d.ts +12 -0
- package/out/replicache/src/dag/invalid-ref-count-error.d.ts.map +1 -0
- package/out/replicache/src/dag/invalid-ref-count-error.js +19 -0
- package/out/replicache/src/dag/invalid-ref-count-error.js.map +1 -0
- package/out/replicache/src/dag/lazy-store.d.ts +17 -4
- package/out/replicache/src/dag/lazy-store.d.ts.map +1 -1
- package/out/replicache/src/dag/lazy-store.js +35 -9
- package/out/replicache/src/dag/lazy-store.js.map +1 -1
- package/out/replicache/src/dag/store-impl.d.ts +12 -2
- package/out/replicache/src/dag/store-impl.d.ts.map +1 -1
- package/out/replicache/src/dag/store-impl.js +29 -9
- package/out/replicache/src/dag/store-impl.js.map +1 -1
- package/out/replicache/src/db/rebase.d.ts +14 -2
- package/out/replicache/src/db/rebase.d.ts.map +1 -1
- package/out/replicache/src/db/rebase.js +27 -5
- package/out/replicache/src/db/rebase.js.map +1 -1
- package/out/replicache/src/get-kv-store-provider.d.ts +1 -1
- package/out/replicache/src/get-kv-store-provider.d.ts.map +1 -1
- package/out/replicache/src/get-kv-store-provider.js +4 -4
- package/out/replicache/src/get-kv-store-provider.js.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/expo-sqlite/store.js +28 -5
- package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/idb-store.d.ts +18 -0
- package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
- package/out/replicache/src/kv/idb-store.js +30 -2
- package/out/replicache/src/kv/idb-store.js.map +1 -1
- package/out/replicache/src/kv/mem-fallback-store.d.ts +54 -0
- package/out/replicache/src/kv/mem-fallback-store.d.ts.map +1 -0
- package/out/replicache/src/kv/mem-fallback-store.js +177 -0
- package/out/replicache/src/kv/mem-fallback-store.js.map +1 -0
- package/out/replicache/src/kv/mem-store.d.ts +1 -0
- package/out/replicache/src/kv/mem-store.d.ts.map +1 -1
- package/out/replicache/src/kv/mem-store.js +3 -0
- package/out/replicache/src/kv/mem-store.js.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -1
- package/out/replicache/src/kv/op-sqlite/store.js +4 -4
- package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
- package/out/replicache/src/kv/sqlite-store.d.ts +22 -1
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/kv/sqlite-store.js +159 -14
- package/out/replicache/src/kv/sqlite-store.js.map +1 -1
- package/out/replicache/src/kv/store.d.ts +6 -0
- package/out/replicache/src/kv/store.d.ts.map +1 -1
- package/out/replicache/src/new-client-channel.js.map +1 -1
- package/out/replicache/src/persist/client-gc.d.ts +2 -1
- package/out/replicache/src/persist/client-gc.d.ts.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 +2 -1
- package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
- package/out/replicache/src/persist/client-group-gc.js +2 -2
- package/out/replicache/src/persist/client-group-gc.js.map +1 -1
- package/out/replicache/src/persist/clients.d.ts +2 -2
- package/out/replicache/src/persist/collect-idb-databases.d.ts +28 -8
- package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
- package/out/replicache/src/persist/collect-idb-databases.js +97 -20
- package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
- package/out/replicache/src/persist/heartbeat.d.ts +2 -1
- package/out/replicache/src/persist/heartbeat.d.ts.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-db-name.js +1 -1
- package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
- package/out/replicache/src/persist/persist.d.ts.map +1 -1
- package/out/replicache/src/persist/persist.js +18 -8
- package/out/replicache/src/persist/persist.js.map +1 -1
- package/out/replicache/src/persist/refresh.js +6 -2
- package/out/replicache/src/persist/refresh.js.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts +85 -3
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js +321 -29
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/replicache-options.d.ts +9 -0
- package/out/replicache/src/replicache-options.d.ts.map +1 -1
- package/out/replicache/src/storage-failure.d.ts +37 -0
- package/out/replicache/src/storage-failure.d.ts.map +1 -0
- package/out/replicache/src/storage-failure.js +31 -0
- package/out/replicache/src/storage-failure.js.map +1 -0
- package/out/shared/src/arrays.d.ts +5 -0
- package/out/shared/src/arrays.d.ts.map +1 -1
- package/out/shared/src/arrays.js +8 -10
- package/out/shared/src/arrays.js.map +1 -1
- package/out/shared/src/base64.d.ts +19 -0
- package/out/shared/src/base64.d.ts.map +1 -0
- package/out/shared/src/base64.js +40 -0
- package/out/shared/src/base64.js.map +1 -0
- package/out/shared/src/centroid.d.ts +0 -1
- package/out/shared/src/centroid.d.ts.map +1 -1
- package/out/shared/src/centroid.js +1 -4
- package/out/shared/src/centroid.js.map +1 -1
- package/out/shared/src/error.d.ts +11 -0
- package/out/shared/src/error.d.ts.map +1 -1
- package/out/shared/src/error.js +35 -1
- package/out/shared/src/error.js.map +1 -1
- package/out/shared/src/hash.d.ts.map +1 -1
- package/out/shared/src/hash.js +32 -7
- package/out/shared/src/hash.js.map +1 -1
- package/out/shared/src/iterables.d.ts +2 -0
- package/out/shared/src/iterables.d.ts.map +1 -1
- package/out/shared/src/iterables.js +18 -1
- package/out/shared/src/iterables.js.map +1 -1
- package/out/shared/src/map.d.ts +24 -2
- package/out/shared/src/map.d.ts.map +1 -1
- package/out/shared/src/map.js +18 -4
- package/out/shared/src/map.js.map +1 -1
- package/out/shared/src/options-types.d.ts +2 -2
- package/out/shared/src/options.d.ts.map +1 -1
- package/out/shared/src/options.js +10 -7
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/packed-boolean-map.d.ts +7 -0
- package/out/shared/src/packed-boolean-map.d.ts.map +1 -0
- package/out/shared/src/packed-boolean-map.js +36 -0
- package/out/shared/src/packed-boolean-map.js.map +1 -0
- package/out/shared/src/random-values.js +12 -1
- package/out/shared/src/random-values.js.map +1 -1
- package/out/shared/src/ring-buffer.d.ts +10 -0
- package/out/shared/src/ring-buffer.d.ts.map +1 -1
- package/out/shared/src/ring-buffer.js +26 -1
- package/out/shared/src/ring-buffer.js.map +1 -1
- package/out/shared/src/tdigest.d.ts +10 -0
- package/out/shared/src/tdigest.d.ts.map +1 -1
- package/out/shared/src/tdigest.js +147 -63
- package/out/shared/src/tdigest.js.map +1 -1
- package/out/shared/src/valita.d.ts +13 -0
- package/out/shared/src/valita.d.ts.map +1 -1
- package/out/shared/src/valita.js +23 -23
- package/out/shared/src/valita.js.map +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +10 -6
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/z2s/src/sql.d.ts.map +1 -1
- package/out/z2s/src/sql.js +9 -5
- package/out/z2s/src/sql.js.map +1 -1
- package/out/zero/package.js +4 -5
- package/out/zero/package.js.map +1 -1
- package/out/zero/src/zero.js +2 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +1 -0
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/normalize.d.ts +1 -0
- package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
- package/out/zero-cache/src/config/normalize.js +46 -4
- package/out/zero-cache/src/config/normalize.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +116 -24
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +409 -157
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.d.ts +1 -1
- package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
- package/out/zero-cache/src/db/lite-tables.js +3 -4
- package/out/zero-cache/src/db/lite-tables.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +5 -3
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/observability/events.js +4 -1
- package/out/zero-cache/src/observability/events.js.map +1 -1
- package/out/zero-cache/src/observability/log-throttle.d.ts +44 -0
- package/out/zero-cache/src/observability/log-throttle.d.ts.map +1 -0
- package/out/zero-cache/src/observability/log-throttle.js +76 -0
- package/out/zero-cache/src/observability/log-throttle.js.map +1 -0
- package/out/zero-cache/src/observability/metrics.d.ts.map +1 -1
- package/out/zero-cache/src/observability/metrics.js +2 -7
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.d.ts +16 -0
- package/out/zero-cache/src/scripts/permissions.d.ts.map +1 -1
- package/out/zero-cache/src/scripts/permissions.js +3 -3
- package/out/zero-cache/src/scripts/permissions.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +117 -77
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/inspector-delegate.d.ts +28 -2
- package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
- package/out/zero-cache/src/server/inspector-delegate.js +37 -17
- package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +8 -1
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/mutator.js +2 -0
- package/out/zero-cache/src/server/mutator.js.map +1 -1
- package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
- package/out/zero-cache/src/server/reaper.js +2 -0
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts +3 -0
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +95 -21
- package/out/zero-cache/src/server/replicator.js.map +1 -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 +5 -0
- package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
- package/out/zero-cache/src/server/syncer-assigner.d.ts +14 -0
- package/out/zero-cache/src/server/syncer-assigner.d.ts.map +1 -0
- package/out/zero-cache/src/server/syncer-assigner.js +72 -0
- package/out/zero-cache/src/server/syncer-assigner.js.map +1 -0
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +24 -2
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/server/worker-dispatcher.js +21 -4
- package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
- package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
- package/out/zero-cache/src/services/analyze.js +11 -9
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +198 -24
- 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.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +16 -4
- 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.d.ts +24 -0
- package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/common/init-cleanup.js +44 -0
- package/out/zero-cache/src/services/change-source/common/init-cleanup.js.map +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +92 -2
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.js +27 -10
- 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.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +15 -3
- 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.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +7 -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-stream.d.ts +9 -0
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +206 -19
- 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.d.ts +55 -0
- package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js +305 -0
- package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +31 -18
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +130 -157
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +38 -2
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +55 -21
- 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/stream.d.ts +31 -0
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +102 -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/replication-slot-cleanup-monitor.d.ts +16 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js +113 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +40 -15
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js +149 -27
- 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/index-predicate.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +68 -8
- 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.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +32 -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/replica-stage-enum.d.ts +10 -0
- package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js +6 -0
- package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js.map +1 -0
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +50 -27
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +98 -34
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts +68 -0
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js +141 -0
- package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +45 -2
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +10 -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 +60 -3
- 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/upstream.d.ts +23 -10
- 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 +17 -7
- 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 +2 -1
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts +72 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js +162 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts +50 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state.js +268 -0
- package/out/zero-cache/src/services/change-streamer/backfill-state.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +6 -17
- 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.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +59 -8
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +8 -2
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +24 -4
- package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +19 -4
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js +28 -8
- 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.d.ts +17 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +44 -1
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +48 -6
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +131 -34
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +22 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +149 -78
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +38 -16
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +3 -3
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +36 -5
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts +53 -0
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +156 -0
- package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +58 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +107 -16
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts +92 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js +42 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js +16 -4
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +7 -69
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.js +21 -53
- package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +6 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +27 -9
- 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.d.ts +95 -4
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +293 -83
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts +446 -0
- package/out/zero-cache/src/services/change-streamer/subscribe.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/subscribe.js +76 -0
- package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +58 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +123 -12
- package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts +19 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js +23 -3
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -1
- package/out/zero-cache/src/services/http-service.d.ts +1 -1
- package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/http-service.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +3 -1
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +34 -3
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +121 -35
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/config-v5.yml +6 -7
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +51 -24
- package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +10 -2
- package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/litestream-controller.js +3 -2
- package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -1
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts +24 -0
- package/out/zero-cache/src/services/litestream/restore-progress.d.ts.map +1 -0
- package/out/zero-cache/src/services/litestream/restore-progress.js +91 -0
- package/out/zero-cache/src/services/litestream/restore-progress.js.map +1 -0
- package/out/zero-cache/src/services/litestream/wal-keeper.d.ts +33 -0
- package/out/zero-cache/src/services/litestream/wal-keeper.d.ts.map +1 -0
- package/out/zero-cache/src/services/litestream/wal-keeper.js +49 -0
- package/out/zero-cache/src/services/litestream/wal-keeper.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +5 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +7 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.js +5 -6
- package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
- package/out/zero-cache/src/services/plannerz.d.ts +163 -0
- package/out/zero-cache/src/services/plannerz.d.ts.map +1 -0
- package/out/zero-cache/src/services/plannerz.js +267 -0
- package/out/zero-cache/src/services/plannerz.js.map +1 -0
- package/out/zero-cache/src/services/profz.d.ts +30 -0
- package/out/zero-cache/src/services/profz.d.ts.map +1 -0
- package/out/zero-cache/src/services/profz.js +163 -0
- package/out/zero-cache/src/services/profz.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.js +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-stream-writer.d.ts +5 -4
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +20 -22
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +51 -5
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +5 -2
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +54 -21
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.d.ts +35 -1
- package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replication-status.js +99 -8
- package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +4 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +5 -2
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +16 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +70 -27
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts +23 -2
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.js +54 -2
- package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +6 -6
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +19 -14
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +11 -3
- package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker.js +5 -1
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts +12 -0
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +42 -22
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/runner.d.ts +2 -1
- package/out/zero-cache/src/services/runner.d.ts.map +1 -1
- package/out/zero-cache/src/services/runner.js +10 -2
- package/out/zero-cache/src/services/runner.js.map +1 -1
- package/out/zero-cache/src/services/statz.d.ts +4 -0
- package/out/zero-cache/src/services/statz.d.ts.map +1 -1
- package/out/zero-cache/src/services/statz.js +22 -5
- package/out/zero-cache/src/services/statz.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts +26 -0
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.js +26 -0
- package/out/zero-cache/src/services/view-syncer/advancement-metrics.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +19 -2
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +42 -30
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js +1 -0
- package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +27 -2
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +85 -20
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +76 -11
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +214 -40
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts +81 -0
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js +128 -0
- package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +14 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +30 -4
- package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +33 -0
- package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/hydration-budget.js +62 -0
- package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +51 -0
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +78 -0
- package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +10 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +18 -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.d.ts +80 -6
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +658 -195
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts +7 -0
- package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/plan-warnings.js +35 -0
- package/out/zero-cache/src/services/view-syncer/plan-warnings.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.js +2 -6
- package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts +25 -0
- package/out/zero-cache/src/services/view-syncer/query-shape.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/query-shape.js +28 -0
- package/out/zero-cache/src/services/view-syncer/query-shape.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts +82 -0
- package/out/zero-cache/src/services/view-syncer/query-stats.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/query-stats.js +214 -0
- package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +2 -107
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +5 -20
- 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.d.ts +95 -0
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js +155 -0
- package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +96 -14
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.js +214 -30
- package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +11 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +566 -107
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.d.ts +2 -0
- package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg-data-type.js +6 -1
- package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +1 -1
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/types/processes.d.ts +39 -0
- package/out/zero-cache/src/types/processes.d.ts.map +1 -1
- package/out/zero-cache/src/types/processes.js +43 -4
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/profiler.d.ts +12 -0
- package/out/zero-cache/src/types/profiler.d.ts.map +1 -1
- package/out/zero-cache/src/types/profiler.js +46 -1
- package/out/zero-cache/src/types/profiler.js.map +1 -1
- package/out/zero-cache/src/types/row-key.d.ts +1 -15
- package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
- package/out/zero-cache/src/types/row-key.js +6 -8
- package/out/zero-cache/src/types/row-key.js.map +1 -1
- package/out/zero-cache/src/types/streams.d.ts +49 -7
- package/out/zero-cache/src/types/streams.d.ts.map +1 -1
- package/out/zero-cache/src/types/streams.js +190 -58
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/subscription.d.ts +15 -0
- package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
- package/out/zero-cache/src/types/subscription.js +123 -31
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.d.ts +1 -1
- package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
- package/out/zero-cache/src/types/websocket-handoff.js +18 -9
- package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
- package/out/zero-cache/src/types/ws.d.ts.map +1 -1
- package/out/zero-cache/src/types/ws.js +1 -16
- package/out/zero-cache/src/types/ws.js.map +1 -1
- package/out/zero-cache/src/workers/connect-params.d.ts +18 -1
- package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connect-params.js +25 -1
- package/out/zero-cache/src/workers/connect-params.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +4 -4
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +8 -8
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +15 -7
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +21 -16
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +55 -4
- 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 +4 -1
- package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/connection-manager.d.ts +20 -0
- package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/connection-manager.js +77 -13
- package/out/zero-client/src/client/connection-manager.js.map +1 -1
- package/out/zero-client/src/client/connection-status-enum.d.ts +2 -0
- package/out/zero-client/src/client/connection-status-enum.d.ts.map +1 -1
- package/out/zero-client/src/client/connection-status-enum.js +3 -1
- package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
- package/out/zero-client/src/client/connection.d.ts +6 -0
- package/out/zero-client/src/client/connection.d.ts.map +1 -1
- package/out/zero-client/src/client/connection.js +2 -1
- package/out/zero-client/src/client/connection.js.map +1 -1
- package/out/zero-client/src/client/context.d.ts +23 -13
- package/out/zero-client/src/client/context.d.ts.map +1 -1
- package/out/zero-client/src/client/context.js +94 -26
- 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 +1 -1
- package/out/zero-client/src/client/crud-impl.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +5 -4
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +3 -3
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/inspector/lazy-inspector.js +1 -1
- package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
- package/out/zero-client/src/client/ivm-branch.js +20 -3
- package/out/zero-client/src/client/ivm-branch.js.map +1 -1
- package/out/zero-client/src/client/keys.d.ts.map +1 -1
- package/out/zero-client/src/client/keys.js +19 -1
- package/out/zero-client/src/client/keys.js.map +1 -1
- package/out/zero-client/src/client/make-mutate-property.d.ts +1 -1
- package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -1
- package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.d.ts +2 -2
- package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.js +3 -7
- package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.js +9 -4
- package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +33 -0
- 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.d.ts +9 -0
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.js +47 -14
- package/out/zero-client/src/client/query-manager.js.map +1 -1
- package/out/zero-client/src/client/reload-error-handler.js +2 -2
- package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero-rep.d.ts +1 -0
- package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-rep.js +8 -6
- package/out/zero-client/src/client/zero-rep.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +18 -3
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +89 -50
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.d.ts +2 -1
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-client/src/mod.js +1 -0
- package/out/zero-client/src/types/query-result.d.ts +2 -0
- package/out/zero-client/src/types/query-result.d.ts.map +1 -1
- package/out/zero-events/src/status.d.ts +64 -0
- package/out/zero-events/src/status.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.d.ts +5 -0
- package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +13 -14
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +16 -0
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +27 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +31 -31
- package/out/zero-protocol/src/feature-flag-enum.d.ts +14 -0
- package/out/zero-protocol/src/feature-flag-enum.d.ts.map +1 -0
- package/out/zero-protocol/src/feature-flag-enum.js +10 -0
- package/out/zero-protocol/src/feature-flag-enum.js.map +1 -0
- package/out/zero-protocol/src/feature-flag.d.ts +5 -0
- package/out/zero-protocol/src/feature-flag.d.ts.map +1 -0
- package/out/zero-protocol/src/inspect-down.d.ts +16 -16
- package/out/zero-protocol/src/poke.d.ts +17 -10
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +3 -2
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +30 -6
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/query-hash.d.ts.map +1 -1
- package/out/zero-protocol/src/query-hash.js +2 -5
- package/out/zero-protocol/src/query-hash.js.map +1 -1
- package/out/zero-react/src/use-query.d.ts +5 -4
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/use-query.js +74 -7
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/zero.js +1 -0
- package/out/zero-server/src/adapters/drizzle.d.ts +2 -1
- package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
- package/out/zero-server/src/adapters/drizzle.js +12 -7
- package/out/zero-server/src/adapters/drizzle.js.map +1 -1
- package/out/zero-server/src/adapters/kysely.d.ts +2 -1
- package/out/zero-server/src/adapters/kysely.d.ts.map +1 -1
- package/out/zero-server/src/adapters/kysely.js +8 -2
- package/out/zero-server/src/adapters/kysely.js.map +1 -1
- package/out/zero-server/src/adapters/pg.d.ts +5 -1
- package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
- package/out/zero-server/src/adapters/pg.js +28 -7
- package/out/zero-server/src/adapters/pg.js.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.d.ts +1 -0
- package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js +7 -1
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/adapters/prisma.d.ts +3 -2
- package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
- package/out/zero-server/src/adapters/prisma.js +8 -2
- package/out/zero-server/src/adapters/prisma.js.map +1 -1
- package/out/zero-server/src/closable-db-transaction.d.ts +16 -0
- package/out/zero-server/src/closable-db-transaction.d.ts.map +1 -0
- package/out/zero-server/src/closable-db-transaction.js +31 -0
- package/out/zero-server/src/closable-db-transaction.js.map +1 -0
- package/out/zero-server/src/custom.d.ts +10 -4
- package/out/zero-server/src/custom.d.ts.map +1 -1
- package/out/zero-server/src/custom.js +15 -6
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/logging.d.ts +2 -2
- package/out/zero-server/src/logging.d.ts.map +1 -1
- package/out/zero-server/src/logging.js +2 -2
- package/out/zero-server/src/logging.js.map +1 -1
- package/out/zero-server/src/mod.d.ts +1 -1
- package/out/zero-server/src/mod.d.ts.map +1 -1
- package/out/zero-server/src/pg-query-executor.d.ts +2 -2
- package/out/zero-server/src/pg-query-executor.d.ts.map +1 -1
- package/out/zero-server/src/pg-query-executor.js +2 -2
- package/out/zero-server/src/pg-query-executor.js.map +1 -1
- package/out/zero-server/src/process-mutations.d.ts +25 -4
- package/out/zero-server/src/process-mutations.d.ts.map +1 -1
- package/out/zero-server/src/process-mutations.js +103 -52
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.d.ts +8 -2
- package/out/zero-server/src/push-processor.d.ts.map +1 -1
- package/out/zero-server/src/push-processor.js +12 -4
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/out/zero-server/src/schema.d.ts +2 -2
- package/out/zero-server/src/schema.d.ts.map +1 -1
- package/out/zero-server/src/schema.js +3 -2
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-server/src/zql-database.d.ts +21 -1
- package/out/zero-server/src/zql-database.d.ts.map +1 -1
- package/out/zero-server/src/zql-database.js +61 -24
- package/out/zero-server/src/zql-database.js.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +17 -0
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +39 -1
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/use-query.js +1 -2
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/zero.js +1 -0
- package/out/zql/src/builder/builder.d.ts +25 -0
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +69 -19
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/correlated-predicate-pushdown.d.ts +43 -0
- package/out/zql/src/builder/correlated-predicate-pushdown.d.ts.map +1 -0
- package/out/zql/src/builder/correlated-predicate-pushdown.js +161 -0
- package/out/zql/src/builder/correlated-predicate-pushdown.js.map +1 -0
- package/out/zql/src/builder/debug-delegate.d.ts +6 -1
- package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
- package/out/zql/src/builder/debug-delegate.js +14 -2
- package/out/zql/src/builder/debug-delegate.js.map +1 -1
- package/out/zql/src/ivm/array-view.d.ts +29 -0
- package/out/zql/src/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/ivm/array-view.js +74 -16
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/cap.d.ts +2 -1
- package/out/zql/src/ivm/cap.d.ts.map +1 -1
- package/out/zql/src/ivm/cap.js +14 -4
- package/out/zql/src/ivm/cap.js.map +1 -1
- package/out/zql/src/ivm/data.d.ts.map +1 -1
- package/out/zql/src/ivm/data.js +8 -3
- package/out/zql/src/ivm/data.js.map +1 -1
- package/out/zql/src/ivm/deferred-input.d.ts.map +1 -1
- package/out/zql/src/ivm/deferred-input.js +3 -2
- package/out/zql/src/ivm/deferred-input.js.map +1 -1
- package/out/zql/src/ivm/exists.d.ts +3 -1
- package/out/zql/src/ivm/exists.d.ts.map +1 -1
- package/out/zql/src/ivm/exists.js +4 -1
- package/out/zql/src/ivm/exists.js.map +1 -1
- package/out/zql/src/ivm/fan-in.d.ts +6 -2
- package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-in.js +13 -5
- package/out/zql/src/ivm/fan-in.js.map +1 -1
- package/out/zql/src/ivm/fan-out.d.ts +5 -2
- package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
- package/out/zql/src/ivm/fan-out.js +4 -0
- package/out/zql/src/ivm/fan-out.js.map +1 -1
- package/out/zql/src/ivm/filter-operators.d.ts +8 -6
- package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
- package/out/zql/src/ivm/filter-operators.js +19 -8
- package/out/zql/src/ivm/filter-operators.js.map +1 -1
- package/out/zql/src/ivm/filter.d.ts +5 -2
- package/out/zql/src/ivm/filter.d.ts.map +1 -1
- package/out/zql/src/ivm/filter.js +10 -4
- package/out/zql/src/ivm/filter.js.map +1 -1
- package/out/zql/src/ivm/flipped-join.d.ts +9 -4
- package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +97 -46
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/join-index-tap.d.ts +33 -0
- package/out/zql/src/ivm/join-index-tap.d.ts.map +1 -0
- package/out/zql/src/ivm/join-index-tap.js +70 -0
- package/out/zql/src/ivm/join-index-tap.js.map +1 -0
- package/out/zql/src/ivm/join-index.d.ts +35 -0
- package/out/zql/src/ivm/join-index.d.ts.map +1 -0
- package/out/zql/src/ivm/join-index.js +141 -0
- package/out/zql/src/ivm/join-index.js.map +1 -0
- package/out/zql/src/ivm/join-utils.d.ts +6 -0
- package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
- package/out/zql/src/ivm/join-utils.js +22 -1
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.d.ts +19 -1
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +107 -15
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +6 -4
- package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
- package/out/zql/src/ivm/memory-source.d.ts +29 -4
- package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-source.js +70 -34
- package/out/zql/src/ivm/memory-source.js.map +1 -1
- package/out/zql/src/ivm/memory-storage.d.ts +1 -0
- package/out/zql/src/ivm/memory-storage.d.ts.map +1 -1
- package/out/zql/src/ivm/memory-storage.js +1 -0
- package/out/zql/src/ivm/memory-storage.js.map +1 -1
- package/out/zql/src/ivm/operator.d.ts +45 -10
- package/out/zql/src/ivm/operator.d.ts.map +1 -1
- package/out/zql/src/ivm/operator.js +9 -4
- package/out/zql/src/ivm/operator.js.map +1 -1
- package/out/zql/src/ivm/push-accumulated.d.ts +6 -1
- package/out/zql/src/ivm/push-accumulated.d.ts.map +1 -1
- package/out/zql/src/ivm/push-accumulated.js +47 -2
- package/out/zql/src/ivm/push-accumulated.js.map +1 -1
- package/out/zql/src/ivm/skip.d.ts +2 -1
- package/out/zql/src/ivm/skip.d.ts.map +1 -1
- package/out/zql/src/ivm/skip.js +3 -0
- package/out/zql/src/ivm/skip.js.map +1 -1
- package/out/zql/src/ivm/take-gate.d.ts +57 -0
- package/out/zql/src/ivm/take-gate.d.ts.map +1 -0
- package/out/zql/src/ivm/take-gate.js +106 -0
- package/out/zql/src/ivm/take-gate.js.map +1 -0
- package/out/zql/src/ivm/take.d.ts +8 -2
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +139 -103
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/ivm/union-fan-in.d.ts +3 -0
- package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-in.js +63 -10
- package/out/zql/src/ivm/union-fan-in.js.map +1 -1
- package/out/zql/src/ivm/union-fan-out.d.ts +2 -1
- package/out/zql/src/ivm/union-fan-out.d.ts.map +1 -1
- package/out/zql/src/ivm/union-fan-out.js +5 -0
- package/out/zql/src/ivm/union-fan-out.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +9 -4
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/ivm/view.d.ts +15 -0
- package/out/zql/src/ivm/view.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.d.ts +53 -1
- package/out/zql/src/mutate/custom.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js +3 -3
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +2 -2
- 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.d.ts +23 -3
- package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
- package/out/zql/src/planner/planner-builder.js +34 -17
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/planner/planner-connection.d.ts +58 -2
- package/out/zql/src/planner/planner-connection.d.ts.map +1 -1
- package/out/zql/src/planner/planner-connection.js +103 -11
- package/out/zql/src/planner/planner-connection.js.map +1 -1
- package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
- package/out/zql/src/planner/planner-debug.js +3 -8
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/planner/planner-graph.d.ts +10 -0
- package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
- package/out/zql/src/planner/planner-graph.js +14 -0
- package/out/zql/src/planner/planner-graph.js.map +1 -1
- package/out/zql/src/planner/planner-source.d.ts +2 -2
- package/out/zql/src/planner/planner-source.d.ts.map +1 -1
- package/out/zql/src/planner/planner-source.js +2 -2
- package/out/zql/src/planner/planner-source.js.map +1 -1
- package/out/zql/src/planner/planner-warnings.d.ts +83 -0
- package/out/zql/src/planner/planner-warnings.d.ts.map +1 -0
- package/out/zql/src/planner/planner-warnings.js +78 -0
- package/out/zql/src/planner/planner-warnings.js.map +1 -0
- package/out/zql/src/query/measure-push-operator.d.ts +9 -2
- package/out/zql/src/query/measure-push-operator.d.ts.map +1 -1
- package/out/zql/src/query/measure-push-operator.js +52 -5
- package/out/zql/src/query/measure-push-operator.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts +4 -2
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +66 -33
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-delegate.d.ts +33 -6
- package/out/zql/src/query/query-delegate.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +1 -0
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +6 -23
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-transitions.d.ts.map +1 -1
- package/out/zql/src/query/query-transitions.js +2 -5
- package/out/zql/src/query/query-transitions.js.map +1 -1
- package/out/zql/src/query/query.d.ts +22 -5
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.d.ts +1 -0
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +2 -10
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/typed-view.d.ts +1 -1
- package/out/zql/src/query/typed-view.d.ts.map +1 -1
- package/out/zqlite/src/database-storage.d.ts.map +1 -1
- package/out/zqlite/src/database-storage.js +9 -1
- package/out/zqlite/src/database-storage.js.map +1 -1
- package/out/zqlite/src/db.d.ts +9 -1
- package/out/zqlite/src/db.d.ts.map +1 -1
- package/out/zqlite/src/db.js +62 -30
- package/out/zqlite/src/db.js.map +1 -1
- package/out/zqlite/src/index-usage.d.ts +19 -0
- package/out/zqlite/src/index-usage.d.ts.map +1 -0
- package/out/zqlite/src/index-usage.js +49 -0
- package/out/zqlite/src/index-usage.js.map +1 -0
- package/out/zqlite/src/pending-delta.d.ts +110 -0
- package/out/zqlite/src/pending-delta.d.ts.map +1 -0
- package/out/zqlite/src/pending-delta.js +278 -0
- package/out/zqlite/src/pending-delta.js.map +1 -0
- package/out/zqlite/src/query-builder.d.ts +17 -1
- package/out/zqlite/src/query-builder.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.js +111 -20
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/query-delegate.d.ts.map +1 -1
- package/out/zqlite/src/query-delegate.js +10 -7
- package/out/zqlite/src/query-delegate.js.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +3 -1
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +1 -0
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +52 -1
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +1 -1
- package/out/zqlite/src/sqlite-stat-fanout.js +5 -31
- package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
- package/out/zqlite/src/sqlite-stat4-sample.d.ts +37 -0
- package/out/zqlite/src/sqlite-stat4-sample.d.ts.map +1 -0
- package/out/zqlite/src/sqlite-stat4-sample.js +61 -0
- package/out/zqlite/src/sqlite-stat4-sample.js.map +1 -0
- package/out/zqlite/src/table-source.d.ts +87 -2
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +276 -42
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +4 -5
- package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts +0 -25
- package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts.map +0 -1
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js +0 -83
- package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts +0 -29
- package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js +0 -154
- package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js.map +0 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region ../zqlite/src/sqlite-stat4-sample.ts
|
|
2
|
+
/**
|
|
3
|
+
* Decodes the serial types in a stat4 sample's header.
|
|
4
|
+
*
|
|
5
|
+
* The sample's trailing rowid is included as a final column, matching the
|
|
6
|
+
* record SQLite stores.
|
|
7
|
+
*
|
|
8
|
+
* @returns one kind per column, or an empty array if `sample` is empty or its
|
|
9
|
+
* header is malformed.
|
|
10
|
+
*/
|
|
11
|
+
function decodeSampleKinds(sample) {
|
|
12
|
+
const header = readVarint(sample, 0);
|
|
13
|
+
if (header === void 0) return [];
|
|
14
|
+
const [headerSize, serialTypesStart] = header;
|
|
15
|
+
if (headerSize < serialTypesStart || headerSize > sample.length) return [];
|
|
16
|
+
const kinds = [];
|
|
17
|
+
for (let pos = serialTypesStart; pos < headerSize;) {
|
|
18
|
+
const next = readVarint(sample, pos);
|
|
19
|
+
if (next === void 0) return [];
|
|
20
|
+
const [serialType, end] = next;
|
|
21
|
+
kinds.push(kindOfSerialType(serialType));
|
|
22
|
+
pos = end;
|
|
23
|
+
}
|
|
24
|
+
return kinds;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether the first column of a sample is NULL.
|
|
28
|
+
*/
|
|
29
|
+
function isSampleNull(sample) {
|
|
30
|
+
const kinds = decodeSampleKinds(sample);
|
|
31
|
+
return kinds.length === 0 || kinds[0] === "null";
|
|
32
|
+
}
|
|
33
|
+
function kindOfSerialType(serialType) {
|
|
34
|
+
if (serialType === 0) return "null";
|
|
35
|
+
if (serialType <= 6 || serialType === 8 || serialType === 9) return "integer";
|
|
36
|
+
if (serialType === 7) return "real";
|
|
37
|
+
if (serialType <= 11) return "unknown";
|
|
38
|
+
return serialType % 2 === 0 ? "blob" : "text";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Reads the varint at `pos`.
|
|
42
|
+
*
|
|
43
|
+
* @returns the value and the offset just past it, or `undefined` if the varint
|
|
44
|
+
* runs off the end of the buffer. Values are read as `number`; a
|
|
45
|
+
* varint large enough to lose precision is not something a well-formed
|
|
46
|
+
* header or serial type contains.
|
|
47
|
+
*/
|
|
48
|
+
function readVarint(buf, pos) {
|
|
49
|
+
let value = 0;
|
|
50
|
+
for (let i = 0; i < 9; i++) {
|
|
51
|
+
if (pos + i >= buf.length) return;
|
|
52
|
+
const byte = buf[pos + i];
|
|
53
|
+
if (i === 8) return [value * 256 + byte, pos + 9];
|
|
54
|
+
value = value * 128 + (byte & 127);
|
|
55
|
+
if ((byte & 128) === 0) return [value, pos + i + 1];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { decodeSampleKinds, isSampleNull };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=sqlite-stat4-sample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-stat4-sample.js","names":[],"sources":["../../../../zqlite/src/sqlite-stat4-sample.ts"],"sourcesContent":["/**\n * Decoding of `sqlite_stat4.sample` values.\n *\n * A sample is a SQLite record: a header holding one serial type per column,\n * followed by the column data. We only ever look at the serial types, which\n * say what *kind* of value each column holds without revealing the value\n * itself. Two callers need this:\n *\n * - `SQLiteStatFanout`, which separates NULL from non-NULL samples so that\n * join fanout is not skewed by a sparse foreign key.\n * - the `/plannerz` admin endpoint, which reports the shape of the histogram\n * without returning row data.\n *\n * @see https://sqlite.org/fileformat2.html#record_format\n * @see https://sqlite.org/fileformat2.html#stat4tab\n */\n\n/**\n * The kind of value a stat4 sample column holds, derived from its serial type.\n * `unknown` covers the internal serial types 10 and 11, which do not appear in\n * a well-formed record.\n */\nexport type SampleValueKind =\n | 'null'\n | 'integer'\n | 'real'\n | 'text'\n | 'blob'\n | 'unknown';\n\n/**\n * Decodes the serial types in a stat4 sample's header.\n *\n * The sample's trailing rowid is included as a final column, matching the\n * record SQLite stores.\n *\n * @returns one kind per column, or an empty array if `sample` is empty or its\n * header is malformed.\n */\nexport function decodeSampleKinds(sample: Buffer): SampleValueKind[] {\n const header = readVarint(sample, 0);\n if (header === undefined) {\n return [];\n }\n // `headerSize` counts the size varint itself, so the serial types run from\n // the end of that varint to `headerSize`, and cannot exceed the record.\n const [headerSize, serialTypesStart] = header;\n if (headerSize < serialTypesStart || headerSize > sample.length) {\n return [];\n }\n\n const kinds: SampleValueKind[] = [];\n for (let pos = serialTypesStart; pos < headerSize;) {\n const next = readVarint(sample, pos);\n if (next === undefined) {\n return [];\n }\n const [serialType, end] = next;\n kinds.push(kindOfSerialType(serialType));\n pos = end;\n }\n return kinds;\n}\n\n/**\n * Whether the first column of a sample is NULL.\n */\nexport function isSampleNull(sample: Buffer): boolean {\n const kinds = decodeSampleKinds(sample);\n return kinds.length === 0 || kinds[0] === 'null';\n}\n\nfunction kindOfSerialType(serialType: number): SampleValueKind {\n if (serialType === 0) {\n return 'null';\n }\n if (serialType <= 6 || serialType === 8 || serialType === 9) {\n return 'integer';\n }\n if (serialType === 7) {\n return 'real';\n }\n if (serialType <= 11) {\n return 'unknown'; // 10 and 11 are for internal use.\n }\n return serialType % 2 === 0 ? 'blob' : 'text';\n}\n\n/**\n * Reads the varint at `pos`.\n *\n * @returns the value and the offset just past it, or `undefined` if the varint\n * runs off the end of the buffer. Values are read as `number`; a\n * varint large enough to lose precision is not something a well-formed\n * header or serial type contains.\n */\nfunction readVarint(\n buf: Buffer,\n pos: number,\n): [value: number, end: number] | undefined {\n let value = 0;\n // A varint is at most 9 bytes, the last of which contributes all 8 bits.\n for (let i = 0; i < 9; i++) {\n if (pos + i >= buf.length) {\n return undefined;\n }\n const byte = buf[pos + i];\n if (i === 8) {\n return [value * 256 + byte, pos + 9];\n }\n value = value * 128 + (byte & 0x7f);\n if ((byte & 0x80) === 0) {\n return [value, pos + i + 1];\n }\n }\n return undefined;\n}\n"],"mappings":";;;;;;;;;;AAuCA,SAAgB,kBAAkB,QAAmC;CACnE,MAAM,SAAS,WAAW,QAAQ,CAAC;CACnC,IAAI,WAAW,KAAA,GACb,OAAO,CAAC;CAIV,MAAM,CAAC,YAAY,oBAAoB;CACvC,IAAI,aAAa,oBAAoB,aAAa,OAAO,QACvD,OAAO,CAAC;CAGV,MAAM,QAA2B,CAAC;CAClC,KAAK,IAAI,MAAM,kBAAkB,MAAM,aAAa;EAClD,MAAM,OAAO,WAAW,QAAQ,GAAG;EACnC,IAAI,SAAS,KAAA,GACX,OAAO,CAAC;EAEV,MAAM,CAAC,YAAY,OAAO;EAC1B,MAAM,KAAK,iBAAiB,UAAU,CAAC;EACvC,MAAM;CACR;CACA,OAAO;AACT;;;;AAKA,SAAgB,aAAa,QAAyB;CACpD,MAAM,QAAQ,kBAAkB,MAAM;CACtC,OAAO,MAAM,WAAW,KAAK,MAAM,OAAO;AAC5C;AAEA,SAAS,iBAAiB,YAAqC;CAC7D,IAAI,eAAe,GACjB,OAAO;CAET,IAAI,cAAc,KAAK,eAAe,KAAK,eAAe,GACxD,OAAO;CAET,IAAI,eAAe,GACjB,OAAO;CAET,IAAI,cAAc,IAChB,OAAO;CAET,OAAO,aAAa,MAAM,IAAI,SAAS;AACzC;;;;;;;;;AAUA,SAAS,WACP,KACA,KAC0C;CAC1C,IAAI,QAAQ;CAEZ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,IAAI,MAAM,KAAK,IAAI,QACjB;EAEF,MAAM,OAAO,IAAI,MAAM;EACvB,IAAI,MAAM,GACR,OAAO,CAAC,QAAQ,MAAM,MAAM,MAAM,CAAC;EAErC,QAAQ,QAAQ,OAAO,OAAO;EAC9B,KAAK,OAAO,SAAU,GACpB,OAAO,CAAC,OAAO,MAAM,IAAI,CAAC;CAE9B;AAEF"}
|
|
@@ -8,6 +8,25 @@ import type { DebugDelegate } from '../../zql/src/builder/debug-delegate.ts';
|
|
|
8
8
|
import { type Source, type SourceChange, type SourceInput } from '../../zql/src/ivm/source.ts';
|
|
9
9
|
import type { Stream } from '../../zql/src/ivm/stream.ts';
|
|
10
10
|
import type { Database } from './db.ts';
|
|
11
|
+
export type TableSourceOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* When set, a pushed change that the filters of every connection reject
|
|
14
|
+
* is neither pushed nor applied to the backing table, on the grounds that
|
|
15
|
+
* no connection can observe it. This departs from the `Source.push`
|
|
16
|
+
* contract (a push commits the change to the source), so it is only
|
|
17
|
+
* appropriate when the caller does not read the table through any other
|
|
18
|
+
* path and replaces the table's contents afterwards, as the view-syncer's
|
|
19
|
+
* pipeline driver does when it advances to the next snapshot.
|
|
20
|
+
*/
|
|
21
|
+
skipUnobservableChanges?: boolean | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* When set, pushed changes are held in an in-memory {@link PendingDelta}
|
|
24
|
+
* merged into every read instead of being written to the backing table.
|
|
25
|
+
* The delta is dropped when the source moves to the next snapshot. This is
|
|
26
|
+
* the initial mode; see {@link TableSource.setDeferWrites}.
|
|
27
|
+
*/
|
|
28
|
+
deferWrites?: boolean | undefined;
|
|
29
|
+
};
|
|
11
30
|
/**
|
|
12
31
|
* A source that is backed by a SQLite table.
|
|
13
32
|
*
|
|
@@ -30,7 +49,12 @@ export declare class TableSource implements Source {
|
|
|
30
49
|
* to yield control back to the caller at the end of the pipeline. Can
|
|
31
50
|
* also throw an error to abort the pipeline processing.
|
|
32
51
|
*/
|
|
33
|
-
constructor(logContext: LogContext, logConfig: LogConfig, db: Database, tableName: string, columns: Record<string, SchemaValue>, primaryKey: PrimaryKey, shouldYield?: () => boolean);
|
|
52
|
+
constructor(logContext: LogContext, logConfig: LogConfig, db: Database, tableName: string, columns: Record<string, SchemaValue>, primaryKey: PrimaryKey, shouldYield?: () => boolean, options?: TableSourceOptions);
|
|
53
|
+
/**
|
|
54
|
+
* The number of rows read from SQLite by fetches, over the lifetime of this
|
|
55
|
+
* source. Rows that SQLite scans and filters out itself are not counted.
|
|
56
|
+
*/
|
|
57
|
+
get rowsRead(): number;
|
|
34
58
|
get tableSchema(): {
|
|
35
59
|
name: string;
|
|
36
60
|
columns: Record<string, SchemaValue>;
|
|
@@ -41,10 +65,71 @@ export declare class TableSource implements Source {
|
|
|
41
65
|
* algorithm for concurrent traversal of historic timelines.
|
|
42
66
|
*/
|
|
43
67
|
setDB(db: Database): void;
|
|
68
|
+
/**
|
|
69
|
+
* Sets whether the changes pushed from now on are held in memory (see
|
|
70
|
+
* {@link TableSourceOptions.deferWrites}) or written to the backing
|
|
71
|
+
* snapshot. The two must not be mixed within one snapshot, so this may only
|
|
72
|
+
* be called before the first push after construction or {@link setDB}. To
|
|
73
|
+
* switch to writing through partway, see {@link writePendingChanges}.
|
|
74
|
+
*/
|
|
75
|
+
setDeferWrites(deferWrites: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Drops the changes held in memory (see {@link setDeferWrites}), for an
|
|
78
|
+
* advancement that has been abandoned. The source then no longer reflects
|
|
79
|
+
* the changes pushed to it, so it must not be read again until it has moved
|
|
80
|
+
* to another snapshot ({@link setDB}), if it is used again at all.
|
|
81
|
+
*/
|
|
82
|
+
discardPendingChanges(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Writes the changes held in memory (see {@link setDeferWrites}) to the
|
|
85
|
+
* backing snapshot, which is left as if they had been written through (in
|
|
86
|
+
* the source's columns), and writes the changes pushed from then on through
|
|
87
|
+
* to it. Yields when the
|
|
88
|
+
* source's `shouldYield` says to, and must not be interleaved with a push.
|
|
89
|
+
*/
|
|
90
|
+
writePendingChanges(): Stream<'yield'>;
|
|
44
91
|
connect(sort: Ordering | undefined, filters?: Condition, splitEditKeys?: Set<string>, debug?: DebugDelegate): SourceInput;
|
|
45
92
|
toSQLiteRow(row: Row): Row;
|
|
46
93
|
push(change: SourceChange): Stream<'yield'>;
|
|
47
|
-
|
|
94
|
+
/**
|
|
95
|
+
* The number of rows held in memory for changes that have been pushed but
|
|
96
|
+
* not written, i.e. with `deferWrites`, since the last {@link setDB}.
|
|
97
|
+
*/
|
|
98
|
+
get pendingRows(): number;
|
|
99
|
+
/** Estimated bytes retained by deferred changes and their indexes. */
|
|
100
|
+
get pendingBytes(): number;
|
|
101
|
+
/**
|
|
102
|
+
* Returns whether any connected pipeline could observe the given row.
|
|
103
|
+
* If false, this row is completely invisible to this TableSource's connections.
|
|
104
|
+
*/
|
|
105
|
+
mayAcceptRow(row: Row): boolean;
|
|
106
|
+
genPush(change: SourceChange): Stream<'yield' | undefined>;
|
|
107
|
+
/**
|
|
108
|
+
* Reconciles a set of rows that the caller found in the *backing snapshot*
|
|
109
|
+
* with the changes this source has applied but not written.
|
|
110
|
+
*
|
|
111
|
+
* A view-syncer computes the rows a replicated change collides with -- by
|
|
112
|
+
* change-log key for a delete, by every unique key for a set -- against the
|
|
113
|
+
* snapshot it is reading. When derivation writes through, that snapshot has
|
|
114
|
+
* already absorbed the earlier changes of the same advancement, so the
|
|
115
|
+
* probe sees them. When derivation is deferred they live here instead, and
|
|
116
|
+
* the probe has to be brought up to date or the source is pushed a change
|
|
117
|
+
* that contradicts its own state (a delete of a row the batch already
|
|
118
|
+
* removed, an edit whose old row is stale).
|
|
119
|
+
*
|
|
120
|
+
* Two ways the batch can disagree with the probe, both handled here: a
|
|
121
|
+
* probed row may have been removed, or may have been edited (so the
|
|
122
|
+
* caller's copy is stale, or it no longer collides at all).
|
|
123
|
+
*
|
|
124
|
+
* The batch cannot have edited a row the probe missed *into* collision. The
|
|
125
|
+
* change log keeps one entry per row key, so every row the batch holds is
|
|
126
|
+
* that row's value at the advancement's target version, as is `next`, and
|
|
127
|
+
* two distinct rows of one version cannot share a non-null unique key.
|
|
128
|
+
*
|
|
129
|
+
* Returns `base` untouched when derivation is not deferred, which is what
|
|
130
|
+
* makes this a no-op for the write-through path.
|
|
131
|
+
*/
|
|
132
|
+
reconcilePendingConflicts(base: readonly Row[], next: Row | null, rowKey: Row, uniqueKeys: readonly (readonly string[])[]): readonly Row[];
|
|
48
133
|
/**
|
|
49
134
|
* Retrieves a row from the backing DB by a unique key, or `undefined` if such a
|
|
50
135
|
* row does not exist. This is not used in the IVM pipeline but is useful
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AAM7D,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAC,GAAG,EAAQ,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,yCAAyC,CAAC;AAuB3E,OAAO,EACL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,SAAS,CAAC;AAyBjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAE9C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,MAAM;;IAwBxC;;;;;OAKG;IACH,YACE,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,UAAU,EAAE,UAAU,EACtB,WAAW,gBAAc,EACzB,OAAO,GAAE,kBAAuB,EAqBjC;IAED;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,WAAW;QAEX,IAAI;QACJ,OAAO;QACP,UAAU;MAEb;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ,QAKjB;IAED;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,OAAO,QAUlC;IAED;;;;;OAKG;IACH,qBAAqB,IAAI,IAAI,CAE5B;IAED;;;;;;OAMG;IACF,mBAAmB,IAAI,MAAM,CAAC,OAAO,CAAC,CAwBtC;IAwED,OAAO,CACL,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,OAAO,CAAC,EAAE,SAAS,EACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,KAAK,CAAC,EAAE,aAAa,eA4CtB;IAED,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAOzB;IAmMA,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAM3C;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,sEAAsE;IACtE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAU9B;IAmBA,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CA6C1D;IAuED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,yBAAyB,CACvB,IAAI,EAAE,SAAS,GAAG,EAAE,EACpB,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GACzC,SAAS,GAAG,EAAE,CAoChB;IA6DD;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS,CAkCnC;CAmBF;AAoFD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACvC,SAAS,OAAO,EAAE,CAEpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,wCAa/C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB,GAAG,CAaL;AAyCD,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { assert, unreachable } from "../../shared/src/asserts.js";
|
|
2
|
+
import { getOrInsertComputed } from "../../shared/src/map.js";
|
|
2
3
|
import { must } from "../../shared/src/must.js";
|
|
3
4
|
import { assertOrderingIncludesPK } from "../../zql/src/query/complete-ordering.js";
|
|
4
5
|
import { makeComparator } from "../../zql/src/ivm/data.js";
|
|
5
6
|
import { createPredicate, transformFilters } from "../../zql/src/builder/filter.js";
|
|
6
7
|
import { genPushAndWriteWithSplitEdit, generateWithOverlay, generateWithOverlayUnordered, generateWithStart } from "../../zql/src/ivm/memory-source.js";
|
|
7
8
|
import { timeSampled } from "../../otel/src/maybe-time.js";
|
|
9
|
+
import { recordIndexUsage } from "./index-usage.js";
|
|
8
10
|
import { compile, format, sql } from "./internal/sql.js";
|
|
9
11
|
import { StatementCache } from "./internal/statement-cache.js";
|
|
10
|
-
import {
|
|
12
|
+
import { NOT_OVERRIDDEN, PendingDelta, generateWithPendingDelta, generateWithPendingDeltaUnordered } from "./pending-delta.js";
|
|
13
|
+
import { buildSelectQueries, toSQLiteType } from "./query-builder.js";
|
|
11
14
|
import SQLite3Database from "@rocicorp/zero-sqlite3";
|
|
12
15
|
//#region ../zqlite/src/table-source.ts
|
|
13
16
|
var eventCount = 0;
|
|
@@ -35,25 +38,45 @@ var TableSource = class {
|
|
|
35
38
|
#logConfig;
|
|
36
39
|
#lc;
|
|
37
40
|
#shouldYield;
|
|
41
|
+
#skipUnobservableChanges;
|
|
42
|
+
#primaryKeySort;
|
|
38
43
|
#stmts;
|
|
39
44
|
#overlay;
|
|
40
45
|
#pushEpoch = 0;
|
|
41
46
|
/**
|
|
47
|
+
* When present, derivation is read-only: changes accumulate here instead of
|
|
48
|
+
* being written to (and later rolled back out of) the backing snapshot. See
|
|
49
|
+
* {@link PendingDelta}.
|
|
50
|
+
*/
|
|
51
|
+
#delta;
|
|
52
|
+
#rowsRead = 0;
|
|
53
|
+
/**
|
|
42
54
|
* @param shouldYield a function called after each row is read from the database,
|
|
43
55
|
* which should return true if the source should yield the special 'yield' value
|
|
44
56
|
* to yield control back to the caller at the end of the pipeline. Can
|
|
45
57
|
* also throw an error to abort the pipeline processing.
|
|
46
58
|
*/
|
|
47
|
-
constructor(logContext, logConfig, db, tableName, columns, primaryKey, shouldYield = () => false) {
|
|
59
|
+
constructor(logContext, logConfig, db, tableName, columns, primaryKey, shouldYield = () => false, options = {}) {
|
|
48
60
|
this.#lc = logContext;
|
|
49
61
|
this.#logConfig = logConfig;
|
|
50
62
|
this.#table = tableName;
|
|
51
63
|
this.#columns = columns;
|
|
52
64
|
this.#uniqueIndexes = getUniqueIndexes(db, tableName);
|
|
53
65
|
this.#primaryKey = primaryKey;
|
|
66
|
+
this.#primaryKeySort = primaryKey.map((k) => [k, "asc"]);
|
|
54
67
|
this.#stmts = this.#getStatementsFor(db);
|
|
55
68
|
this.#shouldYield = shouldYield;
|
|
56
|
-
|
|
69
|
+
this.#skipUnobservableChanges = options.skipUnobservableChanges ?? false;
|
|
70
|
+
this.#delta = options.deferWrites ? new PendingDelta(primaryKey) : void 0;
|
|
71
|
+
const primaryKeyStr = JSON.stringify(primaryKey.toSorted());
|
|
72
|
+
assert(this.#uniqueIndexes.has(primaryKeyStr), `primary key ${primaryKeyStr} does not have a UNIQUE index`);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The number of rows read from SQLite by fetches, over the lifetime of this
|
|
76
|
+
* source. Rows that SQLite scans and filters out itself are not counted.
|
|
77
|
+
*/
|
|
78
|
+
get rowsRead() {
|
|
79
|
+
return this.#rowsRead;
|
|
57
80
|
}
|
|
58
81
|
get tableSchema() {
|
|
59
82
|
return {
|
|
@@ -68,6 +91,49 @@ var TableSource = class {
|
|
|
68
91
|
*/
|
|
69
92
|
setDB(db) {
|
|
70
93
|
this.#stmts = this.#getStatementsFor(db);
|
|
94
|
+
this.#delta?.clear();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Sets whether the changes pushed from now on are held in memory (see
|
|
98
|
+
* {@link TableSourceOptions.deferWrites}) or written to the backing
|
|
99
|
+
* snapshot. The two must not be mixed within one snapshot, so this may only
|
|
100
|
+
* be called before the first push after construction or {@link setDB}. To
|
|
101
|
+
* switch to writing through partway, see {@link writePendingChanges}.
|
|
102
|
+
*/
|
|
103
|
+
setDeferWrites(deferWrites) {
|
|
104
|
+
assert(this.#delta === void 0 || this.#delta.isEmpty, "Cannot change how writes are applied while changes are pending");
|
|
105
|
+
if (!deferWrites) this.#delta = void 0;
|
|
106
|
+
else this.#delta ??= new PendingDelta(this.#primaryKey);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Drops the changes held in memory (see {@link setDeferWrites}), for an
|
|
110
|
+
* advancement that has been abandoned. The source then no longer reflects
|
|
111
|
+
* the changes pushed to it, so it must not be read again until it has moved
|
|
112
|
+
* to another snapshot ({@link setDB}), if it is used again at all.
|
|
113
|
+
*/
|
|
114
|
+
discardPendingChanges() {
|
|
115
|
+
this.#delta?.clear();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Writes the changes held in memory (see {@link setDeferWrites}) to the
|
|
119
|
+
* backing snapshot, which is left as if they had been written through (in
|
|
120
|
+
* the source's columns), and writes the changes pushed from then on through
|
|
121
|
+
* to it. Yields when the
|
|
122
|
+
* source's `shouldYield` says to, and must not be interleaved with a push.
|
|
123
|
+
*/
|
|
124
|
+
*writePendingChanges() {
|
|
125
|
+
const delta = this.#delta;
|
|
126
|
+
if (delta === void 0) return;
|
|
127
|
+
for (const key of delta.touchedKeys()) {
|
|
128
|
+
this.#stmts.delete.run(...toSQLiteTypes(this.#primaryKey, key, this.#columns));
|
|
129
|
+
if (this.#shouldYield()) yield "yield";
|
|
130
|
+
}
|
|
131
|
+
const columns = Object.keys(this.#columns);
|
|
132
|
+
for (const row of delta.liveRows()) {
|
|
133
|
+
this.#stmts.insert.run(...toSQLiteTypes(columns, row, this.#columns));
|
|
134
|
+
if (this.#shouldYield()) yield "yield";
|
|
135
|
+
}
|
|
136
|
+
this.#delta = void 0;
|
|
71
137
|
}
|
|
72
138
|
#getStatementsFor(db) {
|
|
73
139
|
const cached = this.#dbCache.get(db);
|
|
@@ -76,9 +142,7 @@ var TableSource = class {
|
|
|
76
142
|
cache: new StatementCache(db),
|
|
77
143
|
insert: db.prepare(compile(sql`INSERT INTO ${sql.ident(this.#table)} (${sql.join(Object.keys(this.#columns).map((c) => sql.ident(c)), ", ")}) VALUES (${sql.__dangerous__rawValue(Array.from({ length: Object.keys(this.#columns).length }).fill("?").join(","))})`)),
|
|
78
144
|
delete: db.prepare(compile(sql`DELETE FROM ${sql.ident(this.#table)} WHERE ${sql.join(this.#primaryKey.map((k) => sql`${sql.ident(k)}=?`), " AND ")}`)),
|
|
79
|
-
update: Object.keys(this.#columns).length > this.#primaryKey.length ? db.prepare(compile(sql`UPDATE ${sql.ident(this.#table)} SET ${sql.join(nonPrimaryKeys(this.#columns, this.#primaryKey).map((c) => sql`${sql.ident(c)}=?`), ",")} WHERE ${sql.join(this.#primaryKey.map((k) => sql`${sql.ident(k)}=?`), " AND ")}`)) : void 0
|
|
80
|
-
checkExists: db.prepare(compile(sql`SELECT 1 AS "exists" FROM ${sql.ident(this.#table)} WHERE ${sql.join(this.#primaryKey.map((k) => sql`${sql.ident(k)}=?`), " AND ")} LIMIT 1`)),
|
|
81
|
-
getExisting: db.prepare(compile(sql`SELECT * FROM ${sql.ident(this.#table)} WHERE ${sql.join(this.#primaryKey.map((k) => sql`${sql.ident(k)}=?`), " AND ")}`))
|
|
145
|
+
update: Object.keys(this.#columns).length > this.#primaryKey.length ? db.prepare(compile(sql`UPDATE ${sql.ident(this.#table)} SET ${sql.join(nonPrimaryKeys(this.#columns, this.#primaryKey).map((c) => sql`${sql.ident(c)}=?`), ",")} WHERE ${sql.join(this.#primaryKey.map((k) => sql`${sql.ident(k)}=?`), " AND ")}`)) : void 0
|
|
82
146
|
};
|
|
83
147
|
this.#dbCache.set(db, stmts);
|
|
84
148
|
return stmts;
|
|
@@ -101,7 +165,7 @@ var TableSource = class {
|
|
|
101
165
|
connect(sort, filters, splitEditKeys, debug) {
|
|
102
166
|
const transformedFilters = transformFilters(filters);
|
|
103
167
|
const unordered = sort === void 0;
|
|
104
|
-
const primaryKeySort = this.#
|
|
168
|
+
const primaryKeySort = this.#primaryKeySort;
|
|
105
169
|
const input = {
|
|
106
170
|
getSchema: () => schema,
|
|
107
171
|
fetch: (req) => this.#fetch(req, connection),
|
|
@@ -138,41 +202,75 @@ var TableSource = class {
|
|
|
138
202
|
}
|
|
139
203
|
*#fetch(req, connection) {
|
|
140
204
|
const { sort, debug } = connection;
|
|
141
|
-
const
|
|
142
|
-
const cachedStatement = this.#stmts.cache.get(sqlAndBindings.text);
|
|
143
|
-
cachedStatement.statement.safeIntegers(true);
|
|
144
|
-
const rowIterator = cachedStatement.statement.iterate(...sqlAndBindings.values);
|
|
205
|
+
const rows = this.#queryRows(this.#requestToSQL(req, connection.filters?.condition, sort), debug);
|
|
145
206
|
const overlayPredicate = mergeOverlayPredicate(connection.filters?.predicate, req.filter);
|
|
146
207
|
try {
|
|
147
|
-
debug?.initQuery(this.#table, sqlAndBindings.text);
|
|
148
208
|
if (sort) {
|
|
149
209
|
const comparator = makeComparator(sort, req.reverse);
|
|
150
|
-
yield* generateWithStart(generateWithYields(generateWithOverlay(req.start?.row, this.#
|
|
151
|
-
} else yield* generateWithYields(generateWithOverlayUnordered(this.#
|
|
210
|
+
yield* generateWithStart(generateWithYields(generateWithOverlay(req.start?.row, this.#withPendingDelta(rows, req, overlayPredicate, sort, comparator), req.constraint, this.#overlay, connection.lastPushedEpoch, comparator, comparator, overlayPredicate, req.multiConstraints), this.#shouldYield), req.start, comparator);
|
|
211
|
+
} else yield* generateWithYields(generateWithOverlayUnordered(this.#withPendingDelta(rows, req, overlayPredicate, void 0, void 0), req.constraint, this.#overlay, connection.lastPushedEpoch, this.#primaryKey, overlayPredicate, req.multiConstraints), this.#shouldYield);
|
|
152
212
|
} finally {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
213
|
+
rows.return();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The rows of `queries`, run one after another as {@link buildSelectQueries}
|
|
218
|
+
* requires. Each statement is run only once the previous one is exhausted,
|
|
219
|
+
* so a fetch that stops early never runs the rest.
|
|
220
|
+
*/
|
|
221
|
+
*#queryRows(queries, debug) {
|
|
222
|
+
const { cache } = this.#stmts;
|
|
223
|
+
for (const query of queries) {
|
|
224
|
+
const sqlAndBindings = format(query);
|
|
225
|
+
const cachedStatement = cache.get(sqlAndBindings.text);
|
|
226
|
+
cachedStatement.statement.safeIntegers(true);
|
|
227
|
+
const rowIterator = cachedStatement.statement.iterate(...sqlAndBindings.values);
|
|
228
|
+
try {
|
|
229
|
+
debug?.initQuery(this.#table, sqlAndBindings.text);
|
|
230
|
+
yield* this.#mapFromSQLiteTypes(this.#columns, rowIterator, sqlAndBindings.text, debug);
|
|
231
|
+
} finally {
|
|
232
|
+
rowIterator.return?.();
|
|
233
|
+
recordIndexUsage(cachedStatement.statement, this.#table);
|
|
234
|
+
if (debug) {
|
|
235
|
+
let totalNvisit = 0;
|
|
236
|
+
const planLines = [];
|
|
237
|
+
for (let i = 0;; i++) {
|
|
238
|
+
const nvisit = cachedStatement.statement.scanStatus(i, SQLite3Database.SQLITE_SCANSTAT_NVISIT, 1);
|
|
239
|
+
if (nvisit === void 0) break;
|
|
240
|
+
totalNvisit += Number(nvisit);
|
|
241
|
+
const explain = cachedStatement.statement.scanStatus(i, SQLite3Database.SQLITE_SCANSTAT_EXPLAIN, 1);
|
|
242
|
+
if (typeof explain === "string" && explain.length > 0) planLines.push(explain);
|
|
243
|
+
}
|
|
244
|
+
if (totalNvisit !== 0) debug.recordNVisit(this.#table, sqlAndBindings.text, totalNvisit);
|
|
245
|
+
if (planLines.length > 0) debug.recordExplain(this.#table, sqlAndBindings.text, planLines);
|
|
246
|
+
cachedStatement.statement.scanStatusReset();
|
|
163
247
|
}
|
|
164
|
-
|
|
165
|
-
if (planLines.length > 0) debug.recordExplain(this.#table, sqlAndBindings.text, planLines);
|
|
166
|
-
cachedStatement.statement.scanStatusReset();
|
|
248
|
+
cache.return(cachedStatement);
|
|
167
249
|
}
|
|
168
|
-
this.#stmts.cache.return(cachedStatement);
|
|
169
250
|
}
|
|
170
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Splices the batch overlay into a base row stream, if there is one. When
|
|
254
|
+
* derivation is not deferred, or the batch is empty -- every fetch during
|
|
255
|
+
* hydration, and every fetch before the first change of a pass -- this is
|
|
256
|
+
* the identity and the source behaves exactly as it did before.
|
|
257
|
+
*
|
|
258
|
+
* `predicate` is the connection's filters ANDed with `req.filter`, which
|
|
259
|
+
* SQL applies to the base rows. `sort` and `compare` are absent for
|
|
260
|
+
* unordered fetches, where nothing downstream depends on position.
|
|
261
|
+
*/
|
|
262
|
+
#withPendingDelta(baseRows, req, predicate, sort, compare) {
|
|
263
|
+
const delta = this.#delta;
|
|
264
|
+
if (delta === void 0 || delta.isEmpty) return baseRows;
|
|
265
|
+
const deltaRows = delta.rowsFor(sort ?? this.#primaryKeySort, req.constraint, sort ? req.reverse : false, predicate, req.multiConstraints, sort ? req.start?.row : void 0);
|
|
266
|
+
return compare ? generateWithPendingDelta(baseRows, deltaRows, delta, compare) : generateWithPendingDeltaUnordered(baseRows, deltaRows, delta);
|
|
267
|
+
}
|
|
171
268
|
*#mapFromSQLiteTypes(valueTypes, rowIterator, query, debug) {
|
|
172
269
|
let result;
|
|
173
270
|
do {
|
|
174
271
|
result = timeSampled(this.#lc, ++eventCount, this.#logConfig.ivmSampling, () => rowIterator.next(), this.#logConfig.slowRowThreshold, () => `table-source.next took too long for ${query}. Are you missing an index?`);
|
|
175
272
|
if (result.done) break;
|
|
273
|
+
this.#rowsRead++;
|
|
176
274
|
const row = fromSQLiteTypes(valueTypes, result.value, this.#table);
|
|
177
275
|
debug?.rowVended(this.#table, query, row);
|
|
178
276
|
yield row;
|
|
@@ -181,13 +279,51 @@ var TableSource = class {
|
|
|
181
279
|
*push(change) {
|
|
182
280
|
for (const result of this.genPush(change)) if (result === "yield") yield result;
|
|
183
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* The number of rows held in memory for changes that have been pushed but
|
|
284
|
+
* not written, i.e. with `deferWrites`, since the last {@link setDB}.
|
|
285
|
+
*/
|
|
286
|
+
get pendingRows() {
|
|
287
|
+
return this.#delta?.size ?? 0;
|
|
288
|
+
}
|
|
289
|
+
/** Estimated bytes retained by deferred changes and their indexes. */
|
|
290
|
+
get pendingBytes() {
|
|
291
|
+
return this.#delta?.estimatedBytes ?? 0;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Returns whether any connected pipeline could observe the given row.
|
|
295
|
+
* If false, this row is completely invisible to this TableSource's connections.
|
|
296
|
+
*/
|
|
297
|
+
mayAcceptRow(row) {
|
|
298
|
+
if (!this.#skipUnobservableChanges || this.#connections.length === 0) return true;
|
|
299
|
+
for (const conn of this.#connections) if (!conn.filters || conn.filters.predicate(row)) return true;
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
#mayAcceptChange(change) {
|
|
303
|
+
if (!this.#skipUnobservableChanges || this.#connections.length === 0) return true;
|
|
304
|
+
const row = change[1];
|
|
305
|
+
if (this.mayAcceptRow(row)) return true;
|
|
306
|
+
if (change[0] === 2) {
|
|
307
|
+
const oldRow = change[2];
|
|
308
|
+
if (oldRow && this.mayAcceptRow(oldRow)) return true;
|
|
309
|
+
}
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
184
312
|
*genPush(change) {
|
|
185
|
-
|
|
313
|
+
if (this.#skipUnobservableChanges && !this.#mayAcceptChange(change)) {
|
|
314
|
+
if (change[0] === 1) this.#writeChange(change);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
186
317
|
const setOverlay = (o) => this.#overlay = o;
|
|
187
318
|
const writeChange = (c) => this.#writeChange(c);
|
|
188
|
-
yield* genPushAndWriteWithSplitEdit(this.#connections, change,
|
|
319
|
+
yield* genPushAndWriteWithSplitEdit(this.#connections, change, void 0, setOverlay, writeChange, () => ++this.#pushEpoch);
|
|
189
320
|
}
|
|
190
321
|
#writeChange(change) {
|
|
322
|
+
const delta = this.#delta;
|
|
323
|
+
if (delta !== void 0) {
|
|
324
|
+
this.#writeChangeToDelta(delta, change);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
191
327
|
switch (change[0]) {
|
|
192
328
|
case 0:
|
|
193
329
|
this.#stmts.insert.run(...toSQLiteTypes(Object.keys(this.#columns), change[1], this.#columns));
|
|
@@ -211,15 +347,85 @@ var TableSource = class {
|
|
|
211
347
|
default: unreachable(change);
|
|
212
348
|
}
|
|
213
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* Reconciles a set of rows that the caller found in the *backing snapshot*
|
|
352
|
+
* with the changes this source has applied but not written.
|
|
353
|
+
*
|
|
354
|
+
* A view-syncer computes the rows a replicated change collides with -- by
|
|
355
|
+
* change-log key for a delete, by every unique key for a set -- against the
|
|
356
|
+
* snapshot it is reading. When derivation writes through, that snapshot has
|
|
357
|
+
* already absorbed the earlier changes of the same advancement, so the
|
|
358
|
+
* probe sees them. When derivation is deferred they live here instead, and
|
|
359
|
+
* the probe has to be brought up to date or the source is pushed a change
|
|
360
|
+
* that contradicts its own state (a delete of a row the batch already
|
|
361
|
+
* removed, an edit whose old row is stale).
|
|
362
|
+
*
|
|
363
|
+
* Two ways the batch can disagree with the probe, both handled here: a
|
|
364
|
+
* probed row may have been removed, or may have been edited (so the
|
|
365
|
+
* caller's copy is stale, or it no longer collides at all).
|
|
366
|
+
*
|
|
367
|
+
* The batch cannot have edited a row the probe missed *into* collision. The
|
|
368
|
+
* change log keeps one entry per row key, so every row the batch holds is
|
|
369
|
+
* that row's value at the advancement's target version, as is `next`, and
|
|
370
|
+
* two distinct rows of one version cannot share a non-null unique key.
|
|
371
|
+
*
|
|
372
|
+
* Returns `base` untouched when derivation is not deferred, which is what
|
|
373
|
+
* makes this a no-op for the write-through path.
|
|
374
|
+
*/
|
|
375
|
+
reconcilePendingConflicts(base, next, rowKey, uniqueKeys) {
|
|
376
|
+
const delta = this.#delta;
|
|
377
|
+
if (delta === void 0 || delta.isEmpty) return base;
|
|
378
|
+
const deleteKey = next === null ? this.#syncedDeleteKey(rowKey) : void 0;
|
|
379
|
+
const out = [];
|
|
380
|
+
for (const row of base) {
|
|
381
|
+
const pending = delta.get(row);
|
|
382
|
+
const current = pending === NOT_OVERRIDDEN ? row : pending;
|
|
383
|
+
if (current === void 0) continue;
|
|
384
|
+
if (deleteKey !== void 0 ? !deleteKey.every(([col, value]) => sqliteValuesEqual(current[col], value, this.#columns[col].type)) : !collides(current, must(next), uniqueKeys, this.#primaryKey, this.#columns)) continue;
|
|
385
|
+
out.push(current);
|
|
386
|
+
}
|
|
387
|
+
return out;
|
|
388
|
+
}
|
|
389
|
+
#syncedDeleteKey(rowKey) {
|
|
390
|
+
const synced = {};
|
|
391
|
+
for (const [col, value] of Object.entries(rowKey)) if (Object.hasOwn(this.#columns, col)) synced[col] = value;
|
|
392
|
+
return Object.entries(fromSQLiteTypes(this.#columns, synced, this.#table));
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* The batch-overlay counterpart of {@link #writeChange}. It must reproduce
|
|
396
|
+
* that method's semantics exactly, including its treatment of an edit that
|
|
397
|
+
* cannot be expressed as an `UPDATE` -- a changed primary key, or a table
|
|
398
|
+
* whose columns are all part of the key -- as a delete followed by an
|
|
399
|
+
* insert.
|
|
400
|
+
*/
|
|
401
|
+
#writeChangeToDelta(delta, change) {
|
|
402
|
+
switch (change[0]) {
|
|
403
|
+
case 0:
|
|
404
|
+
delta.set(change[1]);
|
|
405
|
+
break;
|
|
406
|
+
case 1:
|
|
407
|
+
delta.delete(change[1]);
|
|
408
|
+
break;
|
|
409
|
+
case 2: {
|
|
410
|
+
const oldRow = change[2];
|
|
411
|
+
const row = change[1];
|
|
412
|
+
if (canUseUpdate(oldRow, row, this.#columns, this.#primaryKey)) delta.set({
|
|
413
|
+
...oldRow,
|
|
414
|
+
...row
|
|
415
|
+
});
|
|
416
|
+
else {
|
|
417
|
+
delta.delete(oldRow);
|
|
418
|
+
delta.set(row);
|
|
419
|
+
}
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
default: unreachable(change);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
214
425
|
#getRowStmtCache = /* @__PURE__ */ new Map();
|
|
215
426
|
#getRowStmt(keyCols) {
|
|
216
427
|
const keyString = JSON.stringify(keyCols);
|
|
217
|
-
|
|
218
|
-
if (!stmt) {
|
|
219
|
-
stmt = compile(sql`SELECT ${this.#allColumns} FROM ${sql.ident(this.#table)} WHERE ${sql.join(keyCols.map((k) => sql`${sql.ident(k)}=?`), sql` AND`)}`);
|
|
220
|
-
this.#getRowStmtCache.set(keyString, stmt);
|
|
221
|
-
}
|
|
222
|
-
return stmt;
|
|
428
|
+
return getOrInsertComputed(this.#getRowStmtCache, keyString, () => compile(sql`SELECT ${this.#allColumns} FROM ${sql.ident(this.#table)} WHERE ${sql.join(keyCols.map((k) => sql`${sql.ident(k)}=?`), sql` AND`)}`));
|
|
223
429
|
}
|
|
224
430
|
/**
|
|
225
431
|
* Retrieves a row from the backing DB by a unique key, or `undefined` if such a
|
|
@@ -231,12 +437,23 @@ var TableSource = class {
|
|
|
231
437
|
getRow(rowKey) {
|
|
232
438
|
const keyCols = Object.keys(rowKey);
|
|
233
439
|
const stmt = this.#getRowStmt(keyCols);
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
440
|
+
const raw = this.#stmts.cache.use(stmt, ({ statement }) => {
|
|
441
|
+
const row = statement.safeIntegers(true).get(...toSQLiteTypes(keyCols, rowKey, this.#columns));
|
|
442
|
+
recordIndexUsage(statement, this.#table);
|
|
443
|
+
return row;
|
|
444
|
+
});
|
|
445
|
+
const row = raw ? fromSQLiteTypes(this.#columns, raw, this.#table) : raw;
|
|
446
|
+
const delta = this.#delta;
|
|
447
|
+
if (delta === void 0 || delta.isEmpty) return row;
|
|
448
|
+
if (row !== void 0) {
|
|
449
|
+
const overridden = delta.get(row);
|
|
450
|
+
if (overridden === NOT_OVERRIDDEN) return row;
|
|
451
|
+
if (overridden !== void 0 && keyCols.every((c) => overridden[c] === rowKey[c])) return overridden;
|
|
452
|
+
}
|
|
453
|
+
return delta.getByColumns(keyCols, rowKey);
|
|
237
454
|
}
|
|
238
455
|
#requestToSQL(request, filters, order) {
|
|
239
|
-
return
|
|
456
|
+
return buildSelectQueries(this.#table, this.#columns, request.constraint, filters, order, request.reverse, request.start, request.multiConstraints, request.filter);
|
|
240
457
|
}
|
|
241
458
|
};
|
|
242
459
|
function mergeOverlayPredicate(connPredicate, reqFilter) {
|
|
@@ -245,6 +462,22 @@ function mergeOverlayPredicate(connPredicate, reqFilter) {
|
|
|
245
462
|
if (!connPredicate) return reqPredicate;
|
|
246
463
|
return (row) => connPredicate(row) && reqPredicate(row);
|
|
247
464
|
}
|
|
465
|
+
/**
|
|
466
|
+
* Whether `a` occupies the same row identity as `b` -- the same primary key,
|
|
467
|
+
* or the same value on any unique key, which is what a replicated write
|
|
468
|
+
* conflicts on.
|
|
469
|
+
*/
|
|
470
|
+
function collides(a, b, uniqueKeys, primaryKey, columns) {
|
|
471
|
+
if (primaryKey.every((col) => sqliteValuesEqual(a[col], b[col], columns[col].type))) return true;
|
|
472
|
+
for (const key of uniqueKeys) {
|
|
473
|
+
if (key.some((col) => b[col] === null || b[col] === void 0)) continue;
|
|
474
|
+
if (key.every((col) => sqliteValuesEqual(a[col], b[col], columns[col].type))) return true;
|
|
475
|
+
}
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
function sqliteValuesEqual(a, b, type) {
|
|
479
|
+
return toSQLiteType(a, type) === toSQLiteType(b, type);
|
|
480
|
+
}
|
|
248
481
|
function getUniqueIndexes(db, tableName) {
|
|
249
482
|
const sqlAndBindings = format(sql`
|
|
250
483
|
SELECT idx.name, json_group_array(col.name) as columnsJSON
|
|
@@ -287,8 +520,9 @@ function fromSQLiteType(valueType, v, column, tableName) {
|
|
|
287
520
|
case "string":
|
|
288
521
|
case "null":
|
|
289
522
|
if (typeof v === "bigint") {
|
|
290
|
-
|
|
291
|
-
|
|
523
|
+
const bi = v;
|
|
524
|
+
if (bi > Number.MAX_SAFE_INTEGER || bi < Number.MIN_SAFE_INTEGER) throw new UnsupportedValueError(`value ${bi} (in ${tableName}.${column}) is outside of supported bounds`);
|
|
525
|
+
return Number(bi);
|
|
292
526
|
}
|
|
293
527
|
return v;
|
|
294
528
|
case "json": try {
|