uniqe binding values

This commit is contained in:
Jan Prochazka 2022-07-24 15:34:26 +02:00
parent 5395d1343b
commit 088ca231f3
3 changed files with 17 additions and 8 deletions

View File

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

View File

@ -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],

View File

@ -13,7 +13,7 @@
export let pureName;
const config = usePerspectiveConfig(tabid);
const cache = new PerspectiveCache(stableStringify);
const cache = new PerspectiveCache();
const loadedCounts = writable({});
</script>