Improved connection error handling.

Just returning a boolean is too limiting. Using expection instead to easily pass on error message.
This commit is contained in:
eelke 2018-12-23 08:43:43 +01:00
parent 646b18ebeb
commit a88af1ac11
5 changed files with 41 additions and 41 deletions

View file

@ -5,15 +5,18 @@
Expected<OpenDatabase::OpenDatabaseSPtr> OpenDatabase::createOpenDatabase(const ConnectionConfig &cfg)
{
OpenDatabaseSPtr odb(new OpenDatabase(cfg));
if (odb->Init()) {
return Expected<OpenDatabase::OpenDatabaseSPtr>::fromCode(
[&cfg] () -> auto {
OpenDatabaseSPtr odb(new OpenDatabase(cfg));
odb->Init();
return odb;
});
// catch (const PgException &ex) {
// return
// }
return odb;
}
//return Expected<ConnectionConfig>::fromException(std::out_of_range("Invalid row"));
return Expected<OpenDatabaseSPtr>::fromException(
std::runtime_error("Failed to get database information"));
// return Expected<OpenDatabaseSPtr>::fromException(
// std::runtime_error("Failed to get database information"));
}
OpenDatabase::OpenDatabase(const ConnectionConfig& cfg)
@ -24,16 +27,13 @@ OpenDatabase::OpenDatabase(const ConnectionConfig& cfg)
OpenDatabase::~OpenDatabase() = default;
bool OpenDatabase::Init()
void 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;
conn.connect(kw, vals, 0);
m_catalog->loadAll(conn, nullptr);
}
std::shared_ptr<PgDatabaseCatalog> OpenDatabase::catalog()