attribute_definition and object_definition progress

This commit is contained in:
Sascha Kühl
2025-11-17 15:58:09 +01:00
parent 9ffcee1317
commit 7242dc2612
17 changed files with 161 additions and 205 deletions
+14 -9
View File
@@ -17,17 +17,22 @@ public:
using node_ptr = std::shared_ptr<repository_node>;
template < typename Type >
static std::shared_ptr<repository_node> make_node(object::repository& tree, const std::string& name) {
auto node = std::shared_ptr<repository_node>(new repository_node(tree, name, typeid(Type)));
static std::shared_ptr<repository_node> make_node(repository& repo, const std::string& name) {
auto node = std::shared_ptr<repository_node>(new repository_node(repo, name, typeid(Type)));
primary_key_resolver resolver;
object_definition obj{name, {}};
auto pk_info = resolver.resolve<Type>();
auto ref_column = determine_reference_column(typeid(Type), name, pk_info, tree);
auto ref_column = determine_reference_column(typeid(Type), name, pk_info, repo);
const auto attributes = attribute_definition_generator::generate<Type>(repo);
for (auto&& attr : attributes) {
obj.append(std::move(attr));
}
auto info = std::make_unique<object_info<Type>>(
node,
std::move(pk_info.pk),
ref_column,
object_definition{attribute_definition_generator::generate<Type>(tree)},
std::move(obj),
[]{ return std::make_unique<Type>(); }
);
node->info_ = std::move(info);
@@ -87,11 +92,11 @@ private:
void unlink();
static utils::result<node_ptr, utils::error> make_and_attach_node(object::repository& tree, const std::string& name, const std::type_index& ti);
static utils::result<node_ptr, utils::error> make_and_attach_node(repository& repo, const std::string& name, const std::type_index& ti);
static std::shared_ptr<attribute_definition> determine_reference_column(const std::type_index& ti,
const std::string& name,
const primary_key_info& pk_info,
object::repository& tree);
object_definition& obj,
const primary_key_info& pk_info,
repository& repo);
private:
friend class repository;
@@ -100,7 +105,7 @@ private:
friend class foreign_node_completer;
friend class const_repository_node_iterator;
object::repository &repo_;
repository &repo_;
std::type_index type_index_;
std::unique_ptr<basic_object_info> info_;