pgLab/pglab/OpenDatabase.h
eelke 60d8f36328 poc Add support for reloading the catalog
Reload works and the column page reacts correctly. Others to be checked
and fixed.
2019-10-06 13:52:45 +02:00

55 lines
1.5 KiB
C++

#ifndef OPENDATABASE_H
#define OPENDATABASE_H
#include "ConnectionConfig.h"
#include <QException>
#include <memory>
class PgDatabaseCatalog;
class TypeSelectionItemModel;
class OpenDatabaseException : public QException {
public:
OpenDatabaseException(QString message)
: m_message(std::move(message))
{}
QString text() const { return m_message; }
void raise() const override { throw *this; }
OpenDatabaseException *clone() const override { return new OpenDatabaseException(*this); }
private:
QString m_message;
};
/** Instances of this class represent a single database on which atleast one
* window is opened. This class is used to track details about that database.
*/
class OpenDatabase {
public:
using OpenDatabaseSPtr = std::shared_ptr<OpenDatabase>;
static OpenDatabaseSPtr createOpenDatabase(const ConnectionConfig &cfg);
// using on_createResult_callback = std::function<void(Expected<std::shared_ptr<Pgsql::Result>>)>;
// void asyncCreateOpenDatabase(const ConnectionConfig &cfg, on_createResult_callback);
OpenDatabase(const OpenDatabase &) = delete;
OpenDatabase& operator=(const OpenDatabase &) = delete;
~OpenDatabase();
std::shared_ptr<PgDatabaseCatalog> catalog();
TypeSelectionItemModel* typeSelectionModel();
void refresh();
const ConnectionConfig& config() const { return m_config; }
private:
ConnectionConfig m_config;
std::shared_ptr<PgDatabaseCatalog> m_catalog;
TypeSelectionItemModel *m_typeSelectionModel = nullptr;
OpenDatabase(const ConnectionConfig& cfg);
void Init();
};
#endif // OPENDATABASE_H