diff --git a/demo/sandbox.cpp b/demo/sandbox.cpp index 87a4295..2f6a2aa 100644 --- a/demo/sandbox.cpp +++ b/demo/sandbox.cpp @@ -100,7 +100,7 @@ struct user { namespace field = access; field::primary_key( op, "id", id ); field::attribute( op, "username", username, VarChar255 ); - field::has_one(op, "profile_id", profile, utils::CascadeNoneFetchLazy ); + field::has_one(op, "profiles", profile, "profile_id", utils::CascadeNoneFetchLazy ); } }; @@ -139,7 +139,7 @@ int main() { sql::resolver_service rs; - std::weak_ptr cr = rs.collection_resolver>( typeid(person), "names" ); + std::weak_ptr cr = rs.joined_collection_resolver>( typeid(person), "names" ); utils::identifier id{1}; object::collection_proxy cp(cr, id); diff --git a/include/matador/object/collection_resolver_factory.hpp b/include/matador/object/joined_collection_resolver_factory.hpp similarity index 93% rename from include/matador/object/collection_resolver_factory.hpp rename to include/matador/object/joined_collection_resolver_factory.hpp index cf9901c..0199e23 100644 --- a/include/matador/object/collection_resolver_factory.hpp +++ b/include/matador/object/joined_collection_resolver_factory.hpp @@ -14,7 +14,7 @@ public: virtual void register_collection_resolver(std::shared_ptr &&resolver) = 0; }; -class collection_resolver_factory : public abstract_collection_resolver_factory { +class joined_collection_resolver_factory : public abstract_collection_resolver_factory { public: template [[nodiscard]] std::shared_ptr> resolver(const std::type_index &root_type, const std::string &collection_name) const { diff --git a/include/matador/query/basic_schema.hpp b/include/matador/query/basic_schema.hpp index 5fffe8a..f6540f1 100644 --- a/include/matador/query/basic_schema.hpp +++ b/include/matador/query/basic_schema.hpp @@ -6,9 +6,9 @@ #include "matador/query/abstract_pk_generator.hpp" #include "matador/query/table.hpp" -#include "matador/sql/internal/collection_resolver_producer.hpp" +#include "matador/sql/internal/joined_collection_resolver_producer.hpp" #include "matador/sql/internal/object_resolver_producer.hpp" -#include "matador/sql/producer_resolver_factory.hpp" +#include "matador/sql/producer_object_resolver_factory.hpp" #include #include @@ -102,7 +102,7 @@ public: [[nodiscard]] bool contains(const std::type_index &index) const; [[nodiscard]] const std::unordered_map>& resolver_producers() const; - [[nodiscard]] const std::unordered_map, object::collection_composite_key_hash>& collection_resolver_producers() const; + [[nodiscard]] const std::unordered_map, object::collection_composite_key_hash>& collection_resolver_producers() const; [[nodiscard]] const std::unordered_map, object::collection_composite_key_hash>& joined_object_resolver_producers() const; protected: @@ -113,7 +113,7 @@ protected: object::repository repo_; std::unordered_map schema_nodes_; std::unordered_map> resolver_producers_; - std::unordered_map, object::collection_composite_key_hash> collection_resolver_producers_; + std::unordered_map, object::collection_composite_key_hash> collection_resolver_producers_; std::unordered_map, object::collection_composite_key_hash> joined_object_resolver_producers_; }; } diff --git a/include/matador/query/schema.hpp b/include/matador/query/schema.hpp index 796d30b..d2e8dae 100644 --- a/include/matador/query/schema.hpp +++ b/include/matador/query/schema.hpp @@ -5,7 +5,7 @@ #include "matador/sql/query_context.hpp" #include "matador/sql/internal/object_resolver_producer.hpp" -#include "matador/sql/internal/collection_resolver_producer.hpp" +#include "matador/sql/internal/joined_collection_resolver_producer.hpp" #include "matador/query/query_collection_resolver.hpp" #include "matador/query/query_object_resolver.hpp" @@ -64,11 +64,11 @@ private: }; template -class query_collection_resolver_producer : public sql::collection_resolver_producer { +class query_joined_collection_resolver_producer : public sql::joined_collection_resolver_producer { public: - query_collection_resolver_producer() = default; - query_collection_resolver_producer(const basic_schema& repo, const table& tab, std::string pk_name, const std::type_index& root_type, std::string join_column) - : collection_resolver_producer(root_type, typeid(Type), std::move(join_column)) + query_joined_collection_resolver_producer() = default; + query_joined_collection_resolver_producer(const basic_schema& repo, const table& tab, std::string pk_name, const std::type_index& root_type, std::string join_column) + : joined_collection_resolver_producer(root_type, typeid(Type), std::move(join_column)) , repo_(repo) , table_(tab) , pk_name_(std::move(pk_name)) @@ -76,7 +76,7 @@ public: utils::result build_query(const sql::dialect& d) override { const auto *pk_column = table_[pk_name_]; - const auto *join_column = table_[collection_name()]; + const auto *join_column = table_[join_column_name()]; const auto stmt = select({*pk_column}) .from(table_) @@ -89,7 +89,7 @@ public: std::shared_ptr produce(sql::statement&& stmt, const sql::resolver_service& rs) override { const auto object_resolver = rs.object_resolver(); - return std::make_shared>(std::move(stmt), root_type(), collection_name(), object_resolver); + return std::make_shared>(std::move(stmt), root_type(), join_column_name(), object_resolver); } private: @@ -99,11 +99,11 @@ private: }; template -class query_collection_primitive_resolver_producer : public sql::collection_resolver_producer { +class query_joined_collection_primitive_resolver_producer : public sql::joined_collection_resolver_producer { public: - query_collection_primitive_resolver_producer() = default; - query_collection_primitive_resolver_producer(const basic_schema& repo, const table& tab, std::string value_name, const std::type_index& root_type, std::string join_column) - : collection_resolver_producer(root_type, typeid(Type), std::move(join_column)) + query_joined_collection_primitive_resolver_producer() = default; + query_joined_collection_primitive_resolver_producer(const basic_schema& repo, const table& tab, std::string value_name, const std::type_index& root_type, std::string join_column) + : joined_collection_resolver_producer(root_type, typeid(Type), std::move(join_column)) , repo_(repo) , table_(tab) , value_name_(std::move(value_name)) @@ -111,7 +111,7 @@ public: utils::result build_query(const sql::dialect& d) override { const auto *value_column = table_[value_name_]; - const auto *join_column = table_[collection_name()]; + const auto *join_column = table_[join_column_name()]; const auto stmt = select({*value_column}) .from(table_) @@ -122,7 +122,7 @@ public: } std::shared_ptr produce(sql::statement&& stmt, const sql::resolver_service& /*rs*/) override { - return std::make_shared>(std::move(stmt), root_type(), collection_name()/*, object_resolver*/); + return std::make_shared>(std::move(stmt), root_type(), join_column_name()/*, object_resolver*/); } private: @@ -177,7 +177,7 @@ public: throw query_builder_exception{error_code::MissingPrimaryKey, "Missing primary key"}; } - auto producer = std::make_unique>( + auto producer = std::make_unique>( schema_, it->second.table(), it->second.node().info().primary_key_attribute()->name(), @@ -193,7 +193,7 @@ public: if (it == schema_.end()) { throw query_builder_exception{error_code::UnknownType, "Unknown type" + std::string{id}}; } - auto producer = std::make_unique>( + auto producer = std::make_unique>( schema_, it->second.table(), "value", @@ -210,7 +210,7 @@ public: throw query_builder_exception{error_code::UnknownType, "Unknown type"}; } - auto producer = std::make_unique>( + auto producer = std::make_unique>( schema_, it->second.table(), inverse_join_column, @@ -230,7 +230,7 @@ public: object::join_columns_collector collector; const auto jc = collector.collect(); - auto producer = std::make_unique>( + auto producer = std::make_unique>( schema_, it->second.table(), jc.join_column, diff --git a/include/matador/sql/internal/collection_resolver_producer.hpp b/include/matador/sql/internal/joined_collection_resolver_producer.hpp similarity index 71% rename from include/matador/sql/internal/collection_resolver_producer.hpp rename to include/matador/sql/internal/joined_collection_resolver_producer.hpp index 4c911cc..3ce8443 100644 --- a/include/matador/sql/internal/collection_resolver_producer.hpp +++ b/include/matador/sql/internal/joined_collection_resolver_producer.hpp @@ -14,23 +14,23 @@ namespace matador::sql { class dialect; class statement; class resolver_service; -class collection_resolver_producer { +class joined_collection_resolver_producer { public: - virtual ~collection_resolver_producer() = default; + virtual ~joined_collection_resolver_producer() = default; virtual utils::result build_query(const dialect& d) = 0; virtual std::shared_ptr produce(statement&& stmt, const resolver_service& rs) = 0; [[nodiscard]] const std::type_index& root_type() const; [[nodiscard]] const std::type_index& type() const; - [[nodiscard]] const std::string& collection_name() const; + [[nodiscard]] const std::string& join_column_name() const; protected: - explicit collection_resolver_producer(const std::type_index &root_type, const std::type_index &type, std::string collection_name); + explicit joined_collection_resolver_producer(const std::type_index &root_type, const std::type_index &type, std::string join_column_name); private: std::type_index root_type_; std::type_index type_; - std::string collection_name_; + std::string join_column_name_; }; } #endif // MATADOR_COLLECTION_RESOLVER_PRODUCER_HPP diff --git a/include/matador/sql/internal/query_result_impl.hpp b/include/matador/sql/internal/query_result_impl.hpp index 311f29e..ba2520f 100644 --- a/include/matador/sql/internal/query_result_impl.hpp +++ b/include/matador/sql/internal/query_result_impl.hpp @@ -147,7 +147,7 @@ template void query_result_impl::on_has_many(const char *, CollectionType &cont, const char *join_column, const utils::foreign_attributes &attr, std::enable_if_t::value> *) { using value_type = typename CollectionType::value_type::value_type; auto object_resolver = resolver_->object_resolver(); - auto resolver = resolver_->collection_resolver(result_type_, join_column); + auto resolver = resolver_->joined_collection_resolver(result_type_, join_column); if (attr.fetch() == utils::fetch_type::Lazy) { cont.reset(std::make_shared>(resolver, current_pk_)); @@ -172,7 +172,7 @@ template void query_result_impl::on_has_many(const char *id, CollectionType &cont, const char *join_column, const utils::foreign_attributes &attr, std::enable_if_t::value> *) { using value_type = typename CollectionType::value_type; auto object_resolver = resolver_->object_resolver(); - auto resolver = resolver_->collection_resolver(result_type_, join_column); + auto resolver = resolver_->joined_collection_resolver(result_type_, join_column); if (attr.fetch() == utils::fetch_type::Lazy) { cont.reset(std::make_shared>(resolver, current_pk_)); @@ -192,7 +192,7 @@ template void query_result_impl::on_has_many_to_many(const char *id, CollectionType &cont, const char *join_column, const char *, const utils::foreign_attributes &attr) { using value_type = typename CollectionType::value_type::value_type; auto object_resolver = resolver_->object_resolver(); - auto resolver = resolver_->collection_resolver(result_type_, join_column); + auto resolver = resolver_->joined_collection_resolver(result_type_, join_column); if (attr.fetch() == utils::fetch_type::Lazy) { cont.reset(std::make_shared>(resolver, current_pk_)); } else { @@ -220,7 +220,7 @@ void query_result_impl::on_has_many_to_many(const char *id, CollectionType &cont const auto jc = collector.collect(); auto object_resolver = resolver_->object_resolver(); - auto resolver = resolver_->collection_resolver(result_type_, jc.inverse_join_column); + auto resolver = resolver_->joined_collection_resolver(result_type_, jc.inverse_join_column); if (attr.fetch() == utils::fetch_type::Lazy) { cont.reset(std::make_shared>(resolver, current_pk_)); } else { diff --git a/include/matador/sql/producer_resolver_factory.hpp b/include/matador/sql/producer_object_resolver_factory.hpp similarity index 88% rename from include/matador/sql/producer_resolver_factory.hpp rename to include/matador/sql/producer_object_resolver_factory.hpp index 58aa109..c22bfc8 100644 --- a/include/matador/sql/producer_resolver_factory.hpp +++ b/include/matador/sql/producer_object_resolver_factory.hpp @@ -5,13 +5,13 @@ #include "matador/object/abstract_joined_resolver.hpp" #include "matador/object/object_resolver_factory.hpp" -#include "matador/object/collection_resolver_factory.hpp" +#include "matador/object/joined_collection_resolver_factory.hpp" #include "matador/object/collection_utils.hpp" namespace matador::sql { class executor; -class producer_resolver_factory : public object::object_resolver_factory { +class producer_object_resolver_factory : public object::object_resolver_factory { public: [[nodiscard]] std::shared_ptr acquire_object_resolver(const std::type_index &type) const override; void register_object_resolver(std::shared_ptr &&resolver) override; @@ -20,7 +20,7 @@ private: std::unordered_map> resolvers_; }; -class producer_collection_resolver_factory : public object::collection_resolver_factory { +class producer_joined_collection_resolver_factory : public object::joined_collection_resolver_factory { public: [[nodiscard]] std::shared_ptr acquire_collection_resolver(const std::type_index& root_type, const std::type_index& element_type, diff --git a/include/matador/sql/resolver_service.hpp b/include/matador/sql/resolver_service.hpp index eb3827c..29e3925 100644 --- a/include/matador/sql/resolver_service.hpp +++ b/include/matador/sql/resolver_service.hpp @@ -1,7 +1,7 @@ #ifndef MATADOR_RESOLVER_SERVICE_HPP #define MATADOR_RESOLVER_SERVICE_HPP -#include "matador/sql/producer_resolver_factory.hpp" +#include "matador/sql/producer_object_resolver_factory.hpp" namespace matador::sql { class resolver_service { @@ -12,8 +12,8 @@ public: } template - std::shared_ptr> collection_resolver(const std::type_index &root_type, const std::string &collection_name) const { - return collection_resolver_factory_.resolver(root_type, collection_name); + std::shared_ptr> joined_collection_resolver(const std::type_index &root_type, const std::string &collection_name) const { + return joined_collection_resolver_factory_.resolver(root_type, collection_name); } template @@ -26,8 +26,8 @@ public: void register_joined_object_resolver(std::shared_ptr&& resolver, const std::type_index& root_type, const std::string& join_column); private: - producer_resolver_factory object_resolver_factory_; - producer_collection_resolver_factory collection_resolver_factory_; + producer_object_resolver_factory object_resolver_factory_; + producer_joined_collection_resolver_factory joined_collection_resolver_factory_; producer_joined_object_resolver_factory joined_object_resolver_factory_; }; } diff --git a/source/core/CMakeLists.txt b/source/core/CMakeLists.txt index 3aff2c1..44d3a27 100644 --- a/source/core/CMakeLists.txt +++ b/source/core/CMakeLists.txt @@ -21,7 +21,7 @@ add_library(matador-core STATIC ../../include/matador/object/basic_repository.hpp ../../include/matador/object/collection_proxy.hpp ../../include/matador/object/collection_resolver.hpp - ../../include/matador/object/collection_resolver_factory.hpp + ../../include/matador/object/joined_collection_resolver_factory.hpp ../../include/matador/object/collection_utils.hpp ../../include/matador/object/error_code.hpp ../../include/matador/object/foreign_node_completer.hpp diff --git a/source/orm/CMakeLists.txt b/source/orm/CMakeLists.txt index e3230c7..78689c8 100644 --- a/source/orm/CMakeLists.txt +++ b/source/orm/CMakeLists.txt @@ -104,7 +104,7 @@ add_library(matador-orm STATIC ../../include/matador/sql/interface/query_result_reader.hpp ../../include/matador/sql/interface/statement_impl.hpp ../../include/matador/sql/interface/statement_proxy.hpp - ../../include/matador/sql/internal/collection_resolver_producer.hpp + ../../include/matador/sql/internal/joined_collection_resolver_producer.hpp ../../include/matador/sql/internal/identifier_reader.hpp ../../include/matador/sql/internal/identifier_statement_binder.hpp ../../include/matador/sql/internal/object_resolver_producer.hpp @@ -113,7 +113,7 @@ add_library(matador-orm STATIC ../../include/matador/sql/internal/query_result_impl.hpp ../../include/matador/sql/internal/query_result_pk_resolver.hpp ../../include/matador/sql/internal/statement_object_resolver.hpp - ../../include/matador/sql/producer_resolver_factory.hpp + ../../include/matador/sql/producer_object_resolver_factory.hpp ../../include/matador/sql/query_context.hpp ../../include/matador/sql/query_result.hpp ../../include/matador/sql/record.hpp @@ -208,14 +208,14 @@ add_library(matador-orm STATIC sql/interface/query_result_reader.cpp sql/interface/statement_impl.cpp sql/interface/statement_proxy.cpp - sql/internal/collection_resolver_producer.cpp + sql/internal/joined_collection_resolver_producer.cpp sql/internal/identifier_reader.cpp sql/internal/identifier_statement_binder.cpp sql/internal/object_resolver_producer.cpp sql/internal/object_result_binder.cpp sql/internal/query_result_pk_resolver.cpp sql/object_parameter_binder.cpp - sql/producer_resolver_factory.cpp + sql/producer_object_resolver_factory.cpp sql/query_result.cpp sql/record.cpp sql/resolver_service.cpp diff --git a/source/orm/query/basic_schema.cpp b/source/orm/query/basic_schema.cpp index fe94bde..f81e352 100644 --- a/source/orm/query/basic_schema.cpp +++ b/source/orm/query/basic_schema.cpp @@ -141,7 +141,7 @@ const std::unordered_map, object::collection_composite_key_hash> & basic_schema::collection_resolver_producers() const { +const std::unordered_map, object::collection_composite_key_hash> & basic_schema::collection_resolver_producers() const { return collection_resolver_producers_; } diff --git a/source/orm/sql/internal/collection_resolver_producer.cpp b/source/orm/sql/internal/collection_resolver_producer.cpp deleted file mode 100644 index 6671315..0000000 --- a/source/orm/sql/internal/collection_resolver_producer.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "matador/sql/internal/collection_resolver_producer.hpp" - -namespace matador::sql { -const std::type_index& collection_resolver_producer::root_type() const { - return root_type_; -} - -const std::type_index& collection_resolver_producer::type() const { - return type_; -} - -const std::string& collection_resolver_producer::collection_name() const { - return collection_name_; -} - -collection_resolver_producer::collection_resolver_producer(const std::type_index& root_type, - const std::type_index& type, - std::string collection_name) -: root_type_(root_type), type_(type), collection_name_(std::move(collection_name)) {} -} // namespace matador::sql \ No newline at end of file diff --git a/source/orm/sql/internal/joined_collection_resolver_producer.cpp b/source/orm/sql/internal/joined_collection_resolver_producer.cpp new file mode 100644 index 0000000..c901817 --- /dev/null +++ b/source/orm/sql/internal/joined_collection_resolver_producer.cpp @@ -0,0 +1,20 @@ +#include "matador/sql/internal/joined_collection_resolver_producer.hpp" + +namespace matador::sql { +const std::type_index& joined_collection_resolver_producer::root_type() const { + return root_type_; +} + +const std::type_index& joined_collection_resolver_producer::type() const { + return type_; +} + +const std::string& joined_collection_resolver_producer::join_column_name() const { + return join_column_name_; +} + +joined_collection_resolver_producer::joined_collection_resolver_producer(const std::type_index& root_type, + const std::type_index& type, + std::string join_column_name) +: root_type_(root_type), type_(type), join_column_name_(std::move(join_column_name)) {} +} // namespace matador::sql \ No newline at end of file diff --git a/source/orm/sql/producer_resolver_factory.cpp b/source/orm/sql/producer_object_resolver_factory.cpp similarity index 76% rename from source/orm/sql/producer_resolver_factory.cpp rename to source/orm/sql/producer_object_resolver_factory.cpp index 3715fdc..9bb89cb 100644 --- a/source/orm/sql/producer_resolver_factory.cpp +++ b/source/orm/sql/producer_object_resolver_factory.cpp @@ -1,18 +1,18 @@ -#include "matador/sql/producer_resolver_factory.hpp" +#include "matador/sql/producer_object_resolver_factory.hpp" namespace matador::sql { -std::shared_ptr producer_resolver_factory::acquire_object_resolver(const std::type_index &type) const { +std::shared_ptr producer_object_resolver_factory::acquire_object_resolver(const std::type_index &type) const { if (const auto it = resolvers_.find(type); it != resolvers_.end()) { return it->second; } return nullptr; } -void producer_resolver_factory::register_object_resolver(std::shared_ptr &&resolver) { +void producer_object_resolver_factory::register_object_resolver(std::shared_ptr &&resolver) { resolvers_[resolver->type()] = std::move(resolver); } std::shared_ptr -producer_collection_resolver_factory::acquire_collection_resolver(const std::type_index& root_type, +producer_joined_collection_resolver_factory::acquire_collection_resolver(const std::type_index& root_type, const std::type_index& element_type, const std::string& collection_name) const { const object::collection_composite_key key{root_type, element_type, collection_name}; @@ -21,7 +21,7 @@ producer_collection_resolver_factory::acquire_collection_resolver(const std::typ } return nullptr; } -void producer_collection_resolver_factory::register_collection_resolver(std::shared_ptr&& resolver) { +void producer_joined_collection_resolver_factory::register_collection_resolver(std::shared_ptr&& resolver) { const object::collection_composite_key key{resolver->root_type(), resolver->type(), resolver->collection_name()}; resolvers_[key] = std::move(resolver); } diff --git a/source/orm/sql/resolver_service.cpp b/source/orm/sql/resolver_service.cpp index 790b8c9..07b00a2 100644 --- a/source/orm/sql/resolver_service.cpp +++ b/source/orm/sql/resolver_service.cpp @@ -6,7 +6,7 @@ void resolver_service::register_object_resolver(std::shared_ptr&& resolver) { - collection_resolver_factory_.register_collection_resolver(std::move(resolver)); + joined_collection_resolver_factory_.register_collection_resolver(std::move(resolver)); } void resolver_service::register_joined_object_resolver(std::shared_ptr&& resolver, const std::type_index& root_type, const std::string& join_column) { diff --git a/test/backends/SessionInsertHasOne.cpp b/test/backends/SessionInsertHasOne.cpp index 9f3a9b3..43e0967 100644 --- a/test/backends/SessionInsertHasOne.cpp +++ b/test/backends/SessionInsertHasOne.cpp @@ -31,7 +31,6 @@ TEST_CASE_METHOD(SessionFixture, "Test insert object with has_one relation", "[s const auto user_result = ses.find(u->id); REQUIRE(user_result.is_ok()); - // REQUIRE(user_result.value()->session->session_token == "session1"); us = user_result.value()->session; - const auto token = us->session_token; + REQUIRE(us->session_token == "session1"); } \ No newline at end of file