exec("SET standard_conforming_strings = 'off'");
#endif
+ // If the previous connection was terminated in an unusual way, the DB
+ // driver will not delete its subscriptions and refuse to subscribe again.
+ unsubscribeFromNotifications();
subscribeToNotifications();
emit connected();
d->preparedQueries.clear();
d->transactionLevel = 0;
- auto subscribedNotifications = d->db.driver()->subscribedToNotifications();
- foreach (const QString ¬ification, subscribedNotifications)
- d->db.driver()->unsubscribeFromNotification(notification);
-
if (!d->db.isOpen())
{
qDebug() << "Not connected";
return;
}
+ // Unsubscribing only works when connected
+ unsubscribeFromNotifications();
+
d->db.close();
emit disconnected();
d->db.driver()->subscribeToNotification("file_location_delete");
}
+void Database::unsubscribeFromNotifications()
+{
+ auto subscribedNotifications = d->db.driver()->subscribedToNotifications();
+ foreach (const QString ¬ification, subscribedNotifications)
+ d->db.driver()->unsubscribeFromNotification(notification);
+}
+
OpenFileData Database::readOpenFileData(QSqlQuery &q)
{
OpenFileData data;
private:
void subscribeToNotifications();
+ void unsubscribeFromNotifications();
bool checkError(QSqlQuery &query, bool prepared = false);
bool retryExec(QSqlQuery &query, bool prepared);