collection has-many-to-many resolve progress
This commit is contained in:
@@ -96,18 +96,42 @@ public:
|
||||
}
|
||||
|
||||
template<class CollectionType>
|
||||
void on_has_many_to_many(const char *, CollectionType &, const char * /*join_column*/, const char * /*inverse_join_column*/, const utils::foreign_attributes &/*attr*/) {
|
||||
const auto it = schema_.find(typeid(typename CollectionType::value_type::value_type));
|
||||
void on_has_many_to_many(const char *id, CollectionType &, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes &/*attr*/) {
|
||||
const auto it = schema_.find(id);
|
||||
if (it == schema_.end()) {
|
||||
throw query_builder_exception{query_build_error::UnknownType};
|
||||
}
|
||||
if (!it->second.node().info().has_primary_key()) {
|
||||
throw query_builder_exception{query_build_error::MissingPrimaryKey};
|
||||
|
||||
auto producer = std::make_unique<query_collection_resolver_producer<typename CollectionType::value_type>>(
|
||||
schema_,
|
||||
it->second.table(),
|
||||
inverse_join_column,
|
||||
root_type_,
|
||||
join_column);
|
||||
const object::collection_composite_key key{root_type_, typeid(typename CollectionType::value_type), inverse_join_column};
|
||||
schema_.collection_resolver_producers_[key] = std::move(producer);
|
||||
}
|
||||
|
||||
template<class CollectionType>
|
||||
void on_has_many_to_many(const char *id, CollectionType &, const utils::foreign_attributes &/*attr*/) {
|
||||
const auto it = schema_.find(id);
|
||||
if (it == schema_.end()) {
|
||||
throw query_builder_exception{query_build_error::UnknownType};
|
||||
}
|
||||
|
||||
object::join_columns_collector collector;
|
||||
const auto jc = collector.collect<typename CollectionType::value_type::value_type>();
|
||||
|
||||
auto producer = std::make_unique<query_collection_resolver_producer<typename CollectionType::value_type>>(
|
||||
schema_,
|
||||
it->second.table(),
|
||||
jc.join_column,
|
||||
root_type_,
|
||||
jc.inverse_join_column);
|
||||
const object::collection_composite_key key{root_type_, typeid(typename CollectionType::value_type), jc.join_column};
|
||||
schema_.collection_resolver_producers_[key] = std::move(producer);
|
||||
|
||||
}
|
||||
template<class ContainerType>
|
||||
static void on_has_many_to_many(const char *, ContainerType &, const utils::foreign_attributes &/*attr*/) {}
|
||||
|
||||
private:
|
||||
basic_schema& schema_;
|
||||
|
||||
Reference in New Issue
Block a user