pk editor

This commit is contained in:
Jan Prochazka
2021-06-17 13:58:21 +02:00
parent b8ccae570e
commit dea6700a25
6 changed files with 290 additions and 67 deletions

View File

@@ -15,70 +15,3 @@ export function generateTablePairingId(table: TableInfo): TableInfo {
}
return table;
}
function processPrimaryKey(table: TableInfo, oldColumn: ColumnInfo, newColumn: ColumnInfo) {
if (!oldColumn?.isPrimaryKey && newColumn?.isPrimaryKey) {
if (!table.primaryKey) {
table.primaryKey = {
constraintType: 'primaryKey',
pureName: table.pureName,
schemaName: table.schemaName,
columns: [],
};
}
table.primaryKey.columns = [
...table.primaryKey.columns,
{
columnName: newColumn.columnName,
},
];
}
console.log('processPrimaryKey', oldColumn, newColumn);
if (oldColumn?.isPrimaryKey && !newColumn?.isPrimaryKey) {
if (table.primaryKey) {
table.primaryKey = {
...table.primaryKey,
columns: table.primaryKey.columns.filter(x => x.columnName != oldColumn.columnName),
};
if (table.primaryKey.columns.length == 0) {
table.primaryKey = null;
}
}
}
}
export function editorAddColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const res = {
...table,
columns: [...table.columns, { ...column, pairingId: uuidv1() }],
};
processPrimaryKey(res, null, column);
return res;
}
export function editorModifyColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const oldColumn = table?.columns?.find(x => x.pairingId == column.pairingId);
const res = {
...table,
columns: table.columns.map(col => (col.pairingId == column.pairingId ? column : col)),
};
processPrimaryKey(res, oldColumn, column);
return res;
}
export function editorDeleteColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const res = {
...table,
columns: table.columns.filter(col => col.pairingId != column.pairingId),
};
processPrimaryKey(res, column, null);
return res;
}

View File

@@ -12,3 +12,4 @@ export * from './structureTools';
export * from './settingsExtractors';
export * from './filterName';
export * from './diffTools';
export * from './schemaEditorTools';

View File

@@ -0,0 +1,111 @@
import uuidv1 from 'uuid/v1';
import { ColumnInfo, ConstraintInfo, PrimaryKeyInfo, TableInfo } from 'dbgate-types';
function processPrimaryKey(table: TableInfo, oldColumn: ColumnInfo, newColumn: ColumnInfo) {
if (!oldColumn?.isPrimaryKey && newColumn?.isPrimaryKey) {
if (!table.primaryKey) {
table.primaryKey = {
constraintType: 'primaryKey',
pureName: table.pureName,
schemaName: table.schemaName,
columns: [],
};
}
table.primaryKey.columns = [
...table.primaryKey.columns,
{
columnName: newColumn.columnName,
},
];
}
console.log('processPrimaryKey', oldColumn, newColumn);
if (oldColumn?.isPrimaryKey && !newColumn?.isPrimaryKey) {
if (table.primaryKey) {
table.primaryKey = {
...table.primaryKey,
columns: table.primaryKey.columns.filter(x => x.columnName != oldColumn.columnName),
};
if (table.primaryKey.columns.length == 0) {
table.primaryKey = null;
}
}
}
}
export function editorAddColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const res = {
...table,
columns: [...table.columns, { ...column, pairingId: uuidv1() }],
};
processPrimaryKey(res, null, column);
return res;
}
export function editorModifyColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const oldColumn = table?.columns?.find(x => x.pairingId == column.pairingId);
const res = {
...table,
columns: table.columns.map(col => (col.pairingId == column.pairingId ? column : col)),
};
processPrimaryKey(res, oldColumn, column);
return res;
}
export function editorDeleteColumn(table: TableInfo, column: ColumnInfo): TableInfo {
const res = {
...table,
columns: table.columns.filter(col => col.pairingId != column.pairingId),
};
processPrimaryKey(res, column, null);
return res;
}
export function editorAddConstraint(table: TableInfo, constraint: ConstraintInfo): TableInfo {
const res = {
...table,
};
if (constraint.constraintType == 'primaryKey') {
res.primaryKey = {
pairingId: uuidv1(),
...constraint,
} as PrimaryKeyInfo;
}
return res;
}
export function editorModifyConstraint(table: TableInfo, constraint: ConstraintInfo): TableInfo {
const res = {
...table,
};
if (constraint.constraintType == 'primaryKey') {
res.primaryKey = {
...res.primaryKey,
...constraint,
};
}
return res;
}
export function editorDeleteConstraint(table: TableInfo, constraint: ConstraintInfo): TableInfo {
const res = {
...table,
};
if (constraint.constraintType == 'primaryKey') {
res.primaryKey = null;
}
return res;
}