diff --git a/include/matador/query/schema.hpp b/include/matador/query/schema.hpp index 889bfc5..dcd0498 100644 --- a/include/matador/query/schema.hpp +++ b/include/matador/query/schema.hpp @@ -37,6 +37,26 @@ private: std::string pk_name_; }; +template +class query_collection_resolver_producer : public sql::resolver_producer { +public: + query_collection_resolver_producer() = default; + query_collection_resolver_producer(const basic_schema& repo, const table& tab, std::string pk_name) + : resolver_producer(typeid(Type)) + , repo_(repo) + , table_(tab) + , pk_name_(std::move(pk_name)) {} + + std::shared_ptr produce(sql::executor &exec) override { + return std::make_shared>(repo_, exec, table_, std::move(pk_name_)); + } + +private: + const basic_schema& repo_; + const table& table_; + std::string pk_name_; +}; + class schema; using schema_ref = std::reference_wrapper; @@ -144,6 +164,37 @@ utils::result schema::drop_table(const sql::connection &conn return utils::failure(info.err()); } + +class producer_creator final { +public: + template + void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr = utils::default_pk_attributes) { + + } + static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {} + template + static void on_attribute(const char * /*id*/, Type &/*value*/, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} + template + void on_belongs_to(const char * /*id*/, Pointer &x, const utils::foreign_attributes &attr) {} + template + void on_has_one(const char * /*id*/, Pointer &x, const utils::foreign_attributes &attr) {} + template + void on_has_many_to_many(const char *, ContainerType &, const char * /*join_column*/, const char * /*inverse_join_column*/, const utils::foreign_attributes &attr) {} + template + void on_has_many_to_many(const char *, ContainerType &, const utils::foreign_attributes &attr) {} + + template + void on_has_many(const char * /*id*/, CollectionType &cont, const char * /*join_column*/, const utils::foreign_attributes &attr, std::enable_if_t::value> * = nullptr) { + + } + + template + void on_has_many(const char * /*id*/, CollectionType &cont, const char * /*join_column*/, const utils::foreign_attributes &attr, std::enable_if_t::value> * = nullptr) { + + } + +}; + template void schema_observer::on_attach(const object::repository_node &node, const Type &/*prototype*/) const { const auto it = schema_.insert_table(typeid(Type), node);