diff --git a/include/mgp.hpp b/include/mgp.hpp index 8ea94cc82..3a5f8f382 100644 --- a/include/mgp.hpp +++ b/include/mgp.hpp @@ -1180,6 +1180,8 @@ class Record { void Insert(const char *field_name, const LocalDateTime &local_date_time); /// @brief Inserts a @ref Duration value under field `field_name`. void Insert(const char *field_name, const Duration &duration); + /// @brief Inserts a @ref Value value under field `field_name`, and then call appropriate insert. + void Insert(const char *field_name, const Value &value); private: mgp_result_record *record_; @@ -3313,6 +3315,40 @@ inline void Record::Insert(const char *field_name, const Duration &duration) { mgp::value_destroy(mgp_val); } +inline void Record::Insert(const char *field_name, const Value &value) { + switch (value.Type()) { + case Type::Bool: + return Insert(field_name, value.ValueBool()); + case Type::Int: + return Insert(field_name, value.ValueInt()); + case Type::Double: + return Insert(field_name, value.ValueDouble()); + case Type::String: + return Insert(field_name, value.ValueString()); + case Type::List: + return Insert(field_name, value.ValueList()); + case Type::Map: + return Insert(field_name, value.ValueMap()); + case Type::Node: + return Insert(field_name, value.ValueNode()); + case Type::Relationship: + return Insert(field_name, value.ValueRelationship()); + case Type::Path: + return Insert(field_name, value.ValuePath()); + case Type::Date: + return Insert(field_name, value.ValueDate()); + case Type::LocalTime: + return Insert(field_name, value.ValueLocalTime()); + case Type::LocalDateTime: + return Insert(field_name, value.ValueLocalDateTime()); + case Type::Duration: + return Insert(field_name, value.ValueDuration()); + + default: + throw ValueException("No Record.Insert for this datatype"); + } +} + // RecordFactory: inline RecordFactory::RecordFactory(mgp_result *result) : result_(result) {}