2 * Copyright (C) 2010 Ixonos Plc.
3 * Copyright (C) 2011-2021 Philipp Spitzer, gregor herrmann, Stefan Stahl
5 * This file is part of ConfClerk.
7 * ConfClerk is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 2 of the License, or (at your option)
12 * ConfClerk is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * You should have received a copy of the GNU General Public License along with
18 * ConfClerk. If not, see <http://www.gnu.org/licenses/>.
25 #include <QSqlDatabase>
28 class SqlEngine : public QObject {
31 const QString DATE_FORMAT; // "yyyy-MM-dd"
32 const QString TIME_FORMAT; // "hh:mm"
34 QString dbFilename; ///< database filename including path
35 QSqlDatabase db; ///< this may be private one day...
37 SqlEngine(QObject *aParent = NULL);
41 void open(); ///< emits a database error if failed.
42 bool isOpen() const {return db.isOpen();}
43 void close() {db.close();}
46 /// returns the "user_version" of the database schema
47 /// we return -1 for an empty database
48 /// the database has to be open
49 /// returns -2 if an error occurs and emits the error message
50 int dbSchemaVersion();
51 /// called by createOrUpdateDbSchema. Do not use directly. true for success.
52 bool updateDbSchemaVersion000To001();
53 bool updateDbSchemaVersion001To002();
54 /// called by createOrUpdateDbSchma. Do not use directly. true for success.
55 bool createCurrentDbSchema();
56 /// creates the current database schema if an empty database is found,
57 /// otherwise updates the schema if an old one is found. true for success.
58 bool createOrUpdateDbSchema();
59 /// Applies an SQL file
60 bool applySqlFile(const QString sqlFile);
62 // if a conferenceId != 0 is given, the conference is updated instead of inserted.
63 void addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId, bool omit_display_time_shift = false);
64 void addEventToDB(QHash<QString,QString> &aEvent);
65 void addPersonToDB(QHash<QString,QString> &aPerson);
66 void addLinkToDB(QHash<QString,QString> &aLink);
67 void addRoomToDB(QHash<QString,QString> &aRoom);
68 bool deleteConference(int id);
70 bool beginTransaction();
71 bool commitTransaction();
72 bool rollbackTransaction();
74 /// search Events for .... returns true if success
75 bool searchEvent(int conferenceId, const QMultiHash<QString,QString> &columns, const QString &keyword);
77 static QString login(const QString &aDatabaseType, const QString &aDatabaseName);
78 /// emits a possible error message as signal. Does nothing if there was not last error
79 void emitSqlQueryError(const QSqlQuery& query);
82 /// emitted when a database errors occur
83 void dbError(const QString& message);
87 class TransactionRaii {
91 TransactionRaii(SqlEngine& sqlEngine): sqlEngine(sqlEngine), committed(false) {
92 sqlEngine.beginTransaction();
96 sqlEngine.commitTransaction();
101 if (!committed) sqlEngine.rollbackTransaction();
105 #endif /* SQLENGINE_H */