mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-03 08:13:57 +00:00
metadata loaders refactor, cache fixes
This commit is contained in:
@@ -7,7 +7,7 @@ import fullDisplayName from '../utility/fullDisplayName';
|
|||||||
import { filterName } from '@dbgate/datalib';
|
import { filterName } from '@dbgate/datalib';
|
||||||
|
|
||||||
async function openTableDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) {
|
async function openTableDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) {
|
||||||
const connection = await getConnectionInfo(conid);
|
const connection = await getConnectionInfo({ conid });
|
||||||
const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({
|
const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({
|
||||||
schemaName,
|
schemaName,
|
||||||
pureName,
|
pureName,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import fullDisplayName from '../utility/fullDisplayName';
|
|||||||
import { filterName } from '@dbgate/datalib';
|
import { filterName } from '@dbgate/datalib';
|
||||||
|
|
||||||
async function openViewDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) {
|
async function openViewDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) {
|
||||||
const connection = await getConnectionInfo(conid);
|
const connection = await getConnectionInfo({ conid });
|
||||||
const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({
|
const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({
|
||||||
schemaName,
|
schemaName,
|
||||||
pureName,
|
pureName,
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPo
|
|||||||
const editorRef = React.useRef(null);
|
const editorRef = React.useRef(null);
|
||||||
|
|
||||||
useUpdateDatabaseForTab(tabVisible, conid, database);
|
useUpdateDatabaseForTab(tabVisible, conid, database);
|
||||||
const connection = useConnectionInfo(conid);
|
const connection = useConnectionInfo({ conid });
|
||||||
|
|
||||||
const handleChange = (text) => {
|
const handleChange = (text) => {
|
||||||
if (text != null) queryTextRef.current = text;
|
if (text != null) queryTextRef.current = text;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import SqlEditor from '../sqleditor/SqlEditor';
|
|||||||
|
|
||||||
export default function TableCreateScriptTab({ conid, database, schemaName, pureName }) {
|
export default function TableCreateScriptTab({ conid, database, schemaName, pureName }) {
|
||||||
const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
|
const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
|
||||||
const connnection = useConnectionInfo(conid);
|
const connnection = useConnectionInfo({ conid });
|
||||||
if (!connnection || !tableInfo) return null;
|
if (!connnection || !tableInfo) return null;
|
||||||
// console.log(tableInfo);
|
// console.log(tableInfo);
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ export default function TableDataTab({ conid, database, schemaName, pureName, ta
|
|||||||
const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet());
|
const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet());
|
||||||
|
|
||||||
useUpdateDatabaseForTab(tabVisible, conid, database);
|
useUpdateDatabaseForTab(tabVisible, conid, database);
|
||||||
const connection = useConnectionInfo(conid);
|
const connection = useConnectionInfo({ conid });
|
||||||
|
console.log('GOT CONNECTION', connection);
|
||||||
|
|
||||||
// usePropsCompare({ tableInfo, connection, config, cache });
|
// usePropsCompare({ tableInfo, connection, config, cache });
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import SqlEditor from '../sqleditor/SqlEditor';
|
|||||||
|
|
||||||
export default function ViewCreateScriptTab({ conid, database, schemaName, pureName }) {
|
export default function ViewCreateScriptTab({ conid, database, schemaName, pureName }) {
|
||||||
const viewInfo = useViewInfo({ conid, database, schemaName, pureName });
|
const viewInfo = useViewInfo({ conid, database, schemaName, pureName });
|
||||||
const connnection = useConnectionInfo(conid);
|
const connnection = useConnectionInfo({ conid });
|
||||||
if (!connnection || !viewInfo) return null;
|
if (!connnection || !viewInfo) return null;
|
||||||
|
|
||||||
return <SqlEditor engine={connnection && connnection.engine} value={viewInfo.createSql} readOnly />;
|
return <SqlEditor engine={connnection && connnection.engine} value={viewInfo.createSql} readOnly />;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default function ViewDataTab({ conid, database, schemaName, pureName, tab
|
|||||||
const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet());
|
const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet());
|
||||||
|
|
||||||
useUpdateDatabaseForTab(tabVisible, conid, database);
|
useUpdateDatabaseForTab(tabVisible, conid, database);
|
||||||
const connection = useConnectionInfo(conid);
|
const connection = useConnectionInfo({ conid });
|
||||||
|
|
||||||
// usePropsCompare({ tableInfo, connection, config, cache });
|
// usePropsCompare({ tableInfo, connection, config, cache });
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ const [OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs] = createStorageState
|
|||||||
export { OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs };
|
export { OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs };
|
||||||
|
|
||||||
export function useUpdateDatabaseForTab(tabVisible, conid, database) {
|
export function useUpdateDatabaseForTab(tabVisible, conid, database) {
|
||||||
const connection = useConnectionInfo(conid);
|
const connection = useConnectionInfo({ conid });
|
||||||
const setDb = useSetCurrentDatabase();
|
const setDb = useSetCurrentDatabase();
|
||||||
const previousTabVisible = usePrevious(!!(tabVisible && connection));
|
const previousTabVisible = usePrevious(!!(tabVisible && connection));
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,18 @@ const tableInfoLoader = ({ conid, database, schemaName, pureName }) => ({
|
|||||||
reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const viewInfoLoader = ({ conid, database, schemaName, pureName }) => ({
|
||||||
|
url: 'metadata/view-info',
|
||||||
|
params: { conid, database, schemaName, pureName },
|
||||||
|
reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
||||||
|
});
|
||||||
|
|
||||||
|
const connectionInfoLoader = ({ conid }) => ({
|
||||||
|
url: 'connections/get',
|
||||||
|
params: { conid },
|
||||||
|
reloadTrigger: 'connection-list-changed',
|
||||||
|
});
|
||||||
|
|
||||||
async function getCore(loader, args) {
|
async function getCore(loader, args) {
|
||||||
const { url, params, reloadTrigger } = loader(args);
|
const { url, params, reloadTrigger } = loader(args);
|
||||||
const key = stableStringify({ url, ...params });
|
const key = stableStringify({ url, ...params });
|
||||||
@@ -53,55 +65,42 @@ export function getTableInfo(args) {
|
|||||||
export function useTableInfo(args) {
|
export function useTableInfo(args) {
|
||||||
return useCore(tableInfoLoader, args);
|
return useCore(tableInfoLoader, args);
|
||||||
}
|
}
|
||||||
// export const useTableInfo = createUse(tableInfoLoader);
|
|
||||||
|
|
||||||
// export async function getTableInfo({ conid, database, schemaName, pureName }) {
|
/** @returns {Promise<import('@dbgate/types').ViewInfo>} */
|
||||||
|
export function getViewInfo(args) {
|
||||||
|
return getCore(viewInfoLoader, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {import('@dbgate/types').ViewInfo} */
|
||||||
|
export function useViewInfo(args) {
|
||||||
|
return useCore(viewInfoLoader, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {Promise<import('@dbgate/types').StoredConnection>} */
|
||||||
|
export function getConnectionInfo(args) {
|
||||||
|
return getCore(connectionInfoLoader, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {import('@dbgate/types').StoredConnection} */
|
||||||
|
export function useConnectionInfo(args) {
|
||||||
|
return useCore(connectionInfoLoader, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// export function useConnectionInfo(conid) {
|
||||||
|
// /** @type {import('@dbgate/types').StoredConnection} */
|
||||||
|
// const connection = useFetch({
|
||||||
|
// params: { conid },
|
||||||
|
// url: 'connections/get',
|
||||||
|
// });
|
||||||
|
// return connection;
|
||||||
|
// }
|
||||||
|
// export async function getConnectionInfo(conid) {
|
||||||
// const resp = await axios.request({
|
// const resp = await axios.request({
|
||||||
// method: 'get',
|
// method: 'get',
|
||||||
// url: 'metadata/table-info',
|
// params: { conid },
|
||||||
// params: { conid, database, schemaName, pureName },
|
// url: 'connections/get',
|
||||||
// });
|
// });
|
||||||
// /** @type {import('@dbgate/types').TableInfo} */
|
// /** @type {import('@dbgate/types').StoredConnection} */
|
||||||
// const res = resp.data;
|
// const res = resp.data;
|
||||||
// return res;
|
// return res;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// export function useTableInfo({ conid, database, schemaName, pureName }) {
|
|
||||||
// /** @type {import('@dbgate/types').TableInfo} */
|
|
||||||
// const tableInfo = useFetch({
|
|
||||||
// url: 'metadata/table-info',
|
|
||||||
// params: { conid, database, schemaName, pureName },
|
|
||||||
// reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
|
||||||
// });
|
|
||||||
// return tableInfo;
|
|
||||||
// }
|
|
||||||
|
|
||||||
export function useViewInfo({ conid, database, schemaName, pureName }) {
|
|
||||||
/** @type {import('@dbgate/types').ViewInfo} */
|
|
||||||
const viewInfo = useFetch({
|
|
||||||
url: 'metadata/view-info',
|
|
||||||
params: { conid, database, schemaName, pureName },
|
|
||||||
reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
|
||||||
});
|
|
||||||
return viewInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useConnectionInfo(conid) {
|
|
||||||
/** @type {import('@dbgate/types').StoredConnection} */
|
|
||||||
const connection = useFetch({
|
|
||||||
params: { conid },
|
|
||||||
url: 'connections/get',
|
|
||||||
});
|
|
||||||
return connection;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getConnectionInfo(conid) {
|
|
||||||
const resp = await axios.request({
|
|
||||||
method: 'get',
|
|
||||||
params: { conid },
|
|
||||||
url: 'connections/get',
|
|
||||||
});
|
|
||||||
/** @type {import('@dbgate/types').StoredConnection} */
|
|
||||||
const res = resp.data;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -38,26 +38,19 @@ export default function useFetch({
|
|||||||
|
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
const fromCache = cacheGet(cacheKey);
|
const fromCache = cacheGet(cacheKey);
|
||||||
if (fromCache) return fromCache;
|
if (fromCache) {
|
||||||
const res = await getCachedPromise(cacheKey, doLoad);
|
setValue([fromCache, loadedIndicators]);
|
||||||
setValue([res, loadedIndicators]);
|
} else {
|
||||||
cacheSet(cacheKey, res, reloadTrigger);
|
const res = await getCachedPromise(cacheKey, doLoad);
|
||||||
|
cacheSet(cacheKey, res, reloadTrigger);
|
||||||
|
setValue([res, loadedIndicators]);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const res = await doLoad();
|
const res = await doLoad();
|
||||||
setValue([res, loadedIndicators]);
|
setValue([res, loadedIndicators]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// React.useEffect(() => {
|
|
||||||
// loadValue(indicators);
|
|
||||||
// if (reloadTrigger && socket) {
|
|
||||||
// socket.on(reloadTrigger, handleReload);
|
|
||||||
// return () => {
|
|
||||||
// socket.off(reloadTrigger, handleReload);
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
// }, [...indicators, socket]);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
loadValue(indicators);
|
loadValue(indicators);
|
||||||
}, [...indicators]);
|
}, [...indicators]);
|
||||||
|
|||||||
Reference in New Issue
Block a user