fixed core- and orm-tests. postgres-tests needs some work
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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_;
|
||||
};
|
||||
|
||||
|
||||
@@ -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_(); }
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user