From 5550d68eeebbf04822809ced6a891df1b526fdc4 Mon Sep 17 00:00:00 2001 From: silverqx Date: Fri, 12 Aug 2022 17:34:55 +0200 Subject: [PATCH] added connection configuration getters to DB/DM Added getters for obtaining connection configuration. - original configurations from the DatabaseManager - and configurations from the DatabaseConnection --- include/orm/databasemanager.hpp | 17 +++++++++++++++ include/orm/db.hpp | 16 ++++++++++++++ src/orm/databasemanager.cpp | 36 ++++++++++++++++++++++++++++++++ src/orm/db.cpp | 37 +++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) diff --git a/include/orm/databasemanager.hpp b/include/orm/databasemanager.hpp index fc02d336e..203115556 100644 --- a/include/orm/databasemanager.hpp +++ b/include/orm/databasemanager.hpp @@ -291,6 +291,23 @@ namespace Query /*! Return the host name of the connected database. */ const QString &hostName(const QString &connection = ""); + /* Connection configuration - saved in the DatabaseManager */ + /*! Get an original configuration for the given connection + (passed to the DB::create, original/unchanged). */ + const QVariantHash &originalConfig(const QString &connection = "") const; + /*! Get an original configuration option value for the given connection + (passed to the DB::create, original/unchanged). */ + QVariant originalConfigValue(const QString &option, + const QString &connection = "") const; + + /* Connection configuration - proxies to the DatabaseConnection */ + /*! Get the configuration for the current connection. */ + const QVariantHash &getConfig(const QString &connection = ""); + /*! Get an option value from the configuration options. */ + QVariant getConfig(const QString &option, const QString &connection = ""); + /*! Check whether the configuration contains the given option. */ + bool hasConfig(const QString &option, const QString &connection = ""); + /* Pretending */ /*! Execute the given callback in "dry run" mode. */ QVector diff --git a/include/orm/db.hpp b/include/orm/db.hpp index fa540013e..5a06fc275 100644 --- a/include/orm/db.hpp +++ b/include/orm/db.hpp @@ -290,6 +290,22 @@ namespace Orm /*! Return the host name of the connected database. */ static const QString &hostName(const QString &connection = ""); + /* Connection configuration - saved in the DatabaseManager */ + /*! Get the configuration for a connection. */ + static const QVariantHash &originalConfig(const QString &connection = ""); + /*! Get a configuration option value from the configuration for a connection. */ + static QVariant originalConfigValue(const QString &option, + const QString &connection = ""); + + /* Connection configuration - proxies to the DatabaseConnection */ + /*! Get the configuration for the current connection. */ + static const QVariantHash &getConfig(const QString &connection = ""); + /*! Get an option value from the configuration options. */ + static QVariant getConfigValue(const QString &option, + const QString &connection = ""); + /*! Check whether the configuration contains the given option. */ + static bool hasConfigValue(const QString &option, const QString &connection = ""); + /* Pretending */ /*! Execute the given callback in "dry run" mode. */ static QVector diff --git a/src/orm/databasemanager.cpp b/src/orm/databasemanager.cpp index 54e80b33d..f456f8917 100644 --- a/src/orm/databasemanager.cpp +++ b/src/orm/databasemanager.cpp @@ -759,6 +759,42 @@ DatabaseManager::hostName(const QString &connection) return this->connection(connection).getHostName(); } +/* Connection configuration - saved in the DatabaseManager */ + +QVariant +DatabaseManager::originalConfigValue(const QString &option, + const QString &connection) const +{ + return originalConfig(connection).value(option); +} + +const QVariantHash & +DatabaseManager::originalConfig(const QString &connection) const +{ + const auto &connectionName = parseConnectionName(connection); + + throwIfNoConfiguration(connectionName); + + return (*m_configuration).at(connectionName); +} + +/* Connection configuration - proxies to the DatabaseConnection */ + +QVariant DatabaseManager::getConfig(const QString &option, const QString &connection) +{ + return this->connection(connection).getConfig(option); +} + +const QVariantHash &DatabaseManager::getConfig(const QString &connection) +{ + return this->connection(connection).getConfig(); +} + +bool DatabaseManager::hasConfig(const QString &option, const QString &connection) +{ + return this->connection(connection).hasConfig(option); +} + /* Pretending */ QVector diff --git a/src/orm/db.cpp b/src/orm/db.cpp index 02789d3f4..4e4c3d2a1 100644 --- a/src/orm/db.cpp +++ b/src/orm/db.cpp @@ -507,6 +507,43 @@ const QString &DB::hostName(const QString &connection) return manager().connection(connection).getHostName(); } +/* Connection configuration - saved in the DatabaseManager */ + +/* Difference between a connection config. saved in the DatabaseManager and + DatabaseConnection can differ in some cases. A configuration saved + in the DatabaseConnection is already processed by the ConnectionFactory and Connector. + Eg. the host config. option can differ because a user can pass a QStringList of hosts, + so in the DM will be this QStringList, but in the DatabaseConnection will be only + the QString, a hostname to which the connection was successful. */ + +const QVariantHash &DB::originalConfig(const QString &connection) +{ + return manager().originalConfig(connection); +} + +QVariant +DB::originalConfigValue(const QString &option, const QString &connection) +{ + return manager().originalConfigValue(option, connection); +} + +/* Connection configuration - proxies to the DatabaseConnection */ + +const QVariantHash &DB::getConfig(const QString &connection) +{ + return manager().connection(connection).getConfig(); +} + +QVariant DB::getConfigValue(const QString &option, const QString &connection) +{ + return manager().connection(connection).getConfig(option); +} + +bool DB::hasConfigValue(const QString &option, const QString &connection) +{ + return manager().connection(connection).hasConfig(option); +} + /* Pretending */ QVector