perspectives: custom join over different databases

This commit is contained in:
Jan Prochazka
2022-08-06 16:44:37 +02:00
parent aff1fe0b3d
commit 86d7d61cc5
8 changed files with 105 additions and 40 deletions

View File

@@ -316,6 +316,8 @@
refTableName,
refSchemaName,
columns,
conid: conidOverride,
database: databaseOverride,
};
setConfig(cfg => ({
...cfg,

View File

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

View File

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

View 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;
}