mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 11:56:00 +00:00
perspectives: custom join over different databases
This commit is contained in:
@@ -316,6 +316,8 @@
|
||||
refTableName,
|
||||
refSchemaName,
|
||||
columns,
|
||||
conid: conidOverride,
|
||||
database: databaseOverride,
|
||||
};
|
||||
setConfig(cfg => ({
|
||||
...cfg,
|
||||
|
||||
@@ -180,6 +180,8 @@
|
||||
|
||||
const pureName = td.getAttribute('data-pureName');
|
||||
const schemaName = td.getAttribute('data-schemaName');
|
||||
const dataConid = td.getAttribute('data-conid');
|
||||
const dataDatabase = td.getAttribute('data-database');
|
||||
if (pureName) {
|
||||
res.push({
|
||||
text: `Open table ${pureName}`,
|
||||
@@ -191,8 +193,8 @@
|
||||
props: {
|
||||
schemaName,
|
||||
pureName,
|
||||
conid,
|
||||
database,
|
||||
conid: dataConid || conid,
|
||||
database: dataDatabase || database,
|
||||
objectTypeField: 'tables',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
import {
|
||||
ChangeConfigFunc,
|
||||
ChangePerspectiveConfigFunc,
|
||||
extractPerspectiveDatabases,
|
||||
getTableChildPerspectiveNodes,
|
||||
GridConfig,
|
||||
PerspectiveConfig,
|
||||
@@ -54,6 +55,7 @@
|
||||
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
|
||||
import SearchInput from '../elements/SearchInput.svelte';
|
||||
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
||||
import { useMultipleDatabaseInfo } from '../utility/useMultipleDatabaseInfo';
|
||||
|
||||
const dbg = debug('dbgate:PerspectiveView');
|
||||
|
||||
@@ -95,16 +97,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
const dbInfo = useDatabaseInfo({ conid, database });
|
||||
const dbInfos = useMultipleDatabaseInfo(extractPerspectiveDatabases({ conid, database }, config));
|
||||
const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
|
||||
const viewInfo = useViewInfo({ conid, database, schemaName, pureName });
|
||||
|
||||
$: dataProvider = new PerspectiveDataProvider(cache, loader);
|
||||
$: loader = new PerspectiveDataLoader(apiCall);
|
||||
$: root = $tableInfo
|
||||
? new PerspectiveTableNode($tableInfo, $dbInfo, config, setConfig, dataProvider, { conid, database }, null)
|
||||
? new PerspectiveTableNode($tableInfo, $dbInfos, config, setConfig, dataProvider, { conid, database }, null)
|
||||
: $viewInfo
|
||||
? new PerspectiveViewNode($viewInfo, $dbInfo, config, setConfig, dataProvider, { conid, database }, null)
|
||||
? new PerspectiveViewNode($viewInfo, $dbInfos, config, setConfig, dataProvider, { conid, database }, null)
|
||||
: null;
|
||||
|
||||
// $: console.log('CONFIG', config);
|
||||
|
||||
19
packages/web/src/utility/useMultipleDatabaseInfo.ts
Normal file
19
packages/web/src/utility/useMultipleDatabaseInfo.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Readable, writable } from 'svelte/store';
|
||||
import { getDatabaseInfo } from './metadataLoaders';
|
||||
import { MultipleDatabaseInfo } from 'dbgate-datalib';
|
||||
|
||||
export function useMultipleDatabaseInfo(dbs: { conid: string; database: string }[]): Readable<MultipleDatabaseInfo> {
|
||||
const res = writable({});
|
||||
for (const { conid, database } of dbs) {
|
||||
getDatabaseInfo({ conid, database }).then(dbInfo => {
|
||||
res.update(old => ({
|
||||
...old,
|
||||
[conid]: {
|
||||
...old[conid],
|
||||
[database]: dbInfo,
|
||||
},
|
||||
}));
|
||||
});
|
||||
}
|
||||
return res;
|
||||
}
|
||||
Reference in New Issue
Block a user