Skip to content

Commit d4d09cf

Browse files
authored
Bulk Operations Update (RedisInsight#4561)
* Bulk Operations Update Implements RedisInsight#3822 Fix RedisInsight#3918 Fix RedisInsight#4226 Fix RedisInsight#1924
1 parent ffd64cf commit d4d09cf

31 files changed

+1110
-298
lines changed

src/app/events.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ class Events : public QObject, public QEnableSharedFromThis<Events> {
3636
QRegExp::Wildcard));
3737

3838
// Dialogs
39-
void requestBulkOperation(QSharedPointer<RedisClient::Connection> connection,
40-
int dbIndex, BulkOperations::Manager::Operation op,
41-
QRegExp keyPattern, std::function<void()> callback);
39+
void requestBulkOperation(
40+
QSharedPointer<RedisClient::Connection> connection, int dbIndex,
41+
BulkOperations::Manager::Operation op, QRegExp keyPattern,
42+
BulkOperations::AbstractOperation::OperationCallback callback);
4243

4344
void newKeyDialog(QSharedPointer<RedisClient::Connection> connection,
4445
std::function<void()> callback, int dbIndex,

src/app/models/key-models/keyfactory.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,20 @@ void KeyFactory::createNewKeyRequest(
9090
emit newKeyDialog(NewKeyRequest(connection, dbIndex, callback, keyPrefix));
9191
}
9292

93-
void KeyFactory::submitNewKeyRequest(NewKeyRequest r, QJSValue jsCallback) {
93+
void KeyFactory::submitNewKeyRequest(NewKeyRequest r) {
9494
QSharedPointer<ValueEditor::Model> result = createModel(
9595
r.keyType(), r.connection(), r.keyName().toUtf8(), r.dbIndex(), -1);
9696

9797
if (!result) return;
9898

99-
result->addRow(r.value(), [r, &jsCallback](const QString& err) {
99+
result->addRow(r.value(), [this, r, result](const QString& err) {
100100
if (err.size() > 0) {
101-
if (jsCallback.isCallable()) jsCallback.call(QJSValueList{err});
101+
emit error(err);
102102
return;
103103
}
104104

105-
if (jsCallback.isCallable()) jsCallback.call(QJSValueList{});
106105
r.callback();
106+
emit keyAdded();
107107
});
108108
}
109109

src/app/models/key-models/keyfactory.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,20 @@ class KeyFactory : public QObject, public ValueEditor::AbstractKeyFactory {
1212
void loadKey(
1313
QSharedPointer<RedisClient::Connection> connection,
1414
QByteArray keyFullPath, int dbIndex,
15-
std::function<void(QSharedPointer<ValueEditor::Model>, const QString &)>
15+
std::function<void(QSharedPointer<ValueEditor::Model>, const QString&)>
1616
callback) override;
1717

1818
public slots:
1919
void createNewKeyRequest(QSharedPointer<RedisClient::Connection> connection,
2020
std::function<void()> callback, int dbIndex,
2121
QString keyPrefix);
2222

23-
void submitNewKeyRequest(NewKeyRequest r, QJSValue jsCallback);
23+
void submitNewKeyRequest(NewKeyRequest r);
2424

2525
signals:
2626
void newKeyDialog(NewKeyRequest r);
27+
void keyAdded();
28+
void error(const QString& err);
2729

2830
private:
2931
QSharedPointer<ValueEditor::Model> createModel(

src/app/models/treeoperations.cpp

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <algorithm>
1111

1212
#include "app/events.h"
13+
#include "connections-tree/items/databaseitem.h"
1314
#include "connections-tree/items/namespaceitem.h"
1415
#include "connections-tree/keysrendering.h"
1516

@@ -91,6 +92,20 @@ void TreeOperations::connect(QSharedPointer<RedisClient::Connection> c) {
9192
}
9293
}
9394

95+
void TreeOperations::requestBulkOperation(
96+
ConnectionsTree::AbstractNamespaceItem& ns,
97+
BulkOperations::Manager::Operation op,
98+
BulkOperations::AbstractOperation::OperationCallback callback) {
99+
QString pattern =
100+
QString("%1%2*")
101+
.arg(QString::fromUtf8(ns.getFullPath()))
102+
.arg(ns.getFullPath().size() > 0 ? conf().namespaceSeparator() : "");
103+
QRegExp filter(pattern, Qt::CaseSensitive, QRegExp::Wildcard);
104+
105+
emit m_events->requestBulkOperation(m_connection, ns.getDbIndex(), op, filter,
106+
callback);
107+
}
108+
94109
QFuture<void> TreeOperations::getDatabases(
95110
std::function<void(RedisClient::DatabaseList)> callback) {
96111
return QtConcurrent::run(this, &TreeOperations::loadDatabases, callback);
@@ -215,20 +230,31 @@ void TreeOperations::deleteDbKey(ConnectionsTree::KeyItem& key,
215230
});
216231
}
217232

233+
void TreeOperations::deleteDbKeys(ConnectionsTree::DatabaseItem& db) {
234+
requestBulkOperation(db, BulkOperations::Manager::Operation::DELETE_KEYS,
235+
[this, &db](QRegExp filter, int, const QStringList&) {
236+
db.reload();
237+
emit m_events->closeDbKeys(m_connection,
238+
db.getDbIndex(), filter);
239+
});
240+
}
241+
218242
void TreeOperations::deleteDbNamespace(ConnectionsTree::NamespaceItem& ns) {
219-
QString pattern = QString("%1%2*")
220-
.arg(QString::fromUtf8(ns.getFullPath()))
221-
.arg(conf().namespaceSeparator());
222-
QRegExp filter(pattern, Qt::CaseSensitive, QRegExp::Wildcard);
243+
requestBulkOperation(ns, BulkOperations::Manager::Operation::DELETE_KEYS,
244+
[this, &ns](QRegExp filter, int, const QStringList&) {
245+
emit m_events->closeDbKeys(m_connection,
246+
ns.getDbIndex(), filter);
247+
});
248+
}
223249

224-
int dbIndex = ns.getDbIndex();
250+
void TreeOperations::setTTL(ConnectionsTree::AbstractNamespaceItem& ns) {
251+
requestBulkOperation(ns, BulkOperations::Manager::Operation::TTL,
252+
[](QRegExp, int, const QStringList&) {});
253+
}
225254

226-
emit m_events->requestBulkOperation(
227-
m_connection, dbIndex, BulkOperations::Manager::Operation::DELETE_KEYS,
228-
filter, [this, dbIndex, filter, &ns]() {
229-
ns.setRemoved();
230-
emit m_events->closeDbKeys(m_connection, dbIndex, filter);
231-
});
255+
void TreeOperations::copyKeys(ConnectionsTree::AbstractNamespaceItem& ns) {
256+
requestBulkOperation(ns, BulkOperations::Manager::Operation::COPY_KEYS,
257+
[](QRegExp, int, const QStringList&) {});
232258
}
233259

234260
void TreeOperations::flushDb(int dbIndex,
@@ -243,17 +269,7 @@ void TreeOperations::flushDb(int dbIndex,
243269
}
244270

245271
QFuture<bool> TreeOperations::connectionSupportsMemoryOperations() {
246-
auto d = QSharedPointer<AsyncFuture::Deferred<bool>>(
247-
new AsyncFuture::Deferred<bool>());
248-
249-
m_connection->cmd(
250-
{"MEMORY", "HELP"}, this, -1,
251-
[d](RedisClient::Response r) {
252-
d->complete(!r.isDisabledCommandErrorMessage());
253-
},
254-
[d](const QString&) { d->complete(false); });
255-
256-
return d->future();
272+
return m_connection->isCommandSupported({"MEMORY", "HELP"});
257273
}
258274

259275
QFuture<qlonglong> TreeOperations::getUsedMemory(const QByteArray& key,

src/app/models/treeoperations.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ class TreeOperations : public QObject,
5151
void deleteDbKey(ConnectionsTree::KeyItem& key,
5252
std::function<void(const QString&)> callback) override;
5353

54+
virtual void deleteDbKeys(ConnectionsTree::DatabaseItem& db) override;
55+
5456
void deleteDbNamespace(ConnectionsTree::NamespaceItem& ns) override;
5557

58+
virtual void setTTL(ConnectionsTree::AbstractNamespaceItem& ns) override;
59+
60+
virtual void copyKeys(ConnectionsTree::AbstractNamespaceItem& ns) override;
61+
5662
virtual void flushDb(int dbIndex,
5763
std::function<void(const QString&)> callback) override;
5864

@@ -74,6 +80,11 @@ class TreeOperations : public QObject,
7480

7581
void connect(QSharedPointer<RedisClient::Connection> c);
7682

83+
void requestBulkOperation(
84+
ConnectionsTree::AbstractNamespaceItem& ns,
85+
BulkOperations::Manager::Operation op,
86+
BulkOperations::AbstractOperation::OperationCallback callback);
87+
7788
private:
7889
QSharedPointer<RedisClient::Connection> m_connection;
7990
QSharedPointer<Events> m_events;

src/modules/bulk-operations/bulkoperation.cpp

Lines changed: 0 additions & 65 deletions
This file was deleted.

src/modules/bulk-operations/bulkoperation.h

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)