fixed core- and orm-tests. postgres-tests needs some work

This commit is contained in:
Sascha Kühl
2025-11-20 15:35:40 +01:00
parent 95c555d03a
commit 3f3773dc71
17 changed files with 170 additions and 139 deletions
+38 -29
View File
@@ -13,8 +13,6 @@ enum class null_option_type : uint8_t {
NULLABLE, NOT_NULL
};
class object_definition;
struct attribute_options {
utils::field_attributes attributes;
null_option_type null_option{null_option_type::NOT_NULL};
@@ -33,43 +31,53 @@ public:
attribute_definition() = default;
template<typename Type>
attribute_definition(std::string name, const utils::field_attributes& attr)
: attribute_definition(std::move(name), utils::data_type_traits<Type>::type(attr.size()), attr)
{}
// template<typename Type>
// attribute_definition(std::string name, const utils::field_attributes& attr)
// : attribute_definition(std::move(name), utils::data_type_traits<Type>::type(attr.size()), attr)
// {}
//
// template<size_t SIZE>
// attribute_definition(std::string name, const char (&)[SIZE], const utils::field_attributes& attr, const null_option_type null_opt)
// : attribute_definition(std::move(name), utils::data_type_traits<const char*>::type(attr.size()), attr, null_opt)
// {}
template<typename Type>
attribute_definition(std::string name, const Type &, const utils::field_attributes& attr, null_option_type null_opt)
: attribute_definition(std::move(name), utils::data_type_traits<Type>::type(attr.size()), attr, null_opt)
{}
attribute_definition(std::string name,
utils::basic_type type,
const utils::field_attributes&,
null_option_type null_opt,
int index = 0);
template<size_t SIZE>
attribute_definition(std::string name, const char (&)[SIZE], const utils::field_attributes& attr, const null_option_type null_opt)
: attribute_definition(std::move(name), utils::data_type_traits<const char*>::type(attr.size()), attr, null_opt)
{}
// template<typename Type>
// attribute_definition(std::string name, const std::shared_ptr<attribute_definition> &ref_column, const utils::field_attributes& attr, null_option_type null_opt)
// : attribute_definition(std::move(name), utils::data_type_traits<Type>::type(attr.size()), ref_column, attr, null_opt)
// {}
//
attribute_definition(std::string name,
utils::basic_type type,
int index,
const std::shared_ptr<attribute_definition> &ref_column,
const utils::field_attributes& attr,
null_option_type null_opt);
attribute_definition(std::string name, utils::basic_type type, const utils::field_attributes&, null_option_type null_opt, int index = 0);
template<typename Type>
attribute_definition(std::string name, const std::shared_ptr<attribute_definition> &ref_column, const utils::field_attributes& attr, null_option_type null_opt)
: attribute_definition(std::move(name), utils::data_type_traits<Type>::type(attr.size()), ref_column, attr, null_opt)
{}
attribute_definition(std::string name, utils::basic_type type, int index, const std::shared_ptr<attribute_definition> &ref_column, const utils::field_attributes& attr, null_option_type null_opt);
attribute_definition(std::string name, utils::basic_type type, const std::shared_ptr<attribute_definition> &ref_column = {});
attribute_definition(std::string name, utils::basic_type type, const attribute_options& options, const std::shared_ptr<object_definition>& obj = {}, const std::shared_ptr<attribute_definition> &ref_column = {});
attribute_definition(std::string name,
utils::basic_type type,
const std::shared_ptr<attribute_definition> &ref_column = {});
attribute_definition(std::string name,
utils::basic_type type,
std::string table_name,
const attribute_options& options,
const std::shared_ptr<attribute_definition> &ref_column = {});
[[nodiscard]] const std::string& name() const;
void name(const std::string& n);
[[nodiscard]] std::string full_name() const;
[[nodiscard]] std::shared_ptr<object_definition> object() const;
void object(const std::shared_ptr<object_definition> &obj);
[[nodiscard]] int index() const;
[[nodiscard]] const utils::field_attributes& attributes() const;
[[nodiscard]] utils::field_attributes& attributes();
[[nodiscard]] bool is_nullable() const;
[[nodiscard]] utils::basic_type type() const;
[[nodiscard]] const std::string& table_name() const;
void table_name(const std::string& name);
void change_type(utils::basic_type type, const utils::field_attributes &attr = utils::null_attributes);
template < typename Type >
void change_type(const utils::field_attributes &attr = utils::null_attributes) {
@@ -97,7 +105,8 @@ private:
friend class object_definition;
std::string name_;
std::shared_ptr<object_definition> object_{};
// std::shared_ptr<object_definition> object_{};
std::string table_name_;
attribute_options options_;
utils::basic_type type_{utils::basic_type::type_null};
@@ -158,7 +167,7 @@ template < typename Type >
[[maybe_unused]] attribute_definition make_fk_column(const std::string &name, const std::string &ref_table_name, const std::string &ref_column_name) {
return {
name, utils::data_type_traits<Type>::type(0), 0,
std::make_shared<attribute_definition>(ref_column_name, ref_table_name, utils::data_type_traits<Type>::type(0), utils::constraints::FOREIGN_KEY),
std::make_shared<attribute_definition>(ref_column_name, utils::data_type_traits<Type>::type(0), ref_table_name, attribute_options{utils::constraints::FOREIGN_KEY}),
{ 0, utils::constraints::FOREIGN_KEY }, null_option_type::NOT_NULL
};
}
@@ -138,9 +138,8 @@ void attribute_definition_generator::on_primary_key(const char *id, ValueType &x
}
template<typename Type>
void attribute_definition_generator::on_attribute(const char *id, Type &x, const utils::field_attributes &attr)
{
columns_.emplace_back(id, x, attr, null_option_type::NOT_NULL);
void attribute_definition_generator::on_attribute(const char *id, Type &x, const utils::field_attributes &attr) {
columns_.emplace_back(id, utils::data_type_traits<Type>::type(attr.size()), attr, null_option_type::NOT_NULL);
}
template<typename Type>
+7 -6
View File
@@ -24,7 +24,7 @@ public:
[[nodiscard]] std::type_index type_index() const;
[[nodiscard]] std::string name() const;
[[nodiscard]] std::shared_ptr<object_definition> definition() const;
[[nodiscard]] const std::vector<attribute_definition>& attributes() const;
[[nodiscard]] std::shared_ptr<attribute_definition> reference_column() const;
[[nodiscard]] bool has_primary_key() const;
@@ -49,15 +49,16 @@ public:
[[nodiscard]] bool endpoints_empty() const;
protected:
basic_object_info(std::shared_ptr<repository_node> node, utils::identifier &&pk, const std::shared_ptr<attribute_definition> &pk_column, const std::shared_ptr<object_definition> &definition);
basic_object_info(std::shared_ptr<repository_node> node, utils::identifier &&pk, const std::shared_ptr<attribute_definition> &pk_column);
basic_object_info(std::shared_ptr<repository_node> node, const std::shared_ptr<object_definition> &definition);
// basic_object_info(std::shared_ptr<repository_node> node, utils::identifier &&pk, const std::shared_ptr<attribute_definition> &pk_column, const std::shared_ptr<object_definition> &definition);
basic_object_info(std::shared_ptr<repository_node> node, const std::vector<attribute_definition> &attributes, utils::identifier &&pk, const std::shared_ptr<attribute_definition> &pk_as_fk_column);
basic_object_info(std::shared_ptr<repository_node> node, const std::vector<attribute_definition> &attributes);
protected:
std::shared_ptr<repository_node> node_; /**< prototype node of the represented object type */
std::shared_ptr<object_definition> definition_;
std::vector<attribute_definition> attributes_;
// std::shared_ptr<object_definition> definition_;
std::optional<utils::identifier> identifier_;
std::shared_ptr<attribute_definition> pk_column_;
std::shared_ptr<attribute_definition> pk_as_fk_column_;
t_endpoint_map relation_endpoints_;
};
+22 -17
View File
@@ -2,7 +2,7 @@
#define OBJECT_INFO_HPP
#include "matador/object/basic_object_info.hpp"
#include "matador/object/object_definition.hpp"
// #include "matador/object/object_definition.hpp"
namespace matador::object {
class repository_node;
@@ -12,32 +12,37 @@ class object_info final : public basic_object_info {
public:
using create_func = std::function<std::unique_ptr<Type>()>;
// object_info(const std::shared_ptr<repository_node>& node,
// const std::shared_ptr<attribute_definition> &ref_column)
// : basic_object_info(node, {}, ref_column, {})
// , creator_([]{return std::make_unique<Type>(); }){
// }
// object_info(const std::shared_ptr<repository_node>& node,
// utils::identifier &&pk,
// const std::shared_ptr<attribute_definition> &ref_column,
// object_definition &&definition)
// : basic_object_info(node, std::move(pk), ref_column, std::move(definition))
// , creator_([]{return std::make_unique<Type>(); }){
// }
object_info(const std::shared_ptr<repository_node>& node,
const std::shared_ptr<attribute_definition> &ref_column)
: basic_object_info(node, {}, ref_column, {})
, creator_([]{return std::make_unique<Type>(); }){
}
object_info(const std::shared_ptr<repository_node>& node,
const std::vector<attribute_definition> &attributes,
utils::identifier &&pk,
const std::shared_ptr<attribute_definition> &ref_column,
object_definition &&definition)
: basic_object_info(node, std::move(pk), ref_column, std::move(definition))
, creator_([]{return std::make_unique<Type>(); }){
}
object_info(const std::shared_ptr<repository_node>& node,
utils::identifier &&pk,
const std::shared_ptr<attribute_definition> &ref_column,
object_definition &&definition,
// object_definition &&definition,
create_func&& creator)
: basic_object_info(node, std::move(pk), ref_column, std::move(definition))
: basic_object_info(node, attributes, std::move(pk), ref_column/*, std::move(definition)*/)
, creator_(std::move(creator)){
}
object_info(const std::shared_ptr<repository_node>& node,
object_definition &&definition,
const std::vector<attribute_definition> &attributes,
// object_definition &&definition,
create_func&& creator)
: basic_object_info(node, std::move(definition))
: basic_object_info(node, attributes)
, creator_(std::move(creator)){
}
explicit object_info(const std::shared_ptr<repository_node>& node)
: basic_object_info(node, {}) {
}
const Type &prototype() const { return prototype_; }
std::unique_ptr<Type> create() const { return creator_(); }
+8 -7
View File
@@ -21,18 +21,19 @@ public:
auto node = std::shared_ptr<repository_node>(new repository_node(repo, name, typeid(Type)));
primary_key_resolver resolver;
auto obj = std::make_shared<object_definition>(name);
// auto obj = std::make_shared<object_definition>(name);
auto pk_info = resolver.resolve<Type>();
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));
}
// for (auto&& attr : attributes) {
// obj->append(std::move(attr));
// }
auto info = std::make_unique<object_info<Type>>(
node,
attributes,
std::move(pk_info.pk),
ref_column,
obj,
// obj,
[]{ return std::make_unique<Type>(); }
);
node->info_ = std::move(info);
@@ -50,7 +51,7 @@ public:
auto obj = creator();
auto info = std::make_unique<object_info<Type>>(
result.value(),
std::make_shared<object_definition>(attribute_definition_generator::generate(*obj, repo)),
attribute_definition_generator::generate(*obj, repo),
std::move(creator)
);
result.value()->info_ = std::move(info);
@@ -94,7 +95,7 @@ private:
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::shared_ptr<object_definition>& obj,
const std::string& table_name,
const primary_key_info& pk_info,
repository& repo);