mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 23:13:57 +00:00
script templates refactor
This commit is contained in:
@@ -31,6 +31,13 @@
|
|||||||
queries: 'QueryDataTab',
|
queries: 'QueryDataTab',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function createScriptTemplatesSubmenu(objectTypeField) {
|
||||||
|
return {
|
||||||
|
label: 'SQL template',
|
||||||
|
submenu: getSupportedScriptTemplates(objectTypeField),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function createMenusCore(
|
function createMenusCore(
|
||||||
objectTypeField,
|
objectTypeField,
|
||||||
driver
|
driver
|
||||||
@@ -145,14 +152,7 @@
|
|||||||
{
|
{
|
||||||
divider: true,
|
divider: true,
|
||||||
},
|
},
|
||||||
{
|
createScriptTemplatesSubmenu('tables'),
|
||||||
label: 'SQL: CREATE TABLE',
|
|
||||||
scriptTemplate: 'CREATE TABLE',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: SELECT',
|
|
||||||
scriptTemplate: 'SELECT',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'SQL Generator: CREATE TABLE',
|
label: 'SQL Generator: CREATE TABLE',
|
||||||
sqlGeneratorProps: {
|
sqlGeneratorProps: {
|
||||||
@@ -222,22 +222,7 @@
|
|||||||
{
|
{
|
||||||
divider: true,
|
divider: true,
|
||||||
},
|
},
|
||||||
{
|
createScriptTemplatesSubmenu('views'),
|
||||||
label: 'SQL: CREATE VIEW',
|
|
||||||
scriptTemplate: 'CREATE OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: ALTER VIEW',
|
|
||||||
scriptTemplate: 'ALTER OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: CREATE TABLE',
|
|
||||||
scriptTemplate: 'CREATE TABLE',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: SELECT',
|
|
||||||
scriptTemplate: 'SELECT',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'SQL Generator: CREATE VIEW',
|
label: 'SQL Generator: CREATE VIEW',
|
||||||
sqlGeneratorProps: {
|
sqlGeneratorProps: {
|
||||||
@@ -291,22 +276,7 @@
|
|||||||
{
|
{
|
||||||
divider: true,
|
divider: true,
|
||||||
},
|
},
|
||||||
{
|
createScriptTemplatesSubmenu('matviews'),
|
||||||
label: 'SQL: CREATE MATERIALIZED VIEW',
|
|
||||||
scriptTemplate: 'CREATE OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: ALTER MATERIALIZED VIEW',
|
|
||||||
scriptTemplate: 'ALTER OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: CREATE TABLE',
|
|
||||||
scriptTemplate: 'CREATE TABLE',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: SELECT',
|
|
||||||
scriptTemplate: 'SELECT',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'SQL Generator: CREATE MATERIALIZED VIEW',
|
label: 'SQL Generator: CREATE MATERIALIZED VIEW',
|
||||||
sqlGeneratorProps: {
|
sqlGeneratorProps: {
|
||||||
@@ -340,18 +310,7 @@
|
|||||||
isRename: true,
|
isRename: true,
|
||||||
requiresWriteAccess: true,
|
requiresWriteAccess: true,
|
||||||
},
|
},
|
||||||
{
|
createScriptTemplatesSubmenu('procedures'),
|
||||||
label: 'SQL: CREATE PROCEDURE',
|
|
||||||
scriptTemplate: 'CREATE OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: ALTER PROCEDURE',
|
|
||||||
scriptTemplate: 'ALTER OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: EXECUTE',
|
|
||||||
scriptTemplate: 'EXECUTE PROCEDURE',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'SQL Generator: CREATE PROCEDURE',
|
label: 'SQL Generator: CREATE PROCEDURE',
|
||||||
sqlGeneratorProps: {
|
sqlGeneratorProps: {
|
||||||
@@ -377,14 +336,7 @@
|
|||||||
isRename: true,
|
isRename: true,
|
||||||
requiresWriteAccess: true,
|
requiresWriteAccess: true,
|
||||||
},
|
},
|
||||||
{
|
createScriptTemplatesSubmenu('functions'),
|
||||||
label: 'SQL: CREATE FUNCTION',
|
|
||||||
scriptTemplate: 'CREATE OBJECT',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'SQL: ALTER FUNCTION',
|
|
||||||
scriptTemplate: 'ALTER OBJECT',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'SQL Generator: CREATE FUNCTION',
|
label: 'SQL Generator: CREATE FUNCTION',
|
||||||
sqlGeneratorProps: {
|
sqlGeneratorProps: {
|
||||||
@@ -772,64 +724,74 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function menuItemMapper(menu, data, connection) {
|
||||||
|
if (menu.divider) return menu;
|
||||||
|
|
||||||
|
if (menu.isExport) {
|
||||||
|
return createQuickExportMenu(
|
||||||
|
fmt => async () => {
|
||||||
|
const coninfo = await getConnectionInfo(data);
|
||||||
|
exportQuickExportFile(
|
||||||
|
data.pureName,
|
||||||
|
{
|
||||||
|
functionName: menu.functionName,
|
||||||
|
props: {
|
||||||
|
connection: extractShellConnection(coninfo, data.database),
|
||||||
|
..._.pick(data, ['pureName', 'schemaName']),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
fmt
|
||||||
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
onClick: () => {
|
||||||
|
openImportExportTab({
|
||||||
|
sourceStorageType: 'database',
|
||||||
|
sourceConnectionId: data.conid,
|
||||||
|
sourceDatabaseName: extractDbNameFromComposite(data.database),
|
||||||
|
sourceSchemaName: data.schemaName,
|
||||||
|
sourceList: [data.pureName],
|
||||||
|
});
|
||||||
|
// showModal(ImportExportModal, {
|
||||||
|
// initialValues: {
|
||||||
|
// sourceStorageType: 'database',
|
||||||
|
// sourceConnectionId: data.conid,
|
||||||
|
// sourceDatabaseName: data.database,
|
||||||
|
// sourceSchemaName: data.schemaName,
|
||||||
|
// sourceList: [data.pureName],
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection?.isReadOnly && menu.requiresWriteAccess) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu.submenu) {
|
||||||
|
return {
|
||||||
|
...menu,
|
||||||
|
submenu: menu.submenu.map(x => menuItemMapper(x, data, connection)),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
text: menu.label,
|
||||||
|
onClick: () => {
|
||||||
|
databaseObjectMenuClickHandler(data, menu);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function createDatabaseObjectMenu(data, connection = null) {
|
export function createDatabaseObjectMenu(data, connection = null) {
|
||||||
const driver = findEngineDriver(data, getExtensions());
|
const driver = findEngineDriver(data, getExtensions());
|
||||||
|
|
||||||
const { objectTypeField } = data;
|
const { objectTypeField } = data;
|
||||||
return createMenus(objectTypeField, driver)
|
return createMenus(objectTypeField, driver)
|
||||||
.filter(x => x)
|
.filter(x => x)
|
||||||
.map(menu => {
|
.map(menu => menuItemMapper(menu, data, connection));
|
||||||
if (menu.divider) return menu;
|
|
||||||
|
|
||||||
if (menu.isExport) {
|
|
||||||
return createQuickExportMenu(
|
|
||||||
fmt => async () => {
|
|
||||||
const coninfo = await getConnectionInfo(data);
|
|
||||||
exportQuickExportFile(
|
|
||||||
data.pureName,
|
|
||||||
{
|
|
||||||
functionName: menu.functionName,
|
|
||||||
props: {
|
|
||||||
connection: extractShellConnection(coninfo, data.database),
|
|
||||||
..._.pick(data, ['pureName', 'schemaName']),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
fmt
|
|
||||||
);
|
|
||||||
},
|
|
||||||
{
|
|
||||||
onClick: () => {
|
|
||||||
openImportExportTab({
|
|
||||||
sourceStorageType: 'database',
|
|
||||||
sourceConnectionId: data.conid,
|
|
||||||
sourceDatabaseName: extractDbNameFromComposite(data.database),
|
|
||||||
sourceSchemaName: data.schemaName,
|
|
||||||
sourceList: [data.pureName],
|
|
||||||
});
|
|
||||||
// showModal(ImportExportModal, {
|
|
||||||
// initialValues: {
|
|
||||||
// sourceStorageType: 'database',
|
|
||||||
// sourceConnectionId: data.conid,
|
|
||||||
// sourceDatabaseName: data.database,
|
|
||||||
// sourceSchemaName: data.schemaName,
|
|
||||||
// sourceList: [data.pureName],
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connection?.isReadOnly && menu.requiresWriteAccess) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
text: menu.label,
|
|
||||||
onClick: () => {
|
|
||||||
databaseObjectMenuClickHandler(data, menu);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatRowCount(value) {
|
function formatRowCount(value) {
|
||||||
@@ -886,6 +848,7 @@
|
|||||||
import hasPermission from '../utility/hasPermission';
|
import hasPermission from '../utility/hasPermission';
|
||||||
import { openImportExportTab } from '../utility/importExportTools';
|
import { openImportExportTab } from '../utility/importExportTools';
|
||||||
import { matchDatabaseObjectAppObject } from './appObjectMatchers';
|
import { matchDatabaseObjectAppObject } from './appObjectMatchers';
|
||||||
|
import { getSupportedScriptTemplates } from '../utility/applyScriptTemplate';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
export let passProps;
|
export let passProps;
|
||||||
|
|||||||
@@ -450,7 +450,7 @@
|
|||||||
/>
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<AceEditor
|
<AceEditor
|
||||||
mode={driver?.editorMode || 'text'}
|
mode={driver?.editorMode || 'sql'}
|
||||||
value={$editorState.value || ''}
|
value={$editorState.value || ''}
|
||||||
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
||||||
menu={createMenu()}
|
menu={createMenu()}
|
||||||
|
|||||||
@@ -63,3 +63,79 @@ export default async function applyScriptTemplate(scriptTemplate, extensions, pr
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getSupportedScriptTemplates(objectTypeField: string): { label: string; scriptTemplate: string }[] {
|
||||||
|
switch (objectTypeField) {
|
||||||
|
case 'tables':
|
||||||
|
return [
|
||||||
|
{ label: 'CREATE TABLE', scriptTemplate: 'CREATE TABLE' },
|
||||||
|
{ label: 'SELECT', scriptTemplate: 'SELECT' },
|
||||||
|
];
|
||||||
|
case 'views':
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'CREATE VIEW',
|
||||||
|
scriptTemplate: 'CREATE OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'ALTER VIEW',
|
||||||
|
scriptTemplate: 'ALTER OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'CREATE TABLE',
|
||||||
|
scriptTemplate: 'CREATE TABLE',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'SELECT',
|
||||||
|
scriptTemplate: 'SELECT',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
case 'matviews':
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'CREATE MATERIALIZED VIEW',
|
||||||
|
scriptTemplate: 'CREATE OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'ALTER MATERIALIZED VIEW',
|
||||||
|
scriptTemplate: 'ALTER OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'CREATE TABLE',
|
||||||
|
scriptTemplate: 'CREATE TABLE',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'SELECT',
|
||||||
|
scriptTemplate: 'SELECT',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
case 'procedures':
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'CREATE PROCEDURE',
|
||||||
|
scriptTemplate: 'CREATE OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'ALTER PROCEDURE',
|
||||||
|
scriptTemplate: 'ALTER OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'EXECUTE',
|
||||||
|
scriptTemplate: 'EXECUTE PROCEDURE',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
case 'functions':
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'CREATE FUNCTION',
|
||||||
|
scriptTemplate: 'CREATE OBJECT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: ' ALTER FUNCTION',
|
||||||
|
scriptTemplate: 'ALTER OBJECT',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user