28#ifndef MYSQLSHDK_LIBS_DB_ROW_COPY_H_
29#define MYSQLSHDK_LIBS_DB_ROW_COPY_H_
68 uint32_t
index)
const override;
70 size_t *out_size)
const override;
71 std::tuple<uint64_t, int>
get_bit(uint32_t
index)
const override;
94 const T &
get(
size_t field)
const {
95 assert(field < _data->fields.size());
96 if (field >=
_data->fields.size())
97 throw std::invalid_argument(
"Attempt to access invalid field");
103 std::vector<std::unique_ptr<Field_data_>>
fields;
106 explicit Data(std::vector<Type> types_)
110 for (
const auto &c : columns)
types.push_back(c.get_type());
145 uint32_t
index,
T &&arg) {
147 _data->fields[
index] = std::unique_ptr<Field_data_>(
150 _data->fields[
index] = std::unique_ptr<Field_data_>(
153 throw std::invalid_argument(
154 "Attempt to write integer value to non integer field");
159 uint32_t
index,
T &&arg) {
162 throw std::invalid_argument(
163 "Attempt to write floating point number to not neither float or "
166 std::make_unique<Field_data<T>>(std::forward<T>(arg));
181 throw std::invalid_argument(
182 "Attempt to write arithmetic type to non arithmetic field");
183 _data->fields[
index] = std::unique_ptr<Field_data_>(
188 template <
class T,
class... Args>
191 if (start < _data->fields.size())
196 template <
class... Args>
198 constexpr int n =
sizeof...(args);
199 if (
n !=
_data->fields.size())
200 throw std::invalid_argument(
201 "The number of arguments does not match the row size");
202 set_field(0, std::forward<Args>(args)...);
206 _data = std::make_shared<Data>(types);
210 _data = std::make_shared<Data>(columns);
213 template <
class... Args>
215 _data = std::make_shared<Data>(types);
219 template <
class... Args>
221 _data = std::make_shared<Data>(columns);
Definition: jit_executor_db_interface.h:82
Definition: row_copy.h:47
Type get_type(uint32_t index) const override
Definition: row_copy.cc:138
int64_t get_int(uint32_t index) const override
Definition: row_copy.cc:189
double get_double(uint32_t index) const override
Definition: row_copy.cc:278
Mem_row & operator=(const Mem_row &)=delete
Mem_row(const Mem_row &)=delete
~Mem_row() override=default
std::string get_as_string(uint32_t index) const override
Definition: row_copy.cc:147
const T & get(size_t field) const
Definition: row_copy.h:94
Mem_row(Mem_row &&)=default
void get_raw_data(uint32_t index, const char **out_data, size_t *out_size) const override
Definition: row_copy.cc:246
Mem_row & operator=(Mem_row &&)=default
std::shared_ptr< Data > _data
Definition: row_copy.h:113
bool is_null(uint32_t index) const override
Definition: row_copy.cc:304
std::pair< const char *, size_t > get_string_data(uint32_t index) const override
Definition: row_copy.cc:238
void add_field(Type type, uint32_t offset)
Inserts new field at specified offset.
Definition: row_copy.cc:309
std::string m_raw_data_cache
Definition: row_copy.h:114
std::string get_string(uint32_t index) const override
Definition: row_copy.cc:232
uint32_t num_fields() const override
Definition: row_copy.cc:143
float get_float(uint32_t index) const override
Definition: row_copy.cc:258
std::tuple< uint64_t, int > get_bit(uint32_t index) const override
Definition: row_copy.cc:298
uint64_t get_uint(uint32_t index) const override
Definition: row_copy.cc:209
A self-contained Row object like Row_copy, but can be created or modified programmatically.
Definition: row_copy.h:141
void set_field(uint32_t start, T &&value, Args... args)
Definition: row_copy.h:189
Mutable_row(const std::vector< Type > &types)
Definition: row_copy.h:205
std::enable_if< std::is_same< T, std::nullptr_t >::value >::type set_field(uint32_t index, T &&)
Definition: row_copy.h:171
Mutable_row(const std::vector< Column > &columns, Args... args)
Definition: row_copy.h:220
std::enable_if<!std::is_arithmetic< T >::value &&!std::is_same< T, std::nullptr_t >::value >::type set_field(uint32_t index, T &&arg)
Definition: row_copy.h:178
void set_row_values(Args... args)
Definition: row_copy.h:197
Mutable_row(const std::vector< Type > &types, Args... args)
Definition: row_copy.h:214
virtual ~Mutable_row()=default
Mutable_row(const std::vector< Column > &columns)
Definition: row_copy.h:209
std::enable_if< std::is_floating_point< T >::value >::type set_field(uint32_t index, T &&arg)
Definition: row_copy.h:158
std::enable_if< std::is_integral< T >::value >::type set_field(uint32_t index, T &&arg)
Definition: row_copy.h:144
A self-contained Row object that owns its own storage, as opposed to mysql::Row or mysqlx::Row which ...
Definition: row_copy.h:124
Row_copy & operator=(const Row_copy &row)=delete
Row_copy(const Row_copy &row)=delete
Row_copy(Row_copy &&)=default
virtual ~Row_copy()=default
Row_copy & operator=(Row_copy &&)=default
mrs::interface::RestHandler::HttpResult::Type Type
Definition: handler_content_file.cc:42
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
#define T
Definition: jit_executor_value.cc:373
borrowable::binary::Float Float
Definition: classic_protocol_binary.h:316
borrowable::binary::Double Double
Definition: classic_protocol_binary.h:317
bool index(const std::string &value, const String &search_for, uint32_t *idx)
Definition: contains.h:75
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
size_t size(const char *const c)
Definition: base64.h:46
Definition: file_system_exceptions.h:34
@ Integer
String values, UTF-8 encoding.
Definition: jit_executor_value.h:58
@ UInteger
64bit integer numbers
Definition: jit_executor_value.h:59
Definition: gcs_xcom_synode.h:64
required string type
Definition: replication_group_member_actions.proto:34
Definition: row_copy.h:101
Data(std::vector< Type > types_)
Definition: row_copy.h:106
std::vector< Type > types
Definition: row_copy.h:102
std::vector< std::unique_ptr< Field_data_ > > fields
Definition: row_copy.h:103
Data(const std::vector< Column > &columns)
Definition: row_copy.h:109
Definition: row_copy.h:82
virtual ~Field_data_()=default
Definition: row_copy.h:87
T value
Definition: row_copy.h:90
Field_data(T &&v) noexcept
Definition: row_copy.h:89
Field_data(const T &v)
Definition: row_copy.h:88
int n
Definition: xcom_base.cc:509