/*
* Copyright (C) 2010 Ixonos Plc.
- * Copyright (C) 2011-2014 Philipp Spitzer, gregor herrmann, Stefan Stahl
+ * Copyright (C) 2011-2021 Philipp Spitzer, gregor herrmann, Stefan Stahl
*
* This file is part of ConfClerk.
*
class SqlEngine : public QObject {
Q_OBJECT
public:
+ const QString DATE_FORMAT; // "yyyy-MM-dd"
+ const QString TIME_FORMAT; // "hh:mm"
+
QString dbFilename; ///< database filename including path
QSqlDatabase db; ///< this may be private one day...
int dbSchemaVersion();
/// called by createOrUpdateDbSchema. Do not use directly. true for success.
bool updateDbSchemaVersion000To001();
+ bool updateDbSchemaVersion001To002();
/// called by createOrUpdateDbSchma. Do not use directly. true for success.
bool createCurrentDbSchema();
/// creates the current database schema if an empty database is found,
/// Applies an SQL file
bool applySqlFile(const QString sqlFile);
- // if a conferneceId != 0 is given, the confernce is updated instead of inserted.
- void addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId);
+ // if a conferenceId != 0 is given, the conference is updated instead of inserted.
+ void addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId, bool omit_display_time_shift = false);
void addEventToDB(QHash<QString,QString> &aEvent);
void addPersonToDB(QHash<QString,QString> &aPerson);
void addLinkToDB(QHash<QString,QString> &aLink);
void addRoomToDB(QHash<QString,QString> &aRoom);
bool deleteConference(int id);
+ bool deleteStaleEvents(int conferenceId, QSet<QString> eventIdsToKeep);
bool beginTransaction();
bool commitTransaction();
+ bool rollbackTransaction();
/// search Events for .... returns true if success
- bool searchEvent(int conferenceId, const QHash<QString,QString> &columns, const QString &keyword);
+ bool searchEvent(int conferenceId, const QMultiHash<QString,QString> &columns, const QString &keyword);
private:
static QString login(const QString &aDatabaseType, const QString &aDatabaseName);
/// emits a possible error message as signal. Does nothing if there was not last error
void dbError(const QString& message);
};
+
+class TransactionRaii {
+ SqlEngine& sqlEngine;
+ bool committed;
+public:
+ TransactionRaii(SqlEngine& sqlEngine): sqlEngine(sqlEngine), committed(false) {
+ sqlEngine.beginTransaction();
+ }
+
+ void commit() {
+ sqlEngine.commitTransaction();
+ committed = true;
+ }
+
+ ~TransactionRaii() {
+ if (!committed) sqlEngine.rollbackTransaction();
+ }
+};
+
#endif /* SQLENGINE_H */