delete branch operation

This commit is contained in:
Jan Prochazka
2022-03-26 08:12:56 +01:00
parent fc08353225
commit 9e3991556a
3 changed files with 47 additions and 10 deletions

View File

@@ -1,4 +1,6 @@
<script lang="ts">
import _ from 'lodash';
import AppObjectCore from '../appobj/AppObjectCore.svelte';
import LoadingInfo from '../elements/LoadingInfo.svelte';
import { apiCall } from '../utility/api';
@@ -24,7 +26,9 @@
{#await apiCall('database-connections/load-keys', { conid, database, root, reloadToken, reloadToken2 })}
<LoadingInfo message="Loading key list" wrapper />
{:then items}
{#each (items || []).slice(0, maxShowCount) as item}
{@const itemsSorted = _.sortBy(items || [], 'text')}
{#each itemsSorted.slice(0, maxShowCount) as item}
<DbKeysTreeNode
{conid}
{database}
@@ -37,7 +41,7 @@
/>
{/each}
{#if (items || []).length > maxShowCount}
{#if itemsSorted.length > maxShowCount}
<AppObjectCore
{indentLevel}
title="Show more..."

View File

@@ -48,12 +48,35 @@
});
},
},
item.type == 'dir' && {
label: 'Reload',
onClick: () => {
reloadToken += 1;
item.type == 'dir' && [
{
label: 'Reload',
onClick: () => {
reloadToken += 1;
},
},
},
{
label: 'Delete branch',
onClick: () => {
const branch = `${item.root}:*`;
showModal(ConfirmModal, {
message: `Really delete branch ${branch} with all keys?`,
onConfirm: async () => {
await apiCall('database-connections/call-method', {
conid,
database,
method: 'mdel',
args: [branch],
});
if (onRefreshParent) {
onRefreshParent();
}
},
});
},
},
],
];
}
</script>

View File

@@ -71,17 +71,17 @@ const driver = {
},
async loadKeys(pool, root = '') {
const keys = await this.getKeys(pool, root);
const keys = await this.getKeys(pool, root ? `${root}:*` : '*');
const res = this.extractKeysFromLevel(root, keys);
await this.enrichKeyInfo(pool, res);
return res;
},
async getKeys(pool, root = '') {
async getKeys(pool, keyQuery = '*') {
const res = [];
let cursor = 0;
do {
const [strCursor, keys] = await pool.scan(cursor, 'MATCH', root ? `${root}:*` : '*', 'COUNT', 100);
const [strCursor, keys] = await pool.scan(cursor, 'MATCH', keyQuery, 'COUNT', 100);
res.push(...keys);
cursor = parseInt(strCursor);
} while (cursor > 0);
@@ -187,7 +187,17 @@ const driver = {
return res;
},
async deleteBranch(pool, keyQuery) {
const keys = await this.getKeys(pool, keyQuery);
const keysChunked = _.chunk(keys, 10);
await async.eachLimit(keysChunked, 10, async (keysChunk) => await pool.del(...keysChunk));
},
async callMethod(pool, method, args) {
switch (method) {
case 'mdel':
return await this.deleteBranch(pool, args[0]);
}
return await pool[method](...args);
},