Files
dbgate/packages/web/src/utility/alterDatabaseTools.ts
2021-12-22 10:59:00 +01:00

41 lines
1.4 KiB
TypeScript

import _ from 'lodash';
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 { apiCall } from './api';
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 = _.cloneDeep(db);
updateFunc(dbUpdated);
const { sql, recreates } = getAlterDatabaseScript(db, dbUpdated, {}, db, dbUpdated, driver);
showModal(ConfirmSqlModal, {
sql,
recreates,
onConfirm: async () => {
const resp = await apiCall('database-connections/run-script', { conid, database, sql });
await apiCall('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));
},
});
}