}
bool PostgreSqlStorage::isAvailable() const {
+ qDebug() << QSqlDatabase::drivers();
if(!QSqlDatabase::isDriverAvailable("QPSQL")) return false;
return true;
}
return map;
}
-bool PostgreSqlStorage::setup(const QVariantMap &settings) {
- bool success = AbstractSqlStorage::setup(settings);
- if(success) {
- logDb().exec(QString("ALTER USER %1 SET standard_conforming_strings TO on").arg(userName()));
- }
- return success;
+void PostgreSqlStorage::initDbSession(QSqlDatabase &db) {
+ // this blows... but unfortunately Qt's PG driver forces us to this...
+ db.exec("set standard_conforming_strings = off");
+ db.exec("set escape_string_warning = off");
}
void PostgreSqlStorage::setConnectionProperties(const QVariantMap &properties) {
}
if(!db.commit()) {
- qWarning() << "PostgreSqlStorage::createIdentity(): commiting data failed!";
+ qWarning() << "PostgreSqlStorage::createIdentity(): committing data failed!";
qWarning() << " -" << qPrintable(db.lastError().text());
return IdentityId();
}
}
if(!db.commit()) {
- qWarning() << "PostgreSqlStorage::updateIdentity(): commiting data failed!";
+ qWarning() << "PostgreSqlStorage::updateIdentity(): committing data failed!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
}
}
if(!db.commit()) {
- qWarning() << "PostgreSqlStorage::createNetwork(): commiting data failed!";
+ qWarning() << "PostgreSqlStorage::createNetwork(): committing data failed!";
qWarning() << " -" << qPrintable(db.lastError().text());
return NetworkId();
}
query.bindValue(":useautoidentify", info.useAutoIdentify);
query.bindValue(":autoidentifyservice", info.autoIdentifyService);
query.bindValue(":autoidentifypassword", info.autoIdentifyPassword);
+ query.bindValue(":usesasl", info.useSasl);
+ query.bindValue(":saslaccount", info.saslAccount);
+ query.bindValue(":saslpassword", info.saslPassword);
query.bindValue(":useautoreconnect", info.useAutoReconnect);
query.bindValue(":autoreconnectinterval", info.autoReconnectInterval);
query.bindValue(":autoreconnectretries", info.autoReconnectRetries);
}
if(!db.commit()) {
- qWarning() << "PostgreSqlStorage::updateNetwork(): commiting data failed!";
+ qWarning() << "PostgreSqlStorage::updateNetwork(): committing data failed!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
}
net.autoReconnectRetries = networksQuery.value(13).toInt();
net.unlimitedReconnectRetries = networksQuery.value(14).toBool();
net.rejoinChannels = networksQuery.value(15).toBool();
+ net.useSasl = networksQuery.value(16).toBool();
+ net.saslAccount = networksQuery.value(17).toString();
+ net.saslPassword = networksQuery.value(18).toString();
serversQuery.bindValue(":networkid", net.networkId.toInt());
safeExec(serversQuery);
createQuery.bindValue(":buffertype", (int)type);
createQuery.bindValue(":buffername", buffer);
createQuery.bindValue(":buffercname", buffer.toLower());
+ createQuery.bindValue(":joined", type & BufferInfo::ChannelBuffer ? true : false);
+
safeExec(createQuery);
if(createQuery.lastError().isValid()) {
}
QSqlQuery checkQuery(db);
- checkQuery.prepare("SELECT count(*) FROM buffer"
+ checkQuery.prepare("SELECT count(*) FROM buffer "
"WHERE userid = :userid AND bufferid IN (:buffer1, :buffer2)");
checkQuery.bindValue(":userid", user.toInt());
checkQuery.bindValue(":buffer1", bufferId1.toInt());
return lastSeenHash;
}
+void PostgreSqlStorage::setBufferMarkerLineMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {
+ QSqlQuery query(logDb());
+ query.prepare(queryString("update_buffer_markerlinemsgid"));
+
+ query.bindValue(":userid", user.toInt());
+ query.bindValue(":bufferid", bufferId.toInt());
+ query.bindValue(":markerlinemsgid", msgId.toInt());
+ safeExec(query);
+ watchQuery(query);
+}
+
+QHash<BufferId, MsgId> PostgreSqlStorage::bufferMarkerLineMsgIds(UserId user) {
+ QHash<BufferId, MsgId> markerLineHash;
+
+ QSqlDatabase db = logDb();
+ if(!beginReadOnlyTransaction(db)) {
+ qWarning() << "PostgreSqlStorage::bufferMarkerLineMsgIds(): cannot start read only transaction!";
+ qWarning() << " -" << qPrintable(db.lastError().text());
+ return markerLineHash;
+ }
+
+ QSqlQuery query(db);
+ query.prepare(queryString("select_buffer_markerlinemsgids"));
+ query.bindValue(":userid", user.toInt());
+ safeExec(query);
+ if(!watchQuery(query)) {
+ db.rollback();
+ return markerLineHash;
+ }
+
+ while(query.next()) {
+ markerLineHash[query.value(0).toInt()] = query.value(1).toInt();
+ }
+
+ db.commit();
+ return markerLineHash;
+}
+
bool PostgreSqlStorage::logMessage(Message &msg) {
QSqlDatabase db = logDb();
if(!db.transaction()) {
bindValue(19, network.awaymessage);
bindValue(20, network.attachperform);
bindValue(21, network.detachperform);
+ bindValue(22, network.usesasl);
+ bindValue(23, network.saslaccount);
+ bindValue(24, network.saslpassword);
return exec();
}
bindValue(5, buffer.buffercname);
bindValue(6, (int)buffer.buffertype);
bindValue(7, buffer.lastseenmsgid);
- bindValue(8, buffer.key);
- bindValue(9, buffer.joined);
+ bindValue(8, buffer.markerlinemsgid);
+ bindValue(9, buffer.key);
+ bindValue(10, buffer.joined);
return exec();
}