Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- class ConnectionParameters;
- class QReadWriteLock;
- #include "../ConnectionParameters.h"
- #include <QLoggingCategory>
- #include <QSqlDatabase>
- #include <memory>
- Q_DECLARE_LOGGING_CATEGORY( sqlDatabaseFactory )
- namespace Atm { namespace DbProvider { namespace Concurrent {
- /**
- * @brief Фабрика подключений к СУБД, предоставлящая для потока, из которого производится вызов
- * getSqlDatabase свой собственный экземпляр QSqlDatabase.
- */
- class SqlDatabaseFactory : public QObject
- {
- Q_OBJECT
- public:
- explicit SqlDatabaseFactory( QObject * parent = nullptr );
- explicit SqlDatabaseFactory( const ConnectionParameters & connectionParameters, QObject * parent = nullptr );
- virtual ~SqlDatabaseFactory();
- const ConnectionParameters & connectionParameters() const;
- void setConnectionParameters( const ConnectionParameters & connectionParameters );
- /**
- * @brief Если для вызывающего потока нет своего экземпляра QSqlDatabase,
- * он создается с настройками из connectionParameters. После этого производится
- * попытка подключения.
- * Если для вызывающего потока есть свой экземпляр QSqlDatabase,
- * проверяется не изменились параметры подключения и не закрылось ли подключение.
- * В этом случае старое подключение закрываются, применяются новые параметры и снова происходит
- * подключение. Если подключение было закрыто без изменения параметров подключения,
- * происходит только новой подключение.
- * @return Экземпляр QSqlDatabase для данного потоак.
- * Если в процессе подключения/переподключения к СУБД позникает ошибка, выбрасывается исключение
- * OpenDatabaseException
- */
- QSqlDatabase getSqlDatabase();
- private slots:
- void removeSqlDatabase();
- private:
- QString getConnectionName( Qt::HANDLE threadId ) const;
- QString threadIdToString( Qt::HANDLE threadId ) const;
- QString reconnectionComment( Qt::HANDLE threadId,
- bool connectionWasClosed,
- bool connectionParametersWasChanged ) const;
- private:
- ConnectionParameters m_connectionParameters;
- QMap<Qt::HANDLE, QString> m_connectionNames;
- QHash<Qt::HANDLE, QMetaObject::Connection> m_threadConnections;
- std::unique_ptr<QReadWriteLock> m_lock;
- };
- }}} // namespace Atm::DbProvider::Concurrent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement