diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index 5fc2bed2f..2b6867021 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -229,9 +229,9 @@ module.exports = { }, loadKeys_meta: true, - async loadKeys({ conid, database, root, filter }, req) { + async loadKeys({ conid, database, root, filter, limit }, req) { testConnectionPermission(conid, req); - return this.loadDataCore('loadKeys', { conid, database, root, filter }); + return this.loadDataCore('loadKeys', { conid, database, root, filter, limit }); }, exportKeys_meta: true, diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js index d4a887e9c..840510695 100644 --- a/packages/api/src/proc/databaseConnectionProcess.js +++ b/packages/api/src/proc/databaseConnectionProcess.js @@ -258,8 +258,8 @@ async function handleCollectionData({ msgid, options }) { return handleDriverDataCore(msgid, driver => driver.readCollection(dbhan, options), { logName: 'readCollection' }); } -async function handleLoadKeys({ msgid, root, filter }) { - return handleDriverDataCore(msgid, driver => driver.loadKeys(dbhan, root, filter), { logName: 'loadKeys' }); +async function handleLoadKeys({ msgid, root, filter, limit }) { + return handleDriverDataCore(msgid, driver => driver.loadKeys(dbhan, root, filter, limit), { logName: 'loadKeys' }); } async function handleExportKeys({ msgid, options }) { diff --git a/packages/web/src/widgets/DbKeysSubTree.svelte b/packages/web/src/widgets/DbKeysSubTree.svelte index b5e14b1c9..db4ca6c27 100644 --- a/packages/web/src/widgets/DbKeysSubTree.svelte +++ b/packages/web/src/widgets/DbKeysSubTree.svelte @@ -5,7 +5,8 @@ import LoadingInfo from '../elements/LoadingInfo.svelte'; import { apiCall } from '../utility/api'; - const SHOW_INCREMENT = 500; + // const SHOW_INCREMENT = 500; + const SHOW_INCREMENT = 10; import DbKeysTreeNode from './DbKeysTreeNode.svelte'; @@ -26,7 +27,7 @@ // $: items = useDatabaseKeys({ conid, database, root, reloadToken }); -{#await apiCall('database-connections/load-keys', { conid, database, root, filter, reloadToken, reloadToken2 })} +{#await apiCall( 'database-connections/load-keys', { conid, database, root, filter, reloadToken, reloadToken2, limit: maxShowCount + 1 } )} {:then items} {@const itemsSorted = _.sortBy(items || [], 'text')} diff --git a/plugins/dbgate-plugin-redis/src/backend/driver.js b/plugins/dbgate-plugin-redis/src/backend/driver.js index d3d119f19..de1e1f6c4 100644 --- a/plugins/dbgate-plugin-redis/src/backend/driver.js +++ b/plugins/dbgate-plugin-redis/src/backend/driver.js @@ -169,12 +169,14 @@ const driver = { return _.range(16).map((index) => ({ name: `db${index}`, extInfo: info[`db${index}`], sortOrder: index })); }, - async loadKeys(dbhan, root = '', filter = null) { + async loadKeys(dbhan, root = '', filter = null, limit = null) { const keys = await this.getKeys(dbhan, root ? `${root}${dbhan.treeKeySeparator}*` : '*'); const keysFiltered = keys.filter((x) => filterName(filter, x)); - const res = this.extractKeysFromLevel(dbhan, root, keysFiltered); - await this.enrichKeyInfo(dbhan, res); - return res; + const keysSorted = _.sortBy(keysFiltered, 'text'); + const res = this.extractKeysFromLevel(dbhan, root, keysSorted); + const resLimited = limit ? res.slice(0, limit) : res; + await this.enrichKeyInfo(dbhan, resLimited); + return resLimited; }, async exportKeys(dbhan, options) {