@rindle/normalized 0.10.0 → 0.10.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.
- package/dist/agg-table.d.ts +12 -1
- package/dist/agg-table.d.ts.map +1 -1
- package/dist/agg-table.js +55 -4
- package/dist/agg-table.js.map +1 -1
- package/package.json +3 -3
- package/src/agg-table.ts +53 -4
package/dist/agg-table.d.ts
CHANGED
|
@@ -14,6 +14,17 @@ export declare function aggTableSchemas(ast: Ast, isLocal?: (table: string) => b
|
|
|
14
14
|
* with a plain join + the same scalar projection (`aggregatePrecomputed`), never a `reduce`
|
|
15
15
|
* (which would recount the already-aggregated rows). Non-aggregate relationships recurse
|
|
16
16
|
* (a nested aggregate is rewritten too); the parent's frame is otherwise untouched, so the
|
|
17
|
-
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
17
|
+
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
18
|
+
*
|
|
19
|
+
* The `where` tree is rewritten the SAME way (`PARENT-AGGREGATE-FILTER-DESIGN.md` §3): a
|
|
20
|
+
* `having_count` parent gate lowers to an EXISTS whose subquery CLONES the display `count_as`
|
|
21
|
+
* and adds a post-aggregation `HAVING`. That is a relationship `count` like any other, so §3's
|
|
22
|
+
* premise — the client never recomputes a count, it lacks the child rows — applies to it too;
|
|
23
|
+
* left un-rewritten the gate would reduce over child rows the server (rightly) does not sync
|
|
24
|
+
* and every parent would fail it. `agg_table_name` hashes neither `alias` nor `having`, so the
|
|
25
|
+
* gate resolves to the SAME `__agg_*` table the display `count_as` already registers and syncs:
|
|
26
|
+
* the rewrite costs no extra table, no extra rows, and reads a count the server already sent.
|
|
27
|
+
* Its counterpart is the server pruning the gate's witnesses from the footprint (Rust
|
|
28
|
+
* `table_tree`) — that prune is only sound BECAUSE of this rewrite, so ship this side first. */
|
|
18
29
|
export declare function rewriteAggregates(ast: Ast, isLocal?: (table: string) => boolean): Ast;
|
|
19
30
|
//# sourceMappingURL=agg-table.d.ts.map
|
package/dist/agg-table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agg-table.d.ts","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,GAAG,EAEH,kBAAkB,EAGlB,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AA2CxB;;;;wEAIwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAM5D;AA0ID;;6FAE6F;AAC7F,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,qBAAqB,EAAE,CAIvG;AAoBD
|
|
1
|
+
{"version":3,"file":"agg-table.d.ts","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,GAAG,EAEH,kBAAkB,EAGlB,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AA2CxB;;;;wEAIwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAM5D;AA0ID;;6FAE6F;AAC7F,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,qBAAqB,EAAE,CAIvG;AAoBD;;;;;;;;;;;;;;;;iGAgBiG;AACjG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,GAAG,CAUrF"}
|
package/dist/agg-table.js
CHANGED
|
@@ -238,11 +238,56 @@ function collectAggTables(ast, out, isLocal) {
|
|
|
238
238
|
* with a plain join + the same scalar projection (`aggregatePrecomputed`), never a `reduce`
|
|
239
239
|
* (which would recount the already-aggregated rows). Non-aggregate relationships recurse
|
|
240
240
|
* (a nested aggregate is rewritten too); the parent's frame is otherwise untouched, so the
|
|
241
|
-
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
241
|
+
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
242
|
+
*
|
|
243
|
+
* The `where` tree is rewritten the SAME way (`PARENT-AGGREGATE-FILTER-DESIGN.md` §3): a
|
|
244
|
+
* `having_count` parent gate lowers to an EXISTS whose subquery CLONES the display `count_as`
|
|
245
|
+
* and adds a post-aggregation `HAVING`. That is a relationship `count` like any other, so §3's
|
|
246
|
+
* premise — the client never recomputes a count, it lacks the child rows — applies to it too;
|
|
247
|
+
* left un-rewritten the gate would reduce over child rows the server (rightly) does not sync
|
|
248
|
+
* and every parent would fail it. `agg_table_name` hashes neither `alias` nor `having`, so the
|
|
249
|
+
* gate resolves to the SAME `__agg_*` table the display `count_as` already registers and syncs:
|
|
250
|
+
* the rewrite costs no extra table, no extra rows, and reads a count the server already sent.
|
|
251
|
+
* Its counterpart is the server pruning the gate's witnesses from the footprint (Rust
|
|
252
|
+
* `table_tree`) — that prune is only sound BECAUSE of this rewrite, so ship this side first. */
|
|
242
253
|
export function rewriteAggregates(ast, isLocal) {
|
|
243
|
-
|
|
254
|
+
const where = ast.where && rewriteConditionAggregates(ast.where, isLocal);
|
|
255
|
+
const related = ast.related?.length
|
|
256
|
+
? ast.related.map((r) => rewriteRelationship(r, isLocal))
|
|
257
|
+
: ast.related;
|
|
258
|
+
if (where === ast.where && related === ast.related)
|
|
244
259
|
return ast;
|
|
245
|
-
|
|
260
|
+
const out = { ...ast };
|
|
261
|
+
if (where)
|
|
262
|
+
out.where = where;
|
|
263
|
+
if (related)
|
|
264
|
+
out.related = related;
|
|
265
|
+
return out;
|
|
266
|
+
}
|
|
267
|
+
/** The `where`-tree half of {@link rewriteAggregates}: an EXISTS gate whose subquery carries an
|
|
268
|
+
* aggregate (the `having_count` lowering) is rewritten by the very same
|
|
269
|
+
* {@link rewriteRelationship}; every other condition recurses structurally. Returns `cond`
|
|
270
|
+
* itself when nothing below it rewrote, so an untouched frame keeps object identity and the
|
|
271
|
+
* caller can skip the copy. */
|
|
272
|
+
function rewriteConditionAggregates(cond, isLocal) {
|
|
273
|
+
switch (cond.type) {
|
|
274
|
+
case "and":
|
|
275
|
+
case "or": {
|
|
276
|
+
let changed = false;
|
|
277
|
+
const conditions = cond.conditions.map((c) => {
|
|
278
|
+
const next = rewriteConditionAggregates(c, isLocal);
|
|
279
|
+
changed ||= next !== c;
|
|
280
|
+
return next;
|
|
281
|
+
});
|
|
282
|
+
return changed ? { ...cond, conditions } : cond;
|
|
283
|
+
}
|
|
284
|
+
case "correlatedSubquery": {
|
|
285
|
+
const related = rewriteRelationship(cond.related, isLocal);
|
|
286
|
+
return related === cond.related ? cond : { ...cond, related };
|
|
287
|
+
}
|
|
288
|
+
default:
|
|
289
|
+
return cond; // a `simple` leaf holds no subquery
|
|
290
|
+
}
|
|
246
291
|
}
|
|
247
292
|
function rewriteRelationship(csq, isLocal) {
|
|
248
293
|
// L1 (`201-LOCAL-ONLY-TABLES-DESIGN.md` §5.2): a count over a LOCAL child is left as the native
|
|
@@ -258,11 +303,17 @@ function rewriteRelationship(csq, isLocal) {
|
|
|
258
303
|
// child correlation fields, so `childField` still resolves against `[childField…, count]`.
|
|
259
304
|
if (csq.subquery.alias !== undefined)
|
|
260
305
|
subquery.alias = csq.subquery.alias;
|
|
306
|
+
// The post-aggregation `HAVING` SURVIVES the rewrite — it is the gate's whole predicate
|
|
307
|
+
// (`count > n`), and it addresses the reduce's output column, which is exactly what the
|
|
308
|
+
// synthetic row carries. A display `count_as` never has one, so this is inert there.
|
|
309
|
+
if (csq.subquery.having !== undefined)
|
|
310
|
+
subquery.having = csq.subquery.having;
|
|
261
311
|
const out = { correlation: csq.correlation, subquery };
|
|
262
312
|
if (csq.system !== undefined)
|
|
263
313
|
out.system = csq.system;
|
|
264
314
|
return out;
|
|
265
315
|
}
|
|
266
|
-
|
|
316
|
+
const subquery = rewriteAggregates(csq.subquery, isLocal);
|
|
317
|
+
return subquery === csq.subquery ? csq : { ...csq, subquery };
|
|
267
318
|
}
|
|
268
319
|
//# sourceMappingURL=agg-table.js.map
|
package/dist/agg-table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agg-table.js","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agg-table.js","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rindle/normalized",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"README.md"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@rindle/client": "0.10.
|
|
29
|
-
"@rindle/wasm": "0.10.
|
|
28
|
+
"@rindle/client": "0.10.1",
|
|
29
|
+
"@rindle/wasm": "0.10.1"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^22.10.0",
|
package/src/agg-table.ts
CHANGED
|
@@ -244,10 +244,54 @@ function collectAggTables(ast: Ast, out: NormalizedTableSchema[], isLocal?: (tab
|
|
|
244
244
|
* with a plain join + the same scalar projection (`aggregatePrecomputed`), never a `reduce`
|
|
245
245
|
* (which would recount the already-aggregated rows). Non-aggregate relationships recurse
|
|
246
246
|
* (a nested aggregate is rewritten too); the parent's frame is otherwise untouched, so the
|
|
247
|
-
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
247
|
+
* view-schema slot order is preserved. Returns a new AST; the input is not mutated.
|
|
248
|
+
*
|
|
249
|
+
* The `where` tree is rewritten the SAME way (`PARENT-AGGREGATE-FILTER-DESIGN.md` §3): a
|
|
250
|
+
* `having_count` parent gate lowers to an EXISTS whose subquery CLONES the display `count_as`
|
|
251
|
+
* and adds a post-aggregation `HAVING`. That is a relationship `count` like any other, so §3's
|
|
252
|
+
* premise — the client never recomputes a count, it lacks the child rows — applies to it too;
|
|
253
|
+
* left un-rewritten the gate would reduce over child rows the server (rightly) does not sync
|
|
254
|
+
* and every parent would fail it. `agg_table_name` hashes neither `alias` nor `having`, so the
|
|
255
|
+
* gate resolves to the SAME `__agg_*` table the display `count_as` already registers and syncs:
|
|
256
|
+
* the rewrite costs no extra table, no extra rows, and reads a count the server already sent.
|
|
257
|
+
* Its counterpart is the server pruning the gate's witnesses from the footprint (Rust
|
|
258
|
+
* `table_tree`) — that prune is only sound BECAUSE of this rewrite, so ship this side first. */
|
|
248
259
|
export function rewriteAggregates(ast: Ast, isLocal?: (table: string) => boolean): Ast {
|
|
249
|
-
|
|
250
|
-
|
|
260
|
+
const where = ast.where && rewriteConditionAggregates(ast.where, isLocal);
|
|
261
|
+
const related = ast.related?.length
|
|
262
|
+
? ast.related.map((r) => rewriteRelationship(r, isLocal))
|
|
263
|
+
: ast.related;
|
|
264
|
+
if (where === ast.where && related === ast.related) return ast;
|
|
265
|
+
const out: Ast = { ...ast };
|
|
266
|
+
if (where) out.where = where;
|
|
267
|
+
if (related) out.related = related;
|
|
268
|
+
return out;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/** The `where`-tree half of {@link rewriteAggregates}: an EXISTS gate whose subquery carries an
|
|
272
|
+
* aggregate (the `having_count` lowering) is rewritten by the very same
|
|
273
|
+
* {@link rewriteRelationship}; every other condition recurses structurally. Returns `cond`
|
|
274
|
+
* itself when nothing below it rewrote, so an untouched frame keeps object identity and the
|
|
275
|
+
* caller can skip the copy. */
|
|
276
|
+
function rewriteConditionAggregates(cond: Condition, isLocal?: (table: string) => boolean): Condition {
|
|
277
|
+
switch (cond.type) {
|
|
278
|
+
case "and":
|
|
279
|
+
case "or": {
|
|
280
|
+
let changed = false;
|
|
281
|
+
const conditions = cond.conditions.map((c) => {
|
|
282
|
+
const next = rewriteConditionAggregates(c, isLocal);
|
|
283
|
+
changed ||= next !== c;
|
|
284
|
+
return next;
|
|
285
|
+
});
|
|
286
|
+
return changed ? { ...cond, conditions } : cond;
|
|
287
|
+
}
|
|
288
|
+
case "correlatedSubquery": {
|
|
289
|
+
const related = rewriteRelationship(cond.related, isLocal);
|
|
290
|
+
return related === cond.related ? cond : { ...cond, related };
|
|
291
|
+
}
|
|
292
|
+
default:
|
|
293
|
+
return cond; // a `simple` leaf holds no subquery
|
|
294
|
+
}
|
|
251
295
|
}
|
|
252
296
|
|
|
253
297
|
function rewriteRelationship(csq: CorrelatedSubquery, isLocal?: (table: string) => boolean): CorrelatedSubquery {
|
|
@@ -263,9 +307,14 @@ function rewriteRelationship(csq: CorrelatedSubquery, isLocal?: (table: string)
|
|
|
263
307
|
// The correlation is unchanged: the synthetic table's group columns are named after the
|
|
264
308
|
// child correlation fields, so `childField` still resolves against `[childField…, count]`.
|
|
265
309
|
if (csq.subquery.alias !== undefined) subquery.alias = csq.subquery.alias;
|
|
310
|
+
// The post-aggregation `HAVING` SURVIVES the rewrite — it is the gate's whole predicate
|
|
311
|
+
// (`count > n`), and it addresses the reduce's output column, which is exactly what the
|
|
312
|
+
// synthetic row carries. A display `count_as` never has one, so this is inert there.
|
|
313
|
+
if (csq.subquery.having !== undefined) subquery.having = csq.subquery.having;
|
|
266
314
|
const out: CorrelatedSubquery = { correlation: csq.correlation, subquery };
|
|
267
315
|
if (csq.system !== undefined) out.system = csq.system;
|
|
268
316
|
return out;
|
|
269
317
|
}
|
|
270
|
-
|
|
318
|
+
const subquery = rewriteAggregates(csq.subquery, isLocal);
|
|
319
|
+
return subquery === csq.subquery ? csq : { ...csq, subquery };
|
|
271
320
|
}
|