void SqliteStorage::createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) {
- QSqlQuery &query = cachedQuery("insert_buffer");
+ QSqlQuery query(logDb());
+ query.prepare(queryString("insert_buffer"));
query.bindValue(":userid", user.toInt());
query.bindValue(":networkid", networkId.toInt());
query.bindValue(":buffertype", (int)type);
}
BufferInfo SqliteStorage::getBufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) {
- QSqlQuery &query = cachedQuery("select_bufferByName");
+ QSqlQuery query(logDb());
+ query.prepare(queryString("select_bufferByName"));
query.bindValue(":networkid", networkId.toInt());
query.bindValue(":userid", user.toInt());
query.bindValue(":buffercname", buffer.toLower());
}
void SqliteStorage::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {
- QSqlQuery &query = cachedQuery("update_buffer_lastseen");
+ QSqlQuery query(logDb());
+ query.prepare(queryString("update_buffer_lastseen"));
+
query.bindValue(":userid", user.toInt());
query.bindValue(":bufferid", bufferId.toInt());
query.bindValue(":lastseenmsgid", msgId.toInt());
}
MsgId SqliteStorage::logMessage(Message msg) {
- QSqlQuery &logMessageQuery = cachedQuery("insert_message");
+ QSqlQuery logMessageQuery(logDb());
+ logMessageQuery.prepare(queryString("insert_message"));
+
logMessageQuery.bindValue(":time", msg.timestamp().toTime_t());
logMessageQuery.bindValue(":bufferid", msg.bufferInfo().bufferId().toInt());
logMessageQuery.bindValue(":type", msg.type());
if(logMessageQuery.lastError().isValid()) {
// constraint violation - must be NOT NULL constraint - probably the sender is missing...
if(logMessageQuery.lastError().number() == 19) {
- QSqlQuery &addSenderQuery = cachedQuery("insert_sender");
+ QSqlQuery addSenderQuery(logDb());
+ addSenderQuery.prepare(queryString("insert_sender"));
addSenderQuery.bindValue(":sender", msg.sender());
addSenderQuery.exec();
- watchQuery(addSenderQuery);
logMessageQuery.exec();
if(!watchQuery(logMessageQuery))
return 0;
offset = 0;
} else {
// we have to determine the real offset first
- QSqlQuery &offsetQuery = cachedQuery("select_messagesOffset");
+ QSqlQuery offsetQuery(logDb());
+ offsetQuery.prepare(queryString("select_messagesOffset"));
+
offsetQuery.bindValue(":bufferid", bufferId.toInt());
offsetQuery.bindValue(":messageid", offset);
offsetQuery.exec();
}
// now let's select the messages
- QSqlQuery &msgQuery = cachedQuery("select_messages");
+ QSqlQuery msgQuery(logDb());
+ msgQuery.prepare(queryString("select_messages"));
+
msgQuery.bindValue(":bufferid", bufferId.toInt());
msgQuery.bindValue(":limit", lastmsgs);
msgQuery.bindValue(":offset", offset);
return messagelist;
// we have to determine the real offset first
- QSqlQuery &offsetQuery = cachedQuery("select_messagesSinceOffset");
+ QSqlQuery offsetQuery(logDb());
+ offsetQuery.prepare(queryString("select_messagesSinceOffset"));
+
offsetQuery.bindValue(":bufferid", bufferId.toInt());
offsetQuery.bindValue(":since", since.toTime_t());
offsetQuery.exec();
offset = offsetQuery.value(0).toInt();
// now let's select the messages
- QSqlQuery &msgQuery = cachedQuery("select_messagesSince");
+ QSqlQuery msgQuery(logDb());
+ msgQuery.prepare(queryString("select_messagesSince"));
msgQuery.bindValue(":bufferid", bufferId.toInt());
msgQuery.bindValue(":since", since.toTime_t());
msgQuery.bindValue(":offset", offset);
if(!bufferInfo.isValid())
return messagelist;
- QSqlQuery &rangeQuery = cachedQuery("select_messageRange");
+ QSqlQuery rangeQuery(logDb());
+ rangeQuery.prepare(queryString("select_messageRange"));
rangeQuery.bindValue(":bufferid", bufferId.toInt());
rangeQuery.bindValue(":firstmsg", first);
rangeQuery.bindValue(":lastmsg", last);
QString SqliteStorage::backlogFile() {
return quasselDir().absolutePath() + "/quassel-storage.sqlite";
}
-
-
-// ONLY NEEDED FOR MIGRATION
-bool SqliteStorage::init(const QVariantMap &settings) {
- if(!AbstractSqlStorage::init(settings))
- return false;
-
- QSqlQuery checkMigratedQuery(logDb());
- checkMigratedQuery.prepare("SELECT DISTINCT typeOf(password) FROM quasseluser");
- checkMigratedQuery.exec();
- if(!watchQuery(checkMigratedQuery))
- return false;
-
- if(!checkMigratedQuery.first())
- return true; // table is empty -> no work to be done
-
- QString passType = checkMigratedQuery.value(0).toString().toLower();
- if(passType == "text")
- return true; // allready migrated
-
- Q_ASSERT(passType == "blob");
-
- QSqlQuery getPasswordsQuery(logDb());
- getPasswordsQuery.prepare("SELECT userid, password FROM quasseluser");
- getPasswordsQuery.exec();
-
- if(!watchQuery(getPasswordsQuery)) {
- qCritical() << "unable to migrate to new password format!";
- return false;
- }
-
- QHash<int, QByteArray> passHash;
- while(getPasswordsQuery.next()) {
- passHash[getPasswordsQuery.value(0).toInt()] = getPasswordsQuery.value(1).toByteArray();
- }
-
- QSqlQuery setPasswordsQuery(logDb());
- setPasswordsQuery.prepare("UPDATE quasseluser SET password = :password WHERE userid = :userid");
- foreach(int userId, passHash.keys()) {
- setPasswordsQuery.bindValue(":password", QString(passHash[userId]));
- setPasswordsQuery.bindValue(":userid", userId);
- setPasswordsQuery.exec();
- watchQuery(setPasswordsQuery);
- }
-
- qDebug() << "successfully migrated passwords!";
- return true;
-}