@jarenjs/db 0.49.2 → 0.66.1

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 (110) hide show
  1. package/ARCHITECTURE.md +420 -71
  2. package/README.md +711 -79
  3. package/docs/HOSTS.md +269 -0
  4. package/docs/JOBS-FORMAT.md +309 -45
  5. package/docs/LIVE-FORMAT.md +156 -19
  6. package/docs/MIGRATION-FORMAT.md +247 -40
  7. package/docs/MODEL-FORMAT.md +968 -86
  8. package/package.json +21 -8
  9. package/schemas/jaren-migration.draft-07.schema.json +73 -0
  10. package/schemas/jaren-migration.schema.json +73 -0
  11. package/schemas/jaren-model.draft-07.schema.json +224 -162
  12. package/schemas/jaren-model.schema.json +224 -162
  13. package/src/algebra.js +227 -9
  14. package/src/backup.js +161 -0
  15. package/src/cancellation.js +48 -0
  16. package/src/capture.js +255 -44
  17. package/src/cli.js +337 -50
  18. package/src/cursor.js +411 -0
  19. package/src/dag-job.js +154 -21
  20. package/src/ddl.js +125 -11
  21. package/src/dialect.js +267 -112
  22. package/src/dialects/expression-read.js +158 -0
  23. package/src/dialects/postgres.js +618 -0
  24. package/src/dialects/rtree-ddl.js +129 -0
  25. package/src/dialects/sqlite.js +245 -12
  26. package/src/document-files.js +311 -0
  27. package/src/document-steps.js +422 -0
  28. package/src/documents.js +335 -0
  29. package/src/driver.js +503 -69
  30. package/src/drivers/bun.js +37 -1
  31. package/src/drivers/indexeddb-snapshot.js +149 -0
  32. package/src/drivers/node-pool.js +11 -0
  33. package/src/drivers/node-worker-endpoint.js +105 -0
  34. package/src/drivers/node-worker.js +204 -0
  35. package/src/drivers/node.js +41 -7
  36. package/src/drivers/postgres.js +331 -0
  37. package/src/drivers/wasm-oo1.js +97 -0
  38. package/src/drivers/wasm-session.js +67 -0
  39. package/src/drivers/wasm.js +18 -83
  40. package/src/drivers/worker-pool.js +183 -0
  41. package/src/drivers/worker-protocol.js +79 -0
  42. package/src/drivers/worker-queue.js +60 -0
  43. package/src/emit-model.js +14 -0
  44. package/src/emit.js +349 -51
  45. package/src/entity.js +102 -59
  46. package/src/errors.js +430 -2
  47. package/src/expression.js +284 -0
  48. package/src/graph.js +64 -8
  49. package/src/index.js +48 -19
  50. package/src/introspect.js +583 -0
  51. package/src/jobs.js +870 -99
  52. package/src/json-bytes.js +58 -0
  53. package/src/live-time.js +12 -3
  54. package/src/live.js +11 -1
  55. package/src/maintenance.js +175 -0
  56. package/src/migrate.js +606 -333
  57. package/src/model.js +241 -8
  58. package/src/plan.js +1238 -160
  59. package/src/pragmas.js +314 -0
  60. package/src/profile.js +151 -3
  61. package/src/query.js +1748 -312
  62. package/src/residual.js +17 -0
  63. package/src/series.js +12 -4
  64. package/src/store.js +1672 -276
  65. package/src/tracker.js +367 -68
  66. package/src/udf.js +88 -7
  67. package/types/index.d.ts +1246 -32
  68. package/types/node-pool.d.ts +28 -0
  69. package/types/node-worker.d.ts +54 -0
  70. package/types/node.d.ts +72 -3
  71. package/types/postgres.d.ts +46 -0
  72. package/types/typed.d.ts +81 -3
  73. package/types/wasm.d.ts +21 -0
  74. package/dist/types/algebra.d.ts +0 -230
  75. package/dist/types/app.d.ts +0 -49
  76. package/dist/types/capture.d.ts +0 -85
  77. package/dist/types/cli.d.ts +0 -2
  78. package/dist/types/dag-job.d.ts +0 -40
  79. package/dist/types/ddl.d.ts +0 -229
  80. package/dist/types/derive.d.ts +0 -250
  81. package/dist/types/dialect.d.ts +0 -154
  82. package/dist/types/dialects/sqlite.d.ts +0 -9
  83. package/dist/types/driver.d.ts +0 -110
  84. package/dist/types/drivers/bun.d.ts +0 -47
  85. package/dist/types/drivers/node.d.ts +0 -37
  86. package/dist/types/drivers/wasm.d.ts +0 -65
  87. package/dist/types/emit-model.d.ts +0 -44
  88. package/dist/types/emit.d.ts +0 -75
  89. package/dist/types/entity.d.ts +0 -23
  90. package/dist/types/errors.d.ts +0 -170
  91. package/dist/types/graph.d.ts +0 -28
  92. package/dist/types/index.d.ts +0 -37
  93. package/dist/types/jobs.d.ts +0 -140
  94. package/dist/types/knn.d.ts +0 -69
  95. package/dist/types/live-time.d.ts +0 -141
  96. package/dist/types/live.d.ts +0 -64
  97. package/dist/types/migrate.d.ts +0 -170
  98. package/dist/types/model.d.ts +0 -36
  99. package/dist/types/patch-sql.d.ts +0 -37
  100. package/dist/types/plan.d.ts +0 -142
  101. package/dist/types/profile.d.ts +0 -80
  102. package/dist/types/query.d.ts +0 -112
  103. package/dist/types/residual.d.ts +0 -64
  104. package/dist/types/series.d.ts +0 -227
  105. package/dist/types/store.d.ts +0 -60
  106. package/dist/types/tracker.d.ts +0 -43
  107. package/dist/types/typed.d.ts +0 -15
  108. package/dist/types/types.d.ts +0 -26
  109. package/dist/types/udf.d.ts +0 -75
  110. package/dist/types/window.d.ts +0 -52
package/src/residual.js CHANGED
@@ -72,6 +72,23 @@ export function compileSetResidual(document, limits, operators, zoneProvider) {
72
72
  return (candidates, externals) => compiled(candidates, externals);
73
73
  }
74
74
 
75
+ /**
76
+ * Compile the whole document for a CURSOR's barrier: `[document]` packs
77
+ * the result sequence into one unambiguous item array, so a cursor
78
+ * hands out one item per pull whatever the engine's singleton rule
79
+ * would have folded — the same packing the row residual uses per row,
80
+ * applied to the whole set.
81
+ * @param {any} document
82
+ * @param {any} [limits]
83
+ * @param {{ functions?: any, extensions?: any } | null} [operators]
84
+ * @param {any} [zoneProvider]
85
+ * @returns {(candidates: any[], externals: any) => any[]} the items
86
+ */
87
+ export function compilePackedResidual(document, limits, operators, zoneProvider) {
88
+ const compiled = compileJsonQuery([document], residualOptions(limits, operators, zoneProvider));
89
+ return (candidates, externals) => /** @type {any[]} */ (compiled(candidates, externals));
90
+ }
91
+
75
92
  /**
76
93
  * Compile the per-row projection for row-mode evaluation.
77
94
  * @param {any} rowDocument - The planner's complete one-row document
package/src/series.js CHANGED
@@ -187,6 +187,11 @@ export function seekingIndexFor(shape, column, facts, minColumns = 1) {
187
187
  * to: any, toOp: string | null }> }}
188
188
  */
189
189
  export function filterFacts(filter) {
190
+ // one comparison, two spellings: the guarded form over a member, and
191
+ // the bare one over a declared column that a refinement pushes. A
192
+ // seek reads the same column either way, so the facts must too
193
+ const columnOf = (pred) => (pred.p === 'colCmp' ? pred.column
194
+ : pred.p === 'cmp' ? pred.ref.column : null);
190
195
  /** @type {Set<string>} */
191
196
  const pinned = new Set();
192
197
  /** @type {Map<string, any>} */
@@ -212,14 +217,15 @@ export function filterFacts(filter) {
212
217
  if (pred.p === 'or') {
213
218
  const columns = new Set();
214
219
  for (const item of pred.items) {
215
- if (item.p !== 'cmp' || item.op !== 'eq' || item.ref.column === null) return;
216
- columns.add(item.ref.column);
220
+ const named = columnOf(item);
221
+ if (named === null || item.op !== 'eq') return;
222
+ columns.add(named);
217
223
  }
218
224
  if (columns.size === 1) pinned.add([...columns][0]);
219
225
  return;
220
226
  }
221
- if (pred.p !== 'cmp' || pred.ref.column === null) return;
222
- const column = pred.ref.column;
227
+ const column = columnOf(pred);
228
+ if (column === null) return;
223
229
  const operand = 'lit' in pred.operand ? pred.operand.lit : undefined;
224
230
  if (pred.op === 'eq') {
225
231
  pinned.add(column);
@@ -341,6 +347,8 @@ export function seriesRecord(facts) {
341
347
  to: range.to ?? null,
342
348
  toOp: range.toOp ?? null,
343
349
  },
350
+ seeks: (facts.seeks ?? []).map((s) =>
351
+ ({ side: s.side, column: s.column, probe: s.probe, op: s.op })),
344
352
  ladder: facts.ladder ?? null,
345
353
  aggregates: [...(facts.aggregates ?? [])],
346
354
  refinement: facts.refinement ?? null,