-SqliteStorage::SqliteStorage() {
- // TODO I don't think that this path is failsafe for windows users :)
- QString backlogFile = Global::quasselDir + "/quassel-storage.sqlite";
- logDb = QSqlDatabase::addDatabase("QSQLITE");
- logDb.setDatabaseName(backlogFile);
- bool ok = logDb.open();
-
- if(!ok) {
- qWarning(tr("Could not open backlog database: %1").arg(logDb.lastError().text()).toAscii());
- qWarning(tr("Disabling logging...").toAscii());
- Q_ASSERT(ok);
- return;
- }
-
- // check if the db schema is up to date
- QSqlQuery query = logDb.exec("SELECT MAX(version) FROM coreinfo");
- if(query.first()) {
- // TODO VersionCheck
- //checkVersion(query.value(0));
- qDebug() << "Sqlite is ready. Quassel Schema Version:" << query.value(0).toUInt();
- } else {
- initDb();
- }
-
- // we will need those pretty often... so let's speed things up:
- createBufferQuery = new QSqlQuery(logDb);
- createBufferQuery->prepare("INSERT INTO buffer (userid, networkid, buffername) VALUES (:userid, (SELECT networkid FROM network WHERE networkname = :networkname), :buffername)");
-
- createNetworkQuery = new QSqlQuery(logDb);
- createNetworkQuery->prepare("INSERT INTO network (userid, networkname) VALUES (:userid, :networkname)");
-
- getBufferInfoQuery = new QSqlQuery(logDb);
- getBufferInfoQuery->prepare("SELECT bufferid FROM buffer "
- "JOIN network ON buffer.networkid = network.networkid "
- "WHERE network.networkname = :networkname AND buffer.userid = :userid AND buffer.buffername = :buffername ");
-
- logMessageQuery = new QSqlQuery(logDb);
- logMessageQuery->prepare("INSERT INTO backlog (time, bufferid, type, flags, senderid, message) "
- "VALUES (:time, :bufferid, :type, :flags, (SELECT senderid FROM sender WHERE sender = :sender), :message)");
-
- addSenderQuery = new QSqlQuery(logDb);
- addSenderQuery->prepare("INSERT INTO sender (sender) VALUES (:sender)");
-
- getLastMessageIdQuery = new QSqlQuery(logDb);
- getLastMessageIdQuery->prepare("SELECT messageid FROM backlog "
- "WHERE time = :time AND bufferid = :bufferid AND type = :type AND senderid = (SELECT senderid FROM sender WHERE sender = :sender)");
-
- requestMsgsOffsetQuery = new QSqlQuery(logDb);
- requestMsgsOffsetQuery->prepare("SELECT count(*) FROM backlog WHERE bufferid = :bufferid AND messageid < :messageid");
-
- requestMsgsQuery = new QSqlQuery(logDb);
- requestMsgsQuery->prepare("SELECT messageid, time, type, flags, sender, message, displayname "
- "FROM backlog "
- "JOIN buffer ON backlog.bufferid = buffer.bufferid "
- "JOIN sender ON backlog.senderid = sender.senderid "
- "LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid "
- "WHERE buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2) "
- "ORDER BY messageid DESC "
- "LIMIT :limit OFFSET :offset");
-
- requestMsgsSinceOffsetQuery = new QSqlQuery(logDb);
- requestMsgsSinceOffsetQuery->prepare("SELECT count(*) FROM backlog WHERE bufferid = :bufferid AND time >= :since");
-
- requestMsgsSinceQuery = new QSqlQuery(logDb);
- requestMsgsSinceQuery->prepare("SELECT messageid, time, type, flags, sender, message, displayname "
- "FROM backlog "
- "JOIN buffer ON backlog.bufferid = buffer.bufferid "
- "JOIN sender ON backlog.senderid = sender.senderid "
- "LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid "
- "WHERE (buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2)) AND "
- "backlog.time >= :since "
- "ORDER BY messageid DESC "
- "LIMIT -1 OFFSET :offset");
-
- requestMsgRangeQuery = new QSqlQuery(logDb);
- requestMsgRangeQuery->prepare("SELECT messageid, time, type, flags, sender, message, displayname "
- "FROM backlog "
- "JOIN buffer ON backlog.bufferid = buffer.bufferid "
- "JOIN sender ON backlog.senderid = sender.senderid "
- "LEFT JOIN buffergroup ON buffer.groupid = buffergroup.groupid "
- "WHERE (buffer.bufferid = :bufferid OR buffer.groupid = (SELECT groupid FROM buffer WHERE bufferid = :bufferid2)) AND "
- "backlog.messageid >= :firstmsg AND backlog.messageid <= :lastmsg "
- "ORDER BY messageid DESC ");