introduced field_attributes shortcuts and added method on_base() to all processor classes
This commit is contained in:
@@ -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*/) {}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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*/) {}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user