@mikro-orm/sql 7.2.5-dev.5 → 7.2.5-dev.7

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.
@@ -2087,6 +2087,12 @@ export class AbstractSqlDriver extends DatabaseDriver {
2087
2087
  }
2088
2088
  const aliased = this.platform.quoteIdentifier(`${tableAlias}__${prop.fieldNames[0]}`);
2089
2089
  const sourceAlias = qb.helper.getTPTAliasForProperty(prop.name, tableAlias);
2090
+ if (prop.formula) {
2091
+ const quotedAlias = this.platform.quoteIdentifier(tableAlias).toString();
2092
+ const table = this.createFormulaTable(quotedAlias, meta, schema);
2093
+ const columns = meta.createColumnMappingObject(tableAlias);
2094
+ return [raw(`${this.evaluateFormula(prop.formula, columns, table)} as ${aliased}`)];
2095
+ }
2090
2096
  if (prop.customTypes?.some(type => !!type?.convertToJSValueSQL)) {
2091
2097
  return prop.fieldNames.map((col, idx) => {
2092
2098
  if (!prop.customTypes[idx]?.convertToJSValueSQL) {
@@ -2101,12 +2107,6 @@ export class AbstractSqlDriver extends DatabaseDriver {
2101
2107
  const prefixed = this.platform.quoteIdentifier(`${sourceAlias}.${prop.fieldNames[0]}`);
2102
2108
  return [raw(`${prop.customType.convertToJSValueSQL(prefixed, this.platform)} as ${aliased}`)];
2103
2109
  }
2104
- if (prop.formula) {
2105
- const quotedAlias = this.platform.quoteIdentifier(tableAlias).toString();
2106
- const table = this.createFormulaTable(quotedAlias, meta, schema);
2107
- const columns = meta.createColumnMappingObject(tableAlias);
2108
- return [raw(`${this.evaluateFormula(prop.formula, columns, table)} as ${aliased}`)];
2109
- }
2110
2110
  return prop.fieldNames.map(fieldName => {
2111
2111
  return raw('?? as ??', [`${sourceAlias}.${fieldName}`, `${tableAlias}__${fieldName}`]);
2112
2112
  });
@@ -2527,7 +2527,7 @@ export class AbstractSqlDriver extends DatabaseDriver {
2527
2527
  const table = this.createFormulaTable(quotedAlias.toString(), meta, effectiveSchema);
2528
2528
  ret.push(raw(`${this.evaluateFormula(prop.formula, columns, table)} as ${aliased}`));
2529
2529
  }
2530
- if (!prop.object && (prop.hasConvertToDatabaseValueSQL || prop.hasConvertToJSValueSQL)) {
2530
+ if (!prop.object && !prop.formula && (prop.hasConvertToDatabaseValueSQL || prop.hasConvertToJSValueSQL)) {
2531
2531
  ret.push(prop.name);
2532
2532
  }
2533
2533
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/sql",
3
- "version": "7.2.5-dev.5",
3
+ "version": "7.2.5-dev.7",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "keywords": [
6
6
  "data-mapper",
@@ -53,7 +53,7 @@
53
53
  "@mikro-orm/core": "^7.2.4"
54
54
  },
55
55
  "peerDependencies": {
56
- "@mikro-orm/core": "7.2.5-dev.5"
56
+ "@mikro-orm/core": "7.2.5-dev.7"
57
57
  },
58
58
  "engines": {
59
59
  "node": ">= 22.17.0"
@@ -166,11 +166,12 @@ export class SchemaComparator {
166
166
  diff.changedTables[viewName] = tableDiff;
167
167
  }
168
168
  }
169
- this.compareRoutines(fromSchema, toSchema, diff);
169
+ this.compareRoutines(fromSchema, toSchema, diff, !!inverseDiff);
170
170
  return diff;
171
171
  }
172
- compareRoutines(fromSchema, toSchema, diff) {
172
+ compareRoutines(fromSchema, toSchema, diff, inverse) {
173
173
  // `ignoreRoutines` makes routines create-only: new ones are still added, but existing routines are never diffed for drop/alter.
174
+ // The down diff (`inverse`) mirrors that: it drops what `up` created and never recreates routines unknown to the metadata.
174
175
  const ignoreRoutines = this.#platform.getConfig().get('schemaGenerator').ignoreRoutines;
175
176
  // Case-fold so user-written `'sql_hash'` matches Oracle's introspected `'SQL_HASH'`.
176
177
  const routineKey = (r) => ((r.schema ? `${r.schema}.` : '') + r.name).toLowerCase();
@@ -179,6 +180,9 @@ export class SchemaComparator {
179
180
  for (const [key, toRoutine] of toByKey) {
180
181
  const fromRoutine = fromByKey.get(key);
181
182
  if (!fromRoutine) {
183
+ if (ignoreRoutines && inverse) {
184
+ continue;
185
+ }
182
186
  diff.newRoutines[key] = toRoutine;
183
187
  this.log(`routine ${key} added`);
184
188
  continue;
@@ -188,7 +192,7 @@ export class SchemaComparator {
188
192
  this.log(`routine ${key} changed`, { fromRoutine, toRoutine });
189
193
  }
190
194
  }
191
- if (!ignoreRoutines) {
195
+ if (!ignoreRoutines || inverse) {
192
196
  for (const [key, fromRoutine] of fromByKey) {
193
197
  if (!toByKey.has(key)) {
194
198
  diff.removedRoutines[key] = fromRoutine;
@@ -493,10 +497,12 @@ export class SchemaComparator {
493
497
  tableDifferences.changedChecks[check.name] = toTableCheck;
494
498
  changes++;
495
499
  }
500
+ const ignoreTriggers = this.#platform.getConfig().get('schemaGenerator').ignoreTriggers;
496
501
  const fromTableTriggers = fromTable.getTriggers();
497
502
  const toTableTriggers = toTable.getTriggers();
498
503
  for (const trigger of toTableTriggers) {
499
- if (fromTable.hasTrigger(trigger.name)) {
504
+ // see `compareRoutines` for how `ignoreTriggers` applies to the down diff
505
+ if (fromTable.hasTrigger(trigger.name) || (ignoreTriggers && inverse)) {
500
506
  continue;
501
507
  }
502
508
  tableDifferences.addedTriggers[trigger.name] = trigger;
@@ -504,7 +510,7 @@ export class SchemaComparator {
504
510
  changes++;
505
511
  }
506
512
  // `ignoreTriggers` makes triggers create-only: declared ones are still added above, but existing triggers are never diffed for drop/alter.
507
- if (!this.#platform.getConfig().get('schemaGenerator').ignoreTriggers) {
513
+ if (!ignoreTriggers || inverse) {
508
514
  for (const trigger of fromTableTriggers) {
509
515
  if (!toTable.hasTrigger(trigger.name)) {
510
516
  tableDifferences.removedTriggers[trigger.name] = trigger;
@@ -513,7 +519,7 @@ export class SchemaComparator {
513
519
  continue;
514
520
  }
515
521
  const toTableTrigger = toTable.getTrigger(trigger.name);
516
- if (this.diffTrigger(trigger, toTableTrigger)) {
522
+ if (!ignoreTriggers && this.diffTrigger(trigger, toTableTrigger)) {
517
523
  this.log(`trigger ${trigger.name} changed in table ${tableDifferences.name}`, {
518
524
  fromTableTrigger: trigger,
519
525
  toTableTrigger,