@rocicorp/zero 1.10.0-canary.0 → 1.10.0-canary.2
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/replicache/src/db/commit.js +1 -4
- package/out/replicache/src/db/commit.js.map +1 -1
- package/out/replicache/src/db/read.d.ts +1 -0
- package/out/replicache/src/db/read.d.ts.map +1 -1
- package/out/replicache/src/db/read.js +1 -4
- package/out/replicache/src/db/read.js.map +1 -1
- package/out/replicache/src/db/write.d.ts +2 -1
- package/out/replicache/src/db/write.d.ts.map +1 -1
- package/out/replicache/src/db/write.js +4 -51
- package/out/replicache/src/db/write.js.map +1 -1
- package/out/replicache/src/persist/clients.d.ts +1 -0
- package/out/replicache/src/persist/clients.d.ts.map +1 -1
- package/out/replicache/src/persist/clients.js +4 -31
- package/out/replicache/src/persist/clients.js.map +1 -1
- package/out/replicache/src/process-env.d.ts +28 -0
- package/out/replicache/src/process-env.d.ts.map +1 -0
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/replicache/src/scan-iterator.js +2 -14
- package/out/replicache/src/scan-iterator.js.map +1 -1
- package/out/replicache/src/subscriptions.d.ts +1 -0
- package/out/replicache/src/subscriptions.d.ts.map +1 -1
- package/out/replicache/src/subscriptions.js +2 -10
- package/out/replicache/src/subscriptions.js.map +1 -1
- package/out/replicache/src/transactions.d.ts +1 -0
- package/out/replicache/src/transactions.d.ts.map +1 -1
- package/out/replicache/src/transactions.js +2 -4
- package/out/replicache/src/transactions.js.map +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +1 -22
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero/package.js +3 -3
- package/out/zero/package.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 +10 -1
- package/out/zero-cache/src/config/normalize.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +52 -1
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +171 -22
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom/fetch.js +1 -1
- package/out/zero-cache/src/custom/fetch.js.map +1 -1
- package/out/zero-cache/src/db/delete-lite-db.js +2 -1
- package/out/zero-cache/src/db/delete-lite-db.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 -2
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +4 -2
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.d.ts +3 -2
- package/out/zero-cache/src/db/sqlite-corruption.d.ts.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.js +13 -8
- package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
- package/out/zero-cache/src/observability/metrics.d.ts +6 -1
- package/out/zero-cache/src/observability/metrics.d.ts.map +1 -1
- package/out/zero-cache/src/observability/metrics.js +20 -2
- package/out/zero-cache/src/observability/metrics.js.map +1 -1
- package/out/zero-cache/src/server/backup-watermark-poller.js +31 -0
- package/out/zero-cache/src/server/backup-watermark-poller.js.map +1 -0
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +91 -31
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +6 -16
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +48 -5
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +2 -1
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +1 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/server/worker-urls.d.ts +1 -1
- package/out/zero-cache/src/server/worker-urls.js +2 -2
- package/out/zero-cache/src/server/worker-urls.js.map +1 -1
- package/out/zero-cache/src/services/change-source/change-source.d.ts +4 -2
- package/out/zero-cache/src/services/change-source/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +35 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.js +34 -0
- package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -0
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +2 -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 +73 -1
- 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 +2 -6
- 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 +14 -5
- 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.js +4 -7
- 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.d.ts +7 -7
- 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 +82 -25
- 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 +9 -1
- 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 +12 -4
- 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 +45 -2
- 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 +59 -8
- 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-slots.d.ts +4 -2
- 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 +7 -4
- 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/init.d.ts +0 -5
- 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 +29 -41
- 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/shard.d.ts +35 -16
- 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 +77 -7
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +2 -1
- 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 +5 -13
- 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 +6 -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/schema-change-tags.d.ts +6 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.js +21 -0
- package/out/zero-cache/src/services/change-source/protocol/current/schema-change-tags.js.map +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +5 -6
- 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 +32 -9
- 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 +15 -5
- 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 +66 -0
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +68 -78
- package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/broadcast.js +84 -92
- 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 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js +50 -0
- package/out/zero-cache/src/services/change-streamer/change-log-codec.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts +141 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +270 -0
- package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts +19 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js +39 -0
- package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +3 -4
- 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 +12 -17
- 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 +69 -24
- 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 +333 -66
- 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 +56 -13
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts +8 -0
- package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +14 -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 +41 -11
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/{litestream3-backup-monitor.d.ts → litestream3-prometheus-poller.d.ts} +19 -45
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/{litestream3-backup-monitor.js → litestream3-prometheus-poller.js} +57 -171
- package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +15 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.js +55 -0
- package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +5 -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 +2 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +14 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js +86 -0
- package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +4 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/snapshot.js +39 -14
- package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +75 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +261 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts +121 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js +391 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +62 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +159 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +109 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +258 -0
- package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +1 -0
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +28 -12
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +116 -121
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +61 -10
- package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/subscriber.js +101 -8
- 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 +34 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +1 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js +86 -0
- package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -0
- package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +4 -3
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +12 -11
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +107 -148
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/config-v5.yml +42 -0
- package/out/zero-cache/src/services/litestream/config.yml +3 -2
- package/out/zero-cache/src/services/litestream/metrics.d.ts +4 -4
- package/out/zero-cache/src/services/litestream/metrics.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/metrics.js +7 -10
- package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts +57 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts.map +1 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js +137 -0
- package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +4 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-log-cookies.d.ts +169 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.js +434 -0
- package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts +358 -0
- package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-db.js +477 -0
- package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts +55 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +150 -0
- package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -0
- package/out/zero-cache/src/services/replicator/change-processor.d.ts +6 -0
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +70 -25
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/incremental-sync.js +19 -6
- package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.d.ts +0 -22
- package/out/zero-cache/src/services/replicator/notifier.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/notifier.js +7 -1
- package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.d.ts +17 -2
- package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/replicator.js +9 -3
- package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +27 -0
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +32 -0
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts +119 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.js +214 -0
- package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -0
- package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +3 -3
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
- package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +9 -5
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +131 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +413 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts +120 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts.map +1 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +283 -0
- package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -0
- package/out/zero-cache/src/services/replicator/write-worker.js +23 -12
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
- package/out/zero-cache/src/services/run-ast.js +2 -1
- package/out/zero-cache/src/services/run-ast.js.map +1 -1
- package/out/zero-cache/src/services/running-state.d.ts +1 -1
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/running-state.js +1 -0
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts +53 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js +68 -0
- package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +18 -3
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
- 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 +64 -6
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/processes.d.ts +1 -2
- package/out/zero-cache/src/types/processes.d.ts.map +1 -1
- package/out/zero-cache/src/types/processes.js +1 -25
- package/out/zero-cache/src/types/processes.js.map +1 -1
- package/out/zero-cache/src/types/streams.d.ts +21 -0
- package/out/zero-cache/src/types/streams.d.ts.map +1 -1
- package/out/zero-cache/src/types/streams.js +25 -4
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/subscription.d.ts +11 -0
- package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
- package/out/zero-cache/src/types/subscription.js +27 -0
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts +1 -0
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +24 -2
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/replicator.d.ts +25 -0
- package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/workers/replicator.js +33 -1
- package/out/zero-cache/src/workers/replicator.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts +12 -0
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +75 -0
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero.d.ts +6 -7
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +156 -101
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts +23 -0
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +18 -0
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-server/src/custom.js +10 -3
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-server/src/schema.d.ts +8 -0
- package/out/zero-server/src/schema.d.ts.map +1 -1
- package/out/zero-server/src/schema.js +63 -24
- package/out/zero-server/src/schema.js.map +1 -1
- package/out/zero-types/src/schema.d.ts +11 -0
- package/out/zero-types/src/schema.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +10 -8
- package/out/zql/src/mutate/crud.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +5 -1
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +2 -2
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query.d.ts +83 -14
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.d.ts +1 -1
- package/out/zql/src/query/static-query.d.ts.map +1 -1
- package/out/zqlite/src/db.js +2 -2
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +15 -0
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +33 -14
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +5 -5
- package/out/zqlite/src/table-source.js +3 -3
- package/package.json +3 -3
- package/out/replicache/src/db/index.js +0 -91
- package/out/replicache/src/db/index.js.map +0 -1
- package/out/replicache/src/lazy.d.ts +0 -2
- package/out/replicache/src/lazy.d.ts.map +0 -1
- package/out/replicache/src/lazy.js +0 -12
- package/out/replicache/src/lazy.js.map +0 -1
- package/out/zero-cache/src/server/backup-watermark-reader.js +0 -35
- package/out/zero-cache/src/server/backup-watermark-reader.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/litestream3-backup-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts +0 -16
- package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js +0 -54
- package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.d.ts +0 -25
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.js +0 -159
- package/out/zero-cache/src/services/change-streamer/vfs-backup-monitor.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.d.ts +0 -44
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.js +0 -65
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.d.ts +0 -11
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.js +0 -74
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker-source.js.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.d.ts +0 -42
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.d.ts.map +0 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.js +0 -117
- package/out/zero-cache/src/services/litestream/vfs-watermark-worker.js.map +0 -1
|
@@ -160,6 +160,7 @@ function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
|
|
|
160
160
|
const queryID = customQueryID ? hashOfNameAndArgs(customQueryID.name, customQueryID.args) : queryHash;
|
|
161
161
|
const queryCompleteResolver = resolver();
|
|
162
162
|
let queryComplete = delegate.defaultQueryComplete;
|
|
163
|
+
let endToEndMetricRecorded = false;
|
|
163
164
|
const updateTTL = customQueryID ? (newTTL) => delegate.updateCustomQuery(customQueryID, newTTL) : (newTTL) => delegate.updateServerQuery(ast, newTTL);
|
|
164
165
|
const gotCallback = (got, error) => {
|
|
165
166
|
if (error) {
|
|
@@ -168,7 +169,10 @@ function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
|
|
|
168
169
|
return;
|
|
169
170
|
}
|
|
170
171
|
if (got) {
|
|
171
|
-
|
|
172
|
+
if (!endToEndMetricRecorded) {
|
|
173
|
+
delegate.addMetric("query-materialization-end-to-end", performance.now() - t0, queryID, ast);
|
|
174
|
+
endToEndMetricRecorded = true;
|
|
175
|
+
}
|
|
172
176
|
queryComplete = true;
|
|
173
177
|
queryCompleteResolver.resolve(true);
|
|
174
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-delegate-base.js","names":[],"sources":["../../../../../zql/src/query/query-delegate-base.ts"],"sourcesContent":["import {resolver} from '@rocicorp/resolver';\nimport type {AST} from '../../../zero-protocol/src/ast.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport {hashOfNameAndArgs} from '../../../zero-protocol/src/query-hash.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {buildPipeline} from '../builder/builder.ts';\nimport {ArrayView} from '../ivm/array-view.ts';\nimport type {FilterInput} from '../ivm/filter-operators.ts';\nimport {MemoryStorage} from '../ivm/memory-storage.ts';\nimport type {Input, InputBase, Storage} from '../ivm/operator.ts';\nimport type {Source, SourceInput} from '../ivm/source.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport type {MetricMap} from './metrics-delegate.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {\n CommitListener,\n GotCallback,\n QueryDelegate,\n} from './query-delegate.ts';\nimport {asQueryInternals, type QueryInternals} from './query-internals.ts';\nimport type {\n HumanReadable,\n MaterializeOptions,\n PreloadOptions,\n Query,\n RunOptions,\n} from './query.ts';\nimport {DEFAULT_PRELOAD_TTL_MS, DEFAULT_TTL_MS, type TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\n/**\n * Base class that provides default implementations for common QueryDelegate methods.\n * Subclasses can override specific methods as needed.\n */\nexport abstract class QueryDelegateBase implements QueryDelegate {\n /**\n * Default implementation that just calls applyViewUpdates synchronously.\n * Override if you need custom batching behavior (e.g., SolidJS).\n */\n batchViewUpdates<T>(applyViewUpdates: () => T): T {\n return applyViewUpdates();\n }\n\n /**\n * Default implementation returns MemoryStorage.\n * Override if you need custom storage.\n */\n createStorage(): Storage {\n return new MemoryStorage();\n }\n\n /**\n * Default implementation calls materializeImpl.\n * Override if you need custom materialization behavior.\n */\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: undefined,\n options?: MaterializeOptions,\n ): TypedView<HumanReadable<TReturn>>;\n\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T;\n\n /**\n * Materialize a query into a custom view using a provided factory function.\n */\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T;\n\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T {\n return materializeImpl(query, this, factory, options);\n }\n\n /**\n * Default implementation calls runImpl.\n * Override if you need custom query execution (e.g., TestPGQueryDelegate).\n */\n run<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n return runImpl(query, this, options);\n }\n\n /**\n * Default implementation calls preloadImpl.\n * Override if you need custom preload behavior.\n */\n preload<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n options?: PreloadOptions,\n ): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n return preloadImpl(query, this, options);\n }\n\n /**\n * Default no-op implementation for decorateSourceInput.\n * Override if you need to wrap or instrument source inputs.\n */\n decorateSourceInput(input: SourceInput, _queryID: string): Input {\n return input;\n }\n\n /**\n * Default no-op implementation for decorateInput.\n * Override if you need to wrap or instrument inputs.\n */\n decorateInput(input: Input, _name: string): Input {\n return input;\n }\n\n /**\n * Default no-op implementation for decorateFilterInput.\n * Override if you need to wrap or instrument filter inputs.\n */\n decorateFilterInput(input: FilterInput, _name: string): FilterInput {\n return input;\n }\n\n /**\n * Default no-op implementation for addEdge.\n * Override if you need to track graph edges (e.g., visualization).\n */\n addEdge(_source: InputBase, _dest: InputBase): void {\n // No-op\n }\n\n /**\n * Default no-op implementation for addMetric.\n * Override if you need to collect metrics.\n */\n addMetric<K extends keyof MetricMap>(\n _metric: K,\n _value: number,\n ..._args: MetricMap[K]\n ): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to track server queries (e.g., ZeroContext, test delegates).\n */\n addServerQuery(_ast: AST, _ttl: TTL, _gotCallback?: GotCallback): () => void {\n return () => {};\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to track custom queries (e.g., ZeroContext, test delegates).\n */\n addCustomQuery(\n _ast: AST,\n _customQueryID: CustomQueryID,\n _ttl: TTL,\n _gotCallback?: GotCallback,\n ): () => void {\n return () => {};\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to handle query updates.\n */\n updateServerQuery(_ast: AST, _ttl: TTL): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to handle custom query updates.\n */\n updateCustomQuery(_customQueryID: CustomQueryID, _ttl: TTL): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to flush query changes.\n */\n flushQueryChanges(): void {\n // No-op\n }\n\n /**\n * Called when a transaction commits. Override to add custom behavior.\n * Default implementation returns a no-op cleanup function.\n */\n onTransactionCommit(_cb: CommitListener): () => void {\n return () => {};\n }\n\n /**\n * Validates run options. Override to add custom validation.\n * Default implementation is a no-op.\n */\n assertValidRunOptions(_options?: RunOptions): void {\n // No-op\n }\n\n abstract readonly defaultQueryComplete: boolean;\n\n // BuilderDelegate methods - must be implemented\n abstract getSource(name: string): Source | undefined;\n}\n\n// oxlint-disable-next-line require-await\nexport async function runImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n options?: RunOptions,\n): Promise<HumanReadable<TReturn>> {\n delegate.assertValidRunOptions(options);\n const v: TypedView<HumanReadable<TReturn>> = materializeImpl(\n query,\n delegate,\n undefined,\n {\n ttl: options?.ttl,\n },\n );\n if (options?.type === 'complete') {\n return new Promise(resolve => {\n v.addListener((data, type) => {\n if (type === 'complete') {\n v.destroy();\n resolve(data as HumanReadable<TReturn>);\n } else if (type === 'error') {\n v.destroy();\n resolve(Promise.reject(data));\n }\n });\n });\n }\n\n options?.type satisfies 'unknown' | undefined;\n\n const ret = v.data;\n v.destroy();\n return ret;\n}\n\nexport function preloadImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n options?: PreloadOptions,\n): {\n cleanup: () => void;\n complete: Promise<void>;\n} {\n const qi = asQueryInternals(query);\n const ttl = options?.ttl ?? DEFAULT_PRELOAD_TTL_MS;\n const {resolve, promise: complete} = resolver<void>();\n const {customQueryID, ast} = qi;\n if (customQueryID) {\n const cleanup = delegate.addCustomQuery(ast, customQueryID, ttl, got => {\n if (got) {\n resolve();\n }\n });\n return {\n cleanup,\n complete,\n };\n }\n\n const cleanup = delegate.addServerQuery(ast, ttl, got => {\n if (got) {\n resolve();\n }\n });\n return {\n cleanup,\n complete,\n };\n}\n\nexport function materializeImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n factory: ViewFactory<\n TTable,\n TSchema,\n TReturn,\n T\n // oxlint-disable-next-line no-explicit-any\n > = arrayViewFactory as any,\n options?: MaterializeOptions,\n): T {\n let ttl: TTL = options?.ttl ?? DEFAULT_TTL_MS;\n\n const qi = asQueryInternals(query);\n const {ast, format, customQueryID} = qi;\n const queryHash = qi.hash();\n\n const queryID = customQueryID\n ? hashOfNameAndArgs(customQueryID.name, customQueryID.args)\n : queryHash;\n const queryCompleteResolver = resolver<true>();\n let queryComplete: boolean | ErroredQuery = delegate.defaultQueryComplete;\n const updateTTL = customQueryID\n ? (newTTL: TTL) => delegate.updateCustomQuery(customQueryID, newTTL)\n : (newTTL: TTL) => delegate.updateServerQuery(ast, newTTL);\n\n const gotCallback: GotCallback = (got, error) => {\n if (error) {\n queryCompleteResolver.reject(error);\n queryComplete = error;\n return;\n }\n\n if (got) {\n delegate.addMetric(\n 'query-materialization-end-to-end',\n performance.now() - t0,\n queryID,\n ast,\n );\n queryComplete = true;\n queryCompleteResolver.resolve(true);\n }\n };\n\n let removeCommitObserver: (() => void) | undefined;\n const onDestroy = () => {\n input.destroy();\n removeCommitObserver?.();\n removeAddedQuery();\n };\n\n const t0 = performance.now();\n\n const removeAddedQuery = customQueryID\n ? delegate.addCustomQuery(ast, customQueryID, ttl, gotCallback)\n : delegate.addServerQuery(ast, ttl, gotCallback);\n\n const input = buildPipeline(ast, delegate, queryID);\n\n const view = delegate.batchViewUpdates(() =>\n (factory ?? arrayViewFactory)(\n query,\n input,\n format,\n onDestroy,\n cb => {\n removeCommitObserver = delegate.onTransactionCommit(cb);\n },\n queryComplete || queryCompleteResolver.promise,\n updateTTL,\n ),\n );\n\n delegate.addMetric(\n 'query-materialization-client',\n performance.now() - t0,\n queryID,\n );\n\n return view as T;\n}\n\nfunction arrayViewFactory<\n TTable extends string,\n TSchema extends Schema,\n TReturn,\n>(\n _query: QueryInternals<TTable, TSchema, TReturn>,\n input: Input,\n format: Format,\n onDestroy: () => void,\n onTransactionCommit: (cb: () => void) => void,\n queryComplete: true | ErroredQuery | Promise<true>,\n updateTTL: (ttl: TTL) => void,\n): TypedView<HumanReadable<TReturn>> {\n const v = new ArrayView<HumanReadable<TReturn>>(\n input,\n format,\n queryComplete,\n updateTTL,\n );\n v.onDestroy = onDestroy;\n onTransactionCommit(() => v.flush());\n return v;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-delegate-base.js","names":[],"sources":["../../../../../zql/src/query/query-delegate-base.ts"],"sourcesContent":["import {resolver} from '@rocicorp/resolver';\nimport type {AST} from '../../../zero-protocol/src/ast.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport {hashOfNameAndArgs} from '../../../zero-protocol/src/query-hash.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {buildPipeline} from '../builder/builder.ts';\nimport {ArrayView} from '../ivm/array-view.ts';\nimport type {FilterInput} from '../ivm/filter-operators.ts';\nimport {MemoryStorage} from '../ivm/memory-storage.ts';\nimport type {Input, InputBase, Storage} from '../ivm/operator.ts';\nimport type {Source, SourceInput} from '../ivm/source.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport type {MetricMap} from './metrics-delegate.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {\n CommitListener,\n GotCallback,\n QueryDelegate,\n} from './query-delegate.ts';\nimport {asQueryInternals, type QueryInternals} from './query-internals.ts';\nimport type {\n HumanReadable,\n MaterializeOptions,\n PreloadOptions,\n Query,\n RunOptions,\n} from './query.ts';\nimport {DEFAULT_PRELOAD_TTL_MS, DEFAULT_TTL_MS, type TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\n/**\n * Base class that provides default implementations for common QueryDelegate methods.\n * Subclasses can override specific methods as needed.\n */\nexport abstract class QueryDelegateBase implements QueryDelegate {\n /**\n * Default implementation that just calls applyViewUpdates synchronously.\n * Override if you need custom batching behavior (e.g., SolidJS).\n */\n batchViewUpdates<T>(applyViewUpdates: () => T): T {\n return applyViewUpdates();\n }\n\n /**\n * Default implementation returns MemoryStorage.\n * Override if you need custom storage.\n */\n createStorage(): Storage {\n return new MemoryStorage();\n }\n\n /**\n * Default implementation calls materializeImpl.\n * Override if you need custom materialization behavior.\n */\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: undefined,\n options?: MaterializeOptions,\n ): TypedView<HumanReadable<TReturn>>;\n\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T;\n\n /**\n * Materialize a query into a custom view using a provided factory function.\n */\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T;\n\n materialize<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n >(\n query: Query<TTable, TSchema, TReturn>,\n factory?: ViewFactory<TTable, TSchema, TReturn, T>,\n options?: MaterializeOptions,\n ): T {\n return materializeImpl(query, this, factory, options);\n }\n\n /**\n * Default implementation calls runImpl.\n * Override if you need custom query execution (e.g., TestPGQueryDelegate).\n */\n run<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n options?: RunOptions,\n ): Promise<HumanReadable<TReturn>> {\n return runImpl(query, this, options);\n }\n\n /**\n * Default implementation calls preloadImpl.\n * Override if you need custom preload behavior.\n */\n preload<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n >(\n query: Query<TTable, TSchema, TReturn>,\n options?: PreloadOptions,\n ): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n return preloadImpl(query, this, options);\n }\n\n /**\n * Default no-op implementation for decorateSourceInput.\n * Override if you need to wrap or instrument source inputs.\n */\n decorateSourceInput(input: SourceInput, _queryID: string): Input {\n return input;\n }\n\n /**\n * Default no-op implementation for decorateInput.\n * Override if you need to wrap or instrument inputs.\n */\n decorateInput(input: Input, _name: string): Input {\n return input;\n }\n\n /**\n * Default no-op implementation for decorateFilterInput.\n * Override if you need to wrap or instrument filter inputs.\n */\n decorateFilterInput(input: FilterInput, _name: string): FilterInput {\n return input;\n }\n\n /**\n * Default no-op implementation for addEdge.\n * Override if you need to track graph edges (e.g., visualization).\n */\n addEdge(_source: InputBase, _dest: InputBase): void {\n // No-op\n }\n\n /**\n * Default no-op implementation for addMetric.\n * Override if you need to collect metrics.\n */\n addMetric<K extends keyof MetricMap>(\n _metric: K,\n _value: number,\n ..._args: MetricMap[K]\n ): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to track server queries (e.g., ZeroContext, test delegates).\n */\n addServerQuery(_ast: AST, _ttl: TTL, _gotCallback?: GotCallback): () => void {\n return () => {};\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to track custom queries (e.g., ZeroContext, test delegates).\n */\n addCustomQuery(\n _ast: AST,\n _customQueryID: CustomQueryID,\n _ttl: TTL,\n _gotCallback?: GotCallback,\n ): () => void {\n return () => {};\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to handle query updates.\n */\n updateServerQuery(_ast: AST, _ttl: TTL): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to handle custom query updates.\n */\n updateCustomQuery(_customQueryID: CustomQueryID, _ttl: TTL): void {\n // No-op\n }\n\n /**\n * Default no-op implementation.\n * Override if you need to flush query changes.\n */\n flushQueryChanges(): void {\n // No-op\n }\n\n /**\n * Called when a transaction commits. Override to add custom behavior.\n * Default implementation returns a no-op cleanup function.\n */\n onTransactionCommit(_cb: CommitListener): () => void {\n return () => {};\n }\n\n /**\n * Validates run options. Override to add custom validation.\n * Default implementation is a no-op.\n */\n assertValidRunOptions(_options?: RunOptions): void {\n // No-op\n }\n\n abstract readonly defaultQueryComplete: boolean;\n\n // BuilderDelegate methods - must be implemented\n abstract getSource(name: string): Source | undefined;\n}\n\n// oxlint-disable-next-line require-await\nexport async function runImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n options?: RunOptions,\n): Promise<HumanReadable<TReturn>> {\n delegate.assertValidRunOptions(options);\n const v: TypedView<HumanReadable<TReturn>> = materializeImpl(\n query,\n delegate,\n undefined,\n {\n ttl: options?.ttl,\n },\n );\n if (options?.type === 'complete') {\n return new Promise(resolve => {\n v.addListener((data, type) => {\n if (type === 'complete') {\n v.destroy();\n resolve(data as HumanReadable<TReturn>);\n } else if (type === 'error') {\n v.destroy();\n resolve(Promise.reject(data));\n }\n });\n });\n }\n\n options?.type satisfies 'unknown' | undefined;\n\n const ret = v.data;\n v.destroy();\n return ret;\n}\n\nexport function preloadImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n options?: PreloadOptions,\n): {\n cleanup: () => void;\n complete: Promise<void>;\n} {\n const qi = asQueryInternals(query);\n const ttl = options?.ttl ?? DEFAULT_PRELOAD_TTL_MS;\n const {resolve, promise: complete} = resolver<void>();\n const {customQueryID, ast} = qi;\n if (customQueryID) {\n const cleanup = delegate.addCustomQuery(ast, customQueryID, ttl, got => {\n if (got) {\n resolve();\n }\n });\n return {\n cleanup,\n complete,\n };\n }\n\n const cleanup = delegate.addServerQuery(ast, ttl, got => {\n if (got) {\n resolve();\n }\n });\n return {\n cleanup,\n complete,\n };\n}\n\nexport function materializeImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n T,\n>(\n query: Query<TTable, TSchema, TReturn>,\n delegate: QueryDelegate,\n factory: ViewFactory<\n TTable,\n TSchema,\n TReturn,\n T\n // oxlint-disable-next-line no-explicit-any\n > = arrayViewFactory as any,\n options?: MaterializeOptions,\n): T {\n let ttl: TTL = options?.ttl ?? DEFAULT_TTL_MS;\n\n const qi = asQueryInternals(query);\n const {ast, format, customQueryID} = qi;\n const queryHash = qi.hash();\n\n const queryID = customQueryID\n ? hashOfNameAndArgs(customQueryID.name, customQueryID.args)\n : queryHash;\n const queryCompleteResolver = resolver<true>();\n let queryComplete: boolean | ErroredQuery = delegate.defaultQueryComplete;\n let endToEndMetricRecorded = false;\n const updateTTL = customQueryID\n ? (newTTL: TTL) => delegate.updateCustomQuery(customQueryID, newTTL)\n : (newTTL: TTL) => delegate.updateServerQuery(ast, newTTL);\n\n const gotCallback: GotCallback = (got, error) => {\n if (error) {\n queryCompleteResolver.reject(error);\n queryComplete = error;\n return;\n }\n\n if (got) {\n if (!endToEndMetricRecorded) {\n delegate.addMetric(\n 'query-materialization-end-to-end',\n performance.now() - t0,\n queryID,\n ast,\n );\n endToEndMetricRecorded = true;\n }\n queryComplete = true;\n queryCompleteResolver.resolve(true);\n }\n };\n\n let removeCommitObserver: (() => void) | undefined;\n const onDestroy = () => {\n input.destroy();\n removeCommitObserver?.();\n removeAddedQuery();\n };\n\n const t0 = performance.now();\n\n const removeAddedQuery = customQueryID\n ? delegate.addCustomQuery(ast, customQueryID, ttl, gotCallback)\n : delegate.addServerQuery(ast, ttl, gotCallback);\n\n const input = buildPipeline(ast, delegate, queryID);\n\n const view = delegate.batchViewUpdates(() =>\n (factory ?? arrayViewFactory)(\n query,\n input,\n format,\n onDestroy,\n cb => {\n removeCommitObserver = delegate.onTransactionCommit(cb);\n },\n queryComplete || queryCompleteResolver.promise,\n updateTTL,\n ),\n );\n\n delegate.addMetric(\n 'query-materialization-client',\n performance.now() - t0,\n queryID,\n );\n\n return view as T;\n}\n\nfunction arrayViewFactory<\n TTable extends string,\n TSchema extends Schema,\n TReturn,\n>(\n _query: QueryInternals<TTable, TSchema, TReturn>,\n input: Input,\n format: Format,\n onDestroy: () => void,\n onTransactionCommit: (cb: () => void) => void,\n queryComplete: true | ErroredQuery | Promise<true>,\n updateTTL: (ttl: TTL) => void,\n): TypedView<HumanReadable<TReturn>> {\n const v = new ArrayView<HumanReadable<TReturn>>(\n input,\n format,\n queryComplete,\n updateTTL,\n );\n v.onDestroy = onDestroy;\n onTransactionCommit(() => v.flush());\n return v;\n}\n"],"mappings":"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"}
|
|
@@ -29,14 +29,14 @@ export declare class QueryImpl<TTable extends keyof TSchema['tables'] & string,
|
|
|
29
29
|
one: () => Query<TTable, TSchema, TReturn | undefined>;
|
|
30
30
|
whereExists: (relationship: string, cbOrOptions?: ((q: AnyQuery) => AnyQuery) | ExistsOptions, options?: ExistsOptions) => Query<TTable, TSchema, TReturn>;
|
|
31
31
|
related: (relationship: string, cb?: (q: AnyQuery) => AnyQuery) => Query<TTable, TSchema, any>;
|
|
32
|
-
where: (fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>, opOrValue?: any, value?: any) => Query<TTable, TSchema, TReturn>;
|
|
32
|
+
where: (fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>, opOrValue?: any, value?: any) => Query<TTable, TSchema, TReturn, any>;
|
|
33
33
|
start: (row: Partial<Record<string, ReadonlyJSONValue | undefined>>, opts?: {
|
|
34
34
|
inclusive: boolean;
|
|
35
35
|
}) => Query<TTable, TSchema, TReturn>;
|
|
36
36
|
limit: (limit: number) => Query<TTable, TSchema, TReturn>;
|
|
37
37
|
orderBy: <TSelector extends keyof TSchema["tables"][TTable]["columns"]>(field: TSelector, direction: "asc" | "desc") => Query<TTable, TSchema, TReturn>;
|
|
38
38
|
get ast(): AST;
|
|
39
|
-
expressionBuilder(): ExpressionBuilder<
|
|
39
|
+
expressionBuilder(): ExpressionBuilder<TTable, TSchema>;
|
|
40
40
|
}
|
|
41
41
|
export declare function asQueryImpl<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn>(q: Query<TTable, TSchema, TReturn>): QueryImpl<TTable, TSchema, TReturn>;
|
|
42
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-impl.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query-impl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query-impl.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-impl.js","names":["#schema","#tableName","#ast","#system","#currentJunction","#newQuery","#hash","#exists"],"sources":["../../../../../zql/src/query/query-impl.ts"],"sourcesContent":["// oxlint-disable no-explicit-any\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {\n type AST,\n type CompoundKey,\n type Condition,\n type Parameter,\n type SimpleOperator,\n type System,\n SUBQ_PREFIX,\n} from '../../../zero-protocol/src/ast.ts';\nimport {hashOfAST} from '../../../zero-protocol/src/query-hash.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {NotImplementedError} from '../error.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport {\n type ExpressionFactory,\n ExpressionBuilder,\n and,\n cmp,\n simplifyCondition,\n} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport {type QueryInternals, queryInternalsTag} from './query-internals.ts';\nimport type {\n AnyQuery,\n ExistsOptions,\n GetFilterType,\n HumanReadable,\n PreloadOptions,\n PullRow,\n Query,\n RunOptions,\n} from './query.ts';\nimport type {TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\ntype GetFilterTypeAny = GetFilterType<any, any, any>;\n\ntype NewQueryFunction<TSchema extends Schema> = <\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n>(\n this: unknown,\n tableName: TTable,\n ast: AST,\n format: Format,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n) => QueryImpl<TTable, TSchema, TReturn>;\n\nexport function newQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n>(schema: TSchema, table: TTable): Query<TTable, TSchema> {\n return newQueryImpl(schema, table, {table}, defaultFormat, 'client');\n}\n\nexport function newQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System,\n): QueryImpl<TTable, TSchema, TReturn> {\n const inner: NewQueryFunction<TSchema> = (\n tableName,\n ast,\n format,\n customQueryID,\n currentJunction,\n ) =>\n new QueryImpl(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n inner,\n );\n\n return inner(tableName, ast, format, undefined, undefined);\n}\n\nexport class QueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>\n implements\n Query<TTable, TSchema, TReturn>,\n QueryInternals<TTable, TSchema, TReturn>\n{\n readonly [queryInternalsTag] = true;\n\n readonly #schema: TSchema;\n readonly #tableName: TTable;\n readonly #ast: AST;\n readonly format: Format;\n #hash: string = '';\n readonly #system: System;\n readonly #currentJunction: string | undefined;\n readonly customQueryID: CustomQueryID | undefined;\n readonly #newQuery: NewQueryFunction<TSchema>;\n\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n newQuery: NewQueryFunction<TSchema>,\n ) {\n this.#schema = schema;\n this.#tableName = tableName;\n this.#ast = ast;\n this.format = format;\n this.#system = system;\n this.#currentJunction = currentJunction;\n this.customQueryID = customQueryID;\n this.#newQuery = newQuery;\n }\n\n run(_options?: RunOptions): Promise<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n preload(_options?: PreloadOptions): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n throwQueryNotRunnable();\n }\n\n materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;\n materialize<T>(\n factory: ViewFactory<TTable, TSchema, TReturn, T>,\n ttl?: TTL,\n ): T;\n materialize<T>(\n _factoryOrTTL?: ViewFactory<TTable, TSchema, TReturn, T> | TTL,\n _ttl?: TTL,\n ): T | TypedView<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n nameAndArgs(\n name: string,\n args: ReadonlyArray<ReadonlyJSONValue>,\n ): Query<TTable, TSchema, TReturn> {\n return this.#newQuery(\n this.#tableName,\n this.#ast,\n this.format,\n {\n name,\n args,\n },\n this.#currentJunction,\n );\n }\n\n hash(): string {\n if (!this.#hash) {\n this.#hash = hashOfAST(this.#ast);\n }\n return this.#hash;\n }\n\n one = (): Query<TTable, TSchema, TReturn | undefined> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit: 1,\n },\n {\n ...this.format,\n singular: true,\n },\n this.customQueryID,\n this.#currentJunction,\n );\n\n whereExists = (\n relationship: string,\n cbOrOptions?: ((q: AnyQuery) => AnyQuery) | ExistsOptions,\n options?: ExistsOptions,\n ): Query<TTable, TSchema, TReturn> => {\n const cb = typeof cbOrOptions === 'function' ? cbOrOptions : undefined;\n const opts = typeof cbOrOptions === 'function' ? options : cbOrOptions;\n return this.where(({exists}) => exists(relationship, cb, opts)) as Query<\n TTable,\n TSchema,\n TReturn\n >;\n };\n\n related = (\n relationship: string,\n cb?: (q: AnyQuery) => AnyQuery,\n ): Query<TTable, TSchema, any> => {\n if (relationship.startsWith(SUBQ_PREFIX)) {\n throw new Error(\n `Relationship names may not start with \"${SUBQ_PREFIX}\". That is a reserved prefix.`,\n );\n }\n cb = cb ?? (q => q);\n\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n if (isOneHop(related)) {\n const {destSchema, destField, sourceField, cardinality} = related[0];\n const q: AnyQuery = this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: cardinality === 'one',\n },\n this.customQueryID,\n undefined,\n ) as AnyQuery;\n // Intentionally not setting to `one` as it is a perf degradation\n // and the user should not be making the mistake of setting cardinality to\n // `one` when it is actually not.\n // if (cardinality === 'one') {\n // q = q.one();\n // }\n const subQuery = asQueryImpl(cb(q));\n assert(\n isCompoundKey(sourceField),\n 'The source of a relationship must specify at last 1 field',\n );\n assert(\n isCompoundKey(destField),\n 'The destination of a relationship must specify at last 1 field',\n );\n assert(\n sourceField.length === destField.length,\n 'The source and destination of a relationship must have the same number of fields',\n );\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: subQuery.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const sq = asQueryImpl(\n cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: secondRelation.cardinality === 'one',\n },\n this.customQueryID,\n relationship,\n ),\n ),\n );\n\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n hidden: true,\n subquery: {\n table: junctionSchema,\n alias: relationship,\n related: [\n {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: sq.#ast,\n },\n ],\n },\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: sq.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n where = function (\n this: QueryImpl<TTable, TSchema, TReturn>,\n fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>,\n opOrValue?: SimpleOperator | GetFilterTypeAny | Parameter,\n value?: GetFilterTypeAny | Parameter,\n ): Query<TTable, TSchema, TReturn> {\n let cond: Condition;\n\n if (typeof fieldOrExpressionFactory === 'function') {\n cond = fieldOrExpressionFactory(this.expressionBuilder());\n } else {\n assert(arguments.length >= 2, 'Invalid condition. Too few arguments.');\n // Distinguish between 2-arg form (field, value) and 3-arg form (field, op, value)\n // using arguments.length to allow explicit undefined in 3-arg form.\n if (arguments.length === 2) {\n cond = cmp(fieldOrExpressionFactory, opOrValue);\n } else {\n cond = cmp(fieldOrExpressionFactory, opOrValue, value);\n }\n }\n\n const existingWhere = this.#ast.where;\n if (existingWhere) {\n cond = and(existingWhere, cond);\n }\n\n const where = simplifyCondition(cond);\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n where,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n }.bind(this);\n\n start = (\n row: Partial<Record<string, ReadonlyJSONValue | undefined>>,\n opts?: {inclusive: boolean},\n ): Query<TTable, TSchema, TReturn> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n start: {\n row,\n exclusive: !opts?.inclusive,\n },\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n\n limit = (limit: number): Query<TTable, TSchema, TReturn> => {\n if (limit < 0) {\n throw new Error('Limit must be non-negative');\n }\n if ((limit | 0) !== limit) {\n throw new Error('Limit must be an integer');\n }\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Limit is not supported in junction relationships yet. Junction relationship being limited: ' +\n this.#currentJunction,\n );\n }\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n orderBy = <TSelector extends keyof TSchema['tables'][TTable]['columns']>(\n field: TSelector,\n direction: 'asc' | 'desc',\n ): Query<TTable, TSchema, TReturn> => {\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Order by is not supported in junction relationships yet. Junction relationship being ordered: ' +\n this.#currentJunction,\n );\n }\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n orderBy: [...(this.#ast.orderBy ?? []), [field as string, direction]],\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n #exists = (\n relationship: string,\n cb: ((query: AnyQuery) => AnyQuery) | undefined,\n options?: ExistsOptions,\n ): Condition => {\n cb = cb ?? (q => q);\n const flip = options?.flip;\n const scalar = options?.scalar;\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n\n if (isOneHop(related)) {\n const {destSchema: destTableName, sourceField, destField} = related[0];\n assert(isCompoundKey(sourceField), 'Invalid relationship');\n assert(isCompoundKey(destField), 'Invalid relationship');\n\n const subQuery = asQueryImpl(\n cb(\n this.#newQuery(\n destTableName,\n {\n table: destTableName,\n alias: `${SUBQ_PREFIX}${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n undefined,\n ),\n ),\n );\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n ...(scalar !== undefined ? {scalar} : {}),\n };\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const queryToDest = cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: `${SUBQ_PREFIX}zhidden_${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n relationship,\n ) as AnyQuery,\n );\n\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n subquery: {\n table: junctionSchema,\n alias: `${SUBQ_PREFIX}${relationship}`,\n where: {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: asQueryImpl(queryToDest).#ast,\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n ...(scalar !== undefined ? {scalar} : {}),\n },\n },\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n };\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n get ast(): AST {\n return this.#ast;\n }\n\n expressionBuilder() {\n return new ExpressionBuilder(this.#exists);\n }\n}\n\nexport function asQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(q: Query<TTable, TSchema, TReturn>): QueryImpl<TTable, TSchema, TReturn> {\n assert(q instanceof QueryImpl, 'Expected QueryImpl instance');\n return q;\n}\n\nfunction throwQueryNotRunnable(): never {\n throw new Error('Query is not runnable');\n}\n\nfunction isCompoundKey(field: readonly string[]): field is CompoundKey {\n return Array.isArray(field) && field.length >= 1;\n}\n\nfunction isOneHop<T>(r: readonly T[]): r is readonly [T] {\n return r.length === 1;\n}\n\nfunction isTwoHop<T>(r: readonly T[]): r is readonly [T, T] {\n return r.length === 2;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-impl.js","names":["#schema","#tableName","#ast","#system","#currentJunction","#newQuery","#hash","#exists"],"sources":["../../../../../zql/src/query/query-impl.ts"],"sourcesContent":["// oxlint-disable no-explicit-any\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {\n type AST,\n type CompoundKey,\n type Condition,\n type Parameter,\n type SimpleOperator,\n type System,\n SUBQ_PREFIX,\n} from '../../../zero-protocol/src/ast.ts';\nimport {hashOfAST} from '../../../zero-protocol/src/query-hash.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {NotImplementedError} from '../error.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport {\n type ExpressionFactory,\n ExpressionBuilder,\n and,\n cmp,\n simplifyCondition,\n} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport {type QueryInternals, queryInternalsTag} from './query-internals.ts';\nimport type {\n AnyQuery,\n ExistsOptions,\n GetFilterType,\n HumanReadable,\n PreloadOptions,\n PullRow,\n Query,\n RunOptions,\n} from './query.ts';\nimport type {TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\ntype GetFilterTypeAny = GetFilterType<any, any, any>;\n\ntype NewQueryFunction<TSchema extends Schema> = <\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n>(\n this: unknown,\n tableName: TTable,\n ast: AST,\n format: Format,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n) => QueryImpl<TTable, TSchema, TReturn>;\n\nexport function newQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n>(schema: TSchema, table: TTable): Query<TTable, TSchema> {\n return newQueryImpl(schema, table, {table}, defaultFormat, 'client');\n}\n\nexport function newQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System,\n): QueryImpl<TTable, TSchema, TReturn> {\n const inner: NewQueryFunction<TSchema> = (\n tableName,\n ast,\n format,\n customQueryID,\n currentJunction,\n ) =>\n new QueryImpl(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n inner,\n );\n\n return inner(tableName, ast, format, undefined, undefined);\n}\n\nexport class QueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>\n implements\n Query<TTable, TSchema, TReturn>,\n QueryInternals<TTable, TSchema, TReturn>\n{\n readonly [queryInternalsTag] = true;\n\n readonly #schema: TSchema;\n readonly #tableName: TTable;\n readonly #ast: AST;\n readonly format: Format;\n #hash: string = '';\n readonly #system: System;\n readonly #currentJunction: string | undefined;\n readonly customQueryID: CustomQueryID | undefined;\n readonly #newQuery: NewQueryFunction<TSchema>;\n\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n newQuery: NewQueryFunction<TSchema>,\n ) {\n this.#schema = schema;\n this.#tableName = tableName;\n this.#ast = ast;\n this.format = format;\n this.#system = system;\n this.#currentJunction = currentJunction;\n this.customQueryID = customQueryID;\n this.#newQuery = newQuery;\n }\n\n run(_options?: RunOptions): Promise<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n preload(_options?: PreloadOptions): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n throwQueryNotRunnable();\n }\n\n materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;\n materialize<T>(\n factory: ViewFactory<TTable, TSchema, TReturn, T>,\n ttl?: TTL,\n ): T;\n materialize<T>(\n _factoryOrTTL?: ViewFactory<TTable, TSchema, TReturn, T> | TTL,\n _ttl?: TTL,\n ): T | TypedView<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n nameAndArgs(\n name: string,\n args: ReadonlyArray<ReadonlyJSONValue>,\n ): Query<TTable, TSchema, TReturn> {\n return this.#newQuery(\n this.#tableName,\n this.#ast,\n this.format,\n {\n name,\n args,\n },\n this.#currentJunction,\n );\n }\n\n hash(): string {\n if (!this.#hash) {\n this.#hash = hashOfAST(this.#ast);\n }\n return this.#hash;\n }\n\n one = (): Query<TTable, TSchema, TReturn | undefined> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit: 1,\n },\n {\n ...this.format,\n singular: true,\n },\n this.customQueryID,\n this.#currentJunction,\n );\n\n whereExists = (\n relationship: string,\n cbOrOptions?: ((q: AnyQuery) => AnyQuery) | ExistsOptions,\n options?: ExistsOptions,\n ): Query<TTable, TSchema, TReturn> => {\n const cb = typeof cbOrOptions === 'function' ? cbOrOptions : undefined;\n const opts = typeof cbOrOptions === 'function' ? options : cbOrOptions;\n return this.where(({exists}) => exists(relationship, cb, opts)) as Query<\n TTable,\n TSchema,\n TReturn\n >;\n };\n\n related = (\n relationship: string,\n cb?: (q: AnyQuery) => AnyQuery,\n ): Query<TTable, TSchema, any> => {\n if (relationship.startsWith(SUBQ_PREFIX)) {\n throw new Error(\n `Relationship names may not start with \"${SUBQ_PREFIX}\". That is a reserved prefix.`,\n );\n }\n cb = cb ?? (q => q);\n\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n if (isOneHop(related)) {\n const {destSchema, destField, sourceField, cardinality} = related[0];\n const q: AnyQuery = this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: cardinality === 'one',\n },\n this.customQueryID,\n undefined,\n ) as AnyQuery;\n // Intentionally not setting to `one` as it is a perf degradation\n // and the user should not be making the mistake of setting cardinality to\n // `one` when it is actually not.\n // if (cardinality === 'one') {\n // q = q.one();\n // }\n const subQuery = asQueryImpl(cb(q));\n assert(\n isCompoundKey(sourceField),\n 'The source of a relationship must specify at last 1 field',\n );\n assert(\n isCompoundKey(destField),\n 'The destination of a relationship must specify at last 1 field',\n );\n assert(\n sourceField.length === destField.length,\n 'The source and destination of a relationship must have the same number of fields',\n );\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: subQuery.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const sq = asQueryImpl(\n cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: secondRelation.cardinality === 'one',\n },\n this.customQueryID,\n relationship,\n ) as AnyQuery,\n ),\n );\n\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n hidden: true,\n subquery: {\n table: junctionSchema,\n alias: relationship,\n related: [\n {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: sq.#ast,\n },\n ],\n },\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: sq.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n // The declared return is the *bottom* of the pinned dimension, which is\n // assignable to every `where` overload's declared return. The overloads\n // refine `TPinned` for callers only; a single non-generic implementation\n // signature cannot express that refinement.\n where = function (\n this: QueryImpl<TTable, TSchema, TReturn>,\n fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>,\n opOrValue?: SimpleOperator | GetFilterTypeAny | Parameter,\n value?: GetFilterTypeAny | Parameter,\n ): Query<TTable, TSchema, TReturn, any> {\n let cond: Condition;\n\n if (typeof fieldOrExpressionFactory === 'function') {\n cond = fieldOrExpressionFactory(this.expressionBuilder());\n } else {\n assert(arguments.length >= 2, 'Invalid condition. Too few arguments.');\n // Distinguish between 2-arg form (field, value) and 3-arg form (field, op, value)\n // using arguments.length to allow explicit undefined in 3-arg form.\n if (arguments.length === 2) {\n cond = cmp(fieldOrExpressionFactory, opOrValue);\n } else {\n cond = cmp(fieldOrExpressionFactory, opOrValue, value);\n }\n }\n\n const existingWhere = this.#ast.where;\n if (existingWhere) {\n cond = and(existingWhere, cond);\n }\n\n const where = simplifyCondition(cond);\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n where,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n ) as unknown as Query<TTable, TSchema, TReturn, any>;\n }.bind(this);\n\n start = (\n row: Partial<Record<string, ReadonlyJSONValue | undefined>>,\n opts?: {inclusive: boolean},\n ): Query<TTable, TSchema, TReturn> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n start: {\n row,\n exclusive: !opts?.inclusive,\n },\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n\n limit = (limit: number): Query<TTable, TSchema, TReturn> => {\n if (limit < 0) {\n throw new Error('Limit must be non-negative');\n }\n if ((limit | 0) !== limit) {\n throw new Error('Limit must be an integer');\n }\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Limit is not supported in junction relationships yet. Junction relationship being limited: ' +\n this.#currentJunction,\n );\n }\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n orderBy = <TSelector extends keyof TSchema['tables'][TTable]['columns']>(\n field: TSelector,\n direction: 'asc' | 'desc',\n ): Query<TTable, TSchema, TReturn> => {\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Order by is not supported in junction relationships yet. Junction relationship being ordered: ' +\n this.#currentJunction,\n );\n }\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n orderBy: [...(this.#ast.orderBy ?? []), [field as string, direction]],\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n #exists = (\n relationship: string,\n cb: ((query: AnyQuery) => AnyQuery) | undefined,\n options?: ExistsOptions,\n ): Condition => {\n cb = cb ?? (q => q);\n const flip = options?.flip;\n const scalar = options?.scalar;\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n\n if (isOneHop(related)) {\n const {destSchema: destTableName, sourceField, destField} = related[0];\n assert(isCompoundKey(sourceField), 'Invalid relationship');\n assert(isCompoundKey(destField), 'Invalid relationship');\n\n const subQuery = asQueryImpl(\n cb(\n this.#newQuery(\n destTableName,\n {\n table: destTableName,\n alias: `${SUBQ_PREFIX}${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n undefined,\n ) as AnyQuery,\n ),\n );\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n ...(scalar !== undefined ? {scalar} : {}),\n };\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const queryToDest = cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: `${SUBQ_PREFIX}zhidden_${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n relationship,\n ) as AnyQuery,\n );\n\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n subquery: {\n table: junctionSchema,\n alias: `${SUBQ_PREFIX}${relationship}`,\n where: {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: asQueryImpl(queryToDest).#ast,\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n ...(scalar !== undefined ? {scalar} : {}),\n },\n },\n },\n op: 'EXISTS',\n ...(flip !== undefined ? {flip} : {}),\n };\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n get ast(): AST {\n return this.#ast;\n }\n\n expressionBuilder(): ExpressionBuilder<TTable, TSchema> {\n return new ExpressionBuilder<TTable, TSchema>(\n this.#exists as ConstructorParameters<\n typeof ExpressionBuilder<TTable, TSchema>\n >[0],\n );\n }\n}\n\nexport function asQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(q: Query<TTable, TSchema, TReturn>): QueryImpl<TTable, TSchema, TReturn> {\n assert(q instanceof QueryImpl, 'Expected QueryImpl instance');\n return q;\n}\n\nfunction throwQueryNotRunnable(): never {\n throw new Error('Query is not runnable');\n}\n\nfunction isCompoundKey(field: readonly string[]): field is CompoundKey {\n return Array.isArray(field) && field.length >= 1;\n}\n\nfunction isOneHop<T>(r: readonly T[]): r is readonly [T] {\n return r.length === 1;\n}\n\nfunction isTwoHop<T>(r: readonly T[]): r is readonly [T, T] {\n return r.length === 2;\n}\n"],"mappings":";;;;;;;;AAqDA,SAAgB,SAGd,QAAiB,OAAuC;CACxD,OAAO,aAAa,QAAQ,OAAO,EAAC,MAAK,GAAG,eAAe,QAAQ;AACrE;AAEA,SAAgB,aAKd,QACA,WACA,KACA,QACA,QACqC;CACrC,MAAM,SACJ,WACA,KACA,QACA,eACA,oBAEA,IAAI,UACF,QACA,WACA,KACA,QACA,QACA,eACA,iBACA,KACF;CAEF,OAAO,MAAM,WAAW,KAAK,QAAQ,KAAA,GAAW,KAAA,CAAS;AAC3D;AAEA,IAAa,YAAb,MAQA;CACE,CAAU,qBAAqB;CAE/B;CACA;CACA;CACA;CACA,QAAgB;CAChB;CACA;CACA;CACA;CAEA,YACE,QACA,WACA,KACA,QACA,QACA,eACA,iBACA,UACA;EACA,KAAKA,UAAU;EACf,KAAKC,aAAa;EAClB,KAAKC,OAAO;EACZ,KAAK,SAAS;EACd,KAAKC,UAAU;EACf,KAAKC,mBAAmB;EACxB,KAAK,gBAAgB;EACrB,KAAKC,YAAY;CACnB;CAEA,IAAI,UAAwD;EAC1D,sBAAsB;CACxB;CAEA,QAAQ,UAGN;EACA,sBAAsB;CACxB;CAOA,YACE,eACA,MACuC;EACvC,sBAAsB;CACxB;CAEA,YACE,MACA,MACiC;EACjC,OAAO,KAAKA,UACV,KAAKJ,YACL,KAAKC,MACL,KAAK,QACL;GACE;GACA;EACF,GACA,KAAKE,gBACP;CACF;CAEA,OAAe;EACb,IAAI,CAAC,KAAKE,OACR,KAAKA,QAAQ,UAAU,KAAKJ,IAAI;EAElC,OAAO,KAAKI;CACd;CAEA,YACE,KAAKD,UACH,KAAKJ,YACL;EACE,GAAG,KAAKC;EACR,OAAO;CACT,GACA;EACE,GAAG,KAAK;EACR,UAAU;CACZ,GACA,KAAK,eACL,KAAKE,gBACP;CAEF,eACE,cACA,aACA,YACoC;EACpC,MAAM,KAAK,OAAO,gBAAgB,aAAa,cAAc,KAAA;EAC7D,MAAM,OAAO,OAAO,gBAAgB,aAAa,UAAU;EAC3D,OAAO,KAAK,OAAO,EAAC,aAAY,OAAO,cAAc,IAAI,IAAI,CAAC;CAKhE;CAEA,WACE,cACA,OACgC;EAChC,IAAI,aAAa,WAAA,QAAsB,GACrC,MAAM,IAAI,MACR,0CAA0C,YAAY,8BACxD;EAEF,KAAK,QAAO,MAAK;EAEjB,MAAM,UAAU,KAAKJ,QAAQ,cAAc,KAAKC,YAAY;EAC5D,OAAO,SAAS,sBAAsB;EACtC,IAAI,SAAS,OAAO,GAAG;GACrB,MAAM,EAAC,YAAY,WAAW,aAAa,gBAAe,QAAQ;GAClE,MAAM,IAAc,KAAKI,UACvB,YACA;IACE,OAAO;IACP,OAAO;GACT,GACA;IACE,eAAe,CAAC;IAChB,UAAU,gBAAgB;GAC5B,GACA,KAAK,eACL,KAAA,CACF;GAOA,MAAM,WAAW,YAAY,GAAG,CAAC,CAAC;GAClC,OACE,cAAc,WAAW,GACzB,2DACF;GACA,OACE,cAAc,SAAS,GACvB,gEACF;GACA,OACE,YAAY,WAAW,UAAU,QACjC,kFACF;GAEA,OAAO,KAAKA,UACV,KAAKJ,YACL;IACE,GAAG,KAAKC;IACR,SAAS,CACP,GAAI,KAAKA,KAAK,WAAW,CAAC,GAC1B;KACE,QAAQ,KAAKC;KACb,aAAa;MACX,aAAa;MACb,YAAY;KACd;KACA,UAAU,SAASD;IACrB,CACF;GACF,GACA;IACE,GAAG,KAAK;IACR,eAAe;KACb,GAAG,KAAK,OAAO;MACd,eAAe,SAAS;IAC3B;GACF,GACA,KAAK,eACL,KAAKE,gBACP;EACF;EAEA,IAAI,SAAS,OAAO,GAAG;GACrB,MAAM,CAAC,eAAe,kBAAkB;GACxC,MAAM,EAAC,eAAc;GACrB,MAAM,iBAAiB,cAAc;GACrC,MAAM,KAAK,YACT,GACE,KAAKC,UACH,YACA;IACE,OAAO;IACP,OAAO;GACT,GACA;IACE,eAAe,CAAC;IAChB,UAAU,eAAe,gBAAgB;GAC3C,GACA,KAAK,eACL,YACF,CACF,CACF;GAEA,OAAO,cAAc,cAAc,WAAW,GAAG,sBAAsB;GACvE,OAAO,cAAc,cAAc,SAAS,GAAG,sBAAsB;GACrE,OAAO,cAAc,eAAe,WAAW,GAAG,sBAAsB;GACxE,OAAO,cAAc,eAAe,SAAS,GAAG,sBAAsB;GAEtE,OAAO,KAAKA,UACV,KAAKJ,YACL;IACE,GAAG,KAAKC;IACR,SAAS,CACP,GAAI,KAAKA,KAAK,WAAW,CAAC,GAC1B;KACE,QAAQ,KAAKC;KACb,aAAa;MACX,aAAa,cAAc;MAC3B,YAAY,cAAc;KAC5B;KACA,QAAQ;KACR,UAAU;MACR,OAAO;MACP,OAAO;MACP,SAAS,CACP;OACE,QAAQ,KAAKA;OACb,aAAa;QACX,aAAa,eAAe;QAC5B,YAAY,eAAe;OAC7B;OACA,UAAU,GAAGD;MACf,CACF;KACF;IACF,CACF;GACF,GACA;IACE,GAAG,KAAK;IACR,eAAe;KACb,GAAG,KAAK,OAAO;MACd,eAAe,GAAG;IACrB;GACF,GACA,KAAK,eACL,KAAKE,gBACP;EACF;EAEA,MAAM,IAAI,MAAM,wBAAwB,cAAc;CACxD;CAMA,QAAQ,SAEN,0BACA,WACA,OACsC;EACtC,IAAI;EAEJ,IAAI,OAAO,6BAA6B,YACtC,OAAO,yBAAyB,KAAK,kBAAkB,CAAC;OACnD;GACL,OAAO,UAAU,UAAU,GAAG,uCAAuC;GAGrE,IAAI,UAAU,WAAW,GACvB,OAAO,IAAI,0BAA0B,SAAS;QAE9C,OAAO,IAAI,0BAA0B,WAAW,KAAK;EAEzD;EAEA,MAAM,gBAAgB,KAAKF,KAAK;EAChC,IAAI,eACF,OAAO,IAAI,eAAe,IAAI;EAGhC,MAAM,QAAQ,kBAAkB,IAAI;EAEpC,OAAO,KAAKG,UACV,KAAKJ,YACL;GACE,GAAG,KAAKC;GACR;EACF,GACA,KAAK,QACL,KAAK,eACL,KAAKE,gBACP;CACF,EAAE,KAAK,IAAI;CAEX,SACE,KACA,SAEA,KAAKC,UACH,KAAKJ,YACL;EACE,GAAG,KAAKC;EACR,OAAO;GACL;GACA,WAAW,CAAC,MAAM;EACpB;CACF,GACA,KAAK,QACL,KAAK,eACL,KAAKE,gBACP;CAEF,SAAS,UAAmD;EAC1D,IAAI,QAAQ,GACV,MAAM,IAAI,MAAM,4BAA4B;EAE9C,KAAK,QAAQ,OAAO,OAClB,MAAM,IAAI,MAAM,0BAA0B;EAE5C,IAAI,KAAKA,kBACP,MAAM,IAAI,oBACR,gGACE,KAAKA,gBACT;EAGF,OAAO,KAAKC,UACV,KAAKJ,YACL;GACE,GAAG,KAAKC;GACR;EACF,GACA,KAAK,QACL,KAAK,eACL,KAAKE,gBACP;CACF;CAEA,WACE,OACA,cACoC;EACpC,IAAI,KAAKA,kBACP,MAAM,IAAI,oBACR,mGACE,KAAKA,gBACT;EAEF,OAAO,KAAKC,UACV,KAAKJ,YACL;GACE,GAAG,KAAKC;GACR,SAAS,CAAC,GAAI,KAAKA,KAAK,WAAW,CAAC,GAAI,CAAC,OAAiB,SAAS,CAAC;EACtE,GACA,KAAK,QACL,KAAK,eACL,KAAKE,gBACP;CACF;CAEA,WACE,cACA,IACA,YACc;EACd,KAAK,QAAO,MAAK;EACjB,MAAM,OAAO,SAAS;EACtB,MAAM,SAAS,SAAS;EACxB,MAAM,UAAU,KAAKJ,QAAQ,cAAc,KAAKC,YAAY;EAC5D,OAAO,SAAS,sBAAsB;EAEtC,IAAI,SAAS,OAAO,GAAG;GACrB,MAAM,EAAC,YAAY,eAAe,aAAa,cAAa,QAAQ;GACpE,OAAO,cAAc,WAAW,GAAG,sBAAsB;GACzD,OAAO,cAAc,SAAS,GAAG,sBAAsB;GAEvD,MAAM,WAAW,YACf,GACE,KAAKI,UACH,eACA;IACE,OAAO;IACP,OAAO,GAAG,cAAc;GAC1B,GACA,eACA,KAAK,eACL,KAAA,CACF,CACF,CACF;GACA,OAAO;IACL,MAAM;IACN,SAAS;KACP,QAAQ,KAAKF;KACb,aAAa;MACX,aAAa;MACb,YAAY;KACd;KACA,UAAU,SAASD;IACrB;IACA,IAAI;IACJ,GAAI,SAAS,KAAA,IAAY,EAAC,KAAI,IAAI,CAAC;IACnC,GAAI,WAAW,KAAA,IAAY,EAAC,OAAM,IAAI,CAAC;GACzC;EACF;EAEA,IAAI,SAAS,OAAO,GAAG;GACrB,MAAM,CAAC,eAAe,kBAAkB;GACxC,OAAO,cAAc,cAAc,WAAW,GAAG,sBAAsB;GACvE,OAAO,cAAc,cAAc,SAAS,GAAG,sBAAsB;GACrE,OAAO,cAAc,eAAe,WAAW,GAAG,sBAAsB;GACxE,OAAO,cAAc,eAAe,SAAS,GAAG,sBAAsB;GACtE,MAAM,EAAC,eAAc;GACrB,MAAM,iBAAiB,cAAc;GACrC,MAAM,cAAc,GAClB,KAAKG,UACH,YACA;IACE,OAAO;IACP,OAAO,GAAG,YAAY,UAAU;GAClC,GACA,eACA,KAAK,eACL,YACF,CACF;GAEA,OAAO;IACL,MAAM;IACN,SAAS;KACP,QAAQ,KAAKF;KACb,aAAa;MACX,aAAa,cAAc;MAC3B,YAAY,cAAc;KAC5B;KACA,UAAU;MACR,OAAO;MACP,OAAO,GAAG,cAAc;MACxB,OAAO;OACL,MAAM;OACN,SAAS;QACP,QAAQ,KAAKA;QACb,aAAa;SACX,aAAa,eAAe;SAC5B,YAAY,eAAe;QAC7B;QACA,UAAU,YAAY,WAAW,EAAED;OACrC;OACA,IAAI;OACJ,GAAI,SAAS,KAAA,IAAY,EAAC,KAAI,IAAI,CAAC;OACnC,GAAI,WAAW,KAAA,IAAY,EAAC,OAAM,IAAI,CAAC;MACzC;KACF;IACF;IACA,IAAI;IACJ,GAAI,SAAS,KAAA,IAAY,EAAC,KAAI,IAAI,CAAC;GACrC;EACF;EAEA,MAAM,IAAI,MAAM,wBAAwB,cAAc;CACxD;CAEA,IAAI,MAAW;EACb,OAAO,KAAKA;CACd;CAEA,oBAAwD;EACtD,OAAO,IAAI,kBACT,KAAKK,OAGP;CACF;AACF;AAEA,SAAgB,YAId,GAAyE;CACzE,OAAO,aAAa,WAAW,6BAA6B;CAC5D,OAAO;AACT;AAEA,SAAS,wBAA+B;CACtC,MAAM,IAAI,MAAM,uBAAuB;AACzC;AAEA,SAAS,cAAc,OAAgD;CACrE,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU;AACjD;AAEA,SAAS,SAAY,GAAoC;CACvD,OAAO,EAAE,WAAW;AACtB;AAEA,SAAS,SAAY,GAAuC;CAC1D,OAAO,EAAE,WAAW;AACtB"}
|
|
@@ -19,7 +19,7 @@ type ArraySelectors<E extends TableSchema> = {
|
|
|
19
19
|
}[keyof E['columns']];
|
|
20
20
|
export type QueryReturn<Q> = Q extends Query<any, any, infer R> ? R : never;
|
|
21
21
|
export type QueryTable<Q> = Q extends Query<infer T, any, any> ? T : never;
|
|
22
|
-
export type ExistsOptions = {
|
|
22
|
+
export type ExistsOptions<TScalar extends boolean = boolean> = {
|
|
23
23
|
/**
|
|
24
24
|
* Controls the join direction.
|
|
25
25
|
* - `true`: Force the join to be flipped (child drives the join).
|
|
@@ -40,11 +40,62 @@ export type ExistsOptions = {
|
|
|
40
40
|
* frequently, as the query will need to be rehydrated whenever the
|
|
41
41
|
* subquery's result changes.
|
|
42
42
|
*
|
|
43
|
+
* The server only honors this when the subquery is *provably* limited to one
|
|
44
|
+
* row: every column of the table's primary key, or of one of its
|
|
45
|
+
* {@linkcode unique} keys, constrained to a literal by `=`. A subquery that
|
|
46
|
+
* does not do so silently falls back to a plain `EXISTS`, so the type rejects
|
|
47
|
+
* `scalar: true` there rather than letting the hint go quietly unused.
|
|
48
|
+
*
|
|
43
49
|
* Only supported for one-hop relationships. Throws if used with
|
|
44
50
|
* junction (two-hop) relationships.
|
|
45
51
|
*/
|
|
46
|
-
scalar?:
|
|
52
|
+
scalar?: TScalar;
|
|
53
|
+
};
|
|
54
|
+
declare const pinnedColumns: unique symbol;
|
|
55
|
+
/**
|
|
56
|
+
* The keys that make a subquery over `TTable` provably single-row: its primary
|
|
57
|
+
* key, plus any {@linkcode unique} keys the schema declares.
|
|
58
|
+
*/
|
|
59
|
+
type UniqueKeysOf<TTable extends string, TSchema extends ZeroSchema> = TSchema['tables'][TTable] extends {
|
|
60
|
+
readonly uniqueKeys: infer TUnique extends readonly (readonly string[])[];
|
|
61
|
+
} ? [PullTableSchema<TTable, TSchema>['primaryKey'], ...TUnique] : [PullTableSchema<TTable, TSchema>['primaryKey']];
|
|
62
|
+
/** Whether every column of at least one key in `TKeys` is in `TPinned`. */
|
|
63
|
+
type CoversSomeKey<TKeys extends readonly unknown[], TPinned extends string> = TKeys extends readonly [infer THead, ...infer TRest] ? THead extends readonly string[] ? [THead[number]] extends [TPinned] ? true : CoversSomeKey<TRest, TPinned> : CoversSomeKey<TRest, TPinned> : false;
|
|
64
|
+
/**
|
|
65
|
+
* Intersected into the `whereExists` callback's declared return type on the
|
|
66
|
+
* `{scalar: true}` overload: `unknown` (a no-op) when the subquery pins a
|
|
67
|
+
* unique key, and otherwise an object the returned query does not have, so
|
|
68
|
+
* that overload stops matching and the call falls through to the general one —
|
|
69
|
+
* where `scalar` may only be `false`.
|
|
70
|
+
*
|
|
71
|
+
* The requirement rides on the callback's return type rather than on the
|
|
72
|
+
* options parameter because TypeScript fixes `TSubPinned` to its default
|
|
73
|
+
* before evaluating a parameter type that depends on it through a type alias.
|
|
74
|
+
* The callback is checked in a later inference pass, after `TSubPinned` is
|
|
75
|
+
* known, so the requirement is only enforceable there.
|
|
76
|
+
*/
|
|
77
|
+
type ScalarRequirement<TTable extends string, TSchema extends ZeroSchema, TPinned extends string> = CoversSomeKey<UniqueKeysOf<TTable, TSchema>, TPinned> extends true ? unknown : {
|
|
78
|
+
readonly [scalarNeedsUniqueKey]: 'To use {scalar: true}, the subquery must constrain every column of the primary key — or of a key declared with .unique() — to a literal with `=`. Otherwise the server ignores the hint and runs a plain EXISTS.';
|
|
47
79
|
};
|
|
80
|
+
declare const scalarNeedsUniqueKey: unique symbol;
|
|
81
|
+
/**
|
|
82
|
+
* The columns an honored `{scalar: true}` gate pins on the *parent* query.
|
|
83
|
+
*
|
|
84
|
+
* The server rewrites such a gate to `parentField = <literal>`, and it does so
|
|
85
|
+
* bottom-up: an inner gate's rewrite is already in place when the outer gate is
|
|
86
|
+
* tested for single-row-ness. So an inner scalar can supply the very column an
|
|
87
|
+
* outer key was missing — which is how a `label` subquery pinning only `name`
|
|
88
|
+
* ends up covering `(projectID, name)`.
|
|
89
|
+
*
|
|
90
|
+
* Only one-hop relationships qualify. On a junction the flag lands on the inner
|
|
91
|
+
* hop, and the outer wrapper stays a plain EXISTS over the junction table, so
|
|
92
|
+
* nothing is pinned on the parent.
|
|
93
|
+
*/
|
|
94
|
+
type ScalarPins<TTable extends string, TSchema extends ZeroSchema, TRelationship extends string> = TSchema['relationships'][TTable][TRelationship] extends readonly [
|
|
95
|
+
infer TOnly
|
|
96
|
+
] ? TOnly extends {
|
|
97
|
+
readonly sourceField: infer TSource extends readonly string[];
|
|
98
|
+
} ? TSource[number] : never : never;
|
|
48
99
|
export type GetFilterType<TSchema extends TableSchema, TColumn extends keyof TSchema['columns'], TOperator extends SimpleOperator> = TOperator extends 'IS' | 'IS NOT' ? SchemaValueToTSType<TSchema['columns'][TColumn]> | null | undefined : TOperator extends 'IN' | 'NOT IN' ? readonly Exclude<SchemaValueToTSType<TSchema['columns'][TColumn]>, null>[] : Exclude<SchemaValueToTSType<TSchema['columns'][TColumn]>, null> | undefined;
|
|
49
100
|
export type AvailableRelationships<TTable extends string, TSchema extends ZeroSchema> = keyof TSchema['relationships'][TTable] & string;
|
|
50
101
|
export type DestTableName<TTable extends string, TSchema extends ZeroSchema, TRelationship extends string> = LastInTuple<TSchema['relationships'][TTable][TRelationship]>['destSchema'];
|
|
@@ -111,20 +162,38 @@ export type QueryResultType<Q extends AnyQueryLike> = Q extends Query<string, Ze
|
|
|
111
162
|
* @typeParam TSchema The database schema type extending ZeroSchema
|
|
112
163
|
* @typeParam TReturn The return type of the query, defaults to PullRow<TTable, TSchema>
|
|
113
164
|
*/
|
|
114
|
-
export interface Query<TTable extends keyof TSchema['tables'] & string, TSchema extends ZeroSchema = DefaultSchema, TReturn = PullRow<TTable, TSchema
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
165
|
+
export interface Query<TTable extends keyof TSchema['tables'] & string, TSchema extends ZeroSchema = DefaultSchema, TReturn = PullRow<TTable, TSchema>, TPinned extends string = never> {
|
|
166
|
+
/**
|
|
167
|
+
* Phantom: the columns this query has constrained to a literal with `=`.
|
|
168
|
+
* Never present at runtime — it exists so `TPinned` has a direct inference
|
|
169
|
+
* site, since otherwise the parameter appears only in nested method return
|
|
170
|
+
* types, which `whereExists` cannot infer through.
|
|
171
|
+
*
|
|
172
|
+
* It is a function type so the parameter is *contravariant*: a query that
|
|
173
|
+
* pinned more stays assignable to one that pinned less. That keeps the
|
|
174
|
+
* default (`never`, i.e. "pinned nothing known") the most permissive
|
|
175
|
+
* annotation, so existing `Query<Table, Schema>` signatures still accept a
|
|
176
|
+
* `.where('id', '=', x)` result.
|
|
177
|
+
*/
|
|
178
|
+
readonly [pinnedColumns]?: ((pinned: TPinned) => void) | undefined;
|
|
179
|
+
related<TRelationship extends AvailableRelationships<TTable, TSchema>>(relationship: TRelationship): Query<TTable, TSchema, AddSubreturn<TReturn, DestRow<TTable, TSchema, TRelationship>, TRelationship>, TPinned>;
|
|
180
|
+
related<TRelationship extends AvailableRelationships<TTable, TSchema>, TSub extends Query<string, TSchema, any>>(relationship: TRelationship, cb: (q: Query<DestTableName<TTable, TSchema, TRelationship>, TSchema, DestRow<TTable, TSchema, TRelationship>>) => TSub): Query<TTable, TSchema, AddSubreturn<TReturn, TSub extends Query<string, TSchema, infer TSubReturn> ? TSubReturn : never, TRelationship>, TPinned>;
|
|
181
|
+
where<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>>(field: TSelector, op: '=', value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>): Query<TTable, TSchema, TReturn, TPinned | (TSelector & string)>;
|
|
182
|
+
where<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>>(field: TSelector, value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>): Query<TTable, TSchema, TReturn, TPinned | (TSelector & string)>;
|
|
183
|
+
where<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>, TOperator extends SimpleOperator>(field: TSelector, op: TOperator, value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator> | ParameterReference | undefined): Query<TTable, TSchema, TReturn, TPinned>;
|
|
184
|
+
where<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>>(field: TSelector, value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='> | ParameterReference | undefined): Query<TTable, TSchema, TReturn, TPinned>;
|
|
185
|
+
where(expressionFactory: ExpressionFactory<TTable, TSchema>): Query<TTable, TSchema, TReturn, TPinned>;
|
|
186
|
+
whereExists(relationship: AvailableRelationships<TTable, TSchema>, options?: ExistsOptions<false>): Query<TTable, TSchema, TReturn, TPinned>;
|
|
187
|
+
whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>, TSubPinned extends string = never>(relationship: TRelationship, cb: (q: Query<DestTableName<TTable, TSchema, TRelationship>, TSchema>) => Query<string, TSchema, any, TSubPinned> & ScalarRequirement<DestTableName<TTable, TSchema, TRelationship>, TSchema, TSubPinned>, options: ExistsOptions<boolean> & {
|
|
188
|
+
scalar: true;
|
|
189
|
+
}): Query<TTable, TSchema, TReturn, TPinned | ScalarPins<TTable, TSchema, TRelationship>>;
|
|
190
|
+
whereExists<TRelationship extends AvailableRelationships<TTable, TSchema>>(relationship: TRelationship, cb: (q: Query<DestTableName<TTable, TSchema, TRelationship>, TSchema>) => Query<string, TSchema, any>, options?: ExistsOptions<false>): Query<TTable, TSchema, TReturn, TPinned>;
|
|
122
191
|
start(row: Partial<PullRow<TTable, TSchema>>, opts?: {
|
|
123
192
|
inclusive: boolean;
|
|
124
|
-
}): Query<TTable, TSchema, TReturn>;
|
|
125
|
-
limit(limit: number): Query<TTable, TSchema, TReturn>;
|
|
126
|
-
orderBy<TSelector extends Selector<PullTableSchema<TTable, TSchema>>>(field: TSelector, direction: 'asc' | 'desc'): Query<TTable, TSchema, TReturn>;
|
|
127
|
-
one(): Query<TTable, TSchema, TReturn | undefined>;
|
|
193
|
+
}): Query<TTable, TSchema, TReturn, TPinned>;
|
|
194
|
+
limit(limit: number): Query<TTable, TSchema, TReturn, TPinned>;
|
|
195
|
+
orderBy<TSelector extends Selector<PullTableSchema<TTable, TSchema>>>(field: TSelector, direction: 'asc' | 'desc'): Query<TTable, TSchema, TReturn, TPinned>;
|
|
196
|
+
one(): Query<TTable, TSchema, TReturn | undefined, TPinned>;
|
|
128
197
|
/**
|
|
129
198
|
* @deprecated Use {@linkcode RunOptions} with {@linkcode zero.run} instead.
|
|
130
199
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Schema } from '../../../zero-types/src/schema.ts';
|
|
2
2
|
import type { PullRow, Query } from './query.ts';
|
|
3
3
|
export declare function newStaticQuery<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn = PullRow<TTable, TSchema>>(schema: TSchema, tableName: TTable): Query<TTable, TSchema, TReturn>;
|
|
4
|
-
export declare function newExpressionBuilder<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema>(schema: TSchema, tableName: TTable): import("./expression.ts").ExpressionBuilder<
|
|
4
|
+
export declare function newExpressionBuilder<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema>(schema: TSchema, tableName: TTable): import("./expression.ts").ExpressionBuilder<TTable, TSchema>;
|
|
5
5
|
//# sourceMappingURL=static-query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/static-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAG9D,OAAO,KAAK,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,YAAY,CAAC;AAE/C,wBAAgB,cAAc,CAC5B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAQrE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"static-query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/static-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAG9D,OAAO,KAAK,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,YAAY,CAAC;AAE/C,wBAAgB,cAAc,CAC5B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAQrE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gEAGnC"}
|
package/out/zqlite/src/db.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { manualSpan } from "../../otel/src/span.js";
|
|
2
2
|
import { version } from "../../otel/src/version.js";
|
|
3
3
|
import { trace } from "@opentelemetry/api";
|
|
4
|
-
import
|
|
4
|
+
import SQLite3Database, { SqliteError } from "@rocicorp/zero-sqlite3";
|
|
5
5
|
//#region ../zqlite/src/db.ts
|
|
6
6
|
var tracer = trace.getTracer("view-syncer", version);
|
|
7
7
|
var AUTO_VACUUM_INCREMENTAL = 2;
|
|
@@ -17,7 +17,7 @@ var Database = class {
|
|
|
17
17
|
constructor(lc, path, options, slowQueryThreshold = 100) {
|
|
18
18
|
try {
|
|
19
19
|
this.#lc = lc.withContext("class", "Database").withContext("path", path);
|
|
20
|
-
this.#db = new
|
|
20
|
+
this.#db = new SQLite3Database(path, options);
|
|
21
21
|
this.#threshold = slowQueryThreshold;
|
|
22
22
|
this.pragma("case_sensitive_like = ON");
|
|
23
23
|
const [{ page_size: pageSize }] = this.pragma("page_size");
|
|
@@ -14,9 +14,24 @@ export type CompanionSubquery = {
|
|
|
14
14
|
* or `undefined` if no row matched. */
|
|
15
15
|
resolvedValue: LiteralValue | null | undefined;
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* A `scalar` hint that could not be honored: the subquery was not provably
|
|
19
|
+
* limited to one row, so the gate was left as a plain EXISTS.
|
|
20
|
+
*/
|
|
21
|
+
export type IgnoredScalarHint = {
|
|
22
|
+
/** The subquery's table. */
|
|
23
|
+
table: string;
|
|
24
|
+
/** The unique keys that were available to pin it. */
|
|
25
|
+
uniqueKeys: readonly PrimaryKey[];
|
|
26
|
+
};
|
|
17
27
|
export type ResolveResult = {
|
|
18
28
|
ast: AST;
|
|
19
29
|
companions: CompanionSubquery[];
|
|
30
|
+
/**
|
|
31
|
+
* Hints the caller may want to surface: each one is a `{scalar: true}` the
|
|
32
|
+
* author asked for and did not get. See {@link IgnoredScalarHint}.
|
|
33
|
+
*/
|
|
34
|
+
ignoredScalarHints: IgnoredScalarHint[];
|
|
20
35
|
};
|
|
21
36
|
/**
|
|
22
37
|
* Callback that executes a scalar subquery and returns the value of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-scalar-subqueries.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/resolve-scalar-subqueries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,SAAS,EAET,YAAY,EAEb,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAC;AAEvE,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE;QACT,UAAU,EAAE,UAAU,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mEAAmE;IACnE,GAAG,EAAE,GAAG,CAAC;IACT,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB;2CACuC;IACvC,aAAa,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-scalar-subqueries.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/resolve-scalar-subqueries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,SAAS,EAET,YAAY,EAEb,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAC;AAEvE,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE;QACT,UAAU,EAAE,UAAU,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mEAAmE;IACnE,GAAG,EAAE,GAAG,CAAC;IACT,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB;2CACuC;IACvC,aAAa,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC;;;OAGG;IACH,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC,CAAC;AAQF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,WAAW,EAAE,GAAG,EAChB,UAAU,EAAE,MAAM,KACf,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;AAErC;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAChD,OAAO,EAAE,cAAc,GACtB,aAAa,CAIf;AA+ID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,GAAG,EACb,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAC/C,OAAO,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,SAAS,GACnB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAI3B"}
|
|
@@ -13,17 +13,20 @@
|
|
|
13
13
|
* rows need to be synced to the client for the EXISTS rewrite to work.
|
|
14
14
|
*/
|
|
15
15
|
function resolveSimpleScalarSubqueries(ast, tableSpecs, execute) {
|
|
16
|
-
const
|
|
16
|
+
const out = {
|
|
17
|
+
companions: [],
|
|
18
|
+
ignoredScalarHints: []
|
|
19
|
+
};
|
|
17
20
|
return {
|
|
18
|
-
ast: resolveASTRecursive(ast, tableSpecs, execute,
|
|
19
|
-
|
|
21
|
+
ast: resolveASTRecursive(ast, tableSpecs, execute, out),
|
|
22
|
+
...out
|
|
20
23
|
};
|
|
21
24
|
}
|
|
22
|
-
function resolveASTRecursive(ast, tableSpecs, execute,
|
|
23
|
-
const where = ast.where ? resolveCondition(ast.where, tableSpecs, execute,
|
|
25
|
+
function resolveASTRecursive(ast, tableSpecs, execute, out) {
|
|
26
|
+
const where = ast.where ? resolveCondition(ast.where, tableSpecs, execute, out) : void 0;
|
|
24
27
|
const related = ast.related?.map((r) => ({
|
|
25
28
|
...r,
|
|
26
|
-
subquery: resolveASTRecursive(r.subquery, tableSpecs, execute,
|
|
29
|
+
subquery: resolveASTRecursive(r.subquery, tableSpecs, execute, out)
|
|
27
30
|
}));
|
|
28
31
|
if (where !== ast.where || related !== ast.related) return {
|
|
29
32
|
...ast,
|
|
@@ -32,12 +35,12 @@ function resolveASTRecursive(ast, tableSpecs, execute, companions) {
|
|
|
32
35
|
};
|
|
33
36
|
return ast;
|
|
34
37
|
}
|
|
35
|
-
function resolveCondition(condition, tableSpecs, execute,
|
|
38
|
+
function resolveCondition(condition, tableSpecs, execute, out) {
|
|
36
39
|
switch (condition.type) {
|
|
37
40
|
case "correlatedSubquery":
|
|
38
|
-
if (condition.scalar) return resolveScalarSubquery(condition, tableSpecs, execute,
|
|
41
|
+
if (condition.scalar) return resolveScalarSubquery(condition, tableSpecs, execute, out);
|
|
39
42
|
{
|
|
40
|
-
const resolvedSubquery = resolveASTRecursive(condition.related.subquery, tableSpecs, execute,
|
|
43
|
+
const resolvedSubquery = resolveASTRecursive(condition.related.subquery, tableSpecs, execute, out);
|
|
41
44
|
if (resolvedSubquery !== condition.related.subquery) return {
|
|
42
45
|
...condition,
|
|
43
46
|
related: {
|
|
@@ -49,7 +52,7 @@ function resolveCondition(condition, tableSpecs, execute, companions) {
|
|
|
49
52
|
}
|
|
50
53
|
case "and":
|
|
51
54
|
case "or": {
|
|
52
|
-
const resolved = condition.conditions.map((c) => resolveCondition(c, tableSpecs, execute,
|
|
55
|
+
const resolved = condition.conditions.map((c) => resolveCondition(c, tableSpecs, execute, out));
|
|
53
56
|
if (resolved.every((c, i) => c === condition.conditions[i])) return condition;
|
|
54
57
|
return {
|
|
55
58
|
type: condition.type,
|
|
@@ -59,11 +62,15 @@ function resolveCondition(condition, tableSpecs, execute, companions) {
|
|
|
59
62
|
default: return condition;
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
|
-
function resolveScalarSubquery(condition, tableSpecs, execute,
|
|
65
|
+
function resolveScalarSubquery(condition, tableSpecs, execute, out) {
|
|
63
66
|
const parentField = condition.related.correlation.parentField[0];
|
|
64
67
|
const childField = condition.related.correlation.childField[0];
|
|
65
|
-
const subquery = resolveASTRecursive(condition.related.subquery, tableSpecs, execute,
|
|
68
|
+
const subquery = resolveASTRecursive(condition.related.subquery, tableSpecs, execute, out);
|
|
66
69
|
if (!isSimpleSubquery(subquery, tableSpecs)) {
|
|
70
|
+
out.ignoredScalarHints.push({
|
|
71
|
+
table: subquery.table,
|
|
72
|
+
uniqueKeys: tableSpecs.get(subquery.table)?.tableSpec.uniqueKeys ?? []
|
|
73
|
+
});
|
|
67
74
|
if (subquery !== condition.related.subquery) return {
|
|
68
75
|
...condition,
|
|
69
76
|
related: {
|
|
@@ -74,12 +81,12 @@ function resolveScalarSubquery(condition, tableSpecs, execute, companions) {
|
|
|
74
81
|
return condition;
|
|
75
82
|
}
|
|
76
83
|
const value = execute(subquery, childField);
|
|
77
|
-
companions.push({
|
|
84
|
+
out.companions.push({
|
|
78
85
|
ast: subquery,
|
|
79
86
|
childField,
|
|
80
87
|
resolvedValue: value
|
|
81
88
|
});
|
|
82
|
-
if (value === void 0 || value === null) return ALWAYS_FALSE;
|
|
89
|
+
if (value === void 0 || value === null) return condition.op === "EXISTS" ? ALWAYS_FALSE : ALWAYS_TRUE;
|
|
83
90
|
return {
|
|
84
91
|
type: "simple",
|
|
85
92
|
op: condition.op === "EXISTS" ? "=" : "IS NOT",
|
|
@@ -105,6 +112,18 @@ var ALWAYS_FALSE = {
|
|
|
105
112
|
value: 0
|
|
106
113
|
}
|
|
107
114
|
};
|
|
115
|
+
var ALWAYS_TRUE = {
|
|
116
|
+
type: "simple",
|
|
117
|
+
op: "=",
|
|
118
|
+
left: {
|
|
119
|
+
type: "literal",
|
|
120
|
+
value: 1
|
|
121
|
+
},
|
|
122
|
+
right: {
|
|
123
|
+
type: "literal",
|
|
124
|
+
value: 1
|
|
125
|
+
}
|
|
126
|
+
};
|
|
108
127
|
/**
|
|
109
128
|
* Checks if the subquery is guaranteed to return at most one deterministic row.
|
|
110
129
|
*
|