MySQL 9.1.0
Source Code Documentation
column_impl.h
Go to the documentation of this file.
1/* Copyright (c) 2014, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef DD__COLUMN_IMPL_INCLUDED
25#define DD__COLUMN_IMPL_INCLUDED
26
27#include <assert.h>
28#include <stddef.h>
29#include <sys/types.h>
30#include <memory> // std::unique_ptr
31#include <new>
32#include <optional>
33
34#include "sql/dd/impl/properties_impl.h" // Properties_impl
35#include "sql/dd/impl/types/entity_object_impl.h" // dd::Entity_object_impl
37#include "sql/dd/object_id.h"
38#include "sql/dd/properties.h"
39#include "sql/dd/sdi_fwd.h"
40#include "sql/dd/string_type.h"
41#include "sql/dd/types/column.h" // dd::Column
42#include "sql/dd/types/column_type_element.h" // IWYU pragma: keep
43#include "sql/gis/srid.h" // gis::srid_t
44#include "sql/strfunc.h"
45
46namespace dd {
47
48///////////////////////////////////////////////////////////////////////////
49
50class Abstract_table;
51class Abstract_table_impl;
52class Object_table;
53class Open_dictionary_tables_ctx;
54class Properties;
55class Raw_record;
56class Sdi_rcontext;
57class Sdi_wcontext;
58class Weak_object;
59
60///////////////////////////////////////////////////////////////////////////
61
62class Column_impl : public Entity_object_impl, public Column {
63 public:
65
67
68 Column_impl(const Column_impl &src, Abstract_table_impl *parent);
69
70 ~Column_impl() override;
71
72 public:
73 const Object_table &object_table() const override;
74
76
77 bool validate() const override;
78
80
82
83 bool drop_children(Open_dictionary_tables_ctx *otx) const override;
84
85 bool restore_attributes(const Raw_record &r) override;
86
87 bool store_attributes(Raw_record *r) override;
88
89 void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const override;
90
91 bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val) override;
92
93 void debug_print(String_type &outb) const override;
94
97 }
98
99 public:
100 /////////////////////////////////////////////////////////////////////////
101 // table.
102 /////////////////////////////////////////////////////////////////////////
103
104 const Abstract_table &table() const override;
105
106 Abstract_table &table() override;
107
108 /////////////////////////////////////////////////////////////////////////
109 // type.
110 /////////////////////////////////////////////////////////////////////////
111
112 enum_column_types type() const override { return m_type; }
113
115
116 /////////////////////////////////////////////////////////////////////////
117 // collation.
118 /////////////////////////////////////////////////////////////////////////
119
120 Object_id collation_id() const override { return m_collation_id; }
121
124 }
125
128 }
129
130 bool is_explicit_collation() const override {
132 }
133
134 /////////////////////////////////////////////////////////////////////////
135 // nullable.
136 /////////////////////////////////////////////////////////////////////////
137
138 bool is_nullable() const override { return m_is_nullable; }
139
140 void set_nullable(bool nullable) override { m_is_nullable = nullable; }
141
142 /////////////////////////////////////////////////////////////////////////
143 // is_zerofill.
144 /////////////////////////////////////////////////////////////////////////
145
146 bool is_zerofill() const override { return m_is_zerofill; }
147
148 void set_zerofill(bool zerofill) override { m_is_zerofill = zerofill; }
149
150 /////////////////////////////////////////////////////////////////////////
151 // is_unsigned.
152 /////////////////////////////////////////////////////////////////////////
153
154 bool is_unsigned() const override { return m_is_unsigned; }
155
156 void set_unsigned(bool unsigned_flag) override {
157 m_is_unsigned = unsigned_flag;
158 }
159
160 /////////////////////////////////////////////////////////////////////////
161 // auto increment.
162 /////////////////////////////////////////////////////////////////////////
163
164 bool is_auto_increment() const override { return m_is_auto_increment; }
165
166 void set_auto_increment(bool auto_increment) override {
168 }
169
170 /////////////////////////////////////////////////////////////////////////
171 // ordinal_position.
172 /////////////////////////////////////////////////////////////////////////
173
174 uint ordinal_position() const override { return m_ordinal_position; }
175
176 /////////////////////////////////////////////////////////////////////////
177 // char_length.
178 /////////////////////////////////////////////////////////////////////////
179
180 size_t char_length() const override { return m_char_length; }
181
182 void set_char_length(size_t char_length) override {
184 }
185
186 /////////////////////////////////////////////////////////////////////////
187 // numeric_precision.
188 /////////////////////////////////////////////////////////////////////////
189
190 uint numeric_precision() const override { return m_numeric_precision; }
191
194 }
195
196 /////////////////////////////////////////////////////////////////////////
197 // numeric_scale.
198 /////////////////////////////////////////////////////////////////////////
199
200 uint numeric_scale() const override { return m_numeric_scale; }
201
202 void set_numeric_scale(uint numeric_scale) override {
203 m_numeric_scale_null = false;
205 }
206
207 void set_numeric_scale_null(bool is_null) override {
208 m_numeric_scale_null = is_null;
209 }
210
211 bool is_numeric_scale_null() const override { return m_numeric_scale_null; }
212
213 /////////////////////////////////////////////////////////////////////////
214 // datetime_precision.
215 /////////////////////////////////////////////////////////////////////////
216
217 uint datetime_precision() const override { return m_datetime_precision; }
218
222 }
223
224 void set_datetime_precision_null(bool is_null) override {
226 }
227
228 bool is_datetime_precision_null() const override {
230 }
231
232 /////////////////////////////////////////////////////////////////////////
233 // has_no_default.
234 /////////////////////////////////////////////////////////////////////////
235
236 bool has_no_default() const override { return m_has_no_default; }
237
238 void set_has_no_default(bool has_no_default) override {
240 }
241
242 /////////////////////////////////////////////////////////////////////////
243 // default_value (binary).
244 /////////////////////////////////////////////////////////////////////////
245
246 const String_type &default_value() const override { return m_default_value; }
247
249 m_default_value_null = false;
251 }
252
253 void set_default_value_null(bool is_null) override {
254 m_default_value_null = is_null;
255 }
256
257 bool is_default_value_null() const override { return m_default_value_null; }
258
259 /////////////////////////////////////////////////////////////////////////
260 // default_value_utf8
261 /////////////////////////////////////////////////////////////////////////
262
263 const String_type &default_value_utf8() const override {
265 }
266
270 }
271
272 void set_default_value_utf8_null(bool is_null) override {
274 }
275
276 /* purecov: begin deadcode */
277 bool is_default_value_utf8_null() const override {
279 }
280 /* purecov: end */
281
282 /////////////////////////////////////////////////////////////////////////
283 // is virtual ?
284 /////////////////////////////////////////////////////////////////////////
285
286 bool is_virtual() const override { return m_is_virtual; }
287
289
290 /////////////////////////////////////////////////////////////////////////
291 // generation_expression (binary).
292 /////////////////////////////////////////////////////////////////////////
293
294 const String_type &generation_expression() const override {
296 }
297
299 const String_type &generation_expression) override {
301 }
302
303 bool is_generation_expression_null() const override {
304 return m_generation_expression.empty();
305 }
306
307 /////////////////////////////////////////////////////////////////////////
308 // generation_expression_utf8
309 /////////////////////////////////////////////////////////////////////////
310
311 const String_type &generation_expression_utf8() const override {
313 }
314
316 const String_type &generation_expression_utf8) override {
318 }
319
321 return m_generation_expression_utf8.empty();
322 }
323
324 /////////////////////////////////////////////////////////////////////////
325 // default_option.
326 /////////////////////////////////////////////////////////////////////////
327
328 const String_type &default_option() const override {
329 return m_default_option;
330 }
331
334 }
335
336 /////////////////////////////////////////////////////////////////////////
337 // update_option.
338 /////////////////////////////////////////////////////////////////////////
339
340 const String_type &update_option() const override { return m_update_option; }
341
344 }
345
346 /////////////////////////////////////////////////////////////////////////
347 // Comment.
348 /////////////////////////////////////////////////////////////////////////
349
350 const String_type &comment() const override { return m_comment; }
351
352 void set_comment(const String_type &comment) override { m_comment = comment; }
353
354 /////////////////////////////////////////////////////////////////////////
355 // Hidden.
356 /////////////////////////////////////////////////////////////////////////
357
358 enum_hidden_type hidden() const override { return m_hidden; }
359
361
362 /////////////////////////////////////////////////////////////////////////
363 // Options.
364 /////////////////////////////////////////////////////////////////////////
365
366 const Properties &options() const override { return m_options; }
367
368 Properties &options() override { return m_options; }
369
370 bool set_options(const String_type &options_raw) override {
371 return m_options.insert_values(options_raw);
372 }
373
374 /////////////////////////////////////////////////////////////////////////
375 // se_private_data.
376 /////////////////////////////////////////////////////////////////////////
377
378 const Properties &se_private_data() const override {
379 return m_se_private_data;
380 }
381
383
386 }
387
388 bool set_se_private_data(const String_type &se_private_data_raw) override {
389 return m_se_private_data.insert_values(se_private_data_raw);
390 }
391
392 LEX_CSTRING engine_attribute() const override {
394 }
395
397 m_engine_attribute.assign(a.str, a.length);
398 }
399
402 }
403
406 }
407
408 /////////////////////////////////////////////////////////////////////////
409 // Column key type.
410 /////////////////////////////////////////////////////////////////////////
411
414 }
415
416 enum_column_key column_key() const override { return m_column_key; }
417
418 /////////////////////////////////////////////////////////////////////////
419 // Spatial reference system ID
420 /////////////////////////////////////////////////////////////////////////
421 void set_srs_id(std::optional<gis::srid_t> srs_id) override {
423 }
424
425 std::optional<gis::srid_t> srs_id() const override { return m_srs_id; }
426
427 /////////////////////////////////////////////////////////////////////////
428 // Elements.
429 /////////////////////////////////////////////////////////////////////////
430
432
433 const Column_type_element_collection &elements() const override {
434 assert(type() == enum_column_types::ENUM ||
436 return m_elements;
437 }
438
439 /////////////////////////////////////////////////////////////////////////
440 // Column display type
441 /////////////////////////////////////////////////////////////////////////
442
443 const String_type &column_type_utf8() const override {
444 return m_column_type_utf8;
445 }
446
449 }
450
451 size_t elements_count() const override { return m_elements.size(); }
452
453 // Fix "inherits ... via dominance" warnings
455 const Entity_object_impl *impl() const override {
457 }
458 Object_id id() const override { return Entity_object_impl::id(); }
459 bool is_persistent() const override {
461 }
462 const String_type &name() const override {
464 }
465 void set_name(const String_type &name) override {
467 }
468
469 bool is_array() const override {
470 // Is this a typed array field?
471 if (options().exists("is_array")) {
472 bool is_array;
473 if (!options().get("is_array", &is_array)) return is_array;
474 }
475
476 return false;
477 }
478
479 public:
481 return new (std::nothrow) Column_impl(table);
482 }
483
484 static Column_impl *clone(const Column_impl &other,
486 return new (std::nothrow) Column_impl(other, table);
487 }
488
490 return new Column_impl(*this, parent);
491 }
492
493 private:
494 // Fields.
495
497
504
512
514
519
523
526
529
530 // Se-specific json attributes
533
534 // References to tightly-coupled objects.
535
537
539
541
542 // References to loosely-coupled objects.
543
546
548
549 std::optional<gis::srid_t> m_srs_id;
550};
551
552///////////////////////////////////////////////////////////////////////////
553
554} // namespace dd
555
556#endif // DD__COLUMN_IMPL_INCLUDED
Definition: abstract_table_impl.h:58
Abstract base class for tables and views.
Definition: abstract_table.h:69
Definition: collection.h:44
size_t size() const
Definition: collection.h:229
Definition: column_impl.h:62
void set_generation_expression(const String_type &generation_expression) override
Definition: column_impl.h:298
std::optional< gis::srid_t > srs_id() const override
Definition: column_impl.h:425
bool is_numeric_scale_null() const override
Definition: column_impl.h:211
size_t elements_count() const override
Definition: column_impl.h:451
void set_default_option(const String_type &default_option) override
Definition: column_impl.h:332
static Column_impl * restore_item(Abstract_table_impl *table)
Definition: column_impl.h:480
Abstract_table_impl * m_table
Definition: column_impl.h:536
enum_column_key column_key() const override
Definition: column_impl.h:416
bool set_options(const String_type &options_raw) override
Definition: column_impl.h:370
bool is_default_value_utf8_null() const override
Definition: column_impl.h:277
const Properties & se_private_data() const override
Definition: column_impl.h:378
const String_type & column_type_utf8() const override
Definition: column_impl.h:443
bool is_unsigned() const override
Definition: column_impl.h:154
bool is_persistent() const override
Is dictionary object persistent in dictionary tables ?
Definition: column_impl.h:459
void set_column_type_utf8(const String_type &column_type_utf8) override
Definition: column_impl.h:447
size_t char_length() const override
Definition: column_impl.h:180
String_type m_update_option
Definition: column_impl.h:521
void set_has_no_default(bool has_no_default) override
Definition: column_impl.h:238
bool m_is_unsigned
Definition: column_impl.h:500
bool set_se_private_data(const String_type &se_private_data_raw) override
Definition: column_impl.h:388
void set_generation_expression_utf8(const String_type &generation_expression_utf8) override
Definition: column_impl.h:315
const String_type & generation_expression() const override
Definition: column_impl.h:294
bool m_is_nullable
Definition: column_impl.h:498
bool m_is_zerofill
Definition: column_impl.h:499
std::optional< gis::srid_t > m_srs_id
Definition: column_impl.h:549
Column_type_element * add_element() override
Definition: column_impl.cc:504
void set_name(const String_type &name) override
Definition: column_impl.h:465
const Properties & options() const override
Definition: column_impl.h:366
const String_type & name() const override
Definition: column_impl.h:462
bool is_datetime_precision_null() const override
Definition: column_impl.h:228
bool is_generation_expression_utf8_null() const override
Definition: column_impl.h:320
uint m_numeric_scale
Definition: column_impl.h:508
bool is_explicit_collation() const override
Definition: column_impl.h:130
void set_datetime_precision_null(bool is_null) override
Definition: column_impl.h:224
Properties & options() override
Definition: column_impl.h:368
bool is_auto_increment() const override
Definition: column_impl.h:164
bool validate() const override
Definition: column_impl.cc:137
const Entity_object_impl * impl() const override
Definition: column_impl.h:455
String_type m_default_value_utf8
Definition: column_impl.h:518
Object_id id() const override
The unique dictionary object id.
Definition: column_impl.h:458
enum_column_types m_type
Definition: column_impl.h:496
uint numeric_scale() const override
Definition: column_impl.h:200
Entity_object_impl * impl() override
Definition: column_impl.h:454
String_type m_column_type_utf8
Definition: column_impl.h:540
void set_hidden(enum_hidden_type hidden) override
Definition: column_impl.h:360
void set_default_value_utf8(const String_type &default_value_utf8) override
Definition: column_impl.h:267
bool store_children(Open_dictionary_tables_ctx *otx) override
Definition: column_impl.cc:178
void set_numeric_scale(uint numeric_scale) override
Definition: column_impl.h:202
String_type m_secondary_engine_attribute
Definition: column_impl.h:532
void set_srs_id(std::optional< gis::srid_t > srs_id) override
Definition: column_impl.h:421
void set_engine_attribute(LEX_CSTRING a) override
Definition: column_impl.h:396
bool m_numeric_scale_null
Definition: column_impl.h:509
Properties & se_private_data() override
Definition: column_impl.h:382
bool store_attributes(Raw_record *r) override
Definition: column_impl.cc:260
String_type m_generation_expression
Definition: column_impl.h:524
Column_impl()
Definition: column_impl.cc:75
Object_id collation_id() const override
Definition: column_impl.h:120
const String_type & default_option() const override
Definition: column_impl.h:328
Properties_impl m_se_private_data
Definition: column_impl.h:528
void set_numeric_precision(uint numeric_precision) override
Definition: column_impl.h:192
void set_type(enum_column_types type) override
Definition: column_impl.h:114
void set_comment(const String_type &comment) override
Definition: column_impl.h:352
uint numeric_precision() const override
Definition: column_impl.h:190
bool is_zerofill() const override
Definition: column_impl.h:146
uint ordinal_position() const override
Definition: column_impl.h:174
Properties_impl m_options
Definition: column_impl.h:527
bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val) override
Re-establishes the state of *this by reading sdi information from the rapidjson DOM subobject provide...
Definition: column_impl.cc:387
bool m_is_explicit_collation
Definition: column_impl.h:545
void set_column_key(enum_column_key column_key) override
Definition: column_impl.h:412
void set_default_value_null(bool is_null) override
Definition: column_impl.h:253
const String_type & update_option() const override
Definition: column_impl.h:340
enum_column_key m_column_key
Definition: column_impl.h:547
void set_auto_increment(bool auto_increment) override
Definition: column_impl.h:166
uint m_datetime_precision
Definition: column_impl.h:510
Column_impl * clone(Abstract_table_impl *parent) const
Definition: column_impl.h:489
bool m_has_no_default
Definition: column_impl.h:513
bool m_is_virtual
Definition: column_impl.h:502
LEX_CSTRING secondary_engine_attribute() const override
Definition: column_impl.h:400
bool drop_children(Open_dictionary_tables_ctx *otx) const override
Definition: column_impl.cc:184
void set_unsigned(bool unsigned_flag) override
Definition: column_impl.h:156
const String_type & default_value_utf8() const override
Definition: column_impl.h:263
void set_update_option(const String_type &update_option) override
Definition: column_impl.h:342
String_type m_default_value
Definition: column_impl.h:516
const String_type & comment() const override
Definition: column_impl.h:350
LEX_CSTRING engine_attribute() const override
Definition: column_impl.h:392
void set_zerofill(bool zerofill) override
Definition: column_impl.h:148
bool restore_attributes(const Raw_record &r) override
Definition: column_impl.cc:195
uint m_datetime_precision_null
Definition: column_impl.h:511
String_type m_generation_expression_utf8
Definition: column_impl.h:525
bool m_default_value_utf8_null
Definition: column_impl.h:517
const Column_type_element_collection & elements() const override
Definition: column_impl.h:433
bool has_no_default() const override
Definition: column_impl.h:236
size_t m_char_length
Definition: column_impl.h:506
void set_ordinal_position(uint ordinal_position)
Definition: column_impl.h:95
void set_secondary_engine_attribute(LEX_CSTRING a) override
Definition: column_impl.h:404
uint m_numeric_precision
Definition: column_impl.h:507
bool is_nullable() const override
Definition: column_impl.h:138
void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const override
Converts *this into json.
Definition: column_impl.cc:335
void set_nullable(bool nullable) override
Definition: column_impl.h:140
Column_type_element_collection m_elements
Definition: column_impl.h:538
String_type m_comment
Definition: column_impl.h:522
const String_type & default_value() const override
Definition: column_impl.h:246
enum_hidden_type hidden() const override
Definition: column_impl.h:358
void set_numeric_scale_null(bool is_null) override
Definition: column_impl.h:207
void set_is_explicit_collation(bool is_explicit_collation) override
Definition: column_impl.h:126
bool is_virtual() const override
Definition: column_impl.h:286
void set_default_value_utf8_null(bool is_null) override
Definition: column_impl.h:272
bool m_is_auto_increment
Definition: column_impl.h:501
static Column_impl * clone(const Column_impl &other, Abstract_table_impl *table)
Definition: column_impl.h:484
const Abstract_table & table() const override
Definition: column_impl.cc:131
static void register_tables(Open_dictionary_tables_ctx *otx)
Definition: column_impl.cc:564
String_type m_engine_attribute
Definition: column_impl.h:531
void set_collation_id(Object_id collation_id) override
Definition: column_impl.h:122
void set_virtual(bool is_virtual) override
Definition: column_impl.h:288
bool restore_children(Open_dictionary_tables_ctx *otx) override
Definition: column_impl.cc:163
enum_hidden_type m_hidden
Definition: column_impl.h:503
void set_datetime_precision(uint datetime_precision) override
Definition: column_impl.h:219
bool set_se_private_data(const Properties &se_private_data) override
Definition: column_impl.h:384
const String_type & generation_expression_utf8() const override
Definition: column_impl.h:311
~Column_impl() override
uint datetime_precision() const override
Definition: column_impl.h:217
bool is_generation_expression_null() const override
Definition: column_impl.h:303
String_type m_default_option
Definition: column_impl.h:520
uint m_ordinal_position
Definition: column_impl.h:505
bool is_array() const override
Definition: column_impl.h:469
const Object_table & object_table() const override
Definition: column_impl.cc:558
void debug_print(String_type &outb) const override
Definition: column_impl.cc:443
bool m_default_value_null
Definition: column_impl.h:515
enum_column_types type() const override
Definition: column_impl.h:112
void set_char_length(size_t char_length) override
Definition: column_impl.h:182
void set_default_value(const String_type &default_value) override
Definition: column_impl.h:248
bool is_default_value_null() const override
Definition: column_impl.h:257
Object_id m_collation_id
Definition: column_impl.h:544
Definition: column_type_element.h:44
Definition: column.h:88
enum_hidden_type
Definition: column.h:96
enum_column_key
Definition: column.h:94
Definition: entity_object_impl.h:44
void set_name(const String_type &name) override
Definition: entity_object_impl.h:62
Object_id id() const override
The unique dictionary object id.
Definition: entity_object_impl.h:49
const String_type & name() const override
Definition: entity_object_impl.h:60
Entity_object_impl * impl() override
Definition: entity_object_impl.h:68
bool is_persistent() const override
Is dictionary object persistent in dictionary tables ?
Definition: entity_object_impl.h:57
This class represents all data dictionary table like mysql.tables, mysql.columns and more.
Definition: object_table.h:72
Auxiliary class for opening dictionary tables.
Definition: transaction_impl.h:76
The Properties_impl class implements the Properties interface.
Definition: properties_impl.h:77
bool insert_values(const Properties &properties) override
Insert key/value pairs from a different property object.
Definition: properties_impl.cc:104
The Properties class defines an interface for storing key=value pairs, where both key and value may b...
Definition: properties.h:74
Definition: raw_record.h:46
Opaque context which keeps reusable resoureces needed during deserialization.
Definition: sdi.cc:231
Opaque context which keeps reusable resources needed during serialization.
Definition: sdi.cc:129
constexpr value_type zerofill
Definition: classic_protocol_constants.h:274
constexpr value_type auto_increment
Definition: classic_protocol_constants.h:277
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:43
RJ_Writer Sdi_writer
Alias for the rapidjson Writer type to use in serialization.
Definition: sdi_fwd.h:64
unsigned long long Object_id
Definition: object_id.h:31
enum_column_types
Definition: column.h:53
rapidjson::GenericValue< RJ_Encoding, RJ_Allocator > RJ_Value
Definition: sdi_fwd.h:49
Char_string_template< String_type_allocator > String_type
Definition: string_type.h:51
static mysql_service_status_t get(THD **thd) noexcept
Definition: mysql_current_thread_reader_all_empty.cc:31
static int exists(node_address *name, node_list const *nodes, u_int with_uid)
Definition: node_list.cc:106
const mysql_service_registry_t * r
Definition: pfs_example_plugin_employee.cc:86
This header provides Rapidjson Type Aliases.
MYSQL_LEX_CSTRING lex_cstring_handle(const STDSTRINGLIKE_TYPE &s)
Return a LEX_CSTRING handle to a std::string like (meaning something which has the c_str() and length...
Definition: strfunc.h:77
Definition: mysql_lex_string.h:40
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42