diff --git a/packages/web/src/tabs/SqlObjectTab.svelte b/packages/web/src/tabs/SqlObjectTab.svelte index 5d78318f8..042fd0f21 100644 --- a/packages/web/src/tabs/SqlObjectTab.svelte +++ b/packages/web/src/tabs/SqlObjectTab.svelte @@ -20,18 +20,16 @@ import invalidateCommands from '../commands/invalidateCommands'; import createActivator, { getActiveComponent } from '../utility/createActivator'; import ToolStripContainer from '../buttons/ToolStripContainer.svelte'; - import { useConnectionInfo } from '../utility/metadataLoaders'; + import { useConnectionInfo, useDatabaseInfo } from '../utility/metadataLoaders'; import { extensions } from '../stores'; import { findEngineDriver } from 'dbgate-tools'; import registerCommand from '../commands/registerCommand'; import applyScriptTemplate, { getSupportedScriptTemplates } from '../utility/applyScriptTemplate'; import LoadingInfo from '../elements/LoadingInfo.svelte'; - import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte'; import SelectField from '../forms/SelectField.svelte'; import { changeTab } from '../utility/common'; import ToolStripButton from '../buttons/ToolStripButton.svelte'; import openNewTab from '../utility/openNewTab'; - import { template } from 'lodash'; export let tabid; export let appObjectData; @@ -55,6 +53,7 @@ $: connection = useConnectionInfo({ conid }); $: driver = findEngineDriver($connection, $extensions); + $: dbinfo = useDatabaseInfo({ conid, database }); const tabFocused: any = getContext('tabFocused'); @@ -77,7 +76,7 @@ - {#await applyScriptTemplate(scriptTemplate ?? defaultScriptTemplate, $extensions, appObjectData)} + {#await applyScriptTemplate(scriptTemplate ?? defaultScriptTemplate, $extensions, appObjectData, $dbinfo, $connection)} {:then sql} x.pureName == pureName && x.schemaName == schemaName); +} + +async function generateTableSql(extensions, props, dumpProc, format = false, dbinfo?: DatabaseInfo, connectionInfo?) { + const tableInfo = dbinfo + ? extractDbObjectInfo(dbinfo, props) + : await getDbCore(props, props.objectTypeField || 'tables'); + const connection = connectionInfo || (await getConnectionInfo(props)); const driver = findEngineDriver(connection, extensions) || driverBase; const dmp = driver.createDumper(); if (tableInfo) dumpProc(dmp, tableInfo); return format ? sqlFormatter.format(dmp.s) : dmp.s; } -export default async function applyScriptTemplate(scriptTemplate, extensions, props) { +export default async function applyScriptTemplate( + scriptTemplate, + extensions, + props, + dbinfo?: DatabaseInfo, + connectionInfo? +) { if (scriptTemplate == 'CREATE TABLE') { - return generateTableSql(extensions, props, (dmp, tableInfo) => dmp.createTable(tableInfo)); + return generateTableSql( + extensions, + props, + (dmp, tableInfo) => dmp.createTable(tableInfo), + false, + dbinfo, + connectionInfo + ); } if (scriptTemplate == 'SELECT') { return generateTableSql( @@ -26,18 +47,20 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr tableInfo ); }, - true + true, + dbinfo, + connectionInfo ); } if (scriptTemplate == 'CREATE OBJECT') { - const objectInfo = await getSqlObjectInfo(props); + const objectInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props); if (objectInfo) { if (objectInfo.requiresFormat && objectInfo.createSql) return sqlFormatter.format(objectInfo.createSql); else return objectInfo.createSql; } } if (scriptTemplate == 'ALTER OBJECT') { - const objectInfo = await getSqlObjectInfo(props); + const objectInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props); if (objectInfo) { const createSql = objectInfo.requiresFormat && objectInfo.createSql @@ -48,8 +71,8 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr } } if (scriptTemplate == 'EXECUTE PROCEDURE') { - const procedureInfo = await getSqlObjectInfo(props); - const connection = await getConnectionInfo(props); + const procedureInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props); + const connection = connectionInfo || (await getConnectionInfo(props)); const driver = findEngineDriver(connection, extensions) || driverBase; const dmp = driver.createDumper(); @@ -57,7 +80,7 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr return dmp.s; } - const connection = await getConnectionInfo(props); + const connection = connectionInfo || (await getConnectionInfo(props)); const driver = findEngineDriver(connection, extensions) || driverBase; const res = await driver.getScriptTemplateContent(scriptTemplate, props);