mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 15:33:57 +00:00
rename table ctx menu
This commit is contained in:
@@ -44,6 +44,10 @@
|
|||||||
label: 'Drop table',
|
label: 'Drop table',
|
||||||
isDrop: true,
|
isDrop: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Rename table',
|
||||||
|
isRename: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: 'Query designer',
|
label: 'Query designer',
|
||||||
isQueryDesigner: true,
|
isQueryDesigner: true,
|
||||||
@@ -353,6 +357,7 @@
|
|||||||
import createQuickExportMenu from '../utility/createQuickExportMenu';
|
import createQuickExportMenu from '../utility/createQuickExportMenu';
|
||||||
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
|
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
|
||||||
import axiosInstance from '../utility/axiosInstance';
|
import axiosInstance from '../utility/axiosInstance';
|
||||||
|
import { alterDatabaseDialog, renameDatabaseObjectDialog } from '../utility/alterDatabaseTools';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
@@ -508,34 +513,20 @@
|
|||||||
});
|
});
|
||||||
} else if (menu.isDrop) {
|
} else if (menu.isDrop) {
|
||||||
const { conid, database } = data;
|
const { conid, database } = data;
|
||||||
const db = generateDbPairingId(await getDatabaseInfo({ conid, database }));
|
alterDatabaseDialog(conid, database, db => ({
|
||||||
console.log('DB', db);
|
|
||||||
const driver = await getDriver();
|
|
||||||
const dbUpdated = {
|
|
||||||
...db,
|
...db,
|
||||||
[data.objectTypeField]: (db[data.objectTypeField] || []).filter(
|
[data.objectTypeField]: (db[data.objectTypeField] || []).filter(
|
||||||
x => x.schemaName != data.schemaName || x.pureName != data.pureName
|
x => x.schemaName != data.schemaName || x.pureName != data.pureName
|
||||||
),
|
),
|
||||||
};
|
}));
|
||||||
|
} else if (menu.isRename) {
|
||||||
const sql = getAlterDatabaseScript(db, dbUpdated, {}, db, driver);
|
const { conid, database } = data;
|
||||||
|
renameDatabaseObjectDialog(conid, database, data.pureName, (db, newName) => ({
|
||||||
showModal(ConfirmSqlModal, {
|
...db,
|
||||||
sql,
|
[data.objectTypeField]: (db[data.objectTypeField] || []).map(x =>
|
||||||
onConfirm: async () => {
|
x.schemaName == data.schemaName && x.pureName == data.pureName ? { ...x, pureName: newName } : x
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,3 +150,9 @@ useSettings().subscribe(value => {
|
|||||||
invalidateCommands();
|
invalidateCommands();
|
||||||
});
|
});
|
||||||
export const getCurrentSettings = () => currentSettingsValue || {};
|
export const getCurrentSettings = () => currentSettingsValue || {};
|
||||||
|
|
||||||
|
let extensionsValue = null;
|
||||||
|
extensions.subscribe(value => {
|
||||||
|
extensionsValue = value;
|
||||||
|
});
|
||||||
|
export const getExtensions = () => extensionsValue;
|
||||||
|
|||||||
45
packages/web/src/utility/alterDatabaseTools.ts
Normal file
45
packages/web/src/utility/alterDatabaseTools.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import { findEngineDriver, generateDbPairingId, getAlterDatabaseScript } from 'dbgate-tools';
|
||||||
|
import InputTextModal from '../modals/InputTextModal.svelte';
|
||||||
|
import { showModal } from '../modals/modalTools';
|
||||||
|
import { getExtensions } from '../stores';
|
||||||
|
import { getConnectionInfo, getDatabaseInfo } from './metadataLoaders';
|
||||||
|
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
|
||||||
|
import axiosInstance from './axiosInstance';
|
||||||
|
|
||||||
|
export async function alterDatabaseDialog(conid, database, updateFunc) {
|
||||||
|
const conn = await getConnectionInfo({ conid });
|
||||||
|
const driver = findEngineDriver(conn, getExtensions());
|
||||||
|
|
||||||
|
const db = generateDbPairingId(await getDatabaseInfo({ conid, database }));
|
||||||
|
const dbUpdated = updateFunc(db);
|
||||||
|
|
||||||
|
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,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function renameDatabaseObjectDialog(conid, database, oldName, updateFunc) {
|
||||||
|
showModal(InputTextModal, {
|
||||||
|
value: oldName,
|
||||||
|
label: 'New name',
|
||||||
|
header: 'Rename object',
|
||||||
|
onConfirm: newName => {
|
||||||
|
alterDatabaseDialog(conid, database, db => updateFunc(db, newName));
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user