introduced field_attributes shortcuts and added method on_base() to all processor classes

This commit is contained in:
2026-04-22 11:03:33 +02:00
parent 78eb5d04cd
commit 9b25f7f556
68 changed files with 248 additions and 151 deletions
+3 -3
View File
@@ -28,7 +28,7 @@ public:
attribute() = default;
attribute(std::string name,
utils::basic_type type,
const utils::field_attributes &attr = utils::NullAttributes,
const utils::field_attributes &attr = NullAttributes,
null_option_type null_opt = null_option_type::NotNull);
[[nodiscard]] const std::string& name() const;
@@ -39,9 +39,9 @@ public:
[[nodiscard]] bool is_nullable() const;
[[nodiscard]] utils::basic_type type() const;
[[nodiscard]] std::shared_ptr<object> owner() const;
void change_type(utils::basic_type type, const utils::field_attributes &attr = utils::NullAttributes);
void change_type(utils::basic_type type, const utils::field_attributes &attr = NullAttributes);
template < typename Type >
void change_type(const utils::field_attributes &attr = utils::NullAttributes) {
void change_type(const utils::field_attributes &attr = NullAttributes) {
type_ = utils::data_type_traits<Type>::type(attr.size());
}
@@ -38,6 +38,8 @@ public:
completer.complete_node(node);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class PrimaryKeyType>
static void on_primary_key(const char * /*id*/, PrimaryKeyType &/*pk*/, const utils::primary_key_attribute & /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -24,6 +24,8 @@ public:
return join_columns_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
static void on_primary_key(const char * /*id*/, V &, const utils::primary_key_attribute& /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -74,6 +74,8 @@ public:
return obj;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class Type >
void on_primary_key(const char *, Type &x, const utils::primary_key_attribute& attr);
void on_revision(const char *id, uint64_t &rev);
@@ -34,6 +34,8 @@ struct pk_field_locator {
explicit pk_field_locator (Type &obj)
: base(&obj) {}
template<typename BaseType>
static void on_base(const BaseType&) {}
template <typename PrimaryKeyType>
void on_primary_key(const char *, PrimaryKeyType &pk, const utils::primary_key_attribute & /*attr*/) {
// Offset bestimmen
@@ -43,6 +43,8 @@ public:
return resolver.resolve(obj);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class Type >
void on_primary_key(const char *id, Type &pk, const utils::primary_key_attribute& attr) {
primary_key_info_.pk_column_name = id;
@@ -28,6 +28,8 @@ public:
return finder.found_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class PrimaryKeyType>
static void on_primary_key(const char * /*id*/, PrimaryKeyType &/*pk*/, const utils::primary_key_attribute& /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -102,6 +104,8 @@ public:
completer.complete_node_relations(node);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class PrimaryKeyType>
static void on_primary_key(const char * /*id*/, PrimaryKeyType &/*pk*/, const utils::primary_key_attribute& /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
+2
View File
@@ -165,6 +165,8 @@ public:
return stmt_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class Type>
void on_primary_key(const char * /*id*/, Type &x, const utils::primary_key_attribute & /*attr*/) {
stmt_.bind(binding_position_, x);
+2
View File
@@ -40,6 +40,8 @@ public:
return generator_type_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class V>
void on_primary_key(const char * /*id*/, V &/*pk*/, const utils::primary_key_attribute &attr) {
generator_type_ = attr.generator();
@@ -59,6 +59,8 @@ struct meta_registry {
struct dependency_collector {
std::vector<fk_ref> refs;
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class V>
static void on_primary_key(const char*, V&, const utils::primary_key_attribute& /*attr*/) {}
@@ -24,6 +24,8 @@ public:
return value_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *, ValueType &pk, const utils::primary_key_attribute& /*attr*/) {
value_ = pk;
+6
View File
@@ -63,6 +63,8 @@ public:
return result_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/) {
push(id);
@@ -169,6 +171,8 @@ public:
return result_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char * /*id*/, V &/*x*/, const utils::primary_key_attribute& /*attr*/) {
result_.emplace_back(utils::_);
@@ -227,6 +231,8 @@ public:
return std::move(result_);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char *id, V &x, const utils::primary_key_attribute& /*attr*/) {
push_back(id, x);
@@ -23,6 +23,8 @@ class has_many_linker {
public:
has_many_linker(const object::object_ptr<ObjectType> &ptr, std::string join_column)
: ptr_(ptr), join_column_(std::move(join_column)) {}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class PrimaryKeyType >
static void on_primary_key(const char * /*id*/, PrimaryKeyType &, const utils::primary_key_attribute& /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -26,6 +26,8 @@ public:
return result;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char *id, V &x, const utils::primary_key_attribute& /*attr*/) {
result_.emplace_back(id, x);
+2
View File
@@ -60,6 +60,8 @@ public:
, root_type_(root_type)
{}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
static void on_primary_key(const char * /*id*/, ValueType &/*value*/, const utils::primary_key_attribute& /*attr*/) {}
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -89,6 +89,9 @@ public:
}
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/) {
push(id);
@@ -25,6 +25,8 @@ public:
return values;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *, ValueType &x, const utils::primary_key_attribute& attr) {
utils::data_type_traits<ValueType>::bind_value(*this, 0, x, attr.size());
+2
View File
@@ -44,6 +44,8 @@ public:
return columns;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class V >
void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/) {
if (has_many_to_many_) {
@@ -22,6 +22,8 @@ public:
return identifier_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr) {
utils::data_type_traits<ValueType>::read_value(reader_, id, column_index_, value, attr.size());
@@ -27,6 +27,8 @@ public:
binder_ = nullptr;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr);
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {}
@@ -73,6 +75,8 @@ public:
void reset();
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class Type >
void on_primary_key(const char *id, Type &val, const utils::primary_key_attribute& attr) {
utils::data_type_traits<Type>::read_value(*binder_, id, index_++, val, attr.size());
@@ -14,6 +14,8 @@ public:
access::process(*this, obj);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr);
void on_revision(const char * /*id*/, uint64_t &/*rev*/) {
@@ -40,6 +40,8 @@ public:
const std::type_index& result_type,
size_t column_index = 0);
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr) {
utils::data_type_traits<ValueType>::read_value(*reader_, id, column_index_++, value, attr.size());
@@ -27,6 +27,8 @@ public:
return pk_;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &/*value*/, const utils::primary_key_attribute& attr) {
if (!type_stack_.empty()) {
@@ -17,6 +17,8 @@ public:
void reset(size_t start_index);
[[nodiscard]] size_t current_index() const;
template<typename BaseType>
static void on_base(const BaseType&) {}
template < class Type >
void on_primary_key(const char * /*id*/, Type &val, const utils::primary_key_attribute& attr) {
utils::data_type_traits<Type>::bind_value(*binder_, index_++, val, attr.size());
+2
View File
@@ -19,6 +19,8 @@ public:
binder_ = nullptr;
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename ValueType>
void on_primary_key(const char *id, ValueType &value, const utils::primary_key_attribute& attr);
static void on_revision(const char * /*id*/, unsigned long long &/*rev*/) {}
+2 -2
View File
@@ -53,12 +53,12 @@ void revision(Operator &op, const char *id, uint64_t &value) {
}
template<class Operator, class Type>
void attribute(Operator &op, const char *id, Type &value, const utils::field_attributes &attr = utils::NullAttributes) {
void attribute(Operator &op, const char *id, Type &value, const utils::field_attributes &attr = NullAttributes) {
op.on_attribute(id, value, attr);
}
template<class Operator, class Type>
void attribute(Operator &op, const char *id, std::optional<Type> &value, const utils::field_attributes &attr = utils::NullAttributes) {
void attribute(Operator &op, const char *id, std::optional<Type> &value, const utils::field_attributes &attr = NullAttributes) {
op.on_attribute(id, value, attr);
}
+26 -3
View File
@@ -73,8 +73,31 @@ private:
size_t size_ = 0;
constraints options_ = constraints::None;
};
const field_attributes NullAttributes {};
}
namespace matador {
const utils::field_attributes NullAttributes {};
const utils::field_attributes VarChar63 {63};
const utils::field_attributes VarChar127 {127};
const utils::field_attributes VarChar255 {255};
const utils::field_attributes VarChar511 {511};
const utils::field_attributes VarChar1023 {1023};
const utils::field_attributes VarChar2047 {2047};
const utils::field_attributes VarChar4095 {4095};
const utils::field_attributes UniqueVarChar63 {63, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar127 {127, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar255 {255, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar511 {511, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar1023 {1023, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar2047 {2047, utils::constraints::Unique};
const utils::field_attributes UniqueVarChar4095 {4095, utils::constraints::Unique};
const utils::field_attributes PrimaryKeyVarChar63 {63, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar127 {127, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar255 {255, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar511 {511, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar1023 {1023, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar2047 {2047, utils::constraints::PrimaryKey};
const utils::field_attributes PrimaryKeyVarChar4095 {4095, utils::constraints::PrimaryKey};
}
#endif //MATADOR_FIELD_ATTRIBUTES_HPP
@@ -21,6 +21,8 @@ public:
access::process(*this, obj);
}
template<typename BaseType>
static void on_base(const BaseType&) {}
template<typename PrimaryKeyType>
void on_primary_key(const char * /*id*/, PrimaryKeyType &pk, const primary_key_attribute & = DefaultPkAttributes) {
const auto value = pk_.as<PrimaryKeyType>();
@@ -51,6 +53,8 @@ private:
struct pk_unset_checker {
bool unset{true};
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class PrimaryKeyType>
void on_primary_key(const char * /*id*/, PrimaryKeyType &pk, const primary_key_attribute & = DefaultPkAttributes) {
unset = !identifier_type_traits<PrimaryKeyType>::is_valid(pk);
@@ -73,6 +77,8 @@ struct pk_unset_checker {
struct primary_key_getter {
std::uint64_t value{0};
template<typename BaseType>
static void on_base(const BaseType&) {}
template<class PrimaryKeyType>
void on_primary_key(const char * /*id*/, PrimaryKeyType &pk, const primary_key_attribute & = DefaultPkAttributes) {
pk_ = pk;
@@ -48,6 +48,13 @@ private:
};
const primary_key_attribute DefaultPkAttributes {};
const primary_key_attribute ManualVarChar63 {63};
const primary_key_attribute ManualVarChar127 {127};
const primary_key_attribute ManualVarChar255 {255};
const primary_key_attribute ManualVarChar511 {511};
const primary_key_attribute ManualVarChar1023 {1023};
const primary_key_attribute ManualVarChar2047 {2047};
const primary_key_attribute ManualVarChar4095 {4095};
}
#endif //PRIMARY_KEY_ATTRIBUTE_HPP