MCPcopy Create free account
hub / github.com/mikro-orm/mikro-orm / alterTable

Function alterTable

packages/sql/src/schema/SchemaHelper.ts:483–643  ·  view source on GitHub ↗

Returns SQL statements to apply a table difference (add/drop/alter columns, indexes, foreign keys).

(diff: TableDifference, safe?: boolean)

Source from the content-addressed store, hash-verified

481
482 /** Returns SQL statements to apply a table difference (add/drop/alter columns, indexes, foreign keys). */
483 alterTable(diff: TableDifference, safe?: boolean): string[] {
484 const ret: string[] = [];
485 const [schemaName, tableName] = this.splitTableName(diff.name);
486
487 if (this.platform.supportsNativeEnums()) {
488 const changedNativeEnums: [enumName: string, itemsNew: string[], itemsOld: string[]][] = [];
489
490 for (const { column, changedProperties } of Object.values(diff.changedColumns)) {
491 if (!column.nativeEnumName) {
492 continue;
493 }
494
495 const key =
496 schemaName && schemaName !== this.platform.getDefaultSchemaName() && !column.nativeEnumName.includes('.')
497 ? schemaName + '.' + column.nativeEnumName
498 : column.nativeEnumName;
499
500 if (changedProperties.has('enumItems') && key in diff.fromTable.nativeEnums) {
501 changedNativeEnums.push([column.nativeEnumName, column.enumItems!, diff.fromTable.nativeEnums[key].items]);
502 }
503 }
504
505 Utils.removeDuplicates(changedNativeEnums).forEach(([enumName, itemsNew, itemsOld]) => {
506 // postgres allows only adding new items
507 const newItems = itemsNew.filter(val => !itemsOld.includes(val));
508
509 if (enumName.includes('.')) {
510 const [enumSchemaName, rawEnumName] = enumName.split('.');
511 ret.push(
512 ...newItems.map(val => this.getAlterNativeEnumSQL(rawEnumName, enumSchemaName, val, itemsNew, itemsOld)),
513 );
514 return;
515 }
516
517 ret.push(...newItems.map(val => this.getAlterNativeEnumSQL(enumName, schemaName, val, itemsNew, itemsOld)));
518 });
519 }
520
521 for (const index of Object.values(diff.removedIndexes)) {
522 ret.push(this.dropIndex(diff.name, index));
523 }
524
525 for (const index of Object.values(diff.changedIndexes)) {
526 ret.push(this.dropIndex(diff.name, index));
527 }
528
529 for (const check of Object.values(diff.removedChecks)) {
530 ret.push(this.dropConstraint(diff.name, check.name));
531 }
532
533 for (const check of Object.values(diff.changedChecks)) {
534 ret.push(this.dropConstraint(diff.name, check.name));
535 }
536
537 if (!safe) {
538 for (const trigger of Object.values(diff.removedTriggers)) {
539 ret.push(this.dropTrigger(diff.toTable, trigger));
540 }

Callers

nothing calls this directly

Calls 15

supportsNativeEnumsMethod · 0.80
pushMethod · 0.80
removeDuplicatesMethod · 0.80
filterMethod · 0.80
getAlterNativeEnumSQLMethod · 0.80
createForeignKeyMethod · 0.80
entriesMethod · 0.80
alterTableCommentMethod · 0.80
hasMethod · 0.65
findMethod · 0.65
valuesMethod · 0.45
getDefaultSchemaNameMethod · 0.45

Tested by

no test coverage detected