MySQL 9.3.0
Source Code Documentation
jit_executor_db_interface.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025, Oracle and/or its affiliates.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License, version 2.0,
6 * as published by the Free Software Foundation.
7 *
8 * This program is designed to work with certain software (including
9 * but not limited to OpenSSL) that is licensed under separate terms,
10 * as designated in a particular file or component or in included license
11 * documentation. The authors of MySQL hereby grant you an additional
12 * permission to link the program and your derivative works with the
13 * separately licensed software that they have either included with
14 * the program or referenced in the documentation.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
19 * the GNU General Public License, version 2.0, for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 */
25
26#ifndef ROUTER_SRC_JIT_EXECUTOR_INCLUDE_MYSQLROUTER_JIT_EXECUTOR_MYSQL_SESSION_H_
27#define ROUTER_SRC_JIT_EXECUTOR_INCLUDE_MYSQLROUTER_JIT_EXECUTOR_MYSQL_SESSION_H_
28
29#include <memory>
30#include <string>
31#include <vector>
32
33#include "mysqlrouter/jit_executor_plugin_export.h"
34namespace jit_executor {
35namespace db {
36
37enum class Type {
38 Null,
39 String,
40 Integer,
42 Float,
43 Double,
44 Decimal,
45 Bytes,
47 Json,
48 Date,
49 Time,
51 Bit,
52 Enum,
53 Set,
54 Vector
55};
56
57class JIT_EXECUTOR_PLUGIN_EXPORT IColumn {
58 public:
59 virtual const std::string &get_catalog() const = 0;
60 virtual const std::string &get_schema() const = 0;
61 virtual const std::string &get_table_name() const = 0;
62 virtual const std::string &get_table_label() const = 0;
63 virtual const std::string &get_column_name() const = 0;
64 virtual const std::string &get_column_label() const = 0;
65 virtual uint32_t get_length() const = 0;
66 virtual int get_fractional() const = 0;
67 virtual Type get_type() const = 0;
68 virtual std::string get_dbtype() const = 0;
69 // virtual std::string get_collation_name() const = 0;
70 // virtual std::string get_charset_name() const = 0;
71 virtual uint32_t get_collation() const = 0;
72 virtual const std::string &get_flags() const = 0;
73
74 virtual bool is_unsigned() const = 0;
75 virtual bool is_zerofill() const = 0;
76 virtual bool is_binary() const = 0;
77 virtual bool is_numeric() const = 0;
78
79 virtual ~IColumn() = default;
80};
81
82class JIT_EXECUTOR_PLUGIN_EXPORT IRow {
83 public:
84 IRow() = default;
85 IRow(const IRow &other) = delete;
86 IRow &operator=(const IRow &other) = delete;
87 IRow(IRow &&other) = default;
88 IRow &operator=(IRow &&other) = default;
89
90 virtual uint32_t num_fields() const = 0;
91
92 virtual Type get_type(uint32_t index) const = 0;
93 virtual bool is_null(uint32_t index) const = 0;
94 virtual std::string get_as_string(uint32_t index) const = 0;
95
96 virtual std::string get_string(uint32_t index) const = 0;
97 virtual std::wstring get_wstring(uint32_t index) const;
98 virtual int64_t get_int(uint32_t index) const = 0;
99 virtual uint64_t get_uint(uint32_t index) const = 0;
100 virtual float get_float(uint32_t index) const = 0;
101 virtual double get_double(uint32_t index) const = 0;
102 virtual std::pair<const char *, size_t> get_string_data(
103 uint32_t index) const = 0;
104 virtual void get_raw_data(uint32_t index, const char **out_data,
105 size_t *out_size) const = 0;
106 virtual std::tuple<uint64_t, int> get_bit(uint32_t index) const = 0;
107
108 inline std::string get_as_string(uint32_t index,
109 const std::string &default_if_null) const {
110 if (is_null(index)) return default_if_null;
111 return get_as_string(index);
112 }
113
114 inline std::string get_string(uint32_t index,
115 const std::string &default_if_null) const {
116 if (is_null(index)) return default_if_null;
117 return get_string(index);
118 }
119
120 inline std::wstring get_wstring(uint32_t index,
121 const std::wstring &default_if_null) const {
122 if (is_null(index)) return default_if_null;
123 return get_wstring(index);
124 }
125
126 inline int64_t get_int(uint32_t index, int64_t default_if_null) const {
127 if (is_null(index)) return default_if_null;
128 return get_int(index);
129 }
130
131 inline uint64_t get_uint(uint32_t index, uint64_t default_if_null) const {
132 if (is_null(index)) return default_if_null;
133 return get_uint(index);
134 }
135
136 inline double get_double(uint32_t index, double default_if_null) const {
137 if (is_null(index)) return default_if_null;
138 return get_double(index);
139 }
140
141 virtual ~IRow() = default;
142};
143
144struct JIT_EXECUTOR_PLUGIN_EXPORT Warning {
145 enum class Level { Note, Warn, Error };
147 std::string msg;
148 uint32_t code;
149};
150
151class JIT_EXECUTOR_PLUGIN_EXPORT IResult {
152 public:
153 IResult() = default;
154 double get_execution_time() const { return m_execution_time; }
155 void set_execution_time(double time) { m_execution_time = time; }
156
157 virtual const IRow *fetch_one() = 0;
158 virtual bool next_resultset() = 0;
159 virtual std::unique_ptr<Warning> fetch_one_warning() = 0;
160
161 // Metadata retrieval
162 virtual int64_t get_auto_increment_value() const = 0;
163 virtual bool has_resultset() = 0;
164
165 virtual uint64_t get_affected_row_count() const = 0;
166 virtual uint64_t get_fetched_row_count() const = 0;
167
168 // In case of classic result this will only return real value after fetching
169 // the result data
170 virtual uint64_t get_warning_count() const = 0;
171 virtual std::string get_info() const = 0;
172 virtual const std::vector<std::string> &get_gtids() const = 0;
173
174 virtual const std::vector<std::shared_ptr<IColumn>> &get_metadata() const = 0;
175 virtual std::string get_statement_id() const { return ""; }
176
177 virtual void buffer() = 0;
178 virtual void rewind() = 0;
179
180 virtual ~IResult() = default;
181
182 protected:
183 double m_execution_time = 0.0;
184};
185
186class JIT_EXECUTOR_PLUGIN_EXPORT ISession {
187 public:
188 virtual std::shared_ptr<IResult> run_sql(const std::string &sql) = 0;
189
190 virtual void reset() = 0;
191
192 virtual ~ISession() = default;
193};
194
195} // namespace db
196} // namespace jit_executor
197
198#endif // ROUTER_SRC_JIT_EXECUTOR_INCLUDE_MYSQLROUTER_JIT_EXECUTOR_MYSQL_SESSION_H_
Class representing an error.
Definition: error.h:48
Definition: jit_executor_db_interface.h:57
virtual uint32_t get_length() const =0
virtual bool is_zerofill() const =0
virtual const std::string & get_column_name() const =0
virtual Type get_type() const =0
virtual ~IColumn()=default
virtual bool is_unsigned() const =0
virtual bool is_binary() const =0
virtual std::string get_dbtype() const =0
virtual bool is_numeric() const =0
virtual const std::string & get_table_label() const =0
virtual int get_fractional() const =0
virtual uint32_t get_collation() const =0
virtual const std::string & get_catalog() const =0
virtual const std::string & get_flags() const =0
virtual const std::string & get_schema() const =0
virtual const std::string & get_column_label() const =0
virtual const std::string & get_table_name() const =0
Definition: jit_executor_db_interface.h:151
virtual void buffer()=0
virtual const std::vector< std::string > & get_gtids() const =0
double get_execution_time() const
Definition: jit_executor_db_interface.h:154
virtual std::string get_info() const =0
virtual const IRow * fetch_one()=0
virtual bool has_resultset()=0
virtual void rewind()=0
virtual uint64_t get_warning_count() const =0
virtual int64_t get_auto_increment_value() const =0
virtual std::string get_statement_id() const
Definition: jit_executor_db_interface.h:175
virtual bool next_resultset()=0
virtual const std::vector< std::shared_ptr< IColumn > > & get_metadata() const =0
virtual uint64_t get_fetched_row_count() const =0
virtual std::unique_ptr< Warning > fetch_one_warning()=0
virtual ~IResult()=default
virtual uint64_t get_affected_row_count() const =0
void set_execution_time(double time)
Definition: jit_executor_db_interface.h:155
Definition: jit_executor_db_interface.h:82
virtual void get_raw_data(uint32_t index, const char **out_data, size_t *out_size) const =0
virtual std::string get_string(uint32_t index) const =0
IRow & operator=(const IRow &other)=delete
virtual uint64_t get_uint(uint32_t index) const =0
virtual Type get_type(uint32_t index) const =0
std::string get_as_string(uint32_t index, const std::string &default_if_null) const
Definition: jit_executor_db_interface.h:108
double get_double(uint32_t index, double default_if_null) const
Definition: jit_executor_db_interface.h:136
virtual double get_double(uint32_t index) const =0
virtual std::pair< const char *, size_t > get_string_data(uint32_t index) const =0
IRow & operator=(IRow &&other)=default
std::string get_string(uint32_t index, const std::string &default_if_null) const
Definition: jit_executor_db_interface.h:114
virtual ~IRow()=default
IRow(IRow &&other)=default
virtual std::tuple< uint64_t, int > get_bit(uint32_t index) const =0
virtual bool is_null(uint32_t index) const =0
IRow(const IRow &other)=delete
uint64_t get_uint(uint32_t index, uint64_t default_if_null) const
Definition: jit_executor_db_interface.h:131
int64_t get_int(uint32_t index, int64_t default_if_null) const
Definition: jit_executor_db_interface.h:126
std::wstring get_wstring(uint32_t index, const std::wstring &default_if_null) const
Definition: jit_executor_db_interface.h:120
virtual std::string get_as_string(uint32_t index) const =0
virtual float get_float(uint32_t index) const =0
virtual uint32_t num_fields() const =0
virtual int64_t get_int(uint32_t index) const =0
Definition: jit_executor_db_interface.h:186
virtual ~ISession()=default
virtual void reset()=0
virtual std::shared_ptr< IResult > run_sql(const std::string &sql)=0
static char * get_string(char **to_ptr, const char **from_ptr, struct st_command *command)
Definition: mysqltest.cc:6276
bool index(const std::string &value, const String &search_for, uint32_t *idx)
Definition: contains.h:75
Type
Definition: jit_executor_db_interface.h:37
Definition: jit_executor_callbacks.h:36
bool is_null(poly_thread thread, poly_value value)
Definition: jit_executor_type_conversion.cc:46
Definition: jit_executor_db_interface.h:144
Level level
Definition: jit_executor_db_interface.h:146
std::string msg
Definition: jit_executor_db_interface.h:147
uint32_t code
Definition: jit_executor_db_interface.h:148
Level
Definition: jit_executor_db_interface.h:145