26#ifndef ROUTER_SRC_INCLUDE_MYSQLROUTER_JIT_EXECUTOR_VALUE_H_
27#define ROUTER_SRC_INCLUDE_MYSQLROUTER_JIT_EXECUTOR_VALUE_H_
37#include "mysqlrouter/jit_executor_plugin_export.h"
47 using std::runtime_error::runtime_error;
131struct JIT_EXECUTOR_PLUGIN_EXPORT
Value final {
144 inline bool has_key(
const std::string &k)
const {
return find(k) != end(); }
153 const std::string &def =
"")
const;
154 bool get_bool(
const std::string &k,
bool def =
false)
const;
155 int64_t get_int(
const std::string &k, int64_t def = 0)
const;
156 uint64_t get_uint(
const std::string &k, uint64_t def = 0)
const;
157 double get_double(
const std::string &k,
double def = 0.0)
const;
159 const std::string &k,
160 std::shared_ptr<Map_type> def = std::shared_ptr<Map_type>())
const;
162 const std::string &k,
163 std::shared_ptr<Array_type> def = std::shared_ptr<Array_type>())
const;
164 void merge_contents(std::shared_ptr<Map_type>
source,
bool overwrite);
179 size_t erase(
const std::string &k) {
return _map.erase(k); }
196 void set(
const std::string &k,
Value &&v) { _map[k] = std::move(v); }
198 void set(
const std::string &k,
const Value &v) { _map[k] = v; }
200 const container_type::mapped_type &
at(
const std::string &k)
const {
203 container_type::mapped_type &
operator[](
const std::string &k) {
216 bool empty()
const {
return _map.empty(); }
217 size_t size()
const {
return _map.size(); }
218 size_t count(
const std::string &k)
const {
return _map.count(k); }
221 std::pair<iterator, bool>
emplace(
const std::string &
key,
T &&v) {
222 return _map.emplace(
key,
Value(std::forward<T>(v)));
241 explicit
Value(const
char *);
242 explicit
Value(const
char *,
size_t n,
bool binary = false);
244 explicit
Value(
std::wstring_view s);
246 explicit
Value(
int i);
247 explicit
Value(
unsigned int ui);
248 explicit
Value(int64_t i);
249 explicit
Value(uint64_t ui);
250 explicit
Value(
float f);
251 explicit
Value(
double d);
252 explicit
Value(
bool b);
255 explicit
Value(const
std::shared_ptr<polyglot::Polyglot_object> &o);
256 explicit
Value(const
std::shared_ptr<polyglot::Object_bridge> &o);
312 std::string descr(
bool pprint =
false)
const;
316 std::string repr()
const;
319 std::string json(
bool pprint =
false)
const;
324 std::string &append_descr(std::string &s_out,
int indent = -1,
325 char quote_strings =
'\0')
const;
326 std::string &append_repr(std::string &s_out)
const;
331 bool as_bool() const;
332 int64_t as_int() const;
333 uint64_t as_uint() const;
334 double as_double() const;
336 std::wstring as_wstring() const;
341 if (std::holds_alternative<binary_string>(m_value))
342 return std::get<binary_string>(m_value);
343 return std::get<std::string>(m_value);
351 return std::dynamic_pointer_cast<C>(
352 std::get<std::shared_ptr<polyglot::Object_bridge>>(m_value));
355 std::shared_ptr<polyglot::Object_bridge> as_object_bridge()
const;
356 std::shared_ptr<polyglot::Polyglot_object> as_object()
const;
358 std::shared_ptr<Map_type>
as_map()
const {
362 return std::get<std::shared_ptr<Map_type>>(m_value);
369 return std::get<std::shared_ptr<Array_type>>(m_value);
422 int64_t, uint64_t, double, std::shared_ptr<polyglot::Polyglot_object>,
423 std::shared_ptr<polyglot::Object_bridge>,
424 std::shared_ptr<Array_type>,
425 std::shared_ptr<Map_type>
438template <
typename... Arg>
441 (void)std::initializer_list<int>{
442 (array->emplace_back(std::forward<Arg>(args)), 0)...};
446template <
template <
typename...>
class C,
typename T>
450 array->emplace_back(item);
455template <
template <
typename...>
class C,
typename T>
459 array->emplace_back(std::move(item));
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:169
Definition: jit_executor_value.h:46
Definition: jit_executor_value.h:135
iterator find(const std::string &k)
Definition: jit_executor_value.h:177
container_type _map
Definition: jit_executor_value.h:226
container_type::iterator iterator
Definition: jit_executor_value.h:139
bool operator<(const Map_type &) const =delete
iterator end()
Definition: jit_executor_value.h:191
iterator begin()
Definition: jit_executor_value.h:185
reverse_iterator rbegin()
Definition: jit_executor_value.h:188
bool has_key(const std::string &k) const
Definition: jit_executor_value.h:144
size_t count(const std::string &k) const
Definition: jit_executor_value.h:218
bool is_null(const std::string &k) const
Definition: jit_executor_value.h:148
bool empty() const
Definition: jit_executor_value.h:216
const container_type::mapped_type & at(const std::string &k) const
Definition: jit_executor_value.h:200
void clear()
Definition: jit_executor_value.h:182
reverse_iterator rend()
Definition: jit_executor_value.h:194
std::map< std::string, Value > container_type
Definition: jit_executor_value.h:137
const_reverse_iterator rbegin() const
Definition: jit_executor_value.h:187
bool operator>=(const Map_type &) const =delete
std::shared_ptr< Value::Array_type > get_array(const std::string &k, std::shared_ptr< Array_type > def=std::shared_ptr< Array_type >()) const
bool operator==(const Map_type &other) const
Definition: jit_executor_value.h:207
container_type::value_type value_type
Definition: jit_executor_value.h:140
size_t erase(const std::string &k)
Definition: jit_executor_value.h:179
const_iterator find(const std::string &k) const
Definition: jit_executor_value.h:176
const_iterator begin() const
Definition: jit_executor_value.h:184
iterator erase(const_iterator it)
Definition: jit_executor_value.h:180
const_reverse_iterator rend() const
Definition: jit_executor_value.h:193
bool operator<=(const Map_type &) const =delete
container_type::const_iterator const_iterator
Definition: jit_executor_value.h:138
container_type::const_reverse_iterator const_reverse_iterator
Definition: jit_executor_value.h:142
void set(const std::string &k, const Value &v)
Definition: jit_executor_value.h:198
iterator erase(iterator it)
Definition: jit_executor_value.h:181
std::shared_ptr< Value::Map_type > get_map(const std::string &k, std::shared_ptr< Map_type > def=std::shared_ptr< Map_type >()) const
bool operator!=(const Map_type &other) const
Definition: jit_executor_value.h:208
container_type::mapped_type & operator[](const std::string &k)
Definition: jit_executor_value.h:203
size_t size() const
Definition: jit_executor_value.h:217
void set(const std::string &k, Value &&v)
Definition: jit_executor_value.h:196
std::pair< iterator, bool > emplace(const std::string &key, T &&v)
Definition: jit_executor_value.h:221
bool operator>(const Map_type &) const =delete
const_iterator end() const
Definition: jit_executor_value.h:190
container_type::reverse_iterator reverse_iterator
Definition: jit_executor_value.h:141
#define T
Definition: jit_executor_value.cc:373
bool operator==(const my_thread_handle &a, const my_thread_handle &b)
Definition: my_thread.h:151
static char * get_string(char **to_ptr, const char **from_ptr, struct st_command *command)
Definition: mysqltest.cc:6454
uint16_t value_type
Definition: vt100.h:184
constexpr value_type binary
Definition: classic_protocol_constants.h:275
Definition: atomics_array.h:39
noexcept
The return type for any call_and_catch(f, args...) call where f(args...) returns Type.
Definition: call_and_catch.h:76
static mysql_service_status_t get(THD **thd) noexcept
Definition: mysql_current_thread_reader_all_empty.cc:31
Container::const_iterator find(const Container &c, Value &&value)
Definition: generic.h:40
bool parse(MYSQL_THD thd, const string &query, bool is_prepared, Condition_handler *handler)
Definition: services.cc:81
bool is_null(poly_thread thread, poly_value value)
Definition: jit_executor_type_conversion.cc:46
Definition: file_system_exceptions.h:34
Value::Array_type_ref Array_t
Definition: jit_executor_value.h:432
Value_type
Basic types that can be passed around code in different languages.
Definition: jit_executor_value.h:54
@ String
true or false
Definition: jit_executor_value.h:58
@ Bool
Null/None value.
Definition: jit_executor_value.h:57
@ Integer
String values, UTF-8 encoding.
Definition: jit_executor_value.h:59
@ ObjectBridge
Polyglot object of any type.
Definition: jit_executor_value.h:66
@ Array
C++ Object.
Definition: jit_executor_value.h:68
@ Float
unsigned 64bit integer numbers
Definition: jit_executor_value.h:61
@ Binary
Dictionary/Map/Object container.
Definition: jit_executor_value.h:72
@ UInteger
64bit integer numbers
Definition: jit_executor_value.h:60
@ Map
Array/List container.
Definition: jit_executor_value.h:69
@ Undefined
Definition: jit_executor_value.h:55
@ Object
double numbers
Definition: jit_executor_value.h:65
@ Null
Undefined.
Definition: jit_executor_value.h:56
bool is_compatible_type(Value_type source_type, Value_type target_type)
Definition: jit_executor_value.cc:1428
Array_t make_array()
Definition: jit_executor_value.h:436
std::vector< Value > Argument_list
Definition: jit_executor_value.h:430
Dictionary_t JIT_EXECUTOR_PLUGIN_EXPORT make_dict()
Definition: jit_executor_value.cc:1968
Value::Map_type_ref Dictionary_t
Definition: jit_executor_value.h:431
Define std::hash<Gtid>.
Definition: gtid.h:355
required string key
Definition: replication_asynchronous_connection_failover.proto:60
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:42
required string type
Definition: replication_group_member_actions.proto:34
Definition: jit_executor_value.h:419
Definition: jit_executor_value.h:418
Pointer to a function that may be implemented in any language.
Definition: jit_executor_value.h:131
std::shared_ptr< Map_type > Map_type_ref
Definition: jit_executor_value.h:228
std::vector< Value > Array_type
Definition: jit_executor_value.h:132
std::variant< std::monostate, null_value, bool, std::string, binary_string, int64_t, uint64_t, double, std::shared_ptr< polyglot::Polyglot_object >, std::shared_ptr< polyglot::Object_bridge >, std::shared_ptr< Array_type >, std::shared_ptr< Map_type > > m_value
Definition: jit_executor_value.h:427
friend std::ostream & operator<<(std::ostream &os, const Value &v)
bool is_null() const noexcept
Definition: jit_executor_value.h:305
std::shared_ptr< Array_type > as_array() const
Definition: jit_executor_value.h:365
static Value True()
Definition: jit_executor_value.h:285
bool operator>(const Value &) const =delete
static Value new_map()
Definition: jit_executor_value.h:275
std::shared_ptr< C > as_object_bridge() const
Definition: jit_executor_value.h:347
bool operator<(const Value &) const =delete
static Value False()
Definition: jit_executor_value.h:286
bool operator!=(const Value &other) const
Definition: jit_executor_value.h:292
static Value Null()
Definition: jit_executor_value.h:279
std::shared_ptr< Map_type > as_map() const
Definition: jit_executor_value.h:358
bool operator>=(const Value &) const =delete
Value(Value &&) noexcept=default
std::shared_ptr< Array_type > Array_type_ref
Definition: jit_executor_value.h:133
bool operator<=(const Value &) const =delete
Value(const Value &)=default
const char * get_type(TYPELIB *typelib, unsigned int nr)
int n
Definition: xcom_base.cc:509