MySQL 9.1.0
Source Code Documentation
protocol_local_v2.h
Go to the documentation of this file.
1/* Copyright (c) 2023, 2024, Oracle and/or its affiliates.
2
3This program is free software; you can redistribute it and/or modify
4it under the terms of the GNU General Public License, version 2.0,
5as published by the Free Software Foundation.
6
7This program is designed to work with certain software (including
8but not limited to OpenSSL) that is licensed under separate terms,
9as designated in a particular file or component or in included license
10documentation. The authors of MySQL hereby grant you an additional
11permission to link the program and your derivative works with the
12separately licensed software that they have either included with
13the program or referenced in the documentation.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License, version 2.0, for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program; if not, write to the Free Software
22Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef PROTOCOL_LOCAL_V2_H
25#define PROTOCOL_LOCAL_V2_H
26
27#include <variant>
28
29#include "my_sys.h"
30#include "mysqld_error.h"
32#include "sql/field.h"
33#include "sql/protocol.h"
34#include "sql/sql_class.h"
35
37
38/**
39 * @brief A structure to store a decimal value together with its precision and
40 * number of decimals
41 * TODO: HCS-10094 - Do we really need this struct?
42 */
43struct decimal {
45 uint prec;
46 uint dec;
47};
48
49/**
50 * @brief A type to store the value of a Column which can be one of all the
51 * types that are supported by the Protocol_local_v2. Variant of pointers is
52 * used instead of variant of values as the values are stored and managed by
53 * mem_root. The pointers point to these values on mem_root.
54 */
55using value_t = std::variant<std::monostate, int64_t *, uint64_t *, double *,
57
58/**
59 * @brief The metadata of a Column
60 * Need to keep in-sync with Send_field class.
61 *
62 */
64 const char *database_name;
67 ulong length;
70};
71
72/**
73 * @brief A structure to store all information about a warning/error
74 *
75 */
76struct Warning {
77 Warning(const uint32 level, const uint32_t code, LEX_CSTRING message)
78 : m_level(level), m_code(code), m_message(message) {}
79
80 uint32_t m_level;
81 uint32_t m_code;
83};
84
85/**
86 * @brief A row of result or a row of metadata
87 * A row is a collection of Column values or Column metadata.
88 *
89 * @tparam T type of the result set
90 */
91template <typename T>
92class Row {
93 private:
95 size_t m_column_count; /* TODO: HCS-9478 change to point to metadata */
96
97 public:
98 const T &operator[](const unsigned int column_index) const {
99 return *get_column(column_index);
100 }
101 T *get_column(const unsigned int column_index) const {
102 assert(column_index < size());
103 return m_column_array + column_index;
104 }
105 size_t size() const { return m_column_count; }
106
107 Row(T *column_array_arg, size_t column_count_arg)
108 : m_column_array(column_array_arg), m_column_count(column_count_arg) {}
109
111};
112
113/**
114 * @brief This class is used to limit the bytes collected in Result_set.
115 * this is required to avoid exhausting MEM_ROOT, when fetch large set of rows.
116 */
118 private:
119 // Max capacity in bytes
120 static constexpr auto MAX_CAPACITY{500};
121
122 // Configured capacity in bytes
124
126
127 public:
128 // Add bytes to capacity.
129 // Note: since add_bytes is called after calling new in the store_ functions,
130 // the bytes have been allocated but they might not be shown to the end-users.
131 // See add_row_to_result_set
132 void add_bytes(uint64_t amend) {
133 m_current_capacity += amend;
134
135 if (!has_capacity()) my_error(ER_RESULT_SIZE_LIMIT_EXCEEDED, MYF(0));
136 }
137
138 // Check if the result set can have more bytes.
140
141 // Reset the limit. When we are done fetching all rows.
142 void reset() { m_current_capacity = 0; }
143
144 void set_capacity(uint64_t cap) { m_configured_capacity = cap; }
145
146 uint64_t get_capacity() { return m_configured_capacity; }
147};
148
149/**
150 * @brief A result set contains the result of a query. It is a collection of
151 * Rows and its metadata
152 *
153 */
155 private:
156 // Metadata
158 size_t m_column_count{0};
159
160 // Rows
162
163 // Row iterator
165
166 // Next result set
168
171
172 // Avoid copying the object.
173 Result_set(const Result_set &) = delete;
175 Result_set(const Result_set &&) = delete;
177
178 public:
179 Result_set();
180
182 size_t column_count, ulonglong affected_rows,
183 ulonglong last_insert_id);
184
185 ~Result_set() = default;
186
187 /**
188 * @brief Get the next row
189 *
190 * @return void*
191 */
193 return static_cast<Row<value_t> *>(m_row_iterator.next());
194 }
195 /**
196 * @brief Check if the iterator is at the last row
197 *
198 * @return true
199 * @return false
200 */
201 bool is_last_row() { return m_row_iterator.is_last(); }
202
203 /**
204 * @brief Get the num affected row count
205 *
206 * @return uint
207 */
209
210 /**
211 * @brief Get the last insert id
212 *
213 * @return uint
214 */
216
217 /**
218 * @brief Get the list of rows from result set
219 *
220 * @return List<Row<value_t>>*
221 */
223
224 /**
225 * @brief Get reference for rows in results set.
226 *
227 * @return List<Row<value_t>> &
228 */
229 operator List<Row<value_t>> &() { return *m_rows; }
230
231 /**
232 * @brief Get number for rows in result set.
233 *
234 * @return unsigned int
235 */
236 unsigned int size() const { return m_rows->elements; }
237
238 /**
239 * @brief Get the field metadata
240 *
241 * @return Row<Column_metadata>*
242 */
244
245 /**
246 * @brief Get the field count in result set.
247 *
248 * @return size_t
249 */
250 size_t get_field_count() const { return m_column_count; }
251
252 /**
253 * @brief Custom memory allocation for Result set object.
254 *
255 * @param size size of the memory
256 * @param mem_root mem root object pointer
257 * @return void*
258 */
259 static void *operator new(size_t size, MEM_ROOT *mem_root,
260 const std::nothrow_t & = std::nothrow) noexcept {
261 return mem_root->Alloc(size);
262 }
263
264 static void operator delete(void *) noexcept {}
265
266 static void operator delete(void *, MEM_ROOT *,
267 const std::nothrow_t &) noexcept {
268 /* purecov: inspected */
269 }
270
271 /**
272 * @brief Check if we have more than one result set.
273 *
274 * @return true
275 * @return false
276 */
277 bool has_next() { return m_next != nullptr; }
278
279 /**
280 * @brief Get the next result set object
281 *
282 * @return Result_set*
283 */
285
286 /**
287 * @brief Set the current result set pointer.
288 * Generally used when traversing through all result set.
289 *
290 * @param ptr pointer to result set
291 */
292 void set_next(Result_set *ptr) { m_next = ptr; }
293
294 // TODO: HCS-9478 remove this method after the hcs is resolved
295 /**
296 * @brief Update the members of result set
297 *
298 */
300 size_t column_count, ulonglong affected_rows,
301 ulonglong last_insert_id) {
302 m_rows = rows_arg;
303 m_row_iterator.init(*m_rows);
304 m_fields = fields;
305 m_column_count = column_count;
306 m_affected_row = affected_rows;
307 m_last_insert_id = last_insert_id;
308 }
309};
310
311/**
312 * @brief This is extention of Protocol_local. We support reading field
313 * metadata and field data attributes.
314 */
315class Protocol_local_v2 final : public Protocol {
316 private:
317 bool store_string(const char *str, size_t length, const CHARSET_INFO *src_cs,
318 const CHARSET_INFO *dst_cs);
319 bool store_longlong(longlong value);
320 bool store_floating_type(double value);
321 bool store_temporal(const MYSQL_TIME &time);
323
325
327
328 // Memory for following data members are allocated in above MEM_ROOT.
330
331 // TODO: HCS-9478: These are duplicate members as similar as in Result_set
332 // class. we can probably use object of Result_set here, instead.
335
338
341
342 // End of MEM_ROOT members.
343
344 // Whether we are receiving metadata or data
347
349
350 // Max rows in resultset
352
354
355 template <typename T, typename V>
356 bool allocate_type(V *value);
357
358 protected:
359 bool store_null() override;
360 bool store_tiny(longlong from, uint32) override;
361 bool store_short(longlong from, uint32) override;
362 bool store_long(longlong from, uint32) override;
363 bool store_longlong(longlong from, bool unsigned_flag, uint32) override;
364 bool store_decimal(const my_decimal *, uint, uint) override;
365 bool store_string(const char *from, size_t length,
366 const CHARSET_INFO *cs) override;
367 bool store_datetime(const MYSQL_TIME &time, uint precision) override;
368 bool store_date(const MYSQL_TIME &time) override;
369 bool store_time(const MYSQL_TIME &time, uint precision) override;
370 bool store_float(float value, uint32 decimals, uint32 zerofill) override;
371 bool store_double(double value, uint32 decimals, uint32 zerofill) override;
372 bool store_field(const Field *field) override;
373
374 enum enum_protocol_type type() const override { return PROTOCOL_LOCAL; }
375 enum enum_vio_type connection_type() const override {
376 return VIO_TYPE_LOCAL; /* purecov: inspected */
377 }
378
379 bool send_ok(uint server_status, uint statement_warn_count,
380 ulonglong affected_rows, ulonglong last_insert_id,
381 const char *message) override;
382
383 bool send_eof(uint server_status, uint statement_warn_count) override;
384 bool send_error(uint sql_errno, const char *err_msg,
385 const char *sqlstate) override;
386
388 if (!m_current_column) return 0;
389 assert(m_current_row);
391 }
392
393 public:
394 Protocol_local_v2(THD *thd, Statement_handle *execute_statement);
396
397 int read_packet() override;
398
400 return -1; /* purecov: inspected */
401 }
402 ulong get_client_capabilities() override;
403 bool has_client_capability(unsigned long client_capability) override;
404 void end_partial_result_set() override;
405 int shutdown(bool server_shutdown = false) override;
406 bool connection_alive() const override;
407 void start_row() override;
408 bool end_row() override;
409 void abort_row() override {}
410 uint get_rw_status() override;
411 bool get_compression() override;
412
413 char *get_compression_algorithm() override;
414 uint get_compression_level() override;
415
416 bool start_result_metadata(uint num_cols, uint flags,
417 const CHARSET_INFO *resultcs) override;
418 bool end_result_metadata() override;
420 const CHARSET_INFO *charset) override;
421 bool flush() override { return true; /* purecov: inspected */ }
422 bool send_parameters(List<Item_param> *, bool) override { return false; }
423 bool store_ps_status(ulong, uint, uint, ulong) override {
424 return false; /* purecov: inspected */
425 }
426
427 /**
428 * @brief Set the capacity in bytes allowed for caching results.
429 *
430 * @param capacity capacity of the result set
431 */
432 void set_result_set_capacity(size_t capacity) {
434 }
435
436 /**
437 * @brief Get the capacity in bytes allowed for caching results.
438 */
441 }
442
443 /**
444 * @brief Clear MEM_ROOT and related members.
445 *
446 */
448};
449
450#endif
Definition: field.h:577
Definition: sql_list.h:654
Definition: sql_list.h:494
This is extention of Protocol_local.
Definition: protocol_local_v2.h:315
bool allocate_type(V *value)
Definition: protocol_local_v2.cc:86
bool send_ok(uint server_status, uint statement_warn_count, ulonglong affected_rows, ulonglong last_insert_id, const char *message) override
Called for statements that don't have a result set, at statement end.
Definition: protocol_local_v2.cc:218
bool send_error(uint sql_errno, const char *err_msg, const char *sqlstate) override
Called at the end of a result set.
Definition: protocol_local_v2.cc:247
bool end_row() override
Add the current row to the result set.
Definition: protocol_local_v2.cc:314
void abort_row() override
Definition: protocol_local_v2.h:409
size_t m_column_count
Definition: protocol_local_v2.h:346
Protocol_local_v2(THD *thd, Statement_handle *execute_statement)
Definition: protocol_local_v2.cc:45
bool send_field_metadata(Send_field *field, const CHARSET_INFO *charset) override
Sends field metadata.
Definition: protocol_local_v2.cc:437
Result_set_capacity m_result_set_capacity
Definition: protocol_local_v2.h:353
bool store_long(longlong from, uint32) override
Definition: protocol_local_v2.cc:145
bool store_string(const char *str, size_t length, const CHARSET_INFO *src_cs, const CHARSET_INFO *dst_cs)
Store a string value in a result set column, optionally having converted it to character_set_results.
Definition: protocol_local_v2.cc:119
bool store_float(float value, uint32 decimals, uint32 zerofill) override
Definition: protocol_local_v2.cc:200
bool store_null() override
Add a NULL column to the current row.
Definition: protocol_local_v2.cc:75
void set_result_set_capacity(size_t capacity)
Set the capacity in bytes allowed for caching results.
Definition: protocol_local_v2.h:432
bool m_send_metadata
Definition: protocol_local_v2.h:345
value_t * m_current_column
Definition: protocol_local_v2.h:337
Column_metadata * m_metadata_row
Definition: protocol_local_v2.h:339
value_t * m_current_row
Definition: protocol_local_v2.h:336
bool store_short(longlong from, uint32) override
Definition: protocol_local_v2.cc:141
bool store_ps_status(ulong, uint, uint, ulong) override
Sends prepared statement's id and metadata to the client after prepare.
Definition: protocol_local_v2.h:423
uint get_compression_level() override
Returns compression level.
Definition: protocol_local_v2.cc:334
char * get_compression_algorithm() override
Returns compression algorithm name.
Definition: protocol_local_v2.cc:332
ulong get_client_capabilities() override
Returns the client capabilities stored on the protocol.
Definition: protocol_local_v2.cc:258
Result_set * m_result_set
Definition: protocol_local_v2.h:329
bool store_longlong(longlong value)
Definition: protocol_local_v2.cc:100
bool store_floating_type(double value)
Definition: protocol_local_v2.cc:195
void start_row() override
Called between two result set rows.
Definition: protocol_local_v2.cc:284
bool store_double(double value, uint32 decimals, uint32 zerofill) override
Definition: protocol_local_v2.cc:204
int read_packet() override
Read packet from client.
Definition: protocol_local_v2.cc:256
void add_row_to_result_set()
Definition: protocol_local_v2.cc:57
bool store_date(const MYSQL_TIME &time) override
Definition: protocol_local_v2.cc:187
bool connection_alive() const override
Checks if the protocol's connection with the client is still alive.
Definition: protocol_local_v2.cc:266
void end_partial_result_set() override
Definition: protocol_local_v2.cc:271
bool store_temporal(const MYSQL_TIME &time)
Definition: protocol_local_v2.cc:178
enum enum_protocol_type type() const override
Definition: protocol_local_v2.h:374
uint m_current_row_index
Definition: protocol_local_v2.h:351
bool send_eof(uint server_status, uint statement_warn_count) override
Send eof message to the client.
Definition: protocol_local_v2.cc:365
bool store_time(const MYSQL_TIME &time, uint precision) override
Definition: protocol_local_v2.cc:191
bool end_result_metadata() override
Signals the client that the metadata sending is done.
Definition: protocol_local_v2.cc:354
bool store_decimal(const my_decimal *, uint, uint) override
Definition: protocol_local_v2.cc:154
bool store_tiny(longlong from, uint32) override
Definition: protocol_local_v2.cc:137
List< Row< value_t > > * m_data_rows
Definition: protocol_local_v2.h:333
THD * m_thd
Definition: protocol_local_v2.h:348
Row< Column_metadata > * m_fields
Definition: protocol_local_v2.h:334
bool store_field(const Field *field) override
Definition: protocol_local_v2.cc:210
bool store_datetime(const MYSQL_TIME &time, uint precision) override
Definition: protocol_local_v2.cc:183
bool start_result_metadata(uint num_cols, uint flags, const CHARSET_INFO *resultcs) override
Prepares the server for metadata sending.
Definition: protocol_local_v2.cc:336
int get_command(COM_DATA *, enum_server_command *) override
Reads the command from the protocol and creates a command.
Definition: protocol_local_v2.h:399
MEM_ROOT m_result_set_mem_root
Definition: protocol_local_v2.h:326
size_t get_result_set_capacity()
Get the capacity in bytes allowed for caching results.
Definition: protocol_local_v2.h:439
uint get_rw_status() override
Returns the read/writing status.
Definition: protocol_local_v2.cc:328
void clear_resultset_mem_root()
Clear MEM_ROOT and related members.
Definition: protocol_local_v2.cc:522
bool send_parameters(List< Item_param > *, bool) override
Sends the OUT-parameters to the client.
Definition: protocol_local_v2.h:422
enum enum_vio_type connection_type() const override
Definition: protocol_local_v2.h:375
bool has_client_capability(unsigned long client_capability) override
Checks if the client capabilities include the one specified as parameter.
Definition: protocol_local_v2.cc:262
bool flush() override
Used for the classic protocol.
Definition: protocol_local_v2.h:421
int shutdown(bool server_shutdown=false) override
Thread is being shut down, disconnect and free resources.
Definition: protocol_local_v2.cc:274
~Protocol_local_v2() override
Definition: protocol_local_v2.h:395
Column_metadata * m_current_metadata_column
Definition: protocol_local_v2.h:340
bool get_compression() override
Returns if the protocol is compressed or not.
Definition: protocol_local_v2.cc:330
Statement_handle * m_execute_statement
Definition: protocol_local_v2.h:324
uint get_current_column_number()
Definition: protocol_local_v2.h:387
Definition: protocol.h:33
enum_protocol_type
Enum used by type() to specify the protocol type.
Definition: protocol.h:101
@ PROTOCOL_LOCAL
Definition: protocol.h:105
This class is used to limit the bytes collected in Result_set.
Definition: protocol_local_v2.h:117
void reset()
Definition: protocol_local_v2.h:142
bool has_capacity()
Definition: protocol_local_v2.h:139
void set_capacity(uint64_t cap)
Definition: protocol_local_v2.h:144
uint64_t get_capacity()
Definition: protocol_local_v2.h:146
static constexpr auto MAX_CAPACITY
Definition: protocol_local_v2.h:120
void add_bytes(uint64_t amend)
Definition: protocol_local_v2.h:132
uint64_t m_configured_capacity
Definition: protocol_local_v2.h:123
uint64_t m_current_capacity
Definition: protocol_local_v2.h:125
A result set contains the result of a query.
Definition: protocol_local_v2.h:154
Row< Column_metadata > * m_fields
Definition: protocol_local_v2.h:157
~Result_set()=default
Result_set()
Definition: protocol_local_v2.cc:31
Row< Column_metadata > * get_fields()
Get the field metadata.
Definition: protocol_local_v2.h:243
Result_set & operator=(Result_set &&)=delete
ulonglong get_num_affected_rows() const
Get the num affected row count.
Definition: protocol_local_v2.h:208
bool is_last_row()
Check if the iterator is at the last row.
Definition: protocol_local_v2.h:201
unsigned int size() const
Get number for rows in result set.
Definition: protocol_local_v2.h:236
List< Row< value_t > > * get_rows()
Get the list of rows from result set.
Definition: protocol_local_v2.h:222
List< Row< value_t > > * m_rows
Definition: protocol_local_v2.h:161
Result_set & operator=(Result_set &)=delete
Result_set(const Result_set &)=delete
Row< value_t > * get_next_row()
Get the next row.
Definition: protocol_local_v2.h:192
void update(List< Row< value_t > > *rows_arg, Row< Column_metadata > *fields, size_t column_count, ulonglong affected_rows, ulonglong last_insert_id)
Update the members of result set.
Definition: protocol_local_v2.h:299
Result_set * m_next
Definition: protocol_local_v2.h:167
ulonglong m_affected_row
Definition: protocol_local_v2.h:169
List_iterator_fast< Row< value_t > > m_row_iterator
Definition: protocol_local_v2.h:164
size_t m_column_count
Definition: protocol_local_v2.h:158
ulonglong m_last_insert_id
Definition: protocol_local_v2.h:170
bool has_next()
Check if we have more than one result set.
Definition: protocol_local_v2.h:277
Result_set * get_next()
Get the next result set object.
Definition: protocol_local_v2.h:284
size_t get_field_count() const
Get the field count in result set.
Definition: protocol_local_v2.h:250
void set_next(Result_set *ptr)
Set the current result set pointer.
Definition: protocol_local_v2.h:292
Result_set(const Result_set &&)=delete
ulonglong get_last_insert_id() const
Get the last insert id.
Definition: protocol_local_v2.h:215
A row of result or a row of metadata A row is a collection of Column values or Column metadata.
Definition: protocol_local_v2.h:92
Row(T *column_array_arg, size_t column_count_arg)
Definition: protocol_local_v2.h:107
size_t size() const
Definition: protocol_local_v2.h:105
T * m_column_array
Definition: protocol_local_v2.h:94
T * get_column(const unsigned int column_index) const
Definition: protocol_local_v2.h:101
const T & operator[](const unsigned int column_index) const
Definition: protocol_local_v2.h:98
size_t m_column_count
Definition: protocol_local_v2.h:95
T * get_column_array()
Definition: protocol_local_v2.h:110
Definition: field.h:4712
Statement_handle is similar to Ed_connection.
Definition: statement.h:81
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Class representing a warning.
Definition: warning.h:41
Warning(const uint32 level, const uint32_t code, LEX_CSTRING message)
Definition: protocol_local_v2.h:77
LEX_CSTRING m_message
Definition: protocol_local_v2.h:82
uint32_t m_level
Definition: protocol_local_v2.h:80
uint32_t m_code
Definition: protocol_local_v2.h:81
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:96
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
enum_field_types
Column types for MySQL Note: Keep include/mysql/components/services/bits/stored_program_bits....
Definition: field_types.h:55
void my_error(int nr, myf MyFlags,...)
Fill in and print a previously registered error message.
Definition: my_error.cc:216
static int flags[50]
Definition: hp_test1.cc:40
struct MYSQL_LEX_CSTRING LEX_CSTRING
Definition: lex_string.h:42
enum_server_command
A list of all MySQL protocol commands.
Definition: my_command.h:48
It is interface module to fixed precision decimals library.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
long long int longlong
Definition: my_inttypes.h:55
#define MYF(v)
Definition: my_inttypes.h:97
uint32_t uint32
Definition: my_inttypes.h:67
Common header for many mysys elements.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1105
constexpr value_type zerofill
Definition: classic_protocol_constants.h:274
const std::string charset("charset")
Definition: commit_order_queue.h:34
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
std::variant< std::monostate, int64_t *, uint64_t *, double *, MYSQL_TIME *, LEX_CSTRING, decimal * > value_t
A type to store the value of a Column which can be one of all the types that are supported by the Pro...
Definition: protocol_local_v2.h:56
Definition: m_ctype.h:421
The metadata of a Column Need to keep in-sync with Send_field class.
Definition: protocol_local_v2.h:63
uint flags
Definition: protocol_local_v2.h:68
const char * original_table_name
Definition: protocol_local_v2.h:65
uint charsetnr
Definition: protocol_local_v2.h:68
const char * database_name
Definition: protocol_local_v2.h:64
ulong length
Definition: protocol_local_v2.h:67
const char * table_name
Definition: protocol_local_v2.h:65
enum_field_types type
Definition: protocol_local_v2.h:69
uint decimals
Definition: protocol_local_v2.h:68
const char * original_col_name
Definition: protocol_local_v2.h:66
const char * column_name
Definition: protocol_local_v2.h:66
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
void Clear()
Deallocate all the RAM used.
Definition: my_alloc.cc:172
void * Alloc(size_t length)
Allocate memory.
Definition: my_alloc.h:145
Definition: mysql_lex_string.h:40
Definition: mysql_time.h:82
A structure to store a decimal value together with its precision and number of decimals TODO: HCS-100...
Definition: protocol_local_v2.h:43
uint dec
Definition: protocol_local_v2.h:46
uint prec
Definition: protocol_local_v2.h:45
my_decimal decimal
Definition: protocol_local_v2.h:44
Definition: com_data.h:104
enum_vio_type
Definition: violite.h:79
@ VIO_TYPE_LOCAL
Used internally by the prepared statements.
Definition: violite.h:107