It is strongly recommended that Postgres users do upgrade to this version.
if(!db.open()) {
qWarning() << "Unable to open database" << displayName() << "for thread" << QThread::currentThread();
qWarning() << "-" << db.lastError().text();
+ } else {
+ initDbSession(db);
}
}
inline virtual QString userName() { return QString(); }
inline virtual QString password() { return QString(); }
+
+ //! Initialize db specific features on connect
+ /** This is called every time a connection to a specific SQL backend is established
+ * the default implementation does nothing.
+ *
+ * When reimplementing this method, don't use logDB() inside this function as
+ * this would cause as we're just about to initialize that DB connection.
+ */
+ inline virtual void initDbSession(QSqlDatabase & /* db */) {}
+
private slots:
void connectionDestroyed();
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) {
virtual QString description() const;
virtual QStringList setupKeys() const;
virtual QVariantMap setupDefaults() const;
- virtual bool setup(const QVariantMap &settings = QVariantMap());
// TODO: Add functions for configuring the backlog handling, i.e. defining auto-cleanup settings etc
virtual QList<Message> requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1);
protected:
+ virtual void initDbSession(QSqlDatabase &db);
virtual void setConnectionProperties(const QVariantMap &properties);
inline virtual QString driverName() { return "QPSQL"; }
inline virtual QString hostName() { return _hostName; }