pgLab/pglab/OpenDatabase.cpp

53 lines
1.3 KiB
C++
Raw Normal View History

#include "OpenDatabase.h"
#include "catalog/PgDatabaseCatalog.h"
#include "Pgsql_Connection.h"
#include "model/TypeSelectionItemModel.h"
Expected<OpenDatabase::OpenDatabaseSPtr> OpenDatabase::createOpenDatabase(const ConnectionConfig &cfg)
{
OpenDatabaseSPtr odb(new OpenDatabase(cfg));
if (odb->Init()) {
return odb;
}
//return Expected<ConnectionConfig>::fromException(std::out_of_range("Invalid row"));
return Expected<OpenDatabaseSPtr>::fromException(
std::runtime_error("Failed to get database information"));
}
OpenDatabase::OpenDatabase(const ConnectionConfig& cfg)
: m_config(cfg)
, m_catalog(std::make_shared<PgDatabaseCatalog>())
{
}
2018-12-16 15:38:32 +01:00
OpenDatabase::~OpenDatabase() = default;
bool OpenDatabase::Init()
{
Pgsql::Connection conn;
auto kw = m_config.getKeywords();
auto vals = m_config.getValues();
if (conn.connect(kw, vals, 0)) {
m_catalog->loadAll(conn, nullptr);
return true;
}
return false;
}
std::shared_ptr<PgDatabaseCatalog> OpenDatabase::catalog()
{
return m_catalog;
}
TypeSelectionItemModel* OpenDatabase::typeSelectionModel()
{
if (m_typeSelectionModel == nullptr) {
m_typeSelectionModel = new TypeSelectionItemModel(nullptr);
m_typeSelectionModel->setTypeList(m_catalog->types());
}
return m_typeSelectionModel;
}