mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 01:33:59 +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,13 +724,7 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createDatabaseObjectMenu(data, connection = null) {
|
function menuItemMapper(menu, data, connection) {
|
||||||
const driver = findEngineDriver(data, getExtensions());
|
|
||||||
|
|
||||||
const { objectTypeField } = data;
|
|
||||||
return createMenus(objectTypeField, driver)
|
|
||||||
.filter(x => x)
|
|
||||||
.map(menu => {
|
|
||||||
if (menu.divider) return menu;
|
if (menu.divider) return menu;
|
||||||
|
|
||||||
if (menu.isExport) {
|
if (menu.isExport) {
|
||||||
@@ -823,13 +769,29 @@
|
|||||||
if (connection?.isReadOnly && menu.requiresWriteAccess) {
|
if (connection?.isReadOnly && menu.requiresWriteAccess) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (menu.submenu) {
|
||||||
|
return {
|
||||||
|
...menu,
|
||||||
|
submenu: menu.submenu.map(x => menuItemMapper(x, data, connection)),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
text: menu.label,
|
text: menu.label,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
databaseObjectMenuClickHandler(data, menu);
|
databaseObjectMenuClickHandler(data, menu);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
|
||||||
|
export function createDatabaseObjectMenu(data, connection = null) {
|
||||||
|
const driver = findEngineDriver(data, getExtensions());
|
||||||
|
|
||||||
|
const { objectTypeField } = data;
|
||||||
|
return createMenus(objectTypeField, driver)
|
||||||
|
.filter(x => x)
|
||||||
|
.map(menu => menuItemMapper(menu, data, connection));
|
||||||
}
|
}
|
||||||
|
|
||||||
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