diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js
index 164652fa..7e6360f9 100644
--- a/packages/api/src/controllers/databaseConnections.js
+++ b/packages/api/src/controllers/databaseConnections.js
@@ -176,8 +176,8 @@ module.exports = {
},
loadKeys_meta: true,
- async loadKeys({ conid, database, root }) {
- return this.loadDataCore('loadKeys', { conid, database, root });
+ async loadKeys({ conid, database, root, filter }) {
+ return this.loadDataCore('loadKeys', { conid, database, root, filter });
},
exportKeys_meta: true,
diff --git a/packages/api/src/proc/databaseConnectionProcess.js b/packages/api/src/proc/databaseConnectionProcess.js
index 048fc090..869992c2 100644
--- a/packages/api/src/proc/databaseConnectionProcess.js
+++ b/packages/api/src/proc/databaseConnectionProcess.js
@@ -197,8 +197,8 @@ async function handleCollectionData({ msgid, options }) {
return handleDriverDataCore(msgid, driver => driver.readCollection(systemConnection, options));
}
-async function handleLoadKeys({ msgid, root }) {
- return handleDriverDataCore(msgid, driver => driver.loadKeys(systemConnection, root));
+async function handleLoadKeys({ msgid, root, filter }) {
+ return handleDriverDataCore(msgid, driver => driver.loadKeys(systemConnection, root, filter));
}
async function handleExportKeys({ msgid, options }) {
diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts
index decc6533..44cd6696 100644
--- a/packages/types/engines.d.ts
+++ b/packages/types/engines.d.ts
@@ -89,7 +89,7 @@ export interface EngineDriver {
name: string;
}[]
>;
- loadKeys(pool, root: string): Promise;
+ loadKeys(pool, root: string, filter?: string): Promise;
exportKeys(pool, options: {}): Promise;
loadKeyInfo(pool, key): Promise;
loadKeyTableRange(pool, key, cursor, count): Promise;
diff --git a/packages/web/src/widgets/DbKeysSubTree.svelte b/packages/web/src/widgets/DbKeysSubTree.svelte
index 529903a3..b5e14b1c 100644
--- a/packages/web/src/widgets/DbKeysSubTree.svelte
+++ b/packages/web/src/widgets/DbKeysSubTree.svelte
@@ -17,6 +17,8 @@
export let reloadToken = 0;
export let connection;
+ export let filter;
+
let reloadToken2 = 0;
let maxShowCount = SHOW_INCREMENT;
@@ -24,7 +26,7 @@
// $: items = useDatabaseKeys({ conid, database, root, reloadToken });
-{#await apiCall('database-connections/load-keys', { conid, database, root, reloadToken, reloadToken2 })}
+{#await apiCall('database-connections/load-keys', { conid, database, root, filter, reloadToken, reloadToken2 })}
{:then items}
{@const itemsSorted = _.sortBy(items || [], 'text')}
@@ -36,6 +38,7 @@
{root}
{connection}
{item}
+ {filter}
{indentLevel}
onRefreshParent={() => {
reloadToken2 += 1;
diff --git a/packages/web/src/widgets/DbKeysTree.svelte b/packages/web/src/widgets/DbKeysTree.svelte
index 4baecfcf..45ed189f 100644
--- a/packages/web/src/widgets/DbKeysTree.svelte
+++ b/packages/web/src/widgets/DbKeysTree.svelte
@@ -53,7 +53,7 @@
-
+
@@ -63,5 +63,5 @@
-
+
diff --git a/packages/web/src/widgets/DbKeysTreeNode.svelte b/packages/web/src/widgets/DbKeysTreeNode.svelte
index f1fc56eb..350f4028 100644
--- a/packages/web/src/widgets/DbKeysTreeNode.svelte
+++ b/packages/web/src/widgets/DbKeysTreeNode.svelte
@@ -23,6 +23,7 @@
export let item;
export let indentLevel = 0;
+ export let filter;
export let onRefreshParent;
@@ -170,5 +171,13 @@
-->
{#if isExpanded}
-
+
{/if}
diff --git a/plugins/dbgate-plugin-redis/src/backend/driver.js b/plugins/dbgate-plugin-redis/src/backend/driver.js
index 21310e48..19728f1e 100644
--- a/plugins/dbgate-plugin-redis/src/backend/driver.js
+++ b/plugins/dbgate-plugin-redis/src/backend/driver.js
@@ -5,6 +5,7 @@ const driverBase = require('../frontend/driver');
const Analyser = require('./Analyser');
const Redis = require('ioredis');
const RedisDump = require('node-redis-dump2');
+const { filterName } = require('dbgate-tools');
function splitCommandLine(str) {
let results = [];
@@ -162,9 +163,10 @@ const driver = {
return _.range(16).map((index) => ({ name: `db${index}`, extInfo: info[`db${index}`], sortOrder: index }));
},
- async loadKeys(pool, root = '') {
+ async loadKeys(pool, root = '', filter = null) {
const keys = await this.getKeys(pool, root ? `${root}:*` : '*');
- const res = this.extractKeysFromLevel(root, keys);
+ const keysFiltered = keys.filter((x) => filterName(filter, x));
+ const res = this.extractKeysFromLevel(root, keysFiltered);
await this.enrichKeyInfo(pool, res);
return res;
},