@metaobjectsdev/codegen-ts 0.13.0-rc.1 → 0.13.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.
@@ -1 +1 @@
1
- {"version":3,"file":"extract-view-spec.d.ts","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EACoC,QAAQ,EACvD,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;CACrD;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,GACzC,MAAM,CAER;AAyUD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,cAAc,GAClB,QAAQ,CAcV"}
1
+ {"version":3,"file":"extract-view-spec.d.ts","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EACoC,QAAQ,EACvD,MAAM,gBAAgB,CAAC;AAgExB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;CACrD;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,GACzC,MAAM,CAER;AAgVD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,cAAc,GAClB,QAAQ,CAcV"}
@@ -1,6 +1,64 @@
1
1
  import { TYPE_FIELD, TYPE_IDENTITY, TYPE_ORIGIN, TYPE_RELATIONSHIP, MetaSource, ORIGIN_SUBTYPE_PASSTHROUGH, ORIGIN_SUBTYPE_AGGREGATE, ORIGIN_PASSTHROUGH_ATTR_FROM, ORIGIN_PASSTHROUGH_ATTR_VIA, ORIGIN_AGGREGATE_ATTR_AGG, ORIGIN_AGGREGATE_ATTR_OF, ORIGIN_AGGREGATE_ATTR_VIA, RELATIONSHIP_ATTR_OBJECT_REF, RELATIONSHIP_ATTR_CARDINALITY, CARDINALITY_ONE, FIELD_ATTR_COLUMN, findReferenceBetween, stripPackage, } from "@metaobjectsdev/metadata";
2
2
  import { MetaObject } from "@metaobjectsdev/metadata";
3
3
  import { columnNameFromField, viewNameFromProjection, } from "../naming.js";
4
+ /** The optional scoping-filter attr on origin.aggregate (`@filter`). Not part of the
5
+ * metamodel registry vocabulary (kept here, codegen-local, to avoid a cross-port
6
+ * metamodel change); the loader stores it as a plain attr and codegen desugars it. */
7
+ const ORIGIN_AGGREGATE_ATTR_FILTER = "filter";
8
+ /** Compose keys in the attr.filter shape. */
9
+ const FILTER_AND = "and";
10
+ const FILTER_OR = "or";
11
+ /**
12
+ * Desugar a single field clause to the canonical `{ op: value }` form (scalar→eq,
13
+ * array→in, null→isNull, object→as-is). Mirrors metadata's attr.filter desugar so an
14
+ * aggregate `@filter` works whether or not it was pre-desugared by the loader.
15
+ */
16
+ function desugarClause(raw) {
17
+ if (raw === null)
18
+ return { isNull: true };
19
+ if (Array.isArray(raw))
20
+ return { in: raw };
21
+ if (typeof raw === "object")
22
+ return raw;
23
+ return { eq: raw };
24
+ }
25
+ /**
26
+ * Resolve an aggregate `@filter` (`{ field: value | { op: value }, and?, or? }`) into
27
+ * a {@link ViewFilterClause} with column refs resolved to `alias.column` on the
28
+ * aggregated entity. Multiple fields at one level compose with AND. Unknown fields are
29
+ * skipped (defensive — the loader validates field existence elsewhere).
30
+ */
31
+ function resolveAggregateFilter(filter, entity, alias, ctx) {
32
+ if (typeof filter !== "object" || filter === null || Array.isArray(filter))
33
+ return undefined;
34
+ const clauses = [];
35
+ for (const [key, val] of Object.entries(filter)) {
36
+ if (key === FILTER_AND || key === FILTER_OR) {
37
+ const subs = (Array.isArray(val) ? val : [])
38
+ .map((s) => resolveAggregateFilter(s, entity, alias, ctx))
39
+ .filter((c) => c !== undefined);
40
+ if (subs.length > 0)
41
+ clauses.push({ kind: key === FILTER_AND ? "and" : "or", clauses: subs });
42
+ continue;
43
+ }
44
+ const field = entity.fields().find((f) => f.name === key);
45
+ if (!field)
46
+ continue;
47
+ const opObj = desugarClause(val);
48
+ const op = Object.keys(opObj)[0];
49
+ if (!op)
50
+ continue;
51
+ clauses.push({
52
+ kind: "cmp",
53
+ ref: `${alias}.${sourceColumnNameFor(field, ctx)}`,
54
+ op,
55
+ value: opObj[op],
56
+ });
57
+ }
58
+ if (clauses.length === 0)
59
+ return undefined;
60
+ return clauses.length === 1 ? clauses[0] : { kind: "and", clauses };
61
+ }
4
62
  // ---------------------------------------------------------------------------
5
63
  // Private helpers
6
64
  // ---------------------------------------------------------------------------
@@ -294,6 +352,12 @@ function buildSelectSpec(projection, base, joinTree, root, ctx) {
294
352
  const targetField = targetEntity.fields().find((f) => f.name === fieldName);
295
353
  if (!targetField)
296
354
  continue;
355
+ // Optional scoping filter — resolved against the aggregated entity (the @of
356
+ // entity, reached at `sourceAlias`), e.g. max(version) over only active rows.
357
+ const filterAttr = origin.ownAttr(ORIGIN_AGGREGATE_ATTR_FILTER);
358
+ const filter = filterAttr !== undefined
359
+ ? resolveAggregateFilter(filterAttr, targetEntity, sourceAlias, ctx)
360
+ : undefined;
297
361
  columns.push({
298
362
  kind: "aggregate",
299
363
  fieldName: field.name,
@@ -301,6 +365,7 @@ function buildSelectSpec(projection, base, joinTree, root, ctx) {
301
365
  agg,
302
366
  sourceAlias,
303
367
  sourceColumn: sourceColumnNameFor(targetField, ctx),
368
+ ...(filter !== undefined ? { filter } : {}),
304
369
  });
305
370
  }
306
371
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract-view-spec.js","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,GAEb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAgC,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AActB,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,GAAa,EAAE,IAAY;IACnD,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,UAAsB,EAAE,GAAmB;IAC3D,4EAA4E;IAC5E,uEAAuE;IACvE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE,CAClE,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,EAAE,YAAY,CAAC;IAC1C,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAC9C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,oBAA0C;IAE1C,OAAO,QAAQ,CAAC,UAAU,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAc,EAAE,IAAc;IACnD,MAAM,GAAG,GAAI,IAA8B,CAAC,QAAQ,CAAC;IACrD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CACpB,UAAsB,EACtB,IAAc;IAEd,oEAAoE;IACpE,yDAAyD;IACzD,uEAAuE;IACvE,4EAA4E;IAC5E,EAAE;IACF,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,gEAAgE;IAChE,8EAA8E;IAC9E,0EAA0E;IAC1E,4DAA4D;IAC5D,KAAK,MAAM,QAAQ,IAAI,UAAU;SAC9B,WAAW,EAAE;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;IAChD,MAAM,IAAI,KAAK,CACb,cAAc,UAAU,CAAC,IAAI,+CAA+C;QAC1E,qFAAqF;QACrF,8BAA8B,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAqB,EACrB,GAAmB;IAEnB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IACtD,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,MAAkB,EAAE,SAAiB,EAAE,GAAmB;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB,EAAE,IAAiB;IAC1D,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,SAAiB,CAAC;IACtB,GAAG,CAAC;QAAC,SAAS,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QAAC,CAAC,EAAE,CAAC;IAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IACnE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpB,OAAO,SAAS,CAAC;AACnB,CAAC;AAyBD,SAAS,aAAa,CACpB,UAAsB,EACtB,IAAgB,EAChB,IAAc,EACd,WAAwB,EACxB,SAAiB,EACjB,GAAmB;IAEnB,MAAM,QAAQ,GAAW,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,wBAAwB;gBACzD,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAwB;gBACnE,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAwB,CAAC;YACxE,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,+EAA+E;YAC/E,2EAA2E;YAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,MAAM,IAAI,GAAS,EAAE,CAAC;YACtB,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,GAAG;oBAAE,MAAM;gBAChB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAuB,CAAC;gBACnF,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;oBAAE,MAAM;gBAElC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAuB,CAAC;gBAClF,MAAM,WAAW,GAAmB,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBAElF,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAwB,EAAE,MAAM,CAAC,CAAC;gBACnE,IAAI,CAAC,GAAG;oBAAE,MAAM;gBAEhB,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,OAAO;oBAAE,MAAM;gBAEpB,MAAM,eAAe,GAAG,GAAG,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;gBAElF,MAAM,eAAe,GACnB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAE5D,0EAA0E;gBAC1E,oEAAoE;gBACpE,MAAM,QAAQ,GAAG,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpE,MAAM,QAAQ,GAAG,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;gBAEpE,IAAI,CAAC,IAAI,CAAC;oBACR,MAAM,EAAE,UAAU;oBAClB,YAAY,EAAE,OAAO;oBACrB,WAAW;oBACX,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC;oBAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC;oBACvD,eAAe;oBACf,YAAY,EAAE,YAAY,CAAC,UAAU,CAAC;iBACvC,CAAC,CAAC;gBACH,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAa,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,IAAc;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC;QACxB,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;YACpD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,IAAI;QACrB,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,SAAS,eAAe,CACtB,QAAkB,EAClB,UAAkB;IAElB,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;IAElE,SAAS,OAAO,CAAC,KAA0B;QACzC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,YAAY,KAAK,UAAU;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CACtB,UAAsB,EACtB,IAAgB,EAChB,QAAkB,EAClB,IAAc,EACd,GAAmB;IAEnB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,+EAA+E;IAE/E,gDAAgD;IAChD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,sEAAsE;YACtE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,UAAU,EAAE,KAAK;gBACjB,WAAW,EAAE,QAAQ,CAAC,SAAS;gBAC/B,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,0BAA0B,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAW,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,GAAG,CAAC;gBAAE,SAAS;YACzB,8EAA8E;YAC9E,sEAAsE;YACtE,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,IAAI,WAAW,KAAK,SAAS;gBAAE,SAAS;YACzD,sEAAsE;YACtE,sEAAsE;YACtE,4BAA4B;YAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC5E,IAAI,CAAC,WAAW;gBAAE,SAAS;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,UAAU,EAAE,KAAK;gBACjB,WAAW;gBACX,YAAY,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,wBAAwB,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAsB,CAAC;YAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAW,CAAC;YAC/D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;gBAAE,SAAS;YAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,MAAM,GAAG,CAAC;gBAAE,SAAS;YACzB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,IAAI,WAAW,KAAK,SAAS;gBAAE,SAAS;YACzD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YAC5E,IAAI,CAAC,WAAW;gBAAE,SAAS;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,UAAU,EAAE,KAAK;gBACjB,GAAG;gBACH,WAAW;gBACX,YAAY,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAsB,EACtB,IAAc,EACd,GAAmB;IAEnB,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAEzC,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;QACnC,QAAQ;QACR,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"extract-view-spec.js","sourceRoot":"","sources":["../../src/projection/extract-view-spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"view-ddl-emit.d.ts","sourceRoot":"","sources":["../../src/projection/view-ddl-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAoBzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA4CD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAoBxE"}
1
+ {"version":3,"file":"view-ddl-emit.d.ts","sourceRoot":"","sources":["../../src/projection/view-ddl-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAoB,MAAM,gBAAgB,CAAC;AAoB3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmFD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAoBxE"}
@@ -16,17 +16,61 @@ function quoteRef(ref) {
16
16
  return quoteIfNeeded(ref);
17
17
  return ref.slice(0, dot) + "." + quoteIfNeeded(ref.slice(dot + 1));
18
18
  }
19
- function renderColumn(c) {
19
+ /** SQL literal for a filter value, dialect-aware for booleans. */
20
+ function sqlLiteral(value, dialect) {
21
+ if (value === null || value === undefined)
22
+ return "NULL";
23
+ if (typeof value === "number")
24
+ return String(value);
25
+ if (typeof value === "boolean") {
26
+ return dialect === "sqlite" ? (value ? "1" : "0") : (value ? "TRUE" : "FALSE");
27
+ }
28
+ return `'${String(value).replace(/'/g, "''")}'`;
29
+ }
30
+ const FILTER_OP_SQL = {
31
+ eq: "=", ne: "<>", gt: ">", gte: ">=", lt: "<", lte: "<=", like: "LIKE",
32
+ };
33
+ /** Render a resolved {@link ViewFilterClause} to a SQL boolean expression. */
34
+ function renderFilterCond(clause, dialect) {
35
+ if (clause.kind === "and" || clause.kind === "or") {
36
+ const joined = clause.clauses.map((c) => renderFilterCond(c, dialect)).join(clause.kind === "and" ? " AND " : " OR ");
37
+ return `(${joined})`;
38
+ }
39
+ const ref = quoteRef(clause.ref);
40
+ if (clause.op === "isNull")
41
+ return clause.value === false ? `${ref} IS NOT NULL` : `${ref} IS NULL`;
42
+ if (clause.op === "in") {
43
+ const vals = (Array.isArray(clause.value) ? clause.value : [clause.value]).map((v) => sqlLiteral(v, dialect));
44
+ return `${ref} IN (${vals.join(", ")})`;
45
+ }
46
+ const op = FILTER_OP_SQL[clause.op];
47
+ if (!op)
48
+ throw new Error(`view-ddl-emit: unsupported aggregate filter operator "${clause.op}".`);
49
+ return `${ref} ${op} ${sqlLiteral(clause.value, dialect)}`;
50
+ }
51
+ function renderColumn(c, dialect) {
20
52
  const src = `${c.sourceAlias}.${quoteIfNeeded(c.sourceColumn)}`;
21
53
  const alias = quoteIfNeeded(c.dbColAlias);
22
54
  if (c.kind === "passthrough") {
23
55
  return `${src} AS ${alias}`;
24
56
  }
25
57
  // aggregate — use DISTINCT for count() over joined PKs to avoid join inflation.
58
+ // A scoping @filter renders as postgres `FILTER (WHERE …)`; sqlite (no aggregate
59
+ // FILTER pre-3.30) uses the portable `CASE WHEN … END` argument form.
60
+ const cond = c.filter ? renderFilterCond(c.filter, dialect) : undefined;
26
61
  if (c.agg === "count") {
62
+ if (cond && dialect === "sqlite")
63
+ return `COUNT(DISTINCT CASE WHEN ${cond} THEN ${src} END) AS ${alias}`;
64
+ if (cond)
65
+ return `COUNT(DISTINCT ${src}) FILTER (WHERE ${cond}) AS ${alias}`;
27
66
  return `COUNT(DISTINCT ${src}) AS ${alias}`;
28
67
  }
29
- return `${c.agg.toUpperCase()}(${src}) AS ${alias}`;
68
+ const fn = c.agg.toUpperCase();
69
+ if (cond && dialect === "sqlite")
70
+ return `${fn}(CASE WHEN ${cond} THEN ${src} END) AS ${alias}`;
71
+ if (cond)
72
+ return `${fn}(${src}) FILTER (WHERE ${cond}) AS ${alias}`;
73
+ return `${fn}(${src}) AS ${alias}`;
30
74
  }
31
75
  function renderJoin(node, parentAlias, options) {
32
76
  const table = options.joinTables[node.targetEntity];
@@ -52,7 +96,7 @@ function renderJoin(node, parentAlias, options) {
52
96
  }
53
97
  export function emitViewDdl(spec, options) {
54
98
  const cols = spec.selectSpec.columns
55
- .map((c) => " " + renderColumn(c))
99
+ .map((c) => " " + renderColumn(c, options.dialect))
56
100
  .join(",\n");
57
101
  const fromClause = ` FROM ${quoteIfNeeded(options.baseTableName)} ${spec.joinTree.baseAlias}`;
58
102
  const joinsClause = spec.joinTree.joins
@@ -1 +1 @@
1
- {"version":3,"file":"view-ddl-emit.js","sourceRoot":"","sources":["../../src/projection/view-ddl-emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-ddl-emit.js","sourceRoot":"","sources":["../../src/projection/view-ddl-emit.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,23 @@ export interface JoinTree {
27
27
  /** Joined entities (could be empty for a flat projection). */
28
28
  readonly joins: readonly JoinNode[];
29
29
  }
30
+ /**
31
+ * A resolved filter clause scoping an aggregate to a subset of related rows. Column
32
+ * refs are already resolved to `alias.column` (naming-strategy applied), so the
33
+ * emitter is a pure renderer. Mirrors the canonical attr.filter shape.
34
+ */
35
+ export type ViewFilterClause = {
36
+ readonly kind: "cmp";
37
+ readonly ref: string;
38
+ readonly op: string;
39
+ readonly value: unknown;
40
+ } | {
41
+ readonly kind: "and";
42
+ readonly clauses: readonly ViewFilterClause[];
43
+ } | {
44
+ readonly kind: "or";
45
+ readonly clauses: readonly ViewFilterClause[];
46
+ };
30
47
  /** One column of the SELECT list. */
31
48
  export type SelectColumn = {
32
49
  readonly kind: "passthrough";
@@ -41,6 +58,8 @@ export type SelectColumn = {
41
58
  readonly agg: AggregateFunction;
42
59
  readonly sourceAlias: string;
43
60
  readonly sourceColumn: string;
61
+ /** Optional scoping filter (origin.aggregate @filter) → SQL aggregate FILTER (WHERE …). */
62
+ readonly filter?: ViewFilterClause;
44
63
  };
45
64
  export interface SelectSpec {
46
65
  readonly columns: readonly SelectColumn[];
@@ -1 +1 @@
1
- {"version":3,"file":"view-spec.d.ts","sourceRoot":"","sources":["../../src/projection/view-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IACrC,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,eAAe,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9C,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;CACxC;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC;AAED,qCAAqC;AACrC,MAAM,MAAM,YAAY,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC"}
1
+ {"version":3,"file":"view-spec.d.ts","sourceRoot":"","sources":["../../src/projection/view-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IACrC,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,eAAe,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9C,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;CACxC;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5F;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,CAAC;AAE3E,qCAAqC;AACrC,MAAM,MAAM,YAAY,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/codegen-ts",
3
- "version": "0.13.0-rc.1",
3
+ "version": "0.13.1",
4
4
  "description": "TypeScript codegen engine for MetaObjects — emits Drizzle, Zod, and Fastify artifacts.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -111,8 +111,8 @@
111
111
  "access": "public"
112
112
  },
113
113
  "dependencies": {
114
- "@metaobjectsdev/metadata": "0.13.0-rc.1",
115
- "@metaobjectsdev/render": "0.13.0-rc.1",
114
+ "@metaobjectsdev/metadata": "0.13.1",
115
+ "@metaobjectsdev/render": "0.13.1",
116
116
  "@biomejs/js-api": "^0.7.0",
117
117
  "@biomejs/wasm-nodejs": "^1.9.4",
118
118
  "ts-poet": "^6.10.0"
@@ -123,9 +123,9 @@
123
123
  },
124
124
  "devDependencies": {
125
125
  "@biomejs/biome": "^1.9.0",
126
- "@metaobjectsdev/codegen-ts-react": "0.13.0-rc.1",
127
- "@metaobjectsdev/migrate-ts": "0.13.0-rc.1",
128
- "@metaobjectsdev/runtime-ts": "0.13.0-rc.1",
126
+ "@metaobjectsdev/codegen-ts-react": "0.13.1",
127
+ "@metaobjectsdev/migrate-ts": "0.13.1",
128
+ "@metaobjectsdev/runtime-ts": "0.13.1",
129
129
  "bun-types": "latest",
130
130
  "drizzle-orm": "^0.36.0",
131
131
  "hono": "^4.6.0",
@@ -26,9 +26,67 @@ import {
26
26
  } from "../naming.js";
27
27
  import type { ColumnNamingStrategy } from "../metaobjects-config.js";
28
28
  import type {
29
- JoinNode, JoinTree, SelectColumn, SelectSpec, ViewSpec,
29
+ JoinNode, JoinTree, SelectColumn, SelectSpec, ViewSpec, ViewFilterClause,
30
30
  } from "./view-spec.js";
31
31
 
32
+ /** The optional scoping-filter attr on origin.aggregate (`@filter`). Not part of the
33
+ * metamodel registry vocabulary (kept here, codegen-local, to avoid a cross-port
34
+ * metamodel change); the loader stores it as a plain attr and codegen desugars it. */
35
+ const ORIGIN_AGGREGATE_ATTR_FILTER = "filter";
36
+ /** Compose keys in the attr.filter shape. */
37
+ const FILTER_AND = "and";
38
+ const FILTER_OR = "or";
39
+
40
+ /**
41
+ * Desugar a single field clause to the canonical `{ op: value }` form (scalar→eq,
42
+ * array→in, null→isNull, object→as-is). Mirrors metadata's attr.filter desugar so an
43
+ * aggregate `@filter` works whether or not it was pre-desugared by the loader.
44
+ */
45
+ function desugarClause(raw: unknown): Record<string, unknown> {
46
+ if (raw === null) return { isNull: true };
47
+ if (Array.isArray(raw)) return { in: raw };
48
+ if (typeof raw === "object") return raw as Record<string, unknown>;
49
+ return { eq: raw };
50
+ }
51
+
52
+ /**
53
+ * Resolve an aggregate `@filter` (`{ field: value | { op: value }, and?, or? }`) into
54
+ * a {@link ViewFilterClause} with column refs resolved to `alias.column` on the
55
+ * aggregated entity. Multiple fields at one level compose with AND. Unknown fields are
56
+ * skipped (defensive — the loader validates field existence elsewhere).
57
+ */
58
+ function resolveAggregateFilter(
59
+ filter: unknown,
60
+ entity: MetaObject,
61
+ alias: string,
62
+ ctx: ExtractContext,
63
+ ): ViewFilterClause | undefined {
64
+ if (typeof filter !== "object" || filter === null || Array.isArray(filter)) return undefined;
65
+ const clauses: ViewFilterClause[] = [];
66
+ for (const [key, val] of Object.entries(filter as Record<string, unknown>)) {
67
+ if (key === FILTER_AND || key === FILTER_OR) {
68
+ const subs = (Array.isArray(val) ? val : [])
69
+ .map((s) => resolveAggregateFilter(s, entity, alias, ctx))
70
+ .filter((c): c is ViewFilterClause => c !== undefined);
71
+ if (subs.length > 0) clauses.push({ kind: key === FILTER_AND ? "and" : "or", clauses: subs });
72
+ continue;
73
+ }
74
+ const field = entity.fields().find((f) => f.name === key);
75
+ if (!field) continue;
76
+ const opObj = desugarClause(val);
77
+ const op = Object.keys(opObj)[0];
78
+ if (!op) continue;
79
+ clauses.push({
80
+ kind: "cmp",
81
+ ref: `${alias}.${sourceColumnNameFor(field, ctx)}`,
82
+ op,
83
+ value: opObj[op],
84
+ });
85
+ }
86
+ if (clauses.length === 0) return undefined;
87
+ return clauses.length === 1 ? clauses[0]! : { kind: "and", clauses };
88
+ }
89
+
32
90
  // ---------------------------------------------------------------------------
33
91
  // Public context type
34
92
  // ---------------------------------------------------------------------------
@@ -382,6 +440,12 @@ function buildSelectSpec(
382
440
  if (!targetEntity || sourceAlias === undefined) continue;
383
441
  const targetField = targetEntity.fields().find((f) => f.name === fieldName);
384
442
  if (!targetField) continue;
443
+ // Optional scoping filter — resolved against the aggregated entity (the @of
444
+ // entity, reached at `sourceAlias`), e.g. max(version) over only active rows.
445
+ const filterAttr = origin.ownAttr(ORIGIN_AGGREGATE_ATTR_FILTER);
446
+ const filter = filterAttr !== undefined
447
+ ? resolveAggregateFilter(filterAttr, targetEntity, sourceAlias, ctx)
448
+ : undefined;
385
449
  columns.push({
386
450
  kind: "aggregate",
387
451
  fieldName: field.name,
@@ -389,6 +453,7 @@ function buildSelectSpec(
389
453
  agg,
390
454
  sourceAlias,
391
455
  sourceColumn: sourceColumnNameFor(targetField, ctx),
456
+ ...(filter !== undefined ? { filter } : {}),
392
457
  });
393
458
  }
394
459
  }
@@ -1,4 +1,4 @@
1
- import type { JoinNode, ViewSpec } from "./view-spec.js";
1
+ import type { JoinNode, ViewSpec, ViewFilterClause } from "./view-spec.js";
2
2
 
3
3
  // Quote an identifier only when it isn't a plain lowercase snake identifier —
4
4
  // exactly postgres's own rule. This keeps snake_case output unquoted (the common
@@ -32,17 +32,56 @@ export interface EmitOptions {
32
32
  readonly bodyOnly?: boolean;
33
33
  }
34
34
 
35
- function renderColumn(c: import("./view-spec.js").SelectColumn): string {
35
+ /** SQL literal for a filter value, dialect-aware for booleans. */
36
+ function sqlLiteral(value: unknown, dialect: EmitOptions["dialect"]): string {
37
+ if (value === null || value === undefined) return "NULL";
38
+ if (typeof value === "number") return String(value);
39
+ if (typeof value === "boolean") {
40
+ return dialect === "sqlite" ? (value ? "1" : "0") : (value ? "TRUE" : "FALSE");
41
+ }
42
+ return `'${String(value).replace(/'/g, "''")}'`;
43
+ }
44
+
45
+ const FILTER_OP_SQL: Readonly<Record<string, string>> = {
46
+ eq: "=", ne: "<>", gt: ">", gte: ">=", lt: "<", lte: "<=", like: "LIKE",
47
+ };
48
+
49
+ /** Render a resolved {@link ViewFilterClause} to a SQL boolean expression. */
50
+ function renderFilterCond(clause: ViewFilterClause, dialect: EmitOptions["dialect"]): string {
51
+ if (clause.kind === "and" || clause.kind === "or") {
52
+ const joined = clause.clauses.map((c) => renderFilterCond(c, dialect)).join(clause.kind === "and" ? " AND " : " OR ");
53
+ return `(${joined})`;
54
+ }
55
+ const ref = quoteRef(clause.ref);
56
+ if (clause.op === "isNull") return clause.value === false ? `${ref} IS NOT NULL` : `${ref} IS NULL`;
57
+ if (clause.op === "in") {
58
+ const vals = (Array.isArray(clause.value) ? clause.value : [clause.value]).map((v) => sqlLiteral(v, dialect));
59
+ return `${ref} IN (${vals.join(", ")})`;
60
+ }
61
+ const op = FILTER_OP_SQL[clause.op];
62
+ if (!op) throw new Error(`view-ddl-emit: unsupported aggregate filter operator "${clause.op}".`);
63
+ return `${ref} ${op} ${sqlLiteral(clause.value, dialect)}`;
64
+ }
65
+
66
+ function renderColumn(c: import("./view-spec.js").SelectColumn, dialect: EmitOptions["dialect"]): string {
36
67
  const src = `${c.sourceAlias}.${quoteIfNeeded(c.sourceColumn)}`;
37
68
  const alias = quoteIfNeeded(c.dbColAlias);
38
69
  if (c.kind === "passthrough") {
39
70
  return `${src} AS ${alias}`;
40
71
  }
41
72
  // aggregate — use DISTINCT for count() over joined PKs to avoid join inflation.
73
+ // A scoping @filter renders as postgres `FILTER (WHERE …)`; sqlite (no aggregate
74
+ // FILTER pre-3.30) uses the portable `CASE WHEN … END` argument form.
75
+ const cond = c.filter ? renderFilterCond(c.filter, dialect) : undefined;
42
76
  if (c.agg === "count") {
77
+ if (cond && dialect === "sqlite") return `COUNT(DISTINCT CASE WHEN ${cond} THEN ${src} END) AS ${alias}`;
78
+ if (cond) return `COUNT(DISTINCT ${src}) FILTER (WHERE ${cond}) AS ${alias}`;
43
79
  return `COUNT(DISTINCT ${src}) AS ${alias}`;
44
80
  }
45
- return `${c.agg.toUpperCase()}(${src}) AS ${alias}`;
81
+ const fn = c.agg.toUpperCase();
82
+ if (cond && dialect === "sqlite") return `${fn}(CASE WHEN ${cond} THEN ${src} END) AS ${alias}`;
83
+ if (cond) return `${fn}(${src}) FILTER (WHERE ${cond}) AS ${alias}`;
84
+ return `${fn}(${src}) AS ${alias}`;
46
85
  }
47
86
 
48
87
  function renderJoin(
@@ -76,7 +115,7 @@ function renderJoin(
76
115
 
77
116
  export function emitViewDdl(spec: ViewSpec, options: EmitOptions): string {
78
117
  const cols = spec.selectSpec.columns
79
- .map((c) => " " + renderColumn(c))
118
+ .map((c) => " " + renderColumn(c, options.dialect))
80
119
  .join(",\n");
81
120
  const fromClause = ` FROM ${quoteIfNeeded(options.baseTableName)} ${spec.joinTree.baseAlias}`;
82
121
  const joinsClause = spec.joinTree.joins
@@ -30,6 +30,16 @@ export interface JoinTree {
30
30
  readonly joins: readonly JoinNode[];
31
31
  }
32
32
 
33
+ /**
34
+ * A resolved filter clause scoping an aggregate to a subset of related rows. Column
35
+ * refs are already resolved to `alias.column` (naming-strategy applied), so the
36
+ * emitter is a pure renderer. Mirrors the canonical attr.filter shape.
37
+ */
38
+ export type ViewFilterClause =
39
+ | { readonly kind: "cmp"; readonly ref: string; readonly op: string; readonly value: unknown }
40
+ | { readonly kind: "and"; readonly clauses: readonly ViewFilterClause[] }
41
+ | { readonly kind: "or"; readonly clauses: readonly ViewFilterClause[] };
42
+
33
43
  /** One column of the SELECT list. */
34
44
  export type SelectColumn =
35
45
  | {
@@ -46,6 +56,8 @@ export type SelectColumn =
46
56
  readonly agg: AggregateFunction;
47
57
  readonly sourceAlias: string;
48
58
  readonly sourceColumn: string;
59
+ /** Optional scoping filter (origin.aggregate @filter) → SQL aggregate FILTER (WHERE …). */
60
+ readonly filter?: ViewFilterClause;
49
61
  };
50
62
 
51
63
  export interface SelectSpec {