import { QueryRunner } from "../query-runner/QueryRunner"; import { ColumnMetadata } from "../metadata/ColumnMetadata"; import { EntityMetadata } from "../metadata/EntityMetadata"; import { Connection } from "../connection/Connection"; import { SchemaBuilder } from "./SchemaBuilder"; import { SqlInMemory } from "../driver/SqlInMemory"; import { TableColumnOptions } from "./options/TableColumnOptions"; /** * Creates complete tables schemas in the database based on the entity metadatas. * * Steps how schema is being built: * 1. load list of all tables with complete column and keys information from the db * 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata * 3. create new tables that does not exist in the db, but exist in the metadata * 4. drop all columns exist (left old) in the db table, but does not exist in the metadata * 5. add columns from metadata which does not exist in the table * 6. update all exist columns which metadata has changed * 7. update primary keys - update old and create new primary key from changed columns * 8. create foreign keys which does not exist in the table yet * 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore */ export declare class RdbmsSchemaBuilder implements SchemaBuilder { protected connection: Connection; /** * Used to execute schema creation queries in a single connection. */ protected queryRunner: QueryRunner; constructor(connection: Connection); /** * Creates complete schemas for the given entity metadatas. */ build(): Promise; /** * Returns sql queries to be executed by schema builder. */ log(): Promise; /** * Returns only entities that should be synced in the database. */ protected readonly entityToSyncMetadatas: EntityMetadata[]; /** * Returns only entities that should be synced in the database. */ protected readonly viewEntityToSyncMetadatas: EntityMetadata[]; /** * Executes schema sync operations in a proper order. * Order of operations matter here. */ protected executeSchemaSyncOperationsInProperOrder(): Promise; /** * Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata. */ protected dropOldForeignKeys(): Promise; /** * Rename tables */ protected renameTables(): Promise; /** * Renames columns. * Works if only one column per table was changed. * Changes only column name. If something besides name was changed, these changes will be ignored. */ protected renameColumns(): Promise; protected dropOldIndices(): Promise; protected dropOldChecks(): Promise; protected dropCompositeUniqueConstraints(): Promise; protected dropOldExclusions(): Promise; /** * Creates tables that do not exist in the database yet. * New tables are created without foreign and primary keys. * Primary key only can be created in conclusion with auto generated column. */ protected createNewTables(): Promise; protected createViews(): Promise; protected dropOldViews(): Promise; /** * Drops all columns that exist in the table, but does not exist in the metadata (left old). * We drop their keys too, since it should be safe. */ protected dropRemovedColumns(): Promise; /** * Adds columns from metadata which does not exist in the table. * Columns are created without keys. */ protected addNewColumns(): Promise; /** * Updates composite primary keys. */ protected updatePrimaryKeys(): Promise; /** * Update all exist columns which metadata has changed. * Still don't create keys. Also we don't touch foreign keys of the changed columns. */ protected updateExistColumns(): Promise; /** * Creates composite indices which are missing in db yet. */ protected createNewIndices(): Promise; protected createNewChecks(): Promise; /** * Creates composite uniques which are missing in db yet. */ protected createCompositeUniqueConstraints(): Promise; /** * Creates exclusions which are missing in db yet. */ protected createNewExclusions(): Promise; /** * Creates foreign keys which does not exist in the table yet. */ protected createForeignKeys(): Promise; /** * Drops all foreign keys where given column of the given table is being used. */ protected dropColumnReferencedForeignKeys(tablePath: string, columnName: string): Promise; /** * Drops all composite indices, related to given column. */ protected dropColumnCompositeIndices(tablePath: string, columnName: string): Promise; /** * Drops all composite uniques, related to given column. */ protected dropColumnCompositeUniques(tablePath: string, columnName: string): Promise; /** * Creates new columns from the given column metadatas. */ protected metadataColumnsToTableColumnOptions(columns: ColumnMetadata[]): TableColumnOptions[]; /** * Creates typeorm service table for storing user defined Views. */ protected createTypeormMetadataTable(): Promise; }