mirror of
https://github.com/dbgate/dbgate
synced 2024-11-08 04:35:58 +00:00
uniqe binding values
This commit is contained in:
parent
5395d1343b
commit
088ca231f3
@ -4,6 +4,7 @@ import _pick from 'lodash/pick';
|
||||
import _zip from 'lodash/zip';
|
||||
import _difference from 'lodash/difference';
|
||||
import debug from 'debug';
|
||||
import stableStringify from 'json-stable-stringify';
|
||||
|
||||
const dbg = debug('dbgate:PerspectiveCache');
|
||||
|
||||
@ -49,14 +50,14 @@ export class PerspectiveCacheTable {
|
||||
}
|
||||
|
||||
getBindingGroup(groupValues: any[]) {
|
||||
const key = this.cache.stableStringify(groupValues);
|
||||
const key = stableStringify(groupValues);
|
||||
return this.bindingGroups[key];
|
||||
}
|
||||
|
||||
getUncachedBindingGroups(props: PerspectiveDataLoadProps): any[][] {
|
||||
const uncached = [];
|
||||
for (const group of props.bindingValues) {
|
||||
const key = this.cache.stableStringify(group);
|
||||
const key = stableStringify(group);
|
||||
const item = this.bindingGroups[key];
|
||||
if (!item) {
|
||||
uncached.push(group);
|
||||
@ -68,7 +69,7 @@ export class PerspectiveCacheTable {
|
||||
storeGroupSize(props: PerspectiveDataLoadProps, bindingValues: any[], count: number) {
|
||||
const originalBindingValue = props.bindingValues.find(v => _zip(v, bindingValues).every(([x, y]) => x == y));
|
||||
if (originalBindingValue) {
|
||||
const key = this.cache.stableStringify(originalBindingValue);
|
||||
const key = stableStringify(originalBindingValue);
|
||||
// console.log('SET SIZE', originalBindingValue, bindingValues, key, count);
|
||||
const group = new PerspectiveBindingGroup(this);
|
||||
group.bindingValues = bindingValues;
|
||||
@ -81,12 +82,12 @@ export class PerspectiveCacheTable {
|
||||
}
|
||||
|
||||
export class PerspectiveCache {
|
||||
constructor(public stableStringify) {}
|
||||
constructor() {}
|
||||
|
||||
tables: { [tableKey: string]: PerspectiveCacheTable } = {};
|
||||
|
||||
getTableCache(props: PerspectiveDataLoadProps) {
|
||||
const tableKey = this.stableStringify(
|
||||
const tableKey = stableStringify(
|
||||
_pick(props, ['schemaName', 'pureName', 'bindingColumns', 'databaseConfig', 'orderBy'])
|
||||
);
|
||||
let res = this.tables[tableKey];
|
||||
|
@ -6,11 +6,13 @@ import _cloneDeep from 'lodash/cloneDeep';
|
||||
import _compact from 'lodash/compact';
|
||||
import _uniq from 'lodash/uniq';
|
||||
import _flatten from 'lodash/flatten';
|
||||
import _uniqBy from 'lodash/uniqBy';
|
||||
import {
|
||||
PerspectiveDatabaseConfig,
|
||||
PerspectiveDataLoadProps,
|
||||
PerspectiveDataProvider,
|
||||
} from './PerspectiveDataProvider';
|
||||
import stableStringify from 'json-stable-stringify';
|
||||
|
||||
export interface PerspectiveDataLoadPropsWithNode {
|
||||
props: PerspectiveDataLoadProps;
|
||||
@ -171,7 +173,10 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
||||
schemaName: this.foreignKey.refSchemaName,
|
||||
pureName: this.foreignKey.refTableName,
|
||||
bindingColumns: [this.foreignKey.columns[0].refColumnName],
|
||||
bindingValues: parentRows.map(row => [row[this.foreignKey.columns[0].columnName]]),
|
||||
bindingValues: _uniqBy(
|
||||
parentRows.map(row => [row[this.foreignKey.columns[0].columnName]]),
|
||||
stableStringify
|
||||
),
|
||||
dataColumns: this.getDataLoadColumns(),
|
||||
databaseConfig: this.databaseConfig,
|
||||
orderBy: this.table.primaryKey?.columns.map(x => x.columnName) || [this.table.columns[0].columnName],
|
||||
@ -304,7 +309,10 @@ export class PerspectiveTableReferenceNode extends PerspectiveTableNode {
|
||||
schemaName: this.table.schemaName,
|
||||
pureName: this.table.pureName,
|
||||
bindingColumns: [this.foreignKey.columns[0].columnName],
|
||||
bindingValues: parentRows.map(row => [row[this.foreignKey.columns[0].refColumnName]]),
|
||||
bindingValues: _uniqBy(
|
||||
parentRows.map(row => [row[this.foreignKey.columns[0].refColumnName]]),
|
||||
stableStringify
|
||||
),
|
||||
dataColumns: this.getDataLoadColumns(),
|
||||
databaseConfig: this.databaseConfig,
|
||||
orderBy: this.table.primaryKey?.columns.map(x => x.columnName) || [this.table.columns[0].columnName],
|
||||
|
@ -13,7 +13,7 @@
|
||||
export let pureName;
|
||||
|
||||
const config = usePerspectiveConfig(tabid);
|
||||
const cache = new PerspectiveCache(stableStringify);
|
||||
const cache = new PerspectiveCache();
|
||||
const loadedCounts = writable({});
|
||||
</script>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user