rename table ctx menu

This commit is contained in:
Jan Prochazka
2021-09-10 20:26:45 +02:00
parent 016e96d0e6
commit a5f39da8ae
3 changed files with 66 additions and 24 deletions

View File

@@ -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);
} }

View File

@@ -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;

View 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));
},
});
}