@@ -68,22 +68,33 @@ class KeyModel : public ValueEditor::Model {
6868
6969 virtual void setKeyName (const QByteArray& newKeyName,
7070 ValueEditor::Model::Callback c) override {
71+ // NOTE(u_glide): DUMP + RESTORE + DEL is cluster compatible alternative to RENAME command
7172 executeCmd (
72- {" RENAMENX " , m_keyFullPath, newKeyName }, c,
73+ {" DUMP " , m_keyFullPath}, c,
7374 [this , newKeyName](RedisClient::Response r, Callback c) {
74- if (r.value ().toInt () == 0 ) {
75- return c (QCoreApplication::translate (
76- " RDM" ,
77- " Key with new name %1 already exist in "
78- " database or original key was "
79- " removed" )
80- .arg (getKeyName ()));
81- }
82-
83- m_keyFullPath = newKeyName;
84- c (QString ());
75+ executeCmd (
76+ {" RESTORE" , newKeyName,
77+ QString::number (m_ttl > 0 ? m_ttl : 0 ).toLatin1 (),
78+ r.value ().toByteArray ()},
79+ c,
80+ [this , newKeyName](RedisClient::Response r, Callback c) {
81+ if (!r.isOkMessage ()) {
82+ return c (QCoreApplication::translate (
83+ " RDM" , " Cannot rename key %1: %2" )
84+ .arg (getKeyName ())
85+ .arg (r.value ().toString ()));
86+ }
87+
88+ executeCmd (
89+ {" DEL" , m_keyFullPath}, [](const QString&) {},
90+ [](RedisClient::Response, Callback) {});
91+
92+ m_keyFullPath = newKeyName;
93+ c (QString ());
94+ },
95+ RedisClient::Response::Type::Status);
8596 },
86- RedisClient::Response::Type::Integer );
97+ RedisClient::Response::Type::String );
8798 }
8899
89100 virtual void setTTL (const long long ttl,
0 commit comments