64 lines
1.8 KiB
C++
64 lines
1.8 KiB
C++
#ifndef MATADOR_BASIC_SCHEMA_HPP
|
|
#define MATADOR_BASIC_SCHEMA_HPP
|
|
|
|
#include "matador/object/repository.hpp"
|
|
|
|
#include "matador/sql/producer_resolver_factory.hpp"
|
|
|
|
#include "matador/query/table.hpp"
|
|
|
|
#include <unordered_map>
|
|
#include <memory>
|
|
#include <typeindex>
|
|
|
|
namespace matador::query {
|
|
class schema_node final {
|
|
public:
|
|
schema_node(class table tab, const object::repository_node& node);
|
|
|
|
[[nodiscard]] const std::string& name() const;
|
|
[[nodiscard]] const class table& table() const;
|
|
[[nodiscard]] const object::repository_node& node() const;
|
|
|
|
private:
|
|
class table table_;
|
|
const object::repository_node& node_;
|
|
};
|
|
|
|
class basic_schema {
|
|
public:
|
|
using schema_node_map = std::unordered_map<std::type_index, schema_node>;
|
|
using iterator = std::unordered_map<std::type_index, schema_node>::iterator;
|
|
using const_iterator = std::unordered_map<std::type_index, schema_node>::const_iterator;
|
|
|
|
basic_schema();
|
|
explicit basic_schema(const std::string &name);
|
|
|
|
iterator begin();
|
|
iterator end();
|
|
[[nodiscard]] const_iterator begin() const;
|
|
[[nodiscard]] const_iterator end() const;
|
|
|
|
[[nodiscard]] size_t size() const;
|
|
[[nodiscard]] bool empty() const;
|
|
|
|
iterator find(const std::type_index& ti);
|
|
iterator find(const std::string& name);
|
|
|
|
[[nodiscard]] const_iterator find(const std::type_index& ti) const;
|
|
[[nodiscard]] const_iterator find(const std::string& name) const;
|
|
|
|
[[nodiscard]] bool contains(const std::type_index &index) const;
|
|
|
|
void initialize_executor(sql::executor &exec) const;
|
|
|
|
protected:
|
|
template<typename Type>
|
|
friend class schema_observer;
|
|
|
|
object::repository repo_;
|
|
std::unordered_map<std::type_index, schema_node> schema_nodes_;
|
|
std::unordered_map<std::type_index, std::unique_ptr<sql::resolver_producer>> resolver_producers_;
|
|
};
|
|
}
|
|
#endif //MATADOR_BASIC_SCHEMA_HPP
|