Implemented the loading of the list of types into the database catalogue.

This commit is contained in:
Eelke Klein 2017-02-01 20:00:25 +01:00
parent 43c3835350
commit 5a35fa6a30
3 changed files with 48 additions and 1 deletions

View file

@ -1,6 +1,29 @@
#include "pgsqldatabasecatalogue.h" #include "pgsqldatabasecatalogue.h"
#include "pgtypecontainer.h"
#include "PgsqlConn.h"
PgsqlDatabaseCatalogue::PgsqlDatabaseCatalogue() 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);
}

View file

@ -3,12 +3,27 @@
#include <vector> #include <vector>
namespace Pgsql {
class Connection;
}
class PgTypeContainer; class PgTypeContainer;
class PgsqlDatabaseCatalogue { class PgsqlDatabaseCatalogue {
public: public:
PgsqlDatabaseCatalogue(); 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: private:
PgTypeContainer *m_types; PgTypeContainer *m_types;
}; };

View file

@ -1,6 +1,15 @@
#ifndef SCOPEGUARD_H #ifndef SCOPEGUARD_H
#define 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 Fun> template<class Fun>
class ScopeGuard { class ScopeGuard {
Fun f_; Fun f_;