diff --git a/pgsqldatabasecatalogue.cpp b/pgsqldatabasecatalogue.cpp index bf8b046..c4829ee 100644 --- a/pgsqldatabasecatalogue.cpp +++ b/pgsqldatabasecatalogue.cpp @@ -1,6 +1,29 @@ -#include "pgsqldatabasecatalogue.h" +#include "pgsqldatabasecatalogue.h" +#include "pgtypecontainer.h" +#include "PgsqlConn.h" PgsqlDatabaseCatalogue::PgsqlDatabaseCatalogue() { } + +PgsqlDatabaseCatalogue::~PgsqlDatabaseCatalogue() +{ + delete m_types; +} + +void PgsqlDatabaseCatalogue::loadAll(Pgsql::Connection &conn) +{ + loadTypes(conn); +} + +void PgsqlDatabaseCatalogue::loadTypes(Pgsql::Connection &conn) +{ + if (m_types == nullptr) { + m_types = new PgTypeContainer; + } + + std::string q = m_types->getLoadQuery(); + Pgsql::Result result = conn.query(q.c_str()); + m_types->load(result); +} diff --git a/pgsqldatabasecatalogue.h b/pgsqldatabasecatalogue.h index a6a7e25..a85c1cd 100644 --- a/pgsqldatabasecatalogue.h +++ b/pgsqldatabasecatalogue.h @@ -3,12 +3,27 @@ #include +namespace Pgsql { + + class Connection; + +} + class PgTypeContainer; class PgsqlDatabaseCatalogue { public: PgsqlDatabaseCatalogue(); + PgsqlDatabaseCatalogue(const PgsqlDatabaseCatalogue&) = delete; + PgsqlDatabaseCatalogue& operator = (const PgsqlDatabaseCatalogue&) = delete; + ~PgsqlDatabaseCatalogue(); + + + void loadAll(Pgsql::Connection &conn); + void loadTypes(Pgsql::Connection &conn); + + const PgTypeContainer* getTypes() const { return m_types; } private: PgTypeContainer *m_types; }; diff --git a/scopeguard.h b/scopeguard.h index 1aa12ed..5a27a33 100644 --- a/scopeguard.h +++ b/scopeguard.h @@ -1,6 +1,15 @@ #ifndef SCOPEGUARD_H #define SCOPEGUARD_H +/** \brief Template class for executing code at scope exit. + * + * By default the object will be an active mode and execute the function + * passed to the constructor when the object is destructed. You can however + * cancel this action by calling dismiss(). + * + * There is a clever macro that allows you to write something like + * SCOPE_EXIT { foo(); }; + */ template class ScopeGuard { Fun f_;