98 lines
2.4 KiB
C++
98 lines
2.4 KiB
C++
#include "matador/query/basic_schema.hpp"
|
|
|
|
#include "matador/sql/executor.hpp"
|
|
|
|
namespace matador::query {
|
|
schema_node::schema_node(class table tab, const object::repository_node& node)
|
|
: table_(std::move(tab))
|
|
, node_(std::move(node)) {
|
|
}
|
|
|
|
const std::string & schema_node::name() const {
|
|
return table_.name();
|
|
}
|
|
|
|
const table &schema_node::table() const {
|
|
return table_;
|
|
}
|
|
|
|
const object::repository_node& schema_node::node() const {
|
|
return node_;
|
|
}
|
|
|
|
basic_schema::basic_schema()
|
|
: basic_schema("") {}
|
|
|
|
basic_schema::basic_schema(const std::string &name)
|
|
: repo_(name) {
|
|
}
|
|
|
|
basic_schema::iterator basic_schema::begin() {
|
|
return schema_nodes_.begin();
|
|
}
|
|
|
|
basic_schema::iterator basic_schema::end() {
|
|
return schema_nodes_.end();
|
|
}
|
|
|
|
basic_schema::const_iterator basic_schema::begin() const {
|
|
return schema_nodes_.begin();
|
|
}
|
|
|
|
basic_schema::const_iterator basic_schema::end() const {
|
|
return schema_nodes_.end();
|
|
}
|
|
|
|
size_t basic_schema::size() const {
|
|
return schema_nodes_.size();
|
|
}
|
|
|
|
bool basic_schema::empty() const {
|
|
return schema_nodes_.empty();
|
|
}
|
|
|
|
basic_schema::iterator basic_schema::find(const std::type_index &ti) {
|
|
return schema_nodes_.find(ti);
|
|
}
|
|
|
|
basic_schema::const_iterator basic_schema::find(const std::type_index &ti) const {
|
|
return schema_nodes_.find(ti);
|
|
}
|
|
|
|
basic_schema::iterator basic_schema::find(const std::string &name) {
|
|
const auto result = repo_.basic_info(name);
|
|
if (!result) {
|
|
return schema_nodes_.end();
|
|
}
|
|
|
|
return schema_nodes_.find(result->get().type_index());
|
|
}
|
|
|
|
basic_schema::const_iterator basic_schema::find(const std::string &name) const {
|
|
const auto result = repo_.basic_info(name);
|
|
if (!result) {
|
|
return schema_nodes_.end();
|
|
}
|
|
|
|
return schema_nodes_.find(result->get().type_index());
|
|
}
|
|
|
|
bool basic_schema::contains(const std::type_index &index) const {
|
|
return schema_nodes_.count(index) == 1;
|
|
}
|
|
|
|
void basic_schema::initialize_executor(sql::executor &exec) const {
|
|
auto factory = std::make_shared<sql::producer_resolver_factory>();
|
|
for (const auto &[key, producer] : resolver_producers_) {
|
|
auto resolver = producer->produce(exec);
|
|
exec.resolver()->register_object_resolver(std::move(resolver));
|
|
}
|
|
|
|
auto collection_factory = std::make_shared<sql::producer_collection_resolver_factory>();
|
|
for (const auto &[key, producer] : collection_resolver_producers_) {
|
|
auto resolver = producer->produce(exec);
|
|
exec.resolver()->register_collection_resolver(std::move(resolver));
|
|
}
|
|
}
|
|
|
|
} |