diff --git a/packages/api/src/controllers/metadata.js b/packages/api/src/controllers/metadata.js
index 08433b245..093914a7f 100644
--- a/packages/api/src/controllers/metadata.js
+++ b/packages/api/src/controllers/metadata.js
@@ -38,10 +38,10 @@ module.exports = {
};
},
- viewInfo_meta: 'get',
- async viewInfo({ conid, database, schemaName, pureName }) {
+ sqlObjectInfo_meta: 'get',
+ async sqlObjectInfo({ objectTypeField, conid, database, schemaName, pureName }) {
const opened = await databaseConnections.ensureOpened(conid, database);
- const view = opened.structure.views.find((x) => x.pureName == pureName && x.schemaName == schemaName);
- return view;
+ const res = opened.structure[objectTypeField].find((x) => x.pureName == pureName && x.schemaName == schemaName);
+ return res;
},
};
diff --git a/packages/web/src/TabsPanel.js b/packages/web/src/TabsPanel.js
index 64ee14621..2e2b70818 100644
--- a/packages/web/src/TabsPanel.js
+++ b/packages/web/src/TabsPanel.js
@@ -47,10 +47,10 @@ export default function TabsPanel() {
setOpenedTabs(files => files.filter(x => x.tabid != tabid));
}
};
- console.log(
- 't',
- tabs.map(x => x.tooltip)
- );
+ // console.log(
+ // 't',
+ // tabs.map(x => x.tooltip)
+ // );
return (
<>
diff --git a/packages/web/src/appobj/databaseObjectAppObject.js b/packages/web/src/appobj/databaseObjectAppObject.js
index e9431e524..771e9d311 100644
--- a/packages/web/src/appobj/databaseObjectAppObject.js
+++ b/packages/web/src/appobj/databaseObjectAppObject.js
@@ -10,6 +10,8 @@ import { filterName } from '@dbgate/datalib';
const icons = {
tables: 'table2.svg',
views: 'view2.svg',
+ procedures: 'procedure2.svg',
+ functions: 'function.svg',
};
const menus = {
@@ -34,7 +36,19 @@ const menus = {
},
{
label: 'Show CREATE VIEW script',
- tab: 'ViewCreateScriptTab',
+ tab: 'SqlObjectCreateScriptTab',
+ },
+ ],
+ procedures: [
+ {
+ label: 'Show CREATE PROCEDURE script',
+ tab: 'SqlObjectCreateScriptTab',
+ },
+ ],
+ functions: [
+ {
+ label: 'Show CREATE FUNCTION script',
+ tab: 'SqlObjectCreateScriptTab',
},
],
};
@@ -42,6 +56,8 @@ const menus = {
const defaultTabs = {
tables: 'TableDataTab',
views: 'ViewDataTab',
+ procedures: 'SqlObjectCreateScriptTab',
+ functions: 'SqlObjectCreateScriptTab',
};
async function openObjectDetail(
@@ -65,6 +81,7 @@ async function openObjectDetail(
pureName,
conid,
database,
+ objectTypeField,
},
});
}
diff --git a/packages/web/src/tabs/SqlObjectCreateScriptTab.js b/packages/web/src/tabs/SqlObjectCreateScriptTab.js
new file mode 100644
index 000000000..93524865b
--- /dev/null
+++ b/packages/web/src/tabs/SqlObjectCreateScriptTab.js
@@ -0,0 +1,11 @@
+import React from 'react';
+import { useConnectionInfo, useSqlObjectInfo } from '../utility/metadataLoaders';
+import SqlEditor from '../sqleditor/SqlEditor';
+
+export default function SqlObjectCreateScriptTab({ objectTypeField, conid, database, schemaName, pureName }) {
+ const sqlObjectInfo = useSqlObjectInfo({ conid, database, schemaName, pureName, objectTypeField });
+ const connnection = useConnectionInfo({ conid });
+ if (!connnection || !sqlObjectInfo) return null;
+
+ return ;
+}
diff --git a/packages/web/src/tabs/TableDataTab.js b/packages/web/src/tabs/TableDataTab.js
index 3579f4862..d57ef26c0 100644
--- a/packages/web/src/tabs/TableDataTab.js
+++ b/packages/web/src/tabs/TableDataTab.js
@@ -18,7 +18,7 @@ export default function TableDataTab({ conid, database, schemaName, pureName, ta
useUpdateDatabaseForTab(tabVisible, conid, database);
const connection = useConnectionInfo({ conid });
- console.log('GOT CONNECTION', connection);
+ // console.log('GOT CONNECTION', connection);
// usePropsCompare({ tableInfo, connection, config, cache });
diff --git a/packages/web/src/tabs/ViewCreateScriptTab.js b/packages/web/src/tabs/ViewCreateScriptTab.js
deleted file mode 100644
index 422608a69..000000000
--- a/packages/web/src/tabs/ViewCreateScriptTab.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-import { useConnectionInfo, useViewInfo } from '../utility/metadataLoaders';
-import SqlEditor from '../sqleditor/SqlEditor';
-
-export default function ViewCreateScriptTab({ conid, database, schemaName, pureName }) {
- const viewInfo = useViewInfo({ conid, database, schemaName, pureName });
- const connnection = useConnectionInfo({ conid });
- if (!connnection || !viewInfo) return null;
-
- return ;
-}
diff --git a/packages/web/src/tabs/index.js b/packages/web/src/tabs/index.js
index c5fd31c3d..deefebce1 100644
--- a/packages/web/src/tabs/index.js
+++ b/packages/web/src/tabs/index.js
@@ -2,7 +2,7 @@ import TableDataTab from './TableDataTab';
import ViewDataTab from './ViewDataTab';
import TableStructureTab from './TableStructureTab';
import TableCreateScriptTab from './TableCreateScriptTab';
-import ViewCreateScriptTab from './ViewCreateScriptTab';
+import SqlObjectCreateScriptTab from './SqlObjectCreateScriptTab';
import QueryTab from './QueryTab';
export default {
@@ -11,5 +11,5 @@ export default {
TableStructureTab,
TableCreateScriptTab,
QueryTab,
- ViewCreateScriptTab,
+ SqlObjectCreateScriptTab,
};
diff --git a/packages/web/src/utility/metadataLoaders.js b/packages/web/src/utility/metadataLoaders.js
index 6a248169a..c52cbcb86 100644
--- a/packages/web/src/utility/metadataLoaders.js
+++ b/packages/web/src/utility/metadataLoaders.js
@@ -9,9 +9,9 @@ const tableInfoLoader = ({ conid, database, schemaName, pureName }) => ({
reloadTrigger: `database-structure-changed-${conid}-${database}`,
});
-const viewInfoLoader = ({ conid, database, schemaName, pureName }) => ({
- url: 'metadata/view-info',
- params: { conid, database, schemaName, pureName },
+const sqlObjectInfoLoader = ({ objectTypeField, conid, database, schemaName, pureName }) => ({
+ url: 'metadata/sql-object-info',
+ params: { objectTypeField, conid, database, schemaName, pureName },
reloadTrigger: `database-structure-changed-${conid}-${database}`,
});
@@ -86,12 +86,20 @@ export function useTableInfo(args) {
/** @returns {Promise} */
export function getViewInfo(args) {
- return getCore(viewInfoLoader, args);
+ return getCore(sqlObjectInfoLoader, { ...args, objectTypeField: 'views' });
}
/** @returns {import('@dbgate/types').ViewInfo} */
export function useViewInfo(args) {
- return useCore(viewInfoLoader, args);
+ return useCore(sqlObjectInfoLoader, { ...args, objectTypeField: 'views' });
+}
+
+export function getSqlObjectInfo(args) {
+ return getCore(sqlObjectInfoLoader, args);
+}
+
+export function useSqlObjectInfo(args) {
+ return useCore(sqlObjectInfoLoader, args);
}
/** @returns {Promise} */
diff --git a/packages/web/src/widgets/DatabaseWidget.js b/packages/web/src/widgets/DatabaseWidget.js
index 9e1bc0c41..2a710730e 100644
--- a/packages/web/src/widgets/DatabaseWidget.js
+++ b/packages/web/src/widgets/DatabaseWidget.js
@@ -92,7 +92,7 @@ function SqlObjectList({ conid, database }) {
const [filter, setFilter] = React.useState('');
const objectList = _.flatten(
- ['tables', 'views'].map((objectTypeField) =>
+ ['tables', 'views', 'procedures', 'functions'].map((objectTypeField) =>
((objects || {})[objectTypeField] || []).map((obj) => ({ ...obj, objectTypeField }))
)
);