34
34
SqliteStorage(QObject *parent = 0);
35
35
virtual ~SqliteStorage();
37
virtual AbstractSqlMigrationReader *createMigrationReader();
40
42
bool isAvailable() const;
41
43
QString displayName() const;
44
virtual inline QStringList setupKeys() const { return QStringList(); }
45
virtual inline QVariantMap setupDefaults() const { return QVariantMap(); }
42
46
QString description() const;
44
48
// TODO: Add functions for configuring the backlog handling, i.e. defining auto-cleanup settings etc
46
50
/* User handling */
48
51
virtual UserId addUser(const QString &user, const QString &password);
49
virtual void updateUser(UserId user, const QString &password);
52
virtual bool updateUser(UserId user, const QString &password);
50
53
virtual void renameUser(UserId user, const QString &newName);
51
54
virtual UserId validateUser(const QString &user, const QString &password);
55
virtual UserId getUserId(const QString &username);
52
56
virtual UserId internalUser();
53
57
virtual void delUser(UserId user);
54
58
virtual void setUserSetting(UserId userId, const QString &settingName, const QVariant &data);
78
82
virtual void setAwayMessage(UserId user, NetworkId networkId, const QString &awayMsg);
79
83
virtual QString userModes(UserId user, NetworkId networkId);
80
84
virtual void setUserModes(UserId user, NetworkId networkId, const QString &userModes);
82
86
/* Buffer handling */
83
87
virtual BufferInfo bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer = "", bool create = true);
84
88
virtual BufferInfo getBufferInfo(UserId user, const BufferId &bufferId);
91
95
virtual QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user);
93
97
/* Message handling */
95
virtual MsgId logMessage(Message msg);
98
virtual bool logMessage(Message &msg);
99
virtual bool logMessages(MessageList &msgs);
96
100
virtual QList<Message> requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1);
97
101
virtual QList<Message> requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1);
104
inline virtual void setConnectionProperties(const QVariantMap & /* properties */) {}
100
105
inline virtual QString driverName() { return "QSQLITE"; }
101
106
inline virtual QString databaseName() { return backlogFile(); }
102
107
virtual int installedSchemaVersion();
108
113
static QString backlogFile();
109
bool isValidNetwork(UserId user, const NetworkId &networkId);
110
bool isValidBuffer(const UserId &user, const BufferId &bufferId);
111
NetworkId getNetworkId(UserId user, const QString &network);
112
void createBuffer(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer);
114
void bindNetworkInfo(QSqlQuery &query, const NetworkInfo &info);
115
void bindServerInfo(QSqlQuery &query, const Network::Server &server);
117
inline void lockForRead() { _dbLock.lockForRead(); }
118
inline void lockForWrite() { _dbLock.lockForWrite(); }
119
inline void unlock() { _dbLock.unlock(); }
120
QReadWriteLock _dbLock;
114
121
static int _maxRetryCount;
124
// ========================================
126
// ========================================
127
class SqliteMigrationReader : public SqliteStorage, public AbstractSqlMigrationReader {
131
SqliteMigrationReader();
133
virtual bool readMo(QuasselUserMO &user);
134
virtual bool readMo(SenderMO &sender);
135
virtual bool readMo(IdentityMO &identity);
136
virtual bool readMo(IdentityNickMO &identityNick);
137
virtual bool readMo(NetworkMO &network);
138
virtual bool readMo(BufferMO &buffer);
139
virtual bool readMo(BacklogMO &backlog);
140
virtual bool readMo(IrcServerMO &ircserver);
141
virtual bool readMo(UserSettingMO &userSetting);
143
virtual bool prepareQuery(MigrationObject mo);
145
inline int stepSize() { return 50000; }
148
virtual inline bool transaction() { return logDb().transaction(); }
149
virtual inline void rollback() { logDb().rollback(); }
150
virtual inline bool commit() { return logDb().commit(); }
153
void setMaxId(MigrationObject mo);
157
inline AbstractSqlMigrationReader *SqliteStorage::createMigrationReader() {
158
return new SqliteMigrationReader();