@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.
- package/dist/projection/extract-view-spec.d.ts.map +1 -1
- package/dist/projection/extract-view-spec.js +65 -0
- package/dist/projection/extract-view-spec.js.map +1 -1
- package/dist/projection/view-ddl-emit.d.ts.map +1 -1
- package/dist/projection/view-ddl-emit.js +47 -3
- package/dist/projection/view-ddl-emit.js.map +1 -1
- package/dist/projection/view-spec.d.ts +19 -0
- package/dist/projection/view-spec.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/projection/extract-view-spec.ts +66 -1
- package/src/projection/view-ddl-emit.ts +43 -4
- package/src/projection/view-spec.ts +12 -0
|
@@ -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;
|
|
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":"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"}
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAEA,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,0DAA0D;AAC1D,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,oFAAoF;AACpF,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAgBD,SAAS,YAAY,CAAC,CAAwC;
|
|
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;
|
|
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.
|
|
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.
|
|
115
|
-
"@metaobjectsdev/render": "0.13.
|
|
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.
|
|
127
|
-
"@metaobjectsdev/migrate-ts": "0.13.
|
|
128
|
-
"@metaobjectsdev/runtime-ts": "0.13.
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|