up-to-date sql object info tab

This commit is contained in:
SPRINX0\prochazka
2024-12-04 10:44:43 +01:00
parent 462d5e3187
commit ec707b5af3
2 changed files with 37 additions and 15 deletions

View File

@@ -20,18 +20,16 @@
import invalidateCommands from '../commands/invalidateCommands'; import invalidateCommands from '../commands/invalidateCommands';
import createActivator, { getActiveComponent } from '../utility/createActivator'; import createActivator, { getActiveComponent } from '../utility/createActivator';
import ToolStripContainer from '../buttons/ToolStripContainer.svelte'; import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
import { useConnectionInfo } from '../utility/metadataLoaders'; import { useConnectionInfo, useDatabaseInfo } from '../utility/metadataLoaders';
import { extensions } from '../stores'; import { extensions } from '../stores';
import { findEngineDriver } from 'dbgate-tools'; import { findEngineDriver } from 'dbgate-tools';
import registerCommand from '../commands/registerCommand'; import registerCommand from '../commands/registerCommand';
import applyScriptTemplate, { getSupportedScriptTemplates } from '../utility/applyScriptTemplate'; import applyScriptTemplate, { getSupportedScriptTemplates } from '../utility/applyScriptTemplate';
import LoadingInfo from '../elements/LoadingInfo.svelte'; import LoadingInfo from '../elements/LoadingInfo.svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import SelectField from '../forms/SelectField.svelte'; import SelectField from '../forms/SelectField.svelte';
import { changeTab } from '../utility/common'; import { changeTab } from '../utility/common';
import ToolStripButton from '../buttons/ToolStripButton.svelte'; import ToolStripButton from '../buttons/ToolStripButton.svelte';
import openNewTab from '../utility/openNewTab'; import openNewTab from '../utility/openNewTab';
import { template } from 'lodash';
export let tabid; export let tabid;
export let appObjectData; export let appObjectData;
@@ -55,6 +53,7 @@
$: connection = useConnectionInfo({ conid }); $: connection = useConnectionInfo({ conid });
$: driver = findEngineDriver($connection, $extensions); $: driver = findEngineDriver($connection, $extensions);
$: dbinfo = useDatabaseInfo({ conid, database });
const tabFocused: any = getContext('tabFocused'); const tabFocused: any = getContext('tabFocused');
@@ -77,7 +76,7 @@
</script> </script>
<ToolStripContainer> <ToolStripContainer>
{#await applyScriptTemplate(scriptTemplate ?? defaultScriptTemplate, $extensions, appObjectData)} {#await applyScriptTemplate(scriptTemplate ?? defaultScriptTemplate, $extensions, appObjectData, $dbinfo, $connection)}
<LoadingInfo message="Loading script..." /> <LoadingInfo message="Loading script..." />
{:then sql} {:then sql}
<AceEditor <AceEditor

View File

@@ -1,19 +1,40 @@
import { getDbCore, getConnectionInfo, getSqlObjectInfo } from './metadataLoaders'; import { getDbCore, getConnectionInfo, getSqlObjectInfo } from './metadataLoaders';
import sqlFormatter from 'sql-formatter'; import sqlFormatter from 'sql-formatter';
import { driverBase, findEngineDriver } from 'dbgate-tools'; import { driverBase, findEngineDriver } from 'dbgate-tools';
import { DatabaseInfo } from 'dbgate-types';
async function generateTableSql(extensions, props, dumpProc, format = false) { function extractDbObjectInfo(dbinfo: DatabaseInfo, { objectTypeField, pureName, schemaName }) {
const tableInfo = await getDbCore(props, props.objectTypeField || 'tables'); if (!dbinfo) return null;
const connection = await getConnectionInfo(props); return dbinfo[objectTypeField || 'tables'].find(x => 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 driver = findEngineDriver(connection, extensions) || driverBase;
const dmp = driver.createDumper(); const dmp = driver.createDumper();
if (tableInfo) dumpProc(dmp, tableInfo); if (tableInfo) dumpProc(dmp, tableInfo);
return format ? sqlFormatter.format(dmp.s) : dmp.s; 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') { 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') { if (scriptTemplate == 'SELECT') {
return generateTableSql( return generateTableSql(
@@ -26,18 +47,20 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr
tableInfo tableInfo
); );
}, },
true true,
dbinfo,
connectionInfo
); );
} }
if (scriptTemplate == 'CREATE OBJECT') { if (scriptTemplate == 'CREATE OBJECT') {
const objectInfo = await getSqlObjectInfo(props); const objectInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props);
if (objectInfo) { if (objectInfo) {
if (objectInfo.requiresFormat && objectInfo.createSql) return sqlFormatter.format(objectInfo.createSql); if (objectInfo.requiresFormat && objectInfo.createSql) return sqlFormatter.format(objectInfo.createSql);
else return objectInfo.createSql; else return objectInfo.createSql;
} }
} }
if (scriptTemplate == 'ALTER OBJECT') { if (scriptTemplate == 'ALTER OBJECT') {
const objectInfo = await getSqlObjectInfo(props); const objectInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props);
if (objectInfo) { if (objectInfo) {
const createSql = const createSql =
objectInfo.requiresFormat && objectInfo.createSql objectInfo.requiresFormat && objectInfo.createSql
@@ -48,8 +71,8 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr
} }
} }
if (scriptTemplate == 'EXECUTE PROCEDURE') { if (scriptTemplate == 'EXECUTE PROCEDURE') {
const procedureInfo = await getSqlObjectInfo(props); const procedureInfo = dbinfo ? extractDbObjectInfo(dbinfo, props) : await getSqlObjectInfo(props);
const connection = await getConnectionInfo(props); const connection = connectionInfo || (await getConnectionInfo(props));
const driver = findEngineDriver(connection, extensions) || driverBase; const driver = findEngineDriver(connection, extensions) || driverBase;
const dmp = driver.createDumper(); const dmp = driver.createDumper();
@@ -57,7 +80,7 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr
return dmp.s; return dmp.s;
} }
const connection = await getConnectionInfo(props); const connection = connectionInfo || (await getConnectionInfo(props));
const driver = findEngineDriver(connection, extensions) || driverBase; const driver = findEngineDriver(connection, extensions) || driverBase;
const res = await driver.getScriptTemplateContent(scriptTemplate, props); const res = await driver.getScriptTemplateContent(scriptTemplate, props);