mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 08:26:01 +00:00
145 lines
5.0 KiB
TypeScript
145 lines
5.0 KiB
TypeScript
import _ from 'lodash';
|
|
import {
|
|
ColumnInfo,
|
|
ConstraintInfo,
|
|
DatabaseInfo,
|
|
ForeignKeyInfo,
|
|
PrimaryKeyInfo,
|
|
TableInfo,
|
|
IndexInfo,
|
|
CheckInfo,
|
|
UniqueInfo,
|
|
SqlObjectInfo,
|
|
NamedObjectInfo,
|
|
ColumnsConstraintInfo,
|
|
} from '../../types';
|
|
|
|
export class DatabaseInfoAlterProcessor {
|
|
constructor(public db: DatabaseInfo) {}
|
|
|
|
createTable(table: TableInfo) {
|
|
this.db.tables.push(table);
|
|
}
|
|
|
|
dropTable(table: TableInfo) {
|
|
_.remove(this.db.tables, x => x.pureName == table.pureName && x.schemaName == table.schemaName);
|
|
}
|
|
|
|
createSqlObject(obj: SqlObjectInfo) {
|
|
this.db[obj.objectTypeField].push(obj);
|
|
}
|
|
|
|
dropSqlObject(obj: SqlObjectInfo) {
|
|
_.remove(
|
|
this.db[obj.objectTypeField] as SqlObjectInfo[],
|
|
x => x.pureName == obj.pureName && x.schemaName == obj.schemaName
|
|
);
|
|
}
|
|
|
|
createColumn(column: ColumnInfo) {
|
|
const table = this.db.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
|
|
if (!table) throw new Error(`createColumn error, cannot find table: ${column.schemaName}.${column.pureName}`);
|
|
table.columns.push(column);
|
|
}
|
|
|
|
changeColumn(oldColumn: ColumnInfo, newColumn: ColumnInfo) {
|
|
const table = this.db.tables.find(x => x.pureName == oldColumn.pureName && x.schemaName == oldColumn.schemaName);
|
|
if (!table) throw new Error(`changeColumn error, cannot find table: ${oldColumn.schemaName}.${oldColumn.pureName}`);
|
|
table.columns = table.columns.map(x => (x.columnName == oldColumn.columnName ? newColumn : x));
|
|
}
|
|
|
|
dropColumn(column: ColumnInfo) {
|
|
const table = this.db.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
|
|
if (!table) throw new Error(`dropColumn error, cannot find table: ${column.schemaName}.${column.pureName}`);
|
|
_.remove(table.columns, x => x.columnName == column.columnName);
|
|
}
|
|
|
|
createConstraint(constraint: ConstraintInfo) {
|
|
const table = this.db.tables.find(x => x.pureName == constraint.pureName && x.schemaName == constraint.schemaName);
|
|
switch (constraint.constraintType) {
|
|
case 'primaryKey':
|
|
table.primaryKey = constraint as PrimaryKeyInfo;
|
|
break;
|
|
case 'sortingKey':
|
|
table.sortingKey = constraint as ColumnsConstraintInfo;
|
|
break;
|
|
case 'foreignKey':
|
|
table.foreignKeys.push(constraint as ForeignKeyInfo);
|
|
break;
|
|
case 'index':
|
|
table.indexes.push(constraint as IndexInfo);
|
|
break;
|
|
case 'unique':
|
|
table.uniques.push(constraint as UniqueInfo);
|
|
break;
|
|
case 'check':
|
|
table.checks.push(constraint as CheckInfo);
|
|
break;
|
|
}
|
|
}
|
|
|
|
changeConstraint(oldConstraint: ConstraintInfo, newConstraint: ConstraintInfo) {
|
|
const table = this.db.tables.find(
|
|
x => x.pureName == oldConstraint.pureName && x.schemaName == oldConstraint.schemaName
|
|
);
|
|
}
|
|
|
|
dropConstraint(constraint: ConstraintInfo) {
|
|
const table = this.db.tables.find(x => x.pureName == constraint.pureName && x.schemaName == constraint.schemaName);
|
|
switch (constraint.constraintType) {
|
|
case 'primaryKey':
|
|
table.primaryKey = null;
|
|
break;
|
|
case 'sortingKey':
|
|
table.sortingKey = null;
|
|
break;
|
|
case 'foreignKey':
|
|
table.foreignKeys = table.foreignKeys.filter(x => x.constraintName != constraint.constraintName);
|
|
break;
|
|
case 'index':
|
|
table.indexes = table.indexes.filter(x => x.constraintName != constraint.constraintName);
|
|
break;
|
|
case 'unique':
|
|
table.uniques = table.uniques.filter(x => x.constraintName != constraint.constraintName);
|
|
break;
|
|
case 'check':
|
|
table.checks = table.checks.filter(x => x.constraintName != constraint.constraintName);
|
|
break;
|
|
}
|
|
}
|
|
|
|
renameTable(table: TableInfo, newName: string) {
|
|
this.db.tables.find(x => x.pureName == table.pureName && x.schemaName == table.schemaName).pureName = newName;
|
|
}
|
|
|
|
renameColumn(column: ColumnInfo, newName: string) {
|
|
const table = this.db.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
|
|
table.columns.find(x => x.columnName == column.columnName).columnName = newName;
|
|
}
|
|
|
|
renameConstraint(constraint: ConstraintInfo, newName: string) {}
|
|
|
|
recreateTable(oldTable: TableInfo, newTable: TableInfo) {
|
|
throw new Error('recreateTable not implemented for DatabaseInfoAlterProcessor');
|
|
}
|
|
|
|
fillPreloadedRows(
|
|
table: NamedObjectInfo,
|
|
oldRows: any[],
|
|
newRows: any[],
|
|
key: string[],
|
|
insertOnly: string[],
|
|
autoIncrementColumn: string
|
|
) {
|
|
const tableInfo = this.db.tables.find(x => x.pureName == table.pureName && x.schemaName == table.schemaName);
|
|
tableInfo.preloadedRows = newRows;
|
|
tableInfo.preloadedRowsKey = key;
|
|
tableInfo.preloadedRowsInsertOnly = insertOnly;
|
|
}
|
|
|
|
setTableOption(table: TableInfo, optionName: string, optionValue: string) {
|
|
const tableInfo = this.db.tables.find(x => x.pureName == table.pureName && x.schemaName == table.schemaName);
|
|
tableInfo[optionName] = optionValue;
|
|
}
|
|
}
|