mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 17:53:59 +00:00
up-to-date sql object info tab
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user