X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=cbcacf7149959875a2f529b9ef3b22bb50d44376;hp=a418d05516dcfd44ceb114feaf0c33292b964242;hb=674ad8ee4369cbc9516eb6d6629a616e9310c71f;hpb=d747c2060a17ddc24dcc83d6a7aa87066765c9dc diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index a418d055..cbcacf71 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -214,12 +214,17 @@ IdentityId SqliteStorage::createIdentity(UserId user, CoreIdentity &identity) { query.bindValue(":kickreason", identity.kickReason()); query.bindValue(":partreason", identity.partReason()); query.bindValue(":quitreason", identity.quitReason()); +#ifdef HAVE_SSL query.bindValue(":sslcert", identity.sslCert().toPem()); query.bindValue(":sslkey", identity.sslKey().toPem()); +#else + query.bindValue(":sslcert", QByteArray()); + query.bindValue(":sslkey", QByteArray()); +#endif + safeExec(query); identityId = query.lastInsertId().toInt(); - qDebug() << identityId << identity.nicks(); if(!identityId.isValid()) { watchQuery(query); } else { @@ -269,15 +274,22 @@ bool SqliteStorage::updateIdentity(UserId user, const CoreIdentity &identity) { query.bindValue(":kickreason", identity.kickReason()); query.bindValue(":partreason", identity.partReason()); query.bindValue(":quitreason", identity.quitReason()); +#ifdef HAVE_SSL query.bindValue(":sslcert", identity.sslCert().toPem()); query.bindValue(":sslkey", identity.sslKey().toPem()); +#else + query.bindValue(":sslcert", QByteArray()); + query.bindValue(":sslkey", QByteArray()); +#endif query.bindValue(":identityid", identity.id().toInt()); safeExec(query); + watchQuery(query); QSqlQuery deleteNickQuery(logDb()); deleteNickQuery.prepare(queryString("delete_nicks")); deleteNickQuery.bindValue(":identityid", identity.id().toInt()); safeExec(deleteNickQuery); + watchQuery(deleteNickQuery); QSqlQuery insertNickQuery(logDb()); insertNickQuery.prepare(queryString("insert_nick")); @@ -285,6 +297,7 @@ bool SqliteStorage::updateIdentity(UserId user, const CoreIdentity &identity) { insertNickQuery.bindValue(":identityid", identity.id().toInt()); insertNickQuery.bindValue(":nick", nick); safeExec(insertNickQuery); + watchQuery(insertNickQuery); } return true; @@ -344,8 +357,10 @@ QList SqliteStorage::identities(UserId user) { identity.setKickReason(query.value(15).toString()); identity.setPartReason(query.value(16).toString()); identity.setQuitReason(query.value(17).toString()); +#ifdef HAVE_SSL identity.setSslCert(query.value(18).toByteArray()); identity.setSslKey(query.value(19).toByteArray()); +#endif nickQuery.bindValue(":identityid", identity.id().toInt()); QList nicks; @@ -676,7 +691,7 @@ void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, Buffer watchQuery(query); } -BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) { +BufferInfo SqliteStorage::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer, bool create) { QSqlQuery query(logDb()); query.prepare(queryString("select_bufferByName")); query.bindValue(":networkid", networkId.toInt()); @@ -685,6 +700,9 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, safeExec(query); if(!query.first()) { + if(!create) + return BufferInfo(); + createBuffer(user, networkId, type, buffer); safeExec(query); if(!query.first()) { @@ -776,45 +794,45 @@ bool SqliteStorage::removeBuffer(const UserId &user, const BufferId &bufferId) { return true; } -BufferId SqliteStorage::renameBuffer(const UserId &user, const NetworkId &networkId, const QString &newName, const QString &oldName) { - // check if such a buffer exists... - QSqlQuery existsQuery(logDb()); - existsQuery.prepare(queryString("select_bufferByName")); - existsQuery.bindValue(":networkid", networkId.toInt()); - existsQuery.bindValue(":userid", user.toInt()); - existsQuery.bindValue(":buffercname", oldName.toLower()); - safeExec(existsQuery); - if(!watchQuery(existsQuery)) +bool SqliteStorage::renameBuffer(const UserId &user, const BufferId &bufferId, const QString &newName) { + if(!isValidBuffer(user, bufferId)) return false; - if(!existsQuery.first()) + QSqlQuery query(logDb()); + query.prepare(queryString("update_buffer_name")); + query.bindValue(":buffername", newName); + query.bindValue(":buffercname", newName.toLower()); + query.bindValue(":bufferid", bufferId.toInt()); + safeExec(query); + if(query.lastError().isValid()) { + // unexepcted error occured (19 == constraint violation) + if(query.lastError().number() != 19) + watchQuery(query); return false; + } - const int bufferid = existsQuery.value(0).toInt(); - - Q_ASSERT(!existsQuery.next()); + return true; +} - // ... and if the new name is still free. - existsQuery.bindValue(":networkid", networkId.toInt()); - existsQuery.bindValue(":userid", user.toInt()); - existsQuery.bindValue(":buffercname", newName.toLower()); - safeExec(existsQuery); - if(!watchQuery(existsQuery)) +bool SqliteStorage::mergeBuffersPermanently(const UserId &user, const BufferId &bufferId1, const BufferId &bufferId2) { + if(!isValidBuffer(user, bufferId1) || !isValidBuffer(user, bufferId2)) return false; - if(existsQuery.first()) + QSqlQuery query(logDb()); + query.prepare(queryString("update_backlog_bufferid")); + query.bindValue(":oldbufferid", bufferId2.toInt()); + query.bindValue(":newbufferid", bufferId1.toInt()); + safeExec(query); + if(!watchQuery(query)) return false; - QSqlQuery renameBufferQuery(logDb()); - renameBufferQuery.prepare(queryString("update_buffer_name")); - renameBufferQuery.bindValue(":buffername", newName); - renameBufferQuery.bindValue(":buffercname", newName.toLower()); - renameBufferQuery.bindValue(":bufferid", bufferid); - safeExec(renameBufferQuery); - if(watchQuery(existsQuery)) - return BufferId(bufferid); - else - return BufferId(); + QSqlQuery delBufferQuery(logDb()); + delBufferQuery.prepare(queryString("delete_buffer_for_bufferid")); + delBufferQuery.bindValue(":bufferid", bufferId2.toInt()); + safeExec(delBufferQuery); + watchQuery(delBufferQuery); + + return true; } void SqliteStorage::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {