#include <QSqlQuery>
#include <QSqlError>
+class AbstractSqlMigrationReader;
+class AbstractSqlMigrationWriter;
+
class AbstractSqlStorage : public Storage {
Q_OBJECT
AbstractSqlStorage(QObject *parent = 0);
virtual ~AbstractSqlStorage();
+ virtual inline AbstractSqlMigrationReader *createMigrationReader() { return 0; }
+ virtual inline AbstractSqlMigrationWriter *createMigrationWriter() { return 0; }
+
+public slots:
virtual State init(const QVariantMap &settings = QVariantMap());
+ virtual bool setup(const QVariantMap &settings = QVariantMap());
protected:
inline virtual void sync() {};
inline QString queryString(const QString &queryName) { return queryString(queryName, 0); }
QStringList setupQueries();
- bool setup(const QVariantMap &settings = QVariantMap());
QStringList upgradeQueries(int ver);
bool upgradeDb();
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();
int _schemaVersion;
- int _nextConnectionId;
+ static int _nextConnectionId;
QMutex _connectionPoolMutex;
// we let a Connection Object manage each actual db connection
// those objects reside in the thread the connection belongs to
struct SenderMO {
int senderId;
QString sender;
+ SenderMO() : senderId(0) {}
};
struct IdentityMO {
QString awaymessage;
QString attachperform;
QString detachperform;
+ bool usesasl;
+ QString saslaccount;
+ QString saslpassword;
};
struct BufferMO {
QString buffercname;
int buffertype;
int lastseenmsgid;
+ int markerlinemsgid;
QString key;
bool joined;
};
QSqlQuery *_query;
};
-class AbstractSqlMigrationWriter;
class AbstractSqlMigrationReader : public AbstractSqlMigrator {
public:
AbstractSqlMigrationReader();
virtual bool readMo(QuasselUserMO &user) = 0;
- virtual bool readMo(SenderMO &sender) = 0;
virtual bool readMo(IdentityMO &identity) = 0;
virtual bool readMo(IdentityNickMO &identityNick) = 0;
virtual bool readMo(NetworkMO &network) = 0;
virtual bool readMo(BufferMO &buffer) = 0;
+ virtual bool readMo(SenderMO &sender) = 0;
virtual bool readMo(BacklogMO &backlog) = 0;
virtual bool readMo(IrcServerMO &ircserver) = 0;
virtual bool readMo(UserSettingMO &userSetting) = 0;
class AbstractSqlMigrationWriter : public AbstractSqlMigrator {
public:
virtual bool writeMo(const QuasselUserMO &user) = 0;
- virtual bool writeMo(const SenderMO &sender) = 0;
virtual bool writeMo(const IdentityMO &identity) = 0;
virtual bool writeMo(const IdentityNickMO &identityNick) = 0;
virtual bool writeMo(const NetworkMO &network) = 0;
virtual bool writeMo(const BufferMO &buffer) = 0;
+ virtual bool writeMo(const SenderMO &sender) = 0;
virtual bool writeMo(const BacklogMO &backlog) = 0;
virtual bool writeMo(const IrcServerMO &ircserver) = 0;
virtual bool writeMo(const UserSettingMO &userSetting) = 0;
inline bool migrateFrom(AbstractSqlMigrationReader *reader) { return reader->migrateTo(this); }
+ // called after migration process
+ virtual inline bool postProcess() { return true; }
friend class AbstractSqlMigrationReader;
};