MySQL 8.4.0
Source Code Documentation
column.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_INCLUDED
25#define DD__COLUMN_INCLUDED
26
27#include <optional>
28
29#include "lex_string.h" // LEX_CSTRING
30#include "my_inttypes.h"
31#include "sql/dd/collection.h" // dd::Collection
32#include "sql/dd/sdi_fwd.h" // RJ_Document
33#include "sql/dd/types/entity_object.h" // dd::Entity_object
34
35#include "sql/gis/srid.h"
36
37namespace dd {
38
39///////////////////////////////////////////////////////////////////////////
40
41class Abstract_table;
42class Column_impl;
43class Column_type_element;
44class Properties;
45
46namespace tables {
47class Columns;
48}
49
50///////////////////////////////////////////////////////////////////////////
51
52// Redefined enum_field_types here. We can remove some old types ?
54 DECIMAL = 1, // This is 1 > than MYSQL_TYPE_DECIMAL
55 TINY,
56 SHORT,
57 LONG,
58 FLOAT,
59 DOUBLE,
63 INT24,
64 DATE,
65 TIME,
67 YEAR,
68 NEWDATE,
69 VARCHAR,
70 BIT,
73 TIME2,
75 ENUM,
76 SET,
80 BLOB,
82 STRING,
84 JSON
85};
86
87class Column : virtual public Entity_object {
88 public:
92
94
95 enum class enum_hidden_type {
96 /// The column is visible (a normal column)
97 HT_VISIBLE = 1,
98 /// The column is completely invisible to the server
99 HT_HIDDEN_SE = 2,
100 /// The column is visible to the server, but hidden from the user.
101 /// This is used for i.e. implementing functional indexes.
102 HT_HIDDEN_SQL = 3,
103 /// User table column marked as INVISIBLE by using the column visibility
104 /// attribute. Column is hidden from the user unless it is explicitly
105 /// referenced in the statement. Column is visible to the server.
107 };
108
109 ~Column() override = default;
110
111 /////////////////////////////////////////////////////////////////////////
112 // Table.
113 /////////////////////////////////////////////////////////////////////////
114
115 virtual const Abstract_table &table() const = 0;
116
117 virtual Abstract_table &table() = 0;
118
119 /////////////////////////////////////////////////////////////////////////
120 // collation.
121 /////////////////////////////////////////////////////////////////////////
122
123 virtual Object_id collation_id() const = 0;
125
127 virtual bool is_explicit_collation() const = 0;
128
129 /////////////////////////////////////////////////////////////////////////
130 // type.
131 /////////////////////////////////////////////////////////////////////////
132
133 virtual enum_column_types type() const = 0;
134 virtual void set_type(enum_column_types type) = 0;
135
136 /////////////////////////////////////////////////////////////////////////
137 // nullable.
138 /////////////////////////////////////////////////////////////////////////
139
140 virtual bool is_nullable() const = 0;
141 virtual void set_nullable(bool nullable) = 0;
142
143 /////////////////////////////////////////////////////////////////////////
144 // is_zerofill.
145 /////////////////////////////////////////////////////////////////////////
146
147 virtual bool is_zerofill() const = 0;
148 virtual void set_zerofill(bool zerofill) = 0;
149
150 /////////////////////////////////////////////////////////////////////////
151 // is_unsigned.
152 /////////////////////////////////////////////////////////////////////////
153
154 virtual bool is_unsigned() const = 0;
155 virtual void set_unsigned(bool unsigned_flag) = 0;
156
157 /////////////////////////////////////////////////////////////////////////
158 // auto increment.
159 /////////////////////////////////////////////////////////////////////////
160
161 virtual bool is_auto_increment() const = 0;
162 virtual void set_auto_increment(bool auto_increment) = 0;
163
164 /////////////////////////////////////////////////////////////////////////
165 // ordinal_position
166 /////////////////////////////////////////////////////////////////////////
167
168 virtual uint ordinal_position() const = 0;
169
170 /////////////////////////////////////////////////////////////////////////
171 // char_length.
172 /////////////////////////////////////////////////////////////////////////
173
174 virtual size_t char_length() const = 0;
175 virtual void set_char_length(size_t char_length) = 0;
176
177 /////////////////////////////////////////////////////////////////////////
178 // numeric_precision.
179 /////////////////////////////////////////////////////////////////////////
180
181 virtual uint numeric_precision() const = 0;
183
184 /////////////////////////////////////////////////////////////////////////
185 // srid
186 /////////////////////////////////////////////////////////////////////////
187
188 virtual void set_srs_id(std::optional<gis::srid_t> srs_id) = 0;
189 virtual std::optional<gis::srid_t> srs_id() const = 0;
190
191 /////////////////////////////////////////////////////////////////////////
192 // numeric_scale.
193 /////////////////////////////////////////////////////////////////////////
194
195 virtual uint numeric_scale() const = 0;
196 virtual void set_numeric_scale(uint numeric_scale) = 0;
197 virtual void set_numeric_scale_null(bool is_null) = 0;
198 virtual bool is_numeric_scale_null() const = 0;
199
200 /////////////////////////////////////////////////////////////////////////
201 // datetime_precision.
202 /////////////////////////////////////////////////////////////////////////
203
204 virtual uint datetime_precision() const = 0;
206 virtual void set_datetime_precision_null(bool is_null) = 0;
207 virtual bool is_datetime_precision_null() const = 0;
208
209 /////////////////////////////////////////////////////////////////////////
210 // has_no_default.
211 /////////////////////////////////////////////////////////////////////////
212
213 virtual bool has_no_default() const = 0;
214 virtual void set_has_no_default(bool has_explicit_default) = 0;
215
216 /////////////////////////////////////////////////////////////////////////
217 // default_value (binary).
218 /////////////////////////////////////////////////////////////////////////
219
220 virtual const String_type &default_value() const = 0;
222 virtual void set_default_value_null(bool is_null) = 0;
223 virtual bool is_default_value_null() const = 0;
224
225 /////////////////////////////////////////////////////////////////////////
226 // default_value_utf8
227 /////////////////////////////////////////////////////////////////////////
228
229 virtual const String_type &default_value_utf8() const = 0;
232 virtual void set_default_value_utf8_null(bool is_null) = 0;
233 virtual bool is_default_value_utf8_null() const = 0;
234
235 /////////////////////////////////////////////////////////////////////////
236 // is virtual ?
237 /////////////////////////////////////////////////////////////////////////
238
239 virtual bool is_virtual() const = 0;
240
241 virtual void set_virtual(bool is_virtual) = 0;
242
243 /////////////////////////////////////////////////////////////////////////
244 // generation_expression (binary).
245 /////////////////////////////////////////////////////////////////////////
246
247 virtual const String_type &generation_expression() const = 0;
248
251
252 virtual bool is_generation_expression_null() const = 0;
253
254 /////////////////////////////////////////////////////////////////////////
255 // generation_expression_utf8
256 /////////////////////////////////////////////////////////////////////////
257
258 virtual const String_type &generation_expression_utf8() const = 0;
259
262
263 virtual bool is_generation_expression_utf8_null() const = 0;
264
265 /////////////////////////////////////////////////////////////////////////
266 // default_option.
267 /////////////////////////////////////////////////////////////////////////
268
269 virtual const String_type &default_option() const = 0;
271
272 /////////////////////////////////////////////////////////////////////////
273 // update_option.
274 /////////////////////////////////////////////////////////////////////////
275
276 virtual const String_type &update_option() const = 0;
278
279 /////////////////////////////////////////////////////////////////////////
280 // Comment.
281 /////////////////////////////////////////////////////////////////////////
282
283 virtual const String_type &comment() const = 0;
284 virtual void set_comment(const String_type &comment) = 0;
285
286 /////////////////////////////////////////////////////////////////////////
287 // hidden.
288 /////////////////////////////////////////////////////////////////////////
289
290 virtual enum_hidden_type hidden() const = 0;
292 bool is_se_hidden() const {
294 }
295
296 /////////////////////////////////////////////////////////////////////////
297 // Options.
298 /////////////////////////////////////////////////////////////////////////
299
300 virtual const Properties &options() const = 0;
301
302 virtual Properties &options() = 0;
303 virtual bool set_options(const String_type &options_raw) = 0;
304
305 /////////////////////////////////////////////////////////////////////////
306 // se_private_data.
307 /////////////////////////////////////////////////////////////////////////
308
309 virtual const Properties &se_private_data() const = 0;
310
313 virtual bool set_se_private_data(const String_type &se_private_data_raw) = 0;
314
315 /////////////////////////////////////////////////////////////////////////
316 // SE-specific json attributes
317 /////////////////////////////////////////////////////////////////////////
318
319 virtual LEX_CSTRING engine_attribute() const = 0;
320 virtual void set_engine_attribute(LEX_CSTRING attrs) = 0;
321
324
325 /////////////////////////////////////////////////////////////////////////
326 // Column key type.
327 /////////////////////////////////////////////////////////////////////////
328
330
331 virtual enum_column_key column_key() const = 0;
332
333 /////////////////////////////////////////////////////////////////////////
334 // Column display type.
335 /////////////////////////////////////////////////////////////////////////
336
337 virtual const String_type &column_type_utf8() const = 0;
338
340
341 /////////////////////////////////////////////////////////////////////////
342 // Elements.
343 /////////////////////////////////////////////////////////////////////////
344
346
347 virtual const Column_type_element_collection &elements() const = 0;
348
349 virtual size_t elements_count() const = 0;
350
351 /**
352 Converts *this into json.
353
354 Converts all member variables that are to be included in the sdi
355 into json by transforming them appropriately and passing them to
356 the rapidjson writer provided.
357
358 @param wctx opaque context for data needed by serialization
359 @param w rapidjson writer which will perform conversion to json
360
361 */
362
363 virtual void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const = 0;
364
365 /**
366 Re-establishes the state of *this by reading sdi information from
367 the rapidjson DOM subobject provided.
368
369 Cross-references encountered within this object are tracked in
370 sdictx, so that they can be updated when the entire object graph
371 has been established.
372
373 @param rctx stores book-keeping information for the
374 deserialization process
375 @param val subobject of rapidjson DOM containing json
376 representation of this object
377 */
378
379 virtual bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val) = 0;
380
381 virtual bool is_array() const = 0;
382};
383
384///////////////////////////////////////////////////////////////////////////
385
386} // namespace dd
387
388#endif // DD__COLUMN_INCLUDED
Abstract base class for tables and views.
Definition: abstract_table.h:69
Definition: collection.h:44
Definition: column_impl.h:62
Definition: column_type_element.h:44
Definition: column.h:87
virtual void set_datetime_precision_null(bool is_null)=0
virtual void set_generation_expression_utf8(const String_type &generation_expression_utf8)=0
virtual void set_default_value_utf8_null(bool is_null)=0
virtual void set_zerofill(bool zerofill)=0
virtual bool is_default_value_null() const =0
virtual const Properties & options() const =0
virtual enum_column_key column_key() const =0
virtual void set_column_type_utf8(const String_type &column_type_utf8)=0
virtual void set_auto_increment(bool auto_increment)=0
virtual Abstract_table & table()=0
virtual LEX_CSTRING engine_attribute() const =0
virtual void set_engine_attribute(LEX_CSTRING attrs)=0
virtual bool set_options(const String_type &options_raw)=0
virtual void set_char_length(size_t char_length)=0
virtual void set_numeric_scale(uint numeric_scale)=0
virtual void set_srs_id(std::optional< gis::srid_t > srs_id)=0
enum_hidden_type
Definition: column.h:95
@ HT_HIDDEN_SQL
The column is visible to the server, but hidden from the user.
@ HT_HIDDEN_SE
The column is completely invisible to the server.
@ HT_VISIBLE
The column is visible (a normal column)
@ HT_HIDDEN_USER
User table column marked as INVISIBLE by using the column visibility attribute.
virtual void set_numeric_scale_null(bool is_null)=0
virtual void set_has_no_default(bool has_explicit_default)=0
virtual void set_is_explicit_collation(bool is_explicit_collation)=0
virtual void set_default_value(const String_type &default_value)=0
virtual void set_default_option(const String_type &default_option)=0
virtual bool is_nullable() const =0
virtual void set_datetime_precision(uint datetime_precision)=0
virtual void set_update_option(const String_type &update_option)=0
virtual Object_id collation_id() const =0
Collection< Column_type_element * > Column_type_element_collection
Definition: column.h:89
virtual void set_secondary_engine_attribute(LEX_CSTRING attrs)=0
virtual const String_type & default_option() const =0
virtual size_t char_length() const =0
virtual bool is_numeric_scale_null() const =0
virtual void set_comment(const String_type &comment)=0
virtual void set_virtual(bool is_virtual)=0
enum_column_key
Definition: column.h:93
@ CK_MULTIPLE
Definition: column.h:93
@ CK_UNIQUE
Definition: column.h:93
@ CK_PRIMARY
Definition: column.h:93
@ CK_NONE
Definition: column.h:93
virtual void set_generation_expression(const String_type &generation_expression)=0
virtual std::optional< gis::srid_t > srs_id() const =0
tables::Columns DD_table
Definition: column.h:91
virtual const String_type & update_option() const =0
virtual const String_type & default_value() const =0
virtual void set_collation_id(Object_id collation_id)=0
~Column() override=default
virtual bool is_explicit_collation() const =0
virtual const String_type & generation_expression() const =0
virtual bool set_se_private_data(const String_type &se_private_data_raw)=0
virtual const Abstract_table & table() const =0
virtual uint datetime_precision() const =0
virtual void set_column_key(enum_column_key column_key)=0
virtual void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const =0
Converts *this into json.
virtual bool is_generation_expression_null() const =0
virtual uint numeric_precision() const =0
virtual Properties & options()=0
virtual const String_type & default_value_utf8() const =0
virtual Properties & se_private_data()=0
virtual const String_type & generation_expression_utf8() const =0
virtual void set_numeric_precision(uint numeric_precision)=0
virtual const Column_type_element_collection & elements() const =0
virtual const Properties & se_private_data() const =0
virtual enum_column_types type() const =0
virtual void set_default_value_null(bool is_null)=0
virtual bool is_array() const =0
virtual void set_type(enum_column_types type)=0
virtual LEX_CSTRING secondary_engine_attribute() const =0
virtual uint numeric_scale() const =0
virtual void set_default_value_utf8(const String_type &default_value_utf8)=0
Column_impl Impl
Definition: column.h:90
virtual uint ordinal_position() const =0
virtual const String_type & column_type_utf8() const =0
virtual bool is_virtual() const =0
virtual void set_unsigned(bool unsigned_flag)=0
virtual void set_nullable(bool nullable)=0
virtual bool has_no_default() const =0
virtual bool is_default_value_utf8_null() const =0
virtual bool is_zerofill() const =0
virtual bool is_auto_increment() const =0
virtual bool is_unsigned() const =0
virtual const String_type & comment() const =0
virtual bool is_generation_expression_utf8_null() const =0
virtual enum_hidden_type hidden() const =0
virtual size_t elements_count() const =0
virtual Column_type_element * add_element()=0
virtual bool is_datetime_precision_null() const =0
virtual void set_hidden(enum_hidden_type hidden)=0
bool is_se_hidden() const
Definition: column.h:292
virtual bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val)=0
Re-establishes the state of *this by reading sdi information from the rapidjson DOM subobject provide...
virtual bool set_se_private_data(const Properties &se_private_data)=0
Base class for dictionary objects which has single column integer primary key.
Definition: entity_object.h:48
The Properties class defines an interface for storing key=value pairs, where both key and value may b...
Definition: properties.h:74
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
Definition: columns.h:40
std::vector< Field * > Columns
Definition: dict0dd.h:777
Some integer typedefs for easier portability.
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
This header provides Rapidjson Type Aliases.
Definition: mysql_lex_string.h:40