@rocicorp/zero 0.25.0-canary.0 → 0.25.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.
Files changed (394) hide show
  1. package/out/{chunk-MXPHMVU7.js → chunk-COKJ5W7V.js} +2527 -540
  2. package/out/chunk-COKJ5W7V.js.map +7 -0
  3. package/out/{chunk-4RB4OYLQ.js → chunk-TJFNGO7E.js} +3 -2
  4. package/out/{chunk-BJ2CGCME.js → chunk-YWU2DZ23.js} +20 -4
  5. package/out/chunk-YWU2DZ23.js.map +7 -0
  6. package/out/{lazy-inspector-2SW772W4.js → lazy-inspector-OXIFYSSQ.js} +2 -2
  7. package/out/react.js +59 -28
  8. package/out/react.js.map +4 -4
  9. package/out/replicache/src/dag/lazy-store.d.ts +1 -1
  10. package/out/replicache/src/dag/lazy-store.d.ts.map +1 -1
  11. package/out/replicache/src/log-options.d.ts +1 -1
  12. package/out/replicache/src/log-options.d.ts.map +1 -1
  13. package/out/replicache/src/persist/collect-idb-databases.d.ts +3 -3
  14. package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
  15. package/out/replicache/src/replicache-options.d.ts +1 -1
  16. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  17. package/out/shared/src/error.d.ts +4 -0
  18. package/out/shared/src/error.d.ts.map +1 -0
  19. package/out/shared/src/error.js +70 -0
  20. package/out/shared/src/error.js.map +1 -0
  21. package/out/shared/src/options.d.ts +1 -1
  22. package/out/shared/src/options.d.ts.map +1 -1
  23. package/out/shared/src/promise-race.d.ts +17 -0
  24. package/out/shared/src/promise-race.d.ts.map +1 -0
  25. package/out/solid.js +61 -22
  26. package/out/solid.js.map +4 -4
  27. package/out/z2s/src/compiler.d.ts +1 -1
  28. package/out/z2s/src/compiler.d.ts.map +1 -1
  29. package/out/z2s/src/compiler.js +1 -1
  30. package/out/z2s/src/compiler.js.map +1 -1
  31. package/out/z2s/src/sql.d.ts.map +1 -1
  32. package/out/z2s/src/sql.js +1 -1
  33. package/out/z2s/src/sql.js.map +1 -1
  34. package/out/zero/package.json +6 -4
  35. package/out/zero/src/zero-out.d.ts +3 -0
  36. package/out/zero/src/zero-out.d.ts.map +1 -0
  37. package/out/zero/src/zero-out.js +13 -0
  38. package/out/zero/src/zero-out.js.map +1 -0
  39. package/out/zero-cache/src/config/zero-config.d.ts +12 -0
  40. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  41. package/out/zero-cache/src/config/zero-config.js +36 -0
  42. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  43. package/out/zero-cache/src/custom/fetch.d.ts +3 -1
  44. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  45. package/out/zero-cache/src/custom/fetch.js +104 -27
  46. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  47. package/out/zero-cache/src/custom-queries/transform-query.d.ts +2 -6
  48. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  49. package/out/zero-cache/src/custom-queries/transform-query.js +42 -41
  50. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  51. package/out/zero-cache/src/db/create.d.ts +4 -0
  52. package/out/zero-cache/src/db/create.d.ts.map +1 -1
  53. package/out/zero-cache/src/db/create.js +7 -9
  54. package/out/zero-cache/src/db/create.js.map +1 -1
  55. package/out/zero-cache/src/db/lite-tables.js +2 -2
  56. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  57. package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -1
  58. package/out/zero-cache/src/db/pg-to-lite.js +7 -6
  59. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  60. package/out/zero-cache/src/db/specs.d.ts +12 -12
  61. package/out/zero-cache/src/scripts/decommission.d.ts +50 -0
  62. package/out/zero-cache/src/scripts/decommission.d.ts.map +1 -0
  63. package/out/zero-cache/src/scripts/decommission.js +51 -0
  64. package/out/zero-cache/src/scripts/decommission.js.map +1 -0
  65. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  66. package/out/zero-cache/src/server/change-streamer.js +1 -1
  67. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  68. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
  69. package/out/zero-cache/src/server/inspector-delegate.js +6 -1
  70. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  71. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  72. package/out/zero-cache/src/server/syncer.js +1 -1
  73. package/out/zero-cache/src/server/syncer.js.map +1 -1
  74. package/out/zero-cache/src/services/change-source/pg/change-source.js +1 -0
  75. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  76. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +1 -1
  77. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +1 -1
  78. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +1 -1
  79. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  80. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +25 -25
  81. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +10 -10
  82. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +5 -5
  83. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +16 -16
  84. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +24 -24
  85. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -1
  86. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  87. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +18 -2
  88. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  89. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +8 -8
  90. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  91. package/out/zero-cache/src/services/mutagen/mutagen.js +9 -7
  92. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  93. package/out/zero-cache/src/services/mutagen/pusher.d.ts +21 -25
  94. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  95. package/out/zero-cache/src/services/mutagen/pusher.js +78 -60
  96. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  97. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +3 -1
  98. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  99. package/out/zero-cache/src/services/view-syncer/client-handler.js +10 -6
  100. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  101. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  102. package/out/zero-cache/src/services/view-syncer/client-schema.js +6 -3
  103. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  104. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +4 -4
  105. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  106. package/out/zero-cache/src/services/view-syncer/cvr-store.js +15 -6
  107. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  108. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  109. package/out/zero-cache/src/services/view-syncer/cvr.js +4 -2
  110. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  111. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +1 -0
  112. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -1
  113. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +5 -0
  114. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  115. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts.map +1 -1
  116. package/out/zero-cache/src/services/view-syncer/key-columns.js +4 -2
  117. package/out/zero-cache/src/services/view-syncer/key-columns.js.map +1 -1
  118. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +1 -1
  119. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  120. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +19 -2
  121. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  122. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +7 -0
  123. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  124. package/out/zero-cache/src/services/view-syncer/view-syncer.js +91 -32
  125. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  126. package/out/zero-cache/src/types/error-with-level.d.ts +9 -0
  127. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -0
  128. package/out/zero-cache/src/types/error-with-level.js +24 -0
  129. package/out/zero-cache/src/types/error-with-level.js.map +1 -0
  130. package/out/zero-cache/src/types/lite.d.ts +15 -13
  131. package/out/zero-cache/src/types/lite.d.ts.map +1 -1
  132. package/out/zero-cache/src/types/lite.js +17 -5
  133. package/out/zero-cache/src/types/lite.js.map +1 -1
  134. package/out/zero-cache/src/types/pg-data-type.d.ts +73 -0
  135. package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -0
  136. package/out/zero-cache/src/types/pg-data-type.js +76 -0
  137. package/out/zero-cache/src/types/pg-data-type.js.map +1 -0
  138. package/out/zero-cache/src/types/pg.d.ts +1 -73
  139. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  140. package/out/zero-cache/src/types/pg.js +0 -77
  141. package/out/zero-cache/src/types/pg.js.map +1 -1
  142. package/out/zero-cache/src/types/processes.d.ts +1 -1
  143. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  144. package/out/zero-cache/src/types/processes.js.map +1 -1
  145. package/out/zero-cache/src/types/schema-versions.d.ts +7 -3
  146. package/out/zero-cache/src/types/schema-versions.d.ts.map +1 -1
  147. package/out/zero-cache/src/types/schema-versions.js +7 -5
  148. package/out/zero-cache/src/types/schema-versions.js.map +1 -1
  149. package/out/zero-cache/src/types/streams.d.ts +1 -1
  150. package/out/zero-cache/src/types/streams.d.ts.map +1 -1
  151. package/out/zero-cache/src/types/streams.js +19 -9
  152. package/out/zero-cache/src/types/streams.js.map +1 -1
  153. package/out/zero-cache/src/types/subscription.d.ts +17 -2
  154. package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
  155. package/out/zero-cache/src/types/subscription.js +42 -6
  156. package/out/zero-cache/src/types/subscription.js.map +1 -1
  157. package/out/zero-cache/src/types/websocket-handoff.d.ts +3 -3
  158. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  159. package/out/zero-cache/src/types/websocket-handoff.js +6 -4
  160. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  161. package/out/zero-cache/src/workers/connection.d.ts +6 -1
  162. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  163. package/out/zero-cache/src/workers/connection.js +26 -9
  164. package/out/zero-cache/src/workers/connection.js.map +1 -1
  165. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  166. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +7 -1
  167. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  168. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  169. package/out/zero-cache/src/workers/syncer.js +22 -4
  170. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  171. package/out/zero-client/src/client/client-error-kind-enum.d.ts +8 -0
  172. package/out/zero-client/src/client/client-error-kind-enum.d.ts.map +1 -1
  173. package/out/zero-client/src/client/connection-manager.d.ts +82 -14
  174. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  175. package/out/zero-client/src/client/connection-status-enum.d.ts +4 -0
  176. package/out/zero-client/src/client/connection-status-enum.d.ts.map +1 -1
  177. package/out/zero-client/src/client/connection.d.ts +53 -0
  178. package/out/zero-client/src/client/connection.d.ts.map +1 -0
  179. package/out/zero-client/src/client/error.d.ts +51 -24
  180. package/out/zero-client/src/client/error.d.ts.map +1 -1
  181. package/out/zero-client/src/client/ivm-branch.d.ts +2 -2
  182. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  183. package/out/zero-client/src/client/metrics.d.ts +9 -0
  184. package/out/zero-client/src/client/metrics.d.ts.map +1 -1
  185. package/out/zero-client/src/client/mutation-tracker.d.ts +5 -4
  186. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  187. package/out/zero-client/src/client/options.d.ts +15 -18
  188. package/out/zero-client/src/client/options.d.ts.map +1 -1
  189. package/out/zero-client/src/client/query-manager.d.ts +5 -4
  190. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  191. package/out/zero-client/src/client/zero-rep.d.ts +3 -1
  192. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  193. package/out/zero-client/src/client/zero.d.ts +27 -5
  194. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  195. package/out/zero-client/src/mod.d.ts +12 -1
  196. package/out/zero-client/src/mod.d.ts.map +1 -1
  197. package/out/zero-client/src/types/query-result.d.ts +23 -0
  198. package/out/zero-client/src/types/query-result.d.ts.map +1 -0
  199. package/out/zero-protocol/src/application-error.d.ts +33 -0
  200. package/out/zero-protocol/src/application-error.d.ts.map +1 -0
  201. package/out/zero-protocol/src/application-error.js +37 -0
  202. package/out/zero-protocol/src/application-error.js.map +1 -0
  203. package/out/zero-protocol/src/custom-queries.d.ts +56 -53
  204. package/out/zero-protocol/src/custom-queries.d.ts.map +1 -1
  205. package/out/zero-protocol/src/custom-queries.js +16 -14
  206. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  207. package/out/zero-protocol/src/down.d.ts +8 -10
  208. package/out/zero-protocol/src/down.d.ts.map +1 -1
  209. package/out/zero-protocol/src/error-kind-enum.d.ts +65 -0
  210. package/out/zero-protocol/src/error-kind-enum.d.ts.map +1 -1
  211. package/out/zero-protocol/src/error-kind-enum.js +2 -0
  212. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  213. package/out/zero-protocol/src/error-origin-enum.d.ts +7 -0
  214. package/out/zero-protocol/src/error-origin-enum.d.ts.map +1 -0
  215. package/out/zero-protocol/src/error-origin-enum.js +4 -0
  216. package/out/zero-protocol/src/error-origin-enum.js.map +1 -0
  217. package/out/zero-protocol/src/error-origin.d.ts +5 -0
  218. package/out/zero-protocol/src/error-origin.d.ts.map +1 -0
  219. package/out/zero-protocol/src/error-origin.js +3 -0
  220. package/out/zero-protocol/src/error-origin.js.map +1 -0
  221. package/out/zero-protocol/src/error-reason-enum.d.ts +15 -0
  222. package/out/zero-protocol/src/error-reason-enum.d.ts.map +1 -0
  223. package/out/zero-protocol/src/error-reason-enum.js +8 -0
  224. package/out/zero-protocol/src/error-reason-enum.js.map +1 -0
  225. package/out/zero-protocol/src/error-reason.d.ts +5 -0
  226. package/out/zero-protocol/src/error-reason.d.ts.map +1 -0
  227. package/out/zero-protocol/src/error-reason.js +3 -0
  228. package/out/zero-protocol/src/error-reason.js.map +1 -0
  229. package/out/zero-protocol/src/error.d.ts +181 -1
  230. package/out/zero-protocol/src/error.d.ts.map +1 -1
  231. package/out/zero-protocol/src/error.js +71 -2
  232. package/out/zero-protocol/src/error.js.map +1 -1
  233. package/out/zero-protocol/src/mutation-id.d.ts +7 -0
  234. package/out/zero-protocol/src/mutation-id.d.ts.map +1 -0
  235. package/out/zero-protocol/src/mutation-id.js +6 -0
  236. package/out/zero-protocol/src/mutation-id.js.map +1 -0
  237. package/out/zero-protocol/src/mutations-patch.d.ts +6 -3
  238. package/out/zero-protocol/src/mutations-patch.d.ts.map +1 -1
  239. package/out/zero-protocol/src/mutations-patch.js +2 -1
  240. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  241. package/out/zero-protocol/src/poke.d.ts +2 -0
  242. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  243. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  244. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  245. package/out/zero-protocol/src/protocol-version.js +3 -1
  246. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  247. package/out/zero-protocol/src/push.d.ts +145 -13
  248. package/out/zero-protocol/src/push.d.ts.map +1 -1
  249. package/out/zero-protocol/src/push.js +35 -13
  250. package/out/zero-protocol/src/push.js.map +1 -1
  251. package/out/zero-react/src/mod.d.ts +7 -2
  252. package/out/zero-react/src/mod.d.ts.map +1 -1
  253. package/out/zero-react/src/use-query.d.ts +1 -21
  254. package/out/zero-react/src/use-query.d.ts.map +1 -1
  255. package/out/zero-react/src/use-zero-connection-state.d.ts +9 -0
  256. package/out/zero-react/src/use-zero-connection-state.d.ts.map +1 -0
  257. package/out/zero-react/src/use-zero-online.d.ts +2 -0
  258. package/out/zero-react/src/use-zero-online.d.ts.map +1 -1
  259. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  260. package/out/zero-server/src/mod.d.ts +5 -4
  261. package/out/zero-server/src/mod.d.ts.map +1 -1
  262. package/out/zero-server/src/mod.js +5 -4
  263. package/out/zero-server/src/mod.js.map +1 -1
  264. package/out/zero-server/src/process-mutations.d.ts +3 -3
  265. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  266. package/out/zero-server/src/process-mutations.js +181 -68
  267. package/out/zero-server/src/process-mutations.js.map +1 -1
  268. package/out/zero-server/src/queries/process-queries.d.ts +4 -3
  269. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  270. package/out/zero-server/src/queries/process-queries.js +85 -19
  271. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  272. package/out/zero-server/src/schema.js +1 -1
  273. package/out/zero-server/src/schema.js.map +1 -1
  274. package/out/zero-server/src/zql-database.d.ts +1 -1
  275. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  276. package/out/zero-server/src/zql-database.js.map +1 -1
  277. package/out/zero-solid/src/mod.d.ts +11 -2
  278. package/out/zero-solid/src/mod.d.ts.map +1 -1
  279. package/out/zero-solid/src/solid-view.d.ts +3 -23
  280. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  281. package/out/zero-solid/src/use-query.d.ts +1 -1
  282. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  283. package/out/zero-solid/src/use-zero-connection-state.d.ts +10 -0
  284. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +1 -0
  285. package/out/zero-solid/src/use-zero-online.d.ts +1 -7
  286. package/out/zero-solid/src/use-zero-online.d.ts.map +1 -1
  287. package/out/zero-solid/src/use-zero.d.ts +1 -0
  288. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  289. package/out/zero.js +15 -3
  290. package/out/zql/src/builder/builder.d.ts +2 -1
  291. package/out/zql/src/builder/builder.d.ts.map +1 -1
  292. package/out/zql/src/builder/builder.js +5 -1
  293. package/out/zql/src/builder/builder.js.map +1 -1
  294. package/out/zql/src/ivm/data.d.ts +1 -1
  295. package/out/zql/src/ivm/data.d.ts.map +1 -1
  296. package/out/zql/src/ivm/data.js.map +1 -1
  297. package/out/zql/src/ivm/filter-push.d.ts +1 -1
  298. package/out/zql/src/ivm/filter-push.d.ts.map +1 -1
  299. package/out/zql/src/ivm/filter-push.js.map +1 -1
  300. package/out/zql/src/ivm/memory-source.d.ts +2 -2
  301. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  302. package/out/zql/src/ivm/memory-source.js.map +1 -1
  303. package/out/zql/src/ivm/source.d.ts +1 -1
  304. package/out/zql/src/ivm/source.d.ts.map +1 -1
  305. package/out/zql/src/ivm/take.d.ts +1 -1
  306. package/out/zql/src/ivm/take.d.ts.map +1 -1
  307. package/out/zql/src/ivm/take.js.map +1 -1
  308. package/out/zql/src/planner/planner-builder.d.ts +15 -0
  309. package/out/zql/src/planner/planner-builder.d.ts.map +1 -0
  310. package/out/zql/src/planner/planner-builder.js +180 -0
  311. package/out/zql/src/planner/planner-builder.js.map +1 -0
  312. package/out/zql/src/planner/planner-connection.d.ts +125 -0
  313. package/out/zql/src/planner/planner-connection.d.ts.map +1 -0
  314. package/out/zql/src/planner/planner-connection.js +257 -0
  315. package/out/zql/src/planner/planner-connection.js.map +1 -0
  316. package/out/zql/src/planner/planner-constraint.d.ts +14 -0
  317. package/out/zql/src/planner/planner-constraint.d.ts.map +1 -0
  318. package/out/zql/src/planner/planner-constraint.js +12 -0
  319. package/out/zql/src/planner/planner-constraint.js.map +1 -0
  320. package/out/zql/src/planner/planner-debug.d.ts +148 -0
  321. package/out/zql/src/planner/planner-debug.d.ts.map +1 -0
  322. package/out/zql/src/planner/planner-debug.js +176 -0
  323. package/out/zql/src/planner/planner-debug.js.map +1 -0
  324. package/out/zql/src/planner/planner-fan-in.d.ts +39 -0
  325. package/out/zql/src/planner/planner-fan-in.d.ts.map +1 -0
  326. package/out/zql/src/planner/planner-fan-in.js +167 -0
  327. package/out/zql/src/planner/planner-fan-in.js.map +1 -0
  328. package/out/zql/src/planner/planner-fan-out.d.ts +23 -0
  329. package/out/zql/src/planner/planner-fan-out.d.ts.map +1 -0
  330. package/out/zql/src/planner/planner-fan-out.js +62 -0
  331. package/out/zql/src/planner/planner-fan-out.js.map +1 -0
  332. package/out/zql/src/planner/planner-graph.d.ts +103 -0
  333. package/out/zql/src/planner/planner-graph.d.ts.map +1 -0
  334. package/out/zql/src/planner/planner-graph.js +380 -0
  335. package/out/zql/src/planner/planner-graph.js.map +1 -0
  336. package/out/zql/src/planner/planner-join.d.ts +136 -0
  337. package/out/zql/src/planner/planner-join.d.ts.map +1 -0
  338. package/out/zql/src/planner/planner-join.js +329 -0
  339. package/out/zql/src/planner/planner-join.js.map +1 -0
  340. package/out/zql/src/planner/planner-node.d.ts +48 -0
  341. package/out/zql/src/planner/planner-node.d.ts.map +1 -0
  342. package/out/zql/src/planner/planner-node.js +2 -0
  343. package/out/zql/src/planner/planner-node.js.map +1 -0
  344. package/out/zql/src/planner/planner-source.d.ts +11 -0
  345. package/out/zql/src/planner/planner-source.d.ts.map +1 -0
  346. package/out/zql/src/planner/planner-source.js +13 -0
  347. package/out/zql/src/planner/planner-source.js.map +1 -0
  348. package/out/zql/src/planner/planner-terminus.d.ts +17 -0
  349. package/out/zql/src/planner/planner-terminus.d.ts.map +1 -0
  350. package/out/zql/src/planner/planner-terminus.js +28 -0
  351. package/out/zql/src/planner/planner-terminus.js.map +1 -0
  352. package/out/zql/src/query/error.d.ts +4 -0
  353. package/out/zql/src/query/error.d.ts.map +1 -0
  354. package/out/zql/src/query/error.js +9 -0
  355. package/out/zql/src/query/error.js.map +1 -0
  356. package/out/zql/src/query/expression.d.ts +2 -2
  357. package/out/zql/src/query/expression.d.ts.map +1 -1
  358. package/out/zql/src/query/expression.js.map +1 -1
  359. package/out/zql/src/query/named.d.ts.map +1 -1
  360. package/out/zql/src/query/named.js +9 -1
  361. package/out/zql/src/query/named.js.map +1 -1
  362. package/out/zql/src/query/query-delegate.d.ts +3 -3
  363. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  364. package/out/zql/src/query/query-impl.d.ts +8 -8
  365. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  366. package/out/zql/src/query/query-impl.js.map +1 -1
  367. package/out/zql/src/query/query.d.ts +3 -3
  368. package/out/zql/src/query/query.d.ts.map +1 -1
  369. package/out/zql/src/query/static-query.d.ts +1 -1
  370. package/out/zql/src/query/static-query.d.ts.map +1 -1
  371. package/out/zql/src/query/static-query.js.map +1 -1
  372. package/out/zql/src/query/typed-view.d.ts +1 -1
  373. package/out/zql/src/query/typed-view.d.ts.map +1 -1
  374. package/out/zqlite/src/query-delegate.d.ts +1 -1
  375. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  376. package/out/zqlite/src/query-delegate.js.map +1 -1
  377. package/out/zqlite/src/sqlite-cost-model.d.ts +17 -0
  378. package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -0
  379. package/out/zqlite/src/sqlite-cost-model.js +134 -0
  380. package/out/zqlite/src/sqlite-cost-model.js.map +1 -0
  381. package/out/zqlite/src/table-source.d.ts +1 -1
  382. package/out/zqlite/src/table-source.d.ts.map +1 -1
  383. package/out/zqlite/src/table-source.js.map +1 -1
  384. package/package.json +6 -4
  385. package/out/chunk-BJ2CGCME.js.map +0 -7
  386. package/out/chunk-MXPHMVU7.js.map +0 -7
  387. package/out/zero-cache/src/types/error-for-client.d.ts +0 -23
  388. package/out/zero-cache/src/types/error-for-client.d.ts.map +0 -1
  389. package/out/zero-cache/src/types/error-for-client.js +0 -28
  390. package/out/zero-cache/src/types/error-for-client.js.map +0 -1
  391. package/out/zero-client/src/client/ping-result-enum.d.ts +0 -5
  392. package/out/zero-client/src/client/ping-result-enum.d.ts.map +0 -1
  393. /package/out/{chunk-4RB4OYLQ.js.map → chunk-TJFNGO7E.js.map} +0 -0
  394. /package/out/{lazy-inspector-2SW772W4.js.map → lazy-inspector-OXIFYSSQ.js.map} +0 -0
@@ -0,0 +1,380 @@
1
+ import { assert } from "../../../shared/src/asserts.js";
2
+ import { PlannerSource } from "./planner-source.js";
3
+ import { must } from "../../../shared/src/must.js";
4
+ /**
5
+ * Maximum number of flippable joins to attempt exhaustive enumeration.
6
+ * With n flippable joins, we explore 2^n plans.
7
+ * 10 joins = 1024 plans (~100-200ms), 12 joins = 4096 plans (~400ms - 1 second)
8
+ */
9
+ const MAX_FLIPPABLE_JOINS = 13;
10
+ export class PlannerGraph {
11
+ // Sources indexed by table name
12
+ #sources = new Map();
13
+ // The final output node where constraint propagation starts
14
+ #terminus = undefined;
15
+ // Collections of nodes with mutable planning state
16
+ joins = [];
17
+ fanOuts = [];
18
+ fanIns = [];
19
+ connections = [];
20
+ /**
21
+ * Reset all planning state back to initial values for another planning pass.
22
+ * Resets only mutable planning state - graph structure is unchanged.
23
+ *
24
+ * This allows replanning the same query graph with different strategies.
25
+ */
26
+ resetPlanningState() {
27
+ for (const j of this.joins)
28
+ j.reset();
29
+ for (const fo of this.fanOuts)
30
+ fo.reset();
31
+ for (const fi of this.fanIns)
32
+ fi.reset();
33
+ for (const c of this.connections)
34
+ c.reset();
35
+ }
36
+ /**
37
+ * Create and register a source (table) in the graph.
38
+ */
39
+ addSource(name, model) {
40
+ assert(!this.#sources.has(name), `Source ${name} already exists in the graph`);
41
+ const source = new PlannerSource(name, model);
42
+ this.#sources.set(name, source);
43
+ return source;
44
+ }
45
+ /**
46
+ * Get a source by table name.
47
+ */
48
+ getSource(name) {
49
+ const source = this.#sources.get(name);
50
+ assert(source !== undefined, `Source ${name} not found in the graph`);
51
+ return source;
52
+ }
53
+ /**
54
+ * Check if a source exists by table name.
55
+ */
56
+ hasSource(name) {
57
+ return this.#sources.has(name);
58
+ }
59
+ /**
60
+ * Set the terminus (final output) node of the graph.
61
+ * Constraint propagation starts from this node.
62
+ */
63
+ setTerminus(terminus) {
64
+ this.#terminus = terminus;
65
+ }
66
+ /**
67
+ * Initiate constraint propagation from the terminus node.
68
+ * This sends constraints up through the graph to update
69
+ * connection cost estimates.
70
+ */
71
+ propagateConstraints(planDebugger) {
72
+ assert(this.#terminus !== undefined, 'Cannot propagate constraints without a terminus node');
73
+ this.#terminus.propagateConstraints(planDebugger);
74
+ }
75
+ /**
76
+ * Calculate total cost of the current plan.
77
+ * Total cost includes both startup cost (one-time, e.g., sorting) and running cost.
78
+ */
79
+ getTotalCost(planDebugger) {
80
+ const estimate = must(this.#terminus).estimateCost(planDebugger);
81
+ return estimate.cost + estimate.startupCost;
82
+ }
83
+ /**
84
+ * Capture a lightweight snapshot of the current planning state.
85
+ * Used for backtracking during multi-start greedy search.
86
+ *
87
+ * Captures mutable state including pinned flags, join types, and
88
+ * constraint maps to avoid needing repropagation on restore.
89
+ *
90
+ * @returns A snapshot that can be restored via restorePlanningSnapshot()
91
+ */
92
+ capturePlanningSnapshot() {
93
+ return {
94
+ connections: this.connections.map(c => ({
95
+ limit: c.limit,
96
+ })),
97
+ joins: this.joins.map(j => ({ type: j.type })),
98
+ fanOuts: this.fanOuts.map(fo => ({ type: fo.type })),
99
+ fanIns: this.fanIns.map(fi => ({ type: fi.type })),
100
+ connectionConstraints: this.connections.map(c => c.captureConstraints()),
101
+ };
102
+ }
103
+ /**
104
+ * Restore planning state from a previously captured snapshot.
105
+ * Used for backtracking when a planning attempt fails.
106
+ *
107
+ * Restores pinned flags, join types, and constraint maps, eliminating
108
+ * the need for repropagation.
109
+ *
110
+ * @param state - Snapshot created by capturePlanningSnapshot()
111
+ */
112
+ restorePlanningSnapshot(state) {
113
+ this.#validateSnapshotShape(state);
114
+ this.#restoreConnections(state);
115
+ this.#restoreJoins(state);
116
+ this.#restoreFanNodes(state);
117
+ }
118
+ /**
119
+ * Validate that snapshot shape matches current graph structure.
120
+ */
121
+ #validateSnapshotShape(state) {
122
+ assert(this.connections.length === state.connections.length, 'Plan state mismatch: connections');
123
+ assert(this.joins.length === state.joins.length, 'Plan state mismatch: joins');
124
+ assert(this.fanOuts.length === state.fanOuts.length, 'Plan state mismatch: fanOuts');
125
+ assert(this.fanIns.length === state.fanIns.length, 'Plan state mismatch: fanIns');
126
+ assert(this.connections.length === state.connectionConstraints.length, 'Plan state mismatch: connectionConstraints');
127
+ }
128
+ /**
129
+ * Restore connection pinned flags, limits, and constraint maps.
130
+ */
131
+ #restoreConnections(state) {
132
+ for (let i = 0; i < this.connections.length; i++) {
133
+ this.connections[i].limit = state.connections[i].limit;
134
+ this.connections[i].restoreConstraints(state.connectionConstraints[i]);
135
+ }
136
+ }
137
+ /**
138
+ * Restore join types and pinned flags.
139
+ */
140
+ #restoreJoins(state) {
141
+ for (let i = 0; i < this.joins.length; i++) {
142
+ const join = this.joins[i];
143
+ const targetState = state.joins[i];
144
+ // Reset to initial state first
145
+ join.reset();
146
+ // Apply target state
147
+ if (targetState.type === 'flipped') {
148
+ join.flip();
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Restore FanOut and FanIn types.
154
+ */
155
+ #restoreFanNodes(state) {
156
+ for (let i = 0; i < this.fanOuts.length; i++) {
157
+ const fo = this.fanOuts[i];
158
+ const targetType = state.fanOuts[i].type;
159
+ if (targetType === 'UFO' && fo.type === 'FO') {
160
+ fo.convertToUFO();
161
+ }
162
+ }
163
+ for (let i = 0; i < this.fanIns.length; i++) {
164
+ const fi = this.fanIns[i];
165
+ const targetType = state.fanIns[i].type;
166
+ if (targetType === 'UFI' && fi.type === 'FI') {
167
+ fi.convertToUFI();
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * Main planning algorithm using exhaustive join flip enumeration.
173
+ *
174
+ * Enumerates all possible flip patterns for flippable joins (2^n for n flippable joins).
175
+ * Each pattern represents a different query execution plan. We evaluate the cost of each
176
+ * plan and select the one with the lowest cost.
177
+ *
178
+ * Connections are used only for cost estimation - the flip patterns determine the plan.
179
+ * FanOut/FanIn states (FO/UFO and FI/UFI) are automatically derived from join flip states.
180
+ *
181
+ * @param planDebugger - Optional debugger to receive structured events during planning
182
+ */
183
+ plan(planDebugger) {
184
+ // Get all flippable joins
185
+ const flippableJoins = this.joins.filter(j => j.isFlippable());
186
+ // Safety check: throw if too many flippable joins
187
+ if (flippableJoins.length > MAX_FLIPPABLE_JOINS) {
188
+ throw new Error(`Query has ${flippableJoins.length} EXISTS checks in a single RELATED call (or in the top level query), which would require ` +
189
+ `${2 ** flippableJoins.length} plan evaluations. This may be very slow. ` +
190
+ `Consider simplifying the query or increasing MAX_FLIPPABLE_JOINS (currently set to ${MAX_FLIPPABLE_JOINS}).`);
191
+ }
192
+ // Build FO→FI cache once to avoid redundant BFS traversals in each iteration
193
+ const fofiCache = buildFOFICache(this);
194
+ const numPatterns = 2 ** flippableJoins.length;
195
+ let bestCost = Infinity;
196
+ let bestPlan = undefined;
197
+ let bestAttemptNumber = -1;
198
+ // Enumerate all flip patterns
199
+ // try 7 and 32 (6 and 31)
200
+ const forcePattern = undefined; // 11 14
201
+ for (let pattern = 0; pattern < numPatterns; pattern++) {
202
+ if (forcePattern !== undefined && pattern !== forcePattern) {
203
+ continue;
204
+ }
205
+ // Reset to initial state
206
+ this.resetPlanningState();
207
+ if (planDebugger) {
208
+ planDebugger.log({
209
+ type: 'attempt-start',
210
+ attemptNumber: pattern,
211
+ totalAttempts: numPatterns,
212
+ });
213
+ }
214
+ try {
215
+ // Apply flip pattern (treat pattern as bitmask)
216
+ // Bit i set to 1 means flip join i
217
+ for (let i = 0; i < flippableJoins.length; i++) {
218
+ if (pattern & (1 << i)) {
219
+ flippableJoins[i].flip();
220
+ }
221
+ }
222
+ // Derive FO/UFO and FI/UFI states from join flip states
223
+ checkAndConvertFOFI(fofiCache);
224
+ // Propagate unlimiting for flipped joins
225
+ propagateUnlimitForFlippedJoins(this);
226
+ // Propagate constraints through the graph
227
+ this.propagateConstraints(planDebugger);
228
+ if (planDebugger) {
229
+ planDebugger.log({
230
+ type: 'constraints-propagated',
231
+ attemptNumber: pattern,
232
+ connectionConstraints: this.connections.map(c => ({
233
+ connection: c.name,
234
+ constraints: c.getConstraintsForDebug(),
235
+ constraintCosts: c.getConstraintCostsForDebug(),
236
+ })),
237
+ });
238
+ }
239
+ // Evaluate this plan
240
+ const totalCost = this.getTotalCost(planDebugger);
241
+ if (planDebugger) {
242
+ planDebugger.log({
243
+ type: 'plan-complete',
244
+ attemptNumber: pattern,
245
+ totalCost,
246
+ flipPattern: pattern, // Bitmask of which joins are flipped
247
+ // TODO: we'll need a different way to collect these
248
+ // nodeCosts: this.#collectNodeCosts(),
249
+ joinStates: this.joins.map(j => {
250
+ const info = j.getDebugInfo();
251
+ return {
252
+ join: info.name,
253
+ type: info.type,
254
+ };
255
+ }),
256
+ });
257
+ }
258
+ // Track best plan
259
+ if (totalCost < bestCost) {
260
+ bestCost = totalCost;
261
+ bestPlan = this.capturePlanningSnapshot();
262
+ bestAttemptNumber = pattern;
263
+ }
264
+ }
265
+ catch (e) {
266
+ // This flip pattern is invalid (shouldn't happen with proper isFlippable() checks)
267
+ if (planDebugger) {
268
+ planDebugger.log({
269
+ type: 'plan-failed',
270
+ attemptNumber: pattern,
271
+ reason: `Flip pattern ${pattern.toString(2)} failed: ${e instanceof Error ? e.message : String(e)}`,
272
+ });
273
+ }
274
+ continue;
275
+ }
276
+ }
277
+ // Restore best plan
278
+ if (bestPlan) {
279
+ this.restorePlanningSnapshot(bestPlan);
280
+ // Propagate constraints to ensure all derived state is consistent
281
+ this.propagateConstraints(planDebugger);
282
+ if (planDebugger) {
283
+ planDebugger.log({
284
+ type: 'best-plan-selected',
285
+ bestAttemptNumber,
286
+ totalCost: bestCost,
287
+ flipPattern: bestAttemptNumber, // The best attempt number is also the flip pattern
288
+ joinStates: this.joins.map(j => ({
289
+ join: j.getName(),
290
+ type: j.type,
291
+ })),
292
+ });
293
+ }
294
+ }
295
+ else {
296
+ // No valid plan found (all patterns failed)
297
+ throw new Error('No valid query plan found. This should not happen - check query structure.');
298
+ }
299
+ }
300
+ }
301
+ /**
302
+ * Build cache of FO→FI relationships and joins between them.
303
+ * Called once at the start of planning to avoid redundant BFS traversals.
304
+ */
305
+ function buildFOFICache(graph) {
306
+ const cache = new Map();
307
+ for (const fo of graph.fanOuts) {
308
+ const info = findFIAndJoins(fo);
309
+ cache.set(fo, info);
310
+ }
311
+ return cache;
312
+ }
313
+ /**
314
+ * Check if any joins downstream of a FanOut (before reaching FanIn) are flipped.
315
+ * If so, convert the FO to UFO and the FI to UFI.
316
+ *
317
+ * This must be called after join flipping and before propagateConstraints.
318
+ */
319
+ function checkAndConvertFOFI(fofiCache) {
320
+ for (const [fo, info] of fofiCache) {
321
+ const hasFlippedJoin = info.joinsBetween.some(j => j.type === 'flipped');
322
+ if (info.fi && hasFlippedJoin) {
323
+ fo.convertToUFO();
324
+ info.fi.convertToUFI();
325
+ }
326
+ }
327
+ }
328
+ /**
329
+ * Traverse from a FanOut through its outputs to find the corresponding FanIn
330
+ * and collect all joins along the way.
331
+ */
332
+ function findFIAndJoins(fo) {
333
+ const joinsBetween = [];
334
+ let fi = undefined;
335
+ // BFS through FO outputs to find FI and collect joins
336
+ const queue = [...fo.outputs];
337
+ const visited = new Set();
338
+ while (queue.length > 0) {
339
+ const node = must(queue.shift());
340
+ if (visited.has(node))
341
+ continue;
342
+ visited.add(node);
343
+ switch (node.kind) {
344
+ case 'join':
345
+ joinsBetween.push(node);
346
+ queue.push(node.output);
347
+ break;
348
+ case 'fan-out':
349
+ // Nested FO - traverse its outputs
350
+ queue.push(...node.outputs);
351
+ break;
352
+ case 'fan-in':
353
+ // Found the FI - this is the boundary, don't traverse further
354
+ fi = node;
355
+ break;
356
+ case 'connection':
357
+ // Shouldn't happen in a well-formed graph
358
+ break;
359
+ case 'terminus':
360
+ // Reached the end without finding FI
361
+ break;
362
+ }
363
+ }
364
+ return { fi, joinsBetween };
365
+ }
366
+ /**
367
+ * Propagate unlimiting to all flipped joins in the graph.
368
+ * When a join is flipped, its child becomes the outer loop and should no longer
369
+ * be limited by EXISTS semantics.
370
+ *
371
+ * This must be called after join flipping and before propagateConstraints.
372
+ */
373
+ function propagateUnlimitForFlippedJoins(graph) {
374
+ for (const join of graph.joins) {
375
+ if (join.type === 'flipped') {
376
+ join.propagateUnlimit();
377
+ }
378
+ }
379
+ }
380
+ //# sourceMappingURL=planner-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-graph.js","sourceRoot":"","sources":["../../../../../zql/src/planner/planner-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { type PlannerConstraint } from './planner-constraint.ts';
2
+ import type { PlanDebugger } from './planner-debug.ts';
3
+ import type { CostEstimate, JoinOrConnection, PlannerNode } from './planner-node.ts';
4
+ import type { PlannerTerminus } from './planner-terminus.ts';
5
+ /**
6
+ * Semi-join overhead multiplier.
7
+ *
8
+ * Semi-joins represent correlated subqueries (EXISTS checks) which have
9
+ * execution overhead compared to flipped joins, even when logical row counts
10
+ * are identical. This overhead comes from:
11
+ * - Need to execute a separate correlation check for each parent row
12
+ * - Cannot leverage combined constraint checking as effectively as flipped joins
13
+ *
14
+ * A multiplier of 1.5 means semi-joins are estimated to be ~50% more expensive
15
+ * than equivalent flipped joins, which empirically matches observed performance
16
+ * differences in production workloads (e.g., 1.7x in zbugs benchmarks).
17
+ *
18
+ * Flipped joins have a different overhead in that they become unlimited. This
19
+ * is accounted for when propagating unlimits rather than here.
20
+ */
21
+ /**
22
+ * Represents a join between two data streams (parent and child).
23
+ *
24
+ * # Dual-State Pattern
25
+ * Like all planner nodes, PlannerJoin separates:
26
+ * 1. IMMUTABLE STRUCTURE: Parent/child nodes, constraints, flippability
27
+ * 2. MUTABLE STATE: Join type (semi/flipped), pinned status
28
+ *
29
+ * # Join Flipping
30
+ * A join can be in two states:
31
+ * - 'semi': Parent is outer loop, child is inner (semi-join for EXISTS)
32
+ * - 'flipped': Child is outer loop, parent is inner
33
+ *
34
+ * Flipping is the key optimization: choosing which table scans first.
35
+ * NOT EXISTS joins cannot be flipped (#flippable = false).
36
+ *
37
+ * # Constraint Propagation
38
+ * - Semi-join: Sends childConstraint to child, forwards received constraints to parent
39
+ * - Flipped join: Sends undefined to child, merges parentConstraint with received to parent
40
+ * - Unpinned join: Only forwards constraints to parent (doesn't constrain child yet)
41
+ *
42
+ * # Lifecycle
43
+ * 1. Construct with immutable structure (parent, child, constraints, flippability)
44
+ * 2. Wire to output node during graph construction
45
+ * 3. Planning calls flipIfNeeded() based on connection selection order
46
+ * 4. pin() locks the join type once chosen
47
+ * 5. reset() clears mutable state (type → 'semi', pinned → false)
48
+ */
49
+ export declare class PlannerJoin {
50
+ #private;
51
+ readonly kind: "join";
52
+ readonly planId: number;
53
+ constructor(parent: Exclude<PlannerNode, PlannerTerminus>, child: Exclude<PlannerNode, PlannerTerminus>, parentConstraint: PlannerConstraint, childConstraint: PlannerConstraint, flippable: boolean, planId: number);
54
+ setOutput(node: PlannerNode): void;
55
+ get output(): PlannerNode;
56
+ closestJoinOrSource(): JoinOrConnection;
57
+ flipIfNeeded(input: PlannerNode): void;
58
+ flip(): void;
59
+ get type(): 'semi' | 'flipped';
60
+ isFlippable(): boolean;
61
+ /**
62
+ * Propagate unlimiting when this join is flipped.
63
+ * When a join is flipped:
64
+ * 1. Child becomes outer loop → produces all rows (unlimited)
65
+ * 2. Parent is fetched once per child row → effectively unlimited
66
+ *
67
+ * Example: If child produces 896 rows, parent is fetched 896 times.
68
+ * Even if each fetch returns 1 row, parent produces 896 total rows.
69
+ *
70
+ * Propagation rules:
71
+ * - Connection: call unlimit()
72
+ * - Semi-join: continue to parent (outer loop)
73
+ * - Flipped join: stop (already unlimited when it was flipped)
74
+ * - Fan-out/Fan-in: propagate to all inputs
75
+ */
76
+ propagateUnlimit(): void;
77
+ /**
78
+ * Called when a parent join is flipped and this join is part of its child subgraph.
79
+ * - Semi-join: continue propagation to parent (the outer loop)
80
+ * - Flipped join: stop propagation (already unlimited when it was flipped)
81
+ */
82
+ propagateUnlimitFromFlippedJoin(): void;
83
+ propagateConstraints(branchPattern: number[], constraint: PlannerConstraint | undefined, from?: PlannerNode, planDebugger?: PlanDebugger): void;
84
+ reset(): void;
85
+ estimateCost(
86
+ /**
87
+ * This argument is to deal with consecutive `andExists` statements.
88
+ * Each one will constrain how often a parent row passes all constraints.
89
+ * This means that we have to scan more and more parent rows the more
90
+ * constraints we add.
91
+ */
92
+ downstreamChildSelectivity: number,
93
+ /**
94
+ * branchPattern uniquely identifies OR branches in the graph.
95
+ * Each path through an OR will have unique constraints to apply to the source
96
+ * connection.
97
+ * branchPattern allows us to correlate a path through the graph
98
+ * to the constraints that should be applied for that path.
99
+ *
100
+ * Example graph:
101
+ * UFO
102
+ * / \
103
+ * J1 J2
104
+ * \ /
105
+ * UFI
106
+ *
107
+ * J1 and J2 are joins inside an OR (FO).
108
+ * branchPattern [0] = path through J1
109
+ * branchPattern [1] = path through J2
110
+ *
111
+ * If many ORs are nested, branchPattern will have multiple elements
112
+ * representing each level of OR.
113
+ *
114
+ * If no joins are flipped within the `OR`, then only a single
115
+ * branchPattern element will be needed, as FO represents all sub-joins
116
+ * as a single path.
117
+ */
118
+ branchPattern: number[], planDebugger?: PlanDebugger): CostEstimate;
119
+ /**
120
+ * Get a human-readable name for this join for debugging.
121
+ * Format: "parentName ⋈ childName"
122
+ */
123
+ getName(): string;
124
+ /**
125
+ * Get debug information about this join's state.
126
+ */
127
+ getDebugInfo(): {
128
+ name: string;
129
+ type: 'semi' | 'flipped';
130
+ planId: number;
131
+ };
132
+ }
133
+ export declare class UnflippableJoinError extends Error {
134
+ constructor(message: string);
135
+ }
136
+ //# sourceMappingURL=planner-join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-join.d.ts","sourceRoot":"","sources":["../../../../../zql/src/planner/planner-join.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAoC3D;;;;;;;;;;;;;;;GAeG;AAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,WAAW;;IACtB,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAOhC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAOtB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAC7C,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EAC5C,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,MAAM;IAWhB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIlC,IAAI,MAAM,IAAI,WAAW,CAGxB;IAED,mBAAmB,IAAI,gBAAgB;IAIvC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAWtC,IAAI,IAAI,IAAI;IAUZ,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IACD,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,IAAI,IAAI;IAMxB;;;;OAIG;IACH,+BAA+B,IAAI,IAAI;IAOvC,oBAAoB,CAClB,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,IAAI,CAAC,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,YAAY,GAC1B,IAAI;IAuDP,KAAK,IAAI,IAAI;IAIb,YAAY;IACV;;;;;OAKG;IACH,0BAA0B,EAAE,MAAM;IAClC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,CAAC,EAAE,YAAY,GAC1B,YAAY;IAgFf;;;OAGG;IACH,OAAO,IAAI,MAAM;IAMjB;;OAEG;IACH,YAAY,IAAI;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;KAChB;CAOF;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B"}