import { type Dictionary } from '@mikro-orm/core'; import type { Column, ForeignKey, IndexDef, SchemaDifference, TableDifference } from '../typings.js'; import type { DatabaseSchema } from './DatabaseSchema.js'; import type { DatabaseTable } from './DatabaseTable.js'; import type { AbstractSqlPlatform } from '../AbstractSqlPlatform.js'; /** * Compares two Schemas and return an instance of SchemaDifference. */ export declare class SchemaComparator { #private; constructor(platform: AbstractSqlPlatform); /** * Returns a SchemaDifference object containing the differences between the schemas fromSchema and toSchema. * * The returned differences are returned in such a way that they contain the * operations to change the schema stored in fromSchema to the schema that is * stored in toSchema. */ compare(fromSchema: DatabaseSchema, toSchema: DatabaseSchema, inverseDiff?: SchemaDifference): SchemaDifference; /** * Returns the difference between the tables fromTable and toTable. * If there are no differences this method returns the boolean false. */ diffTable( fromTable: DatabaseTable, toTable: DatabaseTable, inverseTableDiff?: TableDifference, ): TableDifference | false; /** * Try to find columns that only changed their name, rename operations maybe cheaper than add/drop * however ambiguities between different possibilities should not lead to renaming at all. */ private detectColumnRenamings; /** * Try to find indexes that only changed their name, rename operations maybe cheaper than add/drop * however ambiguities between different possibilities should not lead to renaming at all. */ private detectIndexRenamings; diffForeignKey(key1: ForeignKey, key2: ForeignKey, tableDifferences: TableDifference): boolean; /** * Returns the difference between the columns */ diffColumn(fromColumn: Column, toColumn: Column, fromTable: DatabaseTable, logging?: boolean): Set; diffEnumItems(items1?: string[], items2?: string[]): boolean; diffComment(comment1?: string, comment2?: string): boolean; /** * Finds the difference between the indexes index1 and index2. * Compares index1 with index2 and returns index2 if there are any differences or false in case there are no differences. */ diffIndex(index1: IndexDef, index2: IndexDef): boolean; /** * Checks if the other index already fulfills all the indexing and constraint needs of the current one. */ isIndexFulfilledBy(index1: IndexDef, index2: IndexDef): boolean; /** * Compare advanced column options between two indexes. */ private compareIndexColumns; /** * Compare two arrays for equality (order matters). */ private compareArrays; diffExpression(expr1: string, expr2: string): boolean; parseJsonDefault(defaultValue?: string | null): Dictionary | string | null; hasSameDefaultValue(from: Column, to: Column): boolean; private mapColumnToProperty; private log; }