Just returning a boolean is too limiting. Using expection instead to easily pass on error message.
52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
#include "OpenDatabase.h"
|
|
#include "catalog/PgDatabaseCatalog.h"
|
|
#include "Pgsql_Connection.h"
|
|
#include "model/TypeSelectionItemModel.h"
|
|
|
|
Expected<OpenDatabase::OpenDatabaseSPtr> OpenDatabase::createOpenDatabase(const ConnectionConfig &cfg)
|
|
{
|
|
return Expected<OpenDatabase::OpenDatabaseSPtr>::fromCode(
|
|
[&cfg] () -> auto {
|
|
OpenDatabaseSPtr odb(new OpenDatabase(cfg));
|
|
odb->Init();
|
|
return odb;
|
|
});
|
|
// catch (const PgException &ex) {
|
|
// return
|
|
// }
|
|
|
|
// 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>())
|
|
{
|
|
}
|
|
|
|
OpenDatabase::~OpenDatabase() = default;
|
|
|
|
void OpenDatabase::Init()
|
|
{
|
|
Pgsql::Connection conn;
|
|
auto kw = m_config.getKeywords();
|
|
auto vals = m_config.getValues();
|
|
conn.connect(kw, vals, 0);
|
|
m_catalog->loadAll(conn, nullptr);
|
|
}
|
|
|
|
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;
|
|
}
|