mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-27 13:46:00 +00:00
drop table context menu
This commit is contained in:
@@ -246,6 +246,16 @@ export class AlterPlan {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (op.operationType == 'dropTable') {
|
||||||
|
return [
|
||||||
|
...(op.oldObject.dependencies || []).map(oldObject => ({
|
||||||
|
operationType: 'dropConstraint',
|
||||||
|
oldObject,
|
||||||
|
})),
|
||||||
|
op,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return [op];
|
return [op];
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -371,6 +381,9 @@ export function runAlterOperation(op: AlterOperation, processor: AlterProcessor)
|
|||||||
case 'dropColumn':
|
case 'dropColumn':
|
||||||
processor.dropColumn(op.oldObject);
|
processor.dropColumn(op.oldObject);
|
||||||
break;
|
break;
|
||||||
|
case 'dropTable':
|
||||||
|
processor.dropTable(op.oldObject);
|
||||||
|
break;
|
||||||
case 'changeConstraint':
|
case 'changeConstraint':
|
||||||
processor.changeConstraint(op.oldObject, op.newObject);
|
processor.changeConstraint(op.oldObject, op.newObject);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -285,6 +285,34 @@ export function createAlterTablePlan(
|
|||||||
return plan;
|
return plan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createAlterDatabasePlan(
|
||||||
|
oldDb: DatabaseInfo,
|
||||||
|
newDb: DatabaseInfo,
|
||||||
|
opts: DbDiffOptions,
|
||||||
|
db: DatabaseInfo,
|
||||||
|
driver: EngineDriver
|
||||||
|
): AlterPlan {
|
||||||
|
const plan = new AlterPlan(db, driver.dialect);
|
||||||
|
|
||||||
|
for (const objectTypeField of ['tables']) {
|
||||||
|
for (const oldobj of oldDb[objectTypeField]) {
|
||||||
|
const newobj = newDb[objectTypeField].find(x => x.pairingId == oldobj.pairingId);
|
||||||
|
if (objectTypeField == 'tables') {
|
||||||
|
if (newobj == null) plan.dropTable(oldobj);
|
||||||
|
else planAlterTable(plan, oldobj, newobj, opts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const newobj of newDb[objectTypeField]) {
|
||||||
|
const oldobj = oldDb[objectTypeField].find(x => x.pairingId == newobj.pairingId);
|
||||||
|
if (objectTypeField == 'tables') {
|
||||||
|
if (newobj == null) plan.createTable(newobj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plan.transformPlan();
|
||||||
|
return plan;
|
||||||
|
}
|
||||||
|
|
||||||
export function getAlterTableScript(
|
export function getAlterTableScript(
|
||||||
oldTable: TableInfo,
|
oldTable: TableInfo,
|
||||||
newTable: TableInfo,
|
newTable: TableInfo,
|
||||||
@@ -294,6 +322,19 @@ export function getAlterTableScript(
|
|||||||
): string {
|
): string {
|
||||||
const plan = createAlterTablePlan(oldTable, newTable, opts, db, driver);
|
const plan = createAlterTablePlan(oldTable, newTable, opts, db, driver);
|
||||||
const dmp = driver.createDumper();
|
const dmp = driver.createDumper();
|
||||||
plan.run(dmp );
|
plan.run(dmp);
|
||||||
|
return dmp.s;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAlterDatabaseScript(
|
||||||
|
oldDb: DatabaseInfo,
|
||||||
|
newDb: DatabaseInfo,
|
||||||
|
opts: DbDiffOptions,
|
||||||
|
db: DatabaseInfo,
|
||||||
|
driver: EngineDriver
|
||||||
|
): string {
|
||||||
|
const plan = createAlterDatabasePlan(oldDb, newDb, opts, db, driver);
|
||||||
|
const dmp = driver.createDumper();
|
||||||
|
plan.run(dmp);
|
||||||
return dmp.s;
|
return dmp.s;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,10 @@
|
|||||||
label: 'Open structure',
|
label: 'Open structure',
|
||||||
tab: 'TableStructureTab',
|
tab: 'TableStructureTab',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Drop table',
|
||||||
|
isDrop: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: 'Query designer',
|
label: 'Query designer',
|
||||||
isQueryDesigner: true,
|
isQueryDesigner: true,
|
||||||
@@ -335,8 +339,8 @@
|
|||||||
import AppObjectCore from './AppObjectCore.svelte';
|
import AppObjectCore from './AppObjectCore.svelte';
|
||||||
import { currentDatabase, extensions, openedConnections } from '../stores';
|
import { currentDatabase, extensions, openedConnections } from '../stores';
|
||||||
import openNewTab from '../utility/openNewTab';
|
import openNewTab from '../utility/openNewTab';
|
||||||
import { filterName } from 'dbgate-tools';
|
import { filterName, generateDbPairingId, getAlterDatabaseScript } from 'dbgate-tools';
|
||||||
import { getConnectionInfo } from '../utility/metadataLoaders';
|
import { getConnectionInfo, getDatabaseInfo } from '../utility/metadataLoaders';
|
||||||
import fullDisplayName from '../utility/fullDisplayName';
|
import fullDisplayName from '../utility/fullDisplayName';
|
||||||
import ImportExportModal from '../modals/ImportExportModal.svelte';
|
import ImportExportModal from '../modals/ImportExportModal.svelte';
|
||||||
import { showModal } from '../modals/modalTools';
|
import { showModal } from '../modals/modalTools';
|
||||||
@@ -347,6 +351,8 @@
|
|||||||
import getElectron from '../utility/getElectron';
|
import getElectron from '../utility/getElectron';
|
||||||
import { exportElectronFile } from '../utility/exportElectronFile';
|
import { exportElectronFile } from '../utility/exportElectronFile';
|
||||||
import createQuickExportMenu from '../utility/createQuickExportMenu';
|
import createQuickExportMenu from '../utility/createQuickExportMenu';
|
||||||
|
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
|
||||||
|
import axiosInstance from '../utility/axiosInstance';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
@@ -500,6 +506,36 @@
|
|||||||
conid: data.conid,
|
conid: data.conid,
|
||||||
database: data.database,
|
database: data.database,
|
||||||
});
|
});
|
||||||
|
} else if (menu.isDrop) {
|
||||||
|
const { conid, database } = data;
|
||||||
|
const db = generateDbPairingId(await getDatabaseInfo({ conid, database }));
|
||||||
|
console.log('DB', db);
|
||||||
|
const driver = await getDriver();
|
||||||
|
const dbUpdated = {
|
||||||
|
...db,
|
||||||
|
[data.objectTypeField]: (db[data.objectTypeField] || []).filter(
|
||||||
|
x => x.schemaName != data.schemaName || x.pureName != data.pureName
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const sql = getAlterDatabaseScript(db, dbUpdated, {}, db, driver);
|
||||||
|
|
||||||
|
showModal(ConfirmSqlModal, {
|
||||||
|
sql,
|
||||||
|
onConfirm: async () => {
|
||||||
|
const resp = await axiosInstance.request({
|
||||||
|
url: 'database-connections/run-script',
|
||||||
|
method: 'post',
|
||||||
|
params: {
|
||||||
|
conid,
|
||||||
|
database,
|
||||||
|
},
|
||||||
|
data: { sql },
|
||||||
|
});
|
||||||
|
await axiosInstance.post('database-connections/sync-model', { conid, database });
|
||||||
|
},
|
||||||
|
engine: driver.engine,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
openDatabaseObjectDetail(menu.tab, menu.scriptTemplate, data, menu.forceNewTab, menu.initialData);
|
openDatabaseObjectDetail(menu.tab, menu.scriptTemplate, data, menu.forceNewTab, menu.initialData);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user