script templates refactor

This commit is contained in:
SPRINX0\prochazka
2024-11-20 13:51:18 +01:00
parent 794f43d9ae
commit 5abfa85a0e
3 changed files with 152 additions and 113 deletions

View File

@@ -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;

View File

@@ -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()}

View File

@@ -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',
},
];
}
}