MySQL 9.7.2
Source Code Documentation
jit_executor_db_interface.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025, 2026, 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 <cstdint>
30#include <memory>
31#include <string>
32#include <vector>
33
34#include "mysqlrouter/jit_executor_plugin_export.h"
35namespace jit_executor {
36namespace db {
37
38enum class Type {
39 Null,
40 String,
41 Integer,
43 Float,
44 Double,
45 Decimal,
46 Bytes,
48 Json,
49 Date,
50 Time,
52 Bit,
53 Enum,
54 Set,
55 Vector
56};
57
58class JIT_EXECUTOR_PLUGIN_EXPORT IColumn {
59 public:
60 virtual const std::string &get_catalog() const = 0;
61 virtual const std::string &get_schema() const = 0;
62 virtual const std::string &get_table_name() const = 0;
63 virtual const std::string &get_table_label() const = 0;
64 virtual const std::string &get_column_name() const = 0;
65 virtual const std::string &get_column_label() const = 0;
66 virtual uint32_t get_length() const = 0;
67 virtual int get_fractional() const = 0;
68 virtual Type get_type() const = 0;
69 virtual std::string get_dbtype() const = 0;
70 // virtual std::string get_collation_name() const = 0;
71 // virtual std::string get_charset_name() const = 0;
72 virtual uint32_t get_collation() const = 0;
73 virtual const std::string &get_flags() const = 0;
74
75 virtual bool is_unsigned() const = 0;
76 virtual bool is_zerofill() const = 0;
77 virtual bool is_binary() const = 0;
78 virtual bool is_numeric() const = 0;
79
80 virtual ~IColumn() = default;
81};
82
83class JIT_EXECUTOR_PLUGIN_EXPORT IRow {
84 public:
85 IRow() = default;
86 IRow(const IRow &other) = delete;
87 IRow &operator=(const IRow &other) = delete;
88 IRow(IRow &&other) = default;
89 IRow &operator=(IRow &&other) = default;
90
91 virtual uint32_t num_fields() const = 0;
92
93 virtual Type get_type(uint32_t index) const = 0;
94 virtual bool is_null(uint32_t index) const = 0;
95 virtual std::string get_as_string(uint32_t index) const = 0;
96
97 virtual std::string get_string(uint32_t index) const = 0;
98 virtual std::wstring get_wstring(uint32_t index) const;
99 virtual int64_t get_int(uint32_t index) const = 0;
100 virtual uint64_t get_uint(uint32_t index) const = 0;
101 virtual float get_float(uint32_t index) const = 0;
102 virtual double get_double(uint32_t index) const = 0;
103 virtual std::pair<const char *, size_t> get_string_data(
104 uint32_t index) const = 0;
105 virtual void get_raw_data(uint32_t index, const char **out_data,
106 size_t *out_size) const = 0;
107 virtual std::tuple<uint64_t, int> get_bit(uint32_t index) const = 0;
108
109 inline std::string get_as_string(uint32_t index,
110 const std::string &default_if_null) const {
111 if (is_null(index)) return default_if_null;
112 return get_as_string(index);
113 }
114
115 inline std::string get_string(uint32_t index,
116 const std::string &default_if_null) const {
117 if (is_null(index)) return default_if_null;
118 return get_string(index);
119 }
120
121 inline std::wstring get_wstring(uint32_t index,
122 const std::wstring &default_if_null) const {
123 if (is_null(index)) return default_if_null;
124 return get_wstring(index);
125 }
126
127 inline int64_t get_int(uint32_t index, int64_t default_if_null) const {
128 if (is_null(index)) return default_if_null;
129 return get_int(index);
130 }
131
132 inline uint64_t get_uint(uint32_t index, uint64_t default_if_null) const {
133 if (is_null(index)) return default_if_null;
134 return get_uint(index);
135 }
136
137 inline double get_double(uint32_t index, double default_if_null) const {
138 if (is_null(index)) return default_if_null;
139 return get_double(index);
140 }
141
142 virtual ~IRow() = default;
143};
144
145struct JIT_EXECUTOR_PLUGIN_EXPORT Warning {
146 enum class Level { Note, Warn, Error };
148 std::string msg;
149 uint32_t code;
150};
151
152class JIT_EXECUTOR_PLUGIN_EXPORT IResult {
153 public:
154 IResult() = default;
155 double get_execution_time() const { return m_execution_time; }
156 void set_execution_time(double time) { m_execution_time = time; }
157
158 virtual const IRow *fetch_one() = 0;
159 virtual bool next_resultset() = 0;
160 virtual std::unique_ptr<Warning> fetch_one_warning() = 0;
161
162 // Metadata retrieval
163 virtual int64_t get_auto_increment_value() const = 0;
164 virtual bool has_resultset() = 0;
165
166 virtual uint64_t get_affected_row_count() const = 0;
167 virtual uint64_t get_fetched_row_count() const = 0;
168
169 // In case of classic result this will only return real value after fetching
170 // the result data
171 virtual uint64_t get_warning_count() const = 0;
172 virtual std::string get_info() const = 0;
173 virtual const std::vector<std::string> &get_gtids() const = 0;
174
175 virtual const std::vector<std::shared_ptr<IColumn>> &get_metadata() const = 0;
176 virtual std::string get_statement_id() const { return ""; }
177
178 virtual void buffer() = 0;
179 virtual void rewind() = 0;
180
181 virtual ~IResult() = default;
182
183 protected:
184 double m_execution_time = 0.0;
185};
186
187class JIT_EXECUTOR_PLUGIN_EXPORT ISession {
188 public:
189 virtual std::shared_ptr<IResult> run_sql(const std::string &sql) = 0;
190
191 virtual void reset() = 0;
192
193 virtual ~ISession() = default;
194};
195
196} // namespace db
197} // namespace jit_executor
198
199#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:58
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:152
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:155
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:176
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:156
Definition: jit_executor_db_interface.h:83
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:109
double get_double(uint32_t index, double default_if_null) const
Definition: jit_executor_db_interface.h:137
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:115
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:132
int64_t get_int(uint32_t index, int64_t default_if_null) const
Definition: jit_executor_db_interface.h:127
std::wstring get_wstring(uint32_t index, const std::wstring &default_if_null) const
Definition: jit_executor_db_interface.h:121
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:187
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:6454
bool index(const std::string &value, const String &search_for, uint32_t *idx)
Definition: contains.h:76
Type
Definition: jit_executor_db_interface.h:38
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:145
Level level
Definition: jit_executor_db_interface.h:147
std::string msg
Definition: jit_executor_db_interface.h:148
uint32_t code
Definition: jit_executor_db_interface.h:149
Level
Definition: jit_executor_db_interface.h:146