shared_ptr for DatabaseManager factory methods

Refactored from an unique_ptr to shared_ptr, I think this is a better
approach. Now it will be clear that a few DatabaseManager pointers are
stored somewhere in the TinyORM.

 - return std:shared_ptr from DatabaseManager factory methods
 - store a shared_ptr<DatabaseManager> in private data members in
   DatabaseManager and DB classes
This commit is contained in:
silverqx
2022-02-10 15:02:43 +01:00
parent 14fc5b891c
commit cde15172c0
8 changed files with 69 additions and 48 deletions

View File

@@ -2,32 +2,28 @@
#include <QSharedPointer>
#include "orm/macros/likely.hpp"
TINYORM_BEGIN_COMMON_NAMESPACE
namespace Orm
{
DatabaseManager &DB::manager()
{
if (m_manager == nullptr)
m_manager = DatabaseManager::instance();
std::shared_ptr<DatabaseManager> DB::m_manager;
return *m_manager;
}
std::unique_ptr<DatabaseManager>
std::shared_ptr<DatabaseManager>
DB::create(const QString &defaultConnection)
{
return DatabaseManager::create(defaultConnection);
}
std::unique_ptr<DatabaseManager>
std::shared_ptr<DatabaseManager>
DB::create(const QVariantHash &config, const QString &connection)
{
return DatabaseManager::create(config, connection);
}
std::unique_ptr<DatabaseManager>
std::shared_ptr<DatabaseManager>
DB::create(const ConfigurationsType &configs, const QString &defaultConnection)
{
return DatabaseManager::create(configs, defaultConnection);
@@ -461,6 +457,15 @@ void DB::forgetRecordModificationState(const QString &connection)
manager().connection(connection).forgetRecordModificationState();
}
DatabaseManager &DB::manager()
{
if (m_manager) T_LIKELY
return *m_manager;
else T_UNLIKELY
return *(m_manager = DatabaseManager::instance());
}
} // namespace Orm
TINYORM_END_COMMON_NAMESPACE