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