@metaobjectsdev/migrate-ts 0.9.0 → 0.11.0-rc.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,4 +1,4 @@
1
- import { VALIDATOR_SUBTYPE_NUMERIC, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, VALIDATOR_ATTR_PATTERN, TYPE_OBJECT, MetaSource, IDENTITY_ATTR_GENERATION, IDENTITY_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_UNIQUE, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_CLASS, FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_ENUM, FIELD_ATTR_VALUES, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_STORAGE, FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ, STORAGE_FLATTENED, DOC_ATTR_DESCRIPTION, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, } from "@metaobjectsdev/metadata";
1
+ import { VALIDATOR_SUBTYPE_NUMERIC, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, VALIDATOR_SUBTYPE_COMPARISON, VALIDATOR_SUBTYPE_REQUIRED_WHEN, VALIDATOR_SUBTYPE_PRESENT_IFF, VALIDATOR_SUBTYPE_AT_LEAST_ONE, VALIDATOR_ATTR_PATTERN, VALIDATOR_ATTR_LEFT, VALIDATOR_ATTR_OP, VALIDATOR_ATTR_RIGHT, VALIDATOR_ATTR_FIELD, VALIDATOR_ATTR_WHEN, VALIDATOR_ATTR_EQUALS, VALIDATOR_ATTR_FIELDS, TYPE_OBJECT, TYPE_FIELD, OBJECT_ATTR_DISCRIMINATOR, OBJECT_ATTR_DISCRIMINATOR_VALUE, MetaSource, IDENTITY_ATTR_GENERATION, IDENTITY_ATTR_UNIQUE, IDENTITY_ATTR_ORDERS, IDENTITY_ATTR_WHERE, IDENTITY_ATTR_EXPR, IDENTITY_ATTR_USING, IDENTITY_ATTR_CONSTRAINT_NAME, FIELD_ATTR_DEFAULT, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_UNIQUE, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_ENUM, FIELD_ATTR_VALUES, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_STORAGE, FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ, STORAGE_FLATTENED, DOC_ATTR_DESCRIPTION, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, } from "@metaobjectsdev/metadata";
2
2
  import { buildExpectedViews } from "./expected-views.js";
3
3
  import { resolveReferentialActions, validateSetNullNullability, readIdentityFields, findField, isRequired, } from "./referential-actions.js";
4
4
  export function buildExpectedSchema(root, opts) {
@@ -20,6 +20,10 @@ export function buildExpectedSchema(root, opts) {
20
20
  continue;
21
21
  if (child.subType === "value")
22
22
  continue;
23
+ // FR-017 TPH: a subtype shares its discriminator base's single table, so it
24
+ // emits no table of its own. Its own columns are folded into the base below.
25
+ if (isTphSubtype(child))
26
+ continue;
23
27
  const hasReadOnlySource = child.ownChildren().some((c) => c instanceof MetaSource && c.isReadOnly());
24
28
  const hasWritableSource = child.ownChildren().some((c) => c instanceof MetaSource && c.isWritable());
25
29
  // Projection: read-only and not write-through.
@@ -28,7 +32,13 @@ export function buildExpectedSchema(root, opts) {
28
32
  entities.push({ entity: child, tableName: resolveTableName(child) });
29
33
  }
30
34
  const entityToTable = new Map(entities.map((e) => [e.entity.name, e.tableName]));
31
- const resolveTargetTable = (entityName) => entityToTable.get(entityName);
35
+ // A reference's targetEntity is package-qualified by the loader (e.g.
36
+ // "acme::a::Foo"), but entityToTable is keyed by the bare entity name ("Foo").
37
+ // Fall back to the bare suffix so cross-package FK targets resolve.
38
+ const resolveTargetTable = (entityName) => entityToTable.get(entityName) ??
39
+ (entityName.includes("::")
40
+ ? entityToTable.get(entityName.slice(entityName.lastIndexOf("::") + 2))
41
+ : undefined);
32
42
  // Pass 2: build full descriptors with FK resolution.
33
43
  // Schema is resolved here (not stored in Pass 1) to avoid exactOptionalPropertyTypes
34
44
  // issues with `string | undefined` vs `schema?: string`.
@@ -96,6 +106,34 @@ function normalizeForSqlite(sqlType) {
96
106
  return sqlType;
97
107
  }
98
108
  }
109
+ // ---------------------------------------------------------------------------
110
+ // FR-017 TPH (table-per-hierarchy) — single-table schema emission.
111
+ // ---------------------------------------------------------------------------
112
+ /** The @discriminator-bearing ancestor of `entity`, or undefined for non-TPH. */
113
+ function discriminatorBaseOf(entity) {
114
+ let a = entity.superResolved;
115
+ while (a !== undefined) {
116
+ if (a.ownAttr(OBJECT_ATTR_DISCRIMINATOR) !== undefined)
117
+ return a;
118
+ a = a.superResolved;
119
+ }
120
+ return undefined;
121
+ }
122
+ /** True if `entity` is a TPH SUBTYPE (declares @discriminatorValue + has a
123
+ * discriminator-bearing ancestor). Such an entity emits no table of its own. */
124
+ function isTphSubtype(entity) {
125
+ return (entity.ownAttr(OBJECT_ATTR_DISCRIMINATOR_VALUE) !== undefined &&
126
+ discriminatorBaseOf(entity) !== undefined);
127
+ }
128
+ /** Concrete TPH subtypes whose discriminator base is `base` (root-level scan). */
129
+ function tphConcreteSubtypes(base, root) {
130
+ if (base.ownAttr(OBJECT_ATTR_DISCRIMINATOR) === undefined)
131
+ return [];
132
+ return root.ownChildren().filter((c) => c.type === TYPE_OBJECT &&
133
+ !c.isAbstract &&
134
+ c.ownAttr(OBJECT_ATTR_DISCRIMINATOR_VALUE) !== undefined &&
135
+ discriminatorBaseOf(c) === base);
136
+ }
99
137
  function buildTable(entity, tableName, resolveTargetTable, root, strategy, dialect) {
100
138
  // Use effective accessors so inherited fields/identities (from `extends:` /
101
139
  // abstract bases like BaseEntity) are included.
@@ -121,6 +159,25 @@ function buildTable(entity, tableName, resolveTargetTable, root, strategy, diale
121
159
  columns.push(buildColumn(field, isPk, isPk ? pkGeneration : undefined, strategy));
122
160
  }
123
161
  }
162
+ // FR-017 TPH: if this is a discriminator base, fold each concrete subtype's
163
+ // OWN fields into the single table as NULLABLE columns (a row of any other
164
+ // subtype stores NULL there), even when the field is @required. Dedupe by
165
+ // column name so an inherited/overridden base column is not re-emitted.
166
+ if (entity.ownAttr(OBJECT_ATTR_DISCRIMINATOR) !== undefined) {
167
+ const existing = new Set(columns.map((c) => c.name));
168
+ for (const sub of tphConcreteSubtypes(entity, root)) {
169
+ for (const field of sub.ownChildren()) {
170
+ if (field.type !== TYPE_FIELD)
171
+ continue;
172
+ const col = buildColumn(field, false, undefined, strategy);
173
+ if (existing.has(col.name))
174
+ continue;
175
+ col.nullable = true; // subtype-only columns are always nullable in TPH
176
+ columns.push(col);
177
+ existing.add(col.name);
178
+ }
179
+ }
180
+ }
124
181
  const descriptor = {
125
182
  name: tableName,
126
183
  columns,
@@ -164,19 +221,43 @@ function buildSecondaryIndexes(entity, tableName, strategy) {
164
221
  // Drizzle emits the index using the identity's @name attr directly (no table
165
222
  // prefix), so the expected name must match.
166
223
  for (const identity of entity.secondaryIdentities()) {
224
+ const exprRaw = identity.ownAttr(IDENTITY_ATTR_EXPR);
225
+ const expr = typeof exprRaw === "string" && exprRaw.trim().length > 0 ? exprRaw.trim() : undefined;
167
226
  const fieldNames = readIdentityFields(identity);
168
- if (fieldNames.length === 0)
227
+ // An expression index keys off @expr (not @fields); a plain index needs @fields.
228
+ if (fieldNames.length === 0 && expr === undefined)
169
229
  continue;
170
230
  const cols = fieldNames.map((jsName) => {
171
231
  const field = findField(entity, jsName);
172
232
  return field ? resolveColumnName(field, strategy) : applyColumnNamingStrategy(jsName, strategy);
173
233
  });
174
234
  const uniqueAttr = identity.ownAttr(IDENTITY_ATTR_UNIQUE);
175
- indexes.push({
235
+ const index = {
176
236
  name: identity.name,
177
- columns: cols,
237
+ columns: expr ? [] : cols,
178
238
  unique: uniqueAttr !== false,
179
- });
239
+ };
240
+ if (expr)
241
+ index.expr = expr;
242
+ const usingRaw = identity.ownAttr(IDENTITY_ATTR_USING);
243
+ if (typeof usingRaw === "string" && usingRaw.trim().length > 0 && usingRaw.trim() !== "btree") {
244
+ index.using = usingRaw.trim();
245
+ }
246
+ // @orders — per-field sort direction (positional to @fields). Only attach when
247
+ // at least one field is descending (an all-ascending array is the default and
248
+ // must serialize identically to "no orders" for diff stability).
249
+ const ordersRaw = identity.ownAttr(IDENTITY_ATTR_ORDERS);
250
+ if (Array.isArray(ordersRaw)) {
251
+ const orders = cols.map((_, i) => (ordersRaw[i] === "desc" ? "desc" : "asc"));
252
+ if (orders.some((o) => o === "desc"))
253
+ index.orders = orders;
254
+ }
255
+ // @where — partial-index predicate.
256
+ const whereRaw = identity.ownAttr(IDENTITY_ATTR_WHERE);
257
+ if (typeof whereRaw === "string" && whereRaw.trim().length > 0) {
258
+ index.where = whereRaw.trim();
259
+ }
260
+ indexes.push(index);
180
261
  }
181
262
  return indexes;
182
263
  }
@@ -197,14 +278,14 @@ function buildSecondaryIndexes(entity, tableName, strategy) {
197
278
  * `<table>_<col>_<validator>_chk`. The expression references the resolved physical
198
279
  * column name verbatim (matching the enum-check convention).
199
280
  */
200
- function validatorCheck(v, col, tableName, dialect) {
281
+ function validatorCheck(v, qcol, tableName, col, dialect) {
201
282
  switch (v.subType) {
202
283
  case VALIDATOR_SUBTYPE_NUMERIC: {
203
284
  const parts = [];
204
285
  if (v.min !== undefined)
205
- parts.push(`${col} >= ${v.min}`);
286
+ parts.push(`${qcol} >= ${v.min}`);
206
287
  if (v.max !== undefined)
207
- parts.push(`${col} <= ${v.max}`);
288
+ parts.push(`${qcol} <= ${v.max}`);
208
289
  if (parts.length === 0)
209
290
  return null;
210
291
  return { name: `${tableName}_${col}_numeric_chk`, expression: parts.join(" AND ") };
@@ -212,9 +293,9 @@ function validatorCheck(v, col, tableName, dialect) {
212
293
  case VALIDATOR_SUBTYPE_LENGTH: {
213
294
  const parts = [];
214
295
  if (v.min !== undefined)
215
- parts.push(`length(${col}) >= ${v.min}`);
296
+ parts.push(`length(${qcol}) >= ${v.min}`);
216
297
  if (v.max !== undefined)
217
- parts.push(`length(${col}) <= ${v.max}`);
298
+ parts.push(`length(${qcol}) <= ${v.max}`);
218
299
  if (parts.length === 0)
219
300
  return null;
220
301
  return { name: `${tableName}_${col}_length_chk`, expression: parts.join(" AND ") };
@@ -228,35 +309,142 @@ function validatorCheck(v, col, tableName, dialect) {
228
309
  return null;
229
310
  return {
230
311
  name: `${tableName}_${col}_regex_chk`,
231
- expression: `${col} ~ '${pattern.replace(/'/g, "''")}'`,
312
+ expression: `${qcol} ~ '${pattern.replace(/'/g, "''")}'`,
232
313
  };
233
314
  }
234
315
  default:
235
316
  return null;
236
317
  }
237
318
  }
319
+ /**
320
+ * Quote a column identifier for embedding in a CHECK expression. Both Postgres
321
+ * and SQLite quote identifiers with double-quotes, so the dialect-neutral
322
+ * expression text can carry a quoted column. Quoting is REQUIRED for a
323
+ * mixed-case column (e.g. `enumVal`): a bare `enumVal IN (...)` folds to
324
+ * lowercase `enumval` and references a non-existent column. The check-expression
325
+ * comparator (`normalizeCheckExpr`) strips quotes so an introspected check still
326
+ * compares equal.
327
+ */
328
+ function quoteCheckCol(col) {
329
+ return `"${col.replace(/"/g, '""')}"`;
330
+ }
238
331
  function buildChecks(entity, tableName, strategy, dialect) {
239
332
  const checks = [];
240
333
  for (const field of entity.fields()) {
241
334
  const col = resolveColumnName(field, strategy);
242
- // Enum membership check (unchanged).
335
+ const qcol = quoteCheckCol(col);
336
+ // Enum membership check.
243
337
  if (field.subType === FIELD_SUBTYPE_ENUM) {
244
338
  const raw = field.attr(FIELD_ATTR_VALUES);
245
339
  if (Array.isArray(raw) && raw.length > 0) {
246
340
  const values = raw.map((v) => String(v));
247
- const expression = `${col} IN (${values.map((v) => `'${v.replace(/'/g, "''")}'`).join(", ")})`;
341
+ const expression = `${qcol} IN (${values.map((v) => `'${v.replace(/'/g, "''")}'`).join(", ")})`;
248
342
  checks.push({ name: `${tableName}_${col}_chk`, expression });
249
343
  }
250
344
  }
251
345
  // Validator-derived checks.
252
346
  for (const v of field.validators()) {
253
- const check = validatorCheck(v, col, tableName, dialect);
347
+ const check = validatorCheck(v, qcol, tableName, col, dialect);
254
348
  if (check)
255
349
  checks.push(check);
256
350
  }
257
351
  }
352
+ // Entity-scoped cross-field validators (comparison / requiredWhen / presentIff / atLeastOne).
353
+ for (const v of entity.validators()) {
354
+ const check = crossFieldCheck(v, entity, tableName, strategy, dialect);
355
+ if (check)
356
+ checks.push(check);
357
+ }
258
358
  return checks;
259
359
  }
360
+ const COMPARISON_SQL_OP = {
361
+ gt: ">", gte: ">=", lt: "<", lte: "<=", ne: "<>", eq: "=",
362
+ };
363
+ /** Resolve a by-name field reference to its physical column (quoted) + the MetaField, or null. */
364
+ function resolveRef(entity, name, strategy) {
365
+ if (typeof name !== "string" || name.length === 0)
366
+ return null;
367
+ const field = entity.fields().find((f) => f.name === name);
368
+ if (!field)
369
+ return null;
370
+ return { qcol: quoteCheckCol(resolveColumnName(field, strategy)), field };
371
+ }
372
+ /**
373
+ * Render an @equals gating value as a SQL literal, typed by the gating field's
374
+ * subtype: boolean → TRUE/FALSE (1/0 on sqlite/d1), numeric → bare number,
375
+ * everything else → quoted string.
376
+ */
377
+ function renderEquals(raw, whenField, dialect) {
378
+ const s = String(raw);
379
+ if (whenField.subType === FIELD_SUBTYPE_BOOLEAN) {
380
+ const truthy = s === "true" || s === "1" || s === "TRUE";
381
+ if (dialect === "sqlite" || dialect === "d1")
382
+ return truthy ? "1" : "0";
383
+ return truthy ? "TRUE" : "FALSE";
384
+ }
385
+ const numeric = whenField.subType === FIELD_SUBTYPE_INT || whenField.subType === FIELD_SUBTYPE_LONG
386
+ || whenField.subType === FIELD_SUBTYPE_DOUBLE || whenField.subType === FIELD_SUBTYPE_FLOAT
387
+ || whenField.subType === FIELD_SUBTYPE_DECIMAL || whenField.subType === FIELD_SUBTYPE_CURRENCY;
388
+ if (numeric && /^-?\d+(\.\d+)?$/.test(s))
389
+ return s;
390
+ return `'${s.replace(/'/g, "''")}'`;
391
+ }
392
+ /**
393
+ * Derive a CHECK from an entity-scoped cross-field validator. Every reference is
394
+ * resolved to its physical column by name; nothing raw is read from metadata.
395
+ * Returns null (skips the check) if any referenced field is missing.
396
+ */
397
+ function crossFieldCheck(v, entity, tableName, strategy, dialect) {
398
+ switch (v.subType) {
399
+ case VALIDATOR_SUBTYPE_COMPARISON: {
400
+ const left = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_LEFT), strategy);
401
+ const right = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_RIGHT), strategy);
402
+ const op = COMPARISON_SQL_OP[String(v.ownAttr(VALIDATOR_ATTR_OP))];
403
+ if (!left || !right || !op)
404
+ return null;
405
+ const lc = resolveColumnName(left.field, strategy);
406
+ return { name: `${tableName}_${lc}_cmp_chk`, expression: `${left.qcol} ${op} ${right.qcol}` };
407
+ }
408
+ case VALIDATOR_SUBTYPE_REQUIRED_WHEN: {
409
+ const target = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_FIELD), strategy);
410
+ const when = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_WHEN), strategy);
411
+ if (!target || !when)
412
+ return null;
413
+ const lit = renderEquals(v.ownAttr(VALIDATOR_ATTR_EQUALS), when.field, dialect);
414
+ const fc = resolveColumnName(target.field, strategy);
415
+ return {
416
+ name: `${tableName}_${fc}_reqwhen_chk`,
417
+ expression: `(${when.qcol} IS DISTINCT FROM ${lit}) OR (${target.qcol} IS NOT NULL)`,
418
+ };
419
+ }
420
+ case VALIDATOR_SUBTYPE_PRESENT_IFF: {
421
+ const target = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_FIELD), strategy);
422
+ const when = resolveRef(entity, v.ownAttr(VALIDATOR_ATTR_WHEN), strategy);
423
+ if (!target || !when)
424
+ return null;
425
+ const lit = renderEquals(v.ownAttr(VALIDATOR_ATTR_EQUALS), when.field, dialect);
426
+ const fc = resolveColumnName(target.field, strategy);
427
+ return {
428
+ name: `${tableName}_${fc}_presentiff_chk`,
429
+ expression: `(${target.qcol} IS NOT NULL) = (${when.qcol} IS NOT DISTINCT FROM ${lit})`,
430
+ };
431
+ }
432
+ case VALIDATOR_SUBTYPE_AT_LEAST_ONE: {
433
+ const raw = v.ownAttr(VALIDATOR_ATTR_FIELDS);
434
+ const names = Array.isArray(raw) ? raw : (typeof raw === "string" ? [raw] : []);
435
+ const refs = names.map((n) => resolveRef(entity, n, strategy));
436
+ if (refs.length === 0 || refs.some((r) => r === null))
437
+ return null;
438
+ const firstCol = resolveColumnName(refs[0].field, strategy);
439
+ return {
440
+ name: `${tableName}_${firstCol}_atleastone_chk`,
441
+ expression: refs.map((r) => `${r.qcol} IS NOT NULL`).join(" OR "),
442
+ };
443
+ }
444
+ default:
445
+ return null;
446
+ }
447
+ }
260
448
  function buildForeignKeys(entity, tableName, resolveTargetTable, root, strategy) {
261
449
  const fks = [];
262
450
  for (const refChild of entity.referenceIdentities()) {
@@ -284,7 +472,12 @@ function buildForeignKeys(entity, tableName, resolveTargetTable, root, strategy)
284
472
  ? explicitTargetFields.map((n) => applyColumnNamingStrategy(n, strategy))
285
473
  : [applyColumnNamingStrategy(refChild.resolvedTargetPkField(root) ?? "id", strategy)];
286
474
  const { onDelete, onUpdate } = resolveReferentialActions(entity, refChild);
287
- const constraintName = `${tableName}_${fkCols[0]}_fk`;
475
+ // An explicit @constraintName adopts an existing FK name (e.g. a database
476
+ // created by another toolchain); absent → the auto-derived default.
477
+ const constraintNameOverride = refChild.ownAttr(IDENTITY_ATTR_CONSTRAINT_NAME);
478
+ const constraintName = typeof constraintNameOverride === "string" && constraintNameOverride.length > 0
479
+ ? constraintNameOverride
480
+ : `${tableName}_${fkCols[0]}_fk`;
288
481
  // Guard: ON DELETE SET NULL requires nullable FK columns.
289
482
  validateSetNullNullability(entity, refChild, onDelete, constraintName);
290
483
  const fk = {
@@ -374,9 +567,7 @@ function subtypeToSqlType(field) {
374
567
  const m = field.ownAttr(FIELD_ATTR_MAX_LENGTH);
375
568
  return typeof m === "number" ? { kind: "text", maxLength: m } : { kind: "text" };
376
569
  }
377
- case FIELD_SUBTYPE_INT:
378
- case FIELD_SUBTYPE_SHORT:
379
- case FIELD_SUBTYPE_BYTE: return { kind: "integer", bits: 32 };
570
+ case FIELD_SUBTYPE_INT: return { kind: "integer", bits: 32 };
380
571
  case FIELD_SUBTYPE_LONG:
381
572
  case FIELD_SUBTYPE_CURRENCY: return { kind: "integer", bits: 64 };
382
573
  case FIELD_SUBTYPE_DOUBLE: return { kind: "real" };
@@ -398,8 +589,7 @@ function subtypeToSqlType(field) {
398
589
  case FIELD_SUBTYPE_DATE: return { kind: "date" };
399
590
  case FIELD_SUBTYPE_TIME: return { kind: "time" }; // Postgres native TIME (whole-second wire form)
400
591
  case FIELD_SUBTYPE_TIMESTAMP: return { kind: "timestamp", withTimezone: false };
401
- case FIELD_SUBTYPE_OBJECT:
402
- case FIELD_SUBTYPE_CLASS: return { kind: "json" };
592
+ case FIELD_SUBTYPE_OBJECT: return { kind: "json" };
403
593
  case FIELD_SUBTYPE_UUID: return { kind: "uuid" }; // R6 Plan 2a — Postgres native uuid
404
594
  default: return { kind: "text" }; // unknown → text fallback
405
595
  }
@@ -1 +1 @@
1
- {"version":3,"file":"expected-schema.js","sourceRoot":"","sources":["../src/expected-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expected-schema.js","sourceRoot":"","sources":["../src/expected-schema.ts"],"names":[],"mappings":"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"}
@@ -44,14 +44,21 @@ export declare function pgTypeToSqlType(dataType: string, maxLength?: number | n
44
44
  * Returns undefined if the default is absent or empty.
45
45
  *
46
46
  * Classification rules:
47
- * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME,
48
- * nextval(...), and any value that starts with a non-quote character and
49
- * contains a `::` cast (i.e. bare identifier with cast, like `NULL::text`).
47
+ * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME, and any
48
+ * bare function-call (e.g. nextval(...), gen_random_uuid(), uuid_generate_v4()),
49
+ * plus any value that starts with a non-quote character and contains a `::` cast
50
+ * (i.e. bare identifier with cast, like `NULL::text`).
50
51
  * - Literals: `'value'` (optionally followed by `::type` cast, which PG
51
52
  * commonly appends for clarity). The cast is stripped; the value is unquoted.
52
53
  *
53
54
  * PG stores literal booleans as `'true'::boolean`, integers as `'42'::integer`,
54
55
  * strings as `'hello'::text` — all are literals after stripping the cast.
56
+ *
57
+ * The bare function-call rule keeps this in lockstep with the metadata-side
58
+ * default classifier (expected-schema's EXPR_DEFAULT_PATTERNS, which treats any
59
+ * `()` default as an expression): without it, a `gen_random_uuid()` column default
60
+ * round-trips as a literal here but an expression there, producing a spurious
61
+ * column diff on every uuid-PK table.
55
62
  */
56
63
  export declare function parsePgDefault(raw: string | null | undefined): ColumnDefault | undefined;
57
64
  //# sourceMappingURL=postgres.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/introspect/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAqC,aAAa,EAA4E,MAAM,aAAa,CAAC;AAC9K,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQ9C,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CA0BrG;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAmEpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAgCxF"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/introspect/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAqC,aAAa,EAA4E,MAAM,aAAa,CAAC;AAC9K,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQ9C,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CA0BrG;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAmEpF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAoCxF"}
@@ -110,24 +110,35 @@ export function pgTypeToSqlType(dataType, maxLength) {
110
110
  * Returns undefined if the default is absent or empty.
111
111
  *
112
112
  * Classification rules:
113
- * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME,
114
- * nextval(...), and any value that starts with a non-quote character and
115
- * contains a `::` cast (i.e. bare identifier with cast, like `NULL::text`).
113
+ * - Expressions: now(), CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME, and any
114
+ * bare function-call (e.g. nextval(...), gen_random_uuid(), uuid_generate_v4()),
115
+ * plus any value that starts with a non-quote character and contains a `::` cast
116
+ * (i.e. bare identifier with cast, like `NULL::text`).
116
117
  * - Literals: `'value'` (optionally followed by `::type` cast, which PG
117
118
  * commonly appends for clarity). The cast is stripped; the value is unquoted.
118
119
  *
119
120
  * PG stores literal booleans as `'true'::boolean`, integers as `'42'::integer`,
120
121
  * strings as `'hello'::text` — all are literals after stripping the cast.
122
+ *
123
+ * The bare function-call rule keeps this in lockstep with the metadata-side
124
+ * default classifier (expected-schema's EXPR_DEFAULT_PATTERNS, which treats any
125
+ * `()` default as an expression): without it, a `gen_random_uuid()` column default
126
+ * round-trips as a literal here but an expression there, producing a spurious
127
+ * column diff on every uuid-PK table.
121
128
  */
122
129
  export function parsePgDefault(raw) {
123
130
  if (raw === undefined || raw === null || raw === "")
124
131
  return undefined;
125
- // Function-call or keyword expressions
132
+ // Function-call or keyword expressions. The leading-identifier-then-"(" rule
133
+ // matches any bare function call (gen_random_uuid(), uuid_generate_v4(), …)
134
+ // while never matching a quoted literal (those start with a single quote and are
135
+ // handled below).
126
136
  if (/^now\(\)$/i.test(raw) ||
127
137
  /^current_timestamp\b/i.test(raw) ||
128
138
  /^current_date\b/i.test(raw) ||
129
139
  /^current_time\b/i.test(raw) ||
130
- /^nextval\(/i.test(raw)) {
140
+ /^nextval\(/i.test(raw) ||
141
+ /^[a-zA-Z_][\w.]*\s*\(/.test(raw)) {
131
142
  return { kind: "expr", value: raw };
132
143
  }
133
144
  // If it starts with a single-quote, it's a quoted literal (possibly with
@@ -243,6 +254,10 @@ async function readPgIndexes(k, schema, table) {
243
254
  // pg-mem gap: array_position() is not implemented, so this query throws on
244
255
  // pg-mem. We catch and return [] so non-index tests still pass against pg-mem.
245
256
  // Real PG (Postgres 16) handles this correctly.
257
+ // One row per index KEY, in key order, carrying: the column name (NULL for an
258
+ // expression key — attnum 0), the DESC bit from `indoption`, and the partial-index
259
+ // predicate (`indpred`, constant per index). unnest WITH ORDINALITY over indkey +
260
+ // indoption keeps the key order and pairs each key with its option flags.
246
261
  let rows;
247
262
  try {
248
263
  rows = await sql `
@@ -250,33 +265,95 @@ async function readPgIndexes(k, schema, table) {
250
265
  ix.indisunique AS is_unique,
251
266
  ix.indisprimary AS is_primary,
252
267
  a.attname AS column_name,
253
- array_position(ix.indkey, a.attnum) AS ordinal
268
+ k.ord AS ordinal,
269
+ (COALESCE(opt.option, 0) & 1) = 1 AS is_desc,
270
+ pg_get_expr(ix.indpred, ix.indrelid) AS predicate,
271
+ am.amname AS access_method,
272
+ pg_get_indexdef(ix.indexrelid) AS indexdef
254
273
  FROM pg_index ix
255
274
  JOIN pg_class i ON i.oid = ix.indexrelid
256
275
  JOIN pg_class t ON t.oid = ix.indrelid
257
276
  JOIN pg_namespace n ON n.oid = t.relnamespace
258
- JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
277
+ JOIN pg_am am ON am.oid = i.relam
278
+ CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, ord)
279
+ LEFT JOIN LATERAL unnest(ix.indoption) WITH ORDINALITY AS opt(option, oord)
280
+ ON opt.oord = k.ord
281
+ LEFT JOIN pg_attribute a ON a.attrelid = ix.indrelid AND a.attnum = k.attnum
259
282
  WHERE n.nspname = ${schema}
260
283
  AND t.relname = ${table}
261
- ORDER BY i.relname, ordinal
284
+ ORDER BY i.relname, k.ord
262
285
  `.execute(k);
263
286
  }
264
287
  catch {
265
- // pg-mem: array_position() not implemented — return empty index list.
288
+ // pg-mem: unnest WITH ORDINALITY / pg_get_expr unsupported — return empty list.
266
289
  return [];
267
290
  }
268
291
  const byName = new Map();
269
292
  for (const r of rows.rows) {
270
293
  let entry = byName.get(r.index_name);
271
294
  if (!entry) {
272
- entry = { isUnique: r.is_unique, isPrimary: r.is_primary, cols: [] };
295
+ entry = {
296
+ isUnique: r.is_unique,
297
+ isPrimary: r.is_primary,
298
+ cols: [],
299
+ orders: [],
300
+ predicate: r.predicate,
301
+ hasExpressionKey: false,
302
+ accessMethod: r.access_method,
303
+ indexdef: r.indexdef,
304
+ };
273
305
  byName.set(r.index_name, entry);
274
306
  }
275
- entry.cols.push(r.column_name);
307
+ if (r.column_name === null) {
308
+ // Expression key (attnum 0) — captured from the index def below.
309
+ entry.hasExpressionKey = true;
310
+ }
311
+ else {
312
+ entry.cols.push(r.column_name);
313
+ entry.orders.push(r.is_desc ? "desc" : "asc");
314
+ }
276
315
  }
277
316
  return Array.from(byName.entries())
278
317
  .filter(([, v]) => !v.isPrimary) // PK index excluded — PK lives in TableDescriptor.primaryKey
279
- .map(([name, v]) => ({ name, columns: v.cols, unique: v.isUnique }));
318
+ .map(([name, v]) => {
319
+ const using = v.accessMethod !== "btree" ? v.accessMethod : undefined;
320
+ if (v.hasExpressionKey) {
321
+ // Functional/expression index: lift the raw key expression out of the
322
+ // index def (between `USING <am> (` and its matching `)`, before WHERE).
323
+ const ix = { name, columns: [], unique: v.isUnique, expr: indexDefKeyExpr(v.indexdef) };
324
+ if (using)
325
+ ix.using = using;
326
+ if (v.predicate !== null)
327
+ ix.where = v.predicate;
328
+ return ix;
329
+ }
330
+ const ix = { name, columns: v.cols, unique: v.isUnique };
331
+ if (using)
332
+ ix.using = using;
333
+ if (v.orders.some((o) => o === "desc"))
334
+ ix.orders = v.orders;
335
+ if (v.predicate !== null)
336
+ ix.where = v.predicate;
337
+ return ix;
338
+ });
339
+ }
340
+ /** Extract the raw key-expression text from a pg index def — the balanced `(...)`
341
+ * after `USING <method> `, stripped of a trailing partial-index `WHERE`. */
342
+ function indexDefKeyExpr(indexdef) {
343
+ const open = indexdef.indexOf("(", indexdef.indexOf(" USING "));
344
+ if (open === -1)
345
+ return indexdef;
346
+ let depth = 0;
347
+ for (let i = open; i < indexdef.length; i++) {
348
+ if (indexdef[i] === "(")
349
+ depth++;
350
+ else if (indexdef[i] === ")") {
351
+ depth--;
352
+ if (depth === 0)
353
+ return indexdef.slice(open + 1, i).trim();
354
+ }
355
+ }
356
+ return indexdef.slice(open + 1).trim();
280
357
  }
281
358
  async function readPgForeignKeys(k, schema, table) {
282
359
  // pg-mem gap: information_schema.referential_constraints is not supported —