fixed some repository-related tests

This commit is contained in:
Sascha Kühl
2025-10-01 15:39:58 +02:00
parent 5d2d6d4a30
commit 12905e3df3
10 changed files with 45 additions and 15 deletions
@@ -68,11 +68,11 @@ private:
}
template<typename Type>
void attach_node() {
void attach_node(const std::string &name = "") {
if (repo_.contains(typeid(Type))) {
return;
}
const auto node = repository_node::make_node<Type>(repo_.repo(), "");
const auto node = repository_node::make_node<Type>(repo_.repo(), name);
if (auto result = repo_.attach_node(node)) {
complete<Type>(result.value());
}
@@ -101,13 +101,13 @@ void foreign_node_completer::on_has_many( const char* /*id*/, CollectionType&, c
}
template<class CollectionType>
void foreign_node_completer::on_has_many_to_many( const char* /*id*/, CollectionType& /*collection*/, const char* /*join_column*/, const char* /*inverse_join_column*/, const utils::foreign_attributes& /*attr*/ ) {
attach_node<typename CollectionType::value_type::value_type>();
void foreign_node_completer::on_has_many_to_many( const char* id, CollectionType& /*collection*/, const char* /*join_column*/, const char* /*inverse_join_column*/, const utils::foreign_attributes& /*attr*/ ) {
attach_node<typename CollectionType::value_type::value_type>(/*id*/);
}
template<class CollectionType>
void foreign_node_completer::on_has_many_to_many( const char* /*id*/, CollectionType& /*collection*/, const utils::foreign_attributes& /*attr*/ ) {
attach_node<typename CollectionType::value_type::value_type>();
void foreign_node_completer::on_has_many_to_many( const char* id, CollectionType& /*collection*/, const utils::foreign_attributes& /*attr*/ ) {
attach_node<typename CollectionType::value_type::value_type>(/*id*/);
}
}
+5
View File
@@ -49,6 +49,9 @@ public:
} else if (!has_node(name)) {
it->second->update_name(name);
nodes_by_name_[name] = it->second;
if (const auto i = nodes_by_name_.find(""); i != nodes_by_name_.end()) {
nodes_by_name_.erase(i);
}
relation_completer<Type>::complete(it->second);
log_.info("attach: update node name to '%s' (type: %s)", it->second->name().c_str(), it->second->type_index().name());
} else {
@@ -135,6 +138,8 @@ public:
return utils::ok(result.value()->info<Type>());
}
[[nodiscard]] utils::result<basic_object_info_ref, utils::error> basic_info(const std::string &name) const;
template<typename Type>
[[nodiscard]] utils::result<basic_object_info_ref, utils::error> basic_info() const {
auto result = find_node(std::type_index(typeid(Type)));
+2
View File
@@ -39,6 +39,8 @@ public:
return columns;
}
static std::vector<column> generate(const object::repository &scm, const std::string &name, bool force_lazy = false);
template < class Type >
static std::vector<column> generate_has_many_to_many(const object::repository &scm, const bool force_lazy = false) {
const auto info = scm.info<Type>();
+1 -1
View File
@@ -15,7 +15,7 @@ namespace matador::sql {
class connection_pool;
struct identifiable_connection {
identifiable_connection(size_t id, connection conn);
identifiable_connection(size_t id, connection &&conn);
size_t id{};
connection conn;
};