MySQL 8.3.0
Source Code Documentation
column.h
Go to the documentation of this file.
1/* Copyright (c) 2014, 2023, 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 also distributed 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 included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#ifndef DD__COLUMN_INCLUDED
24#define DD__COLUMN_INCLUDED
25
26#include <optional>
27
28#include "lex_string.h" // LEX_CSTRING
29#include "my_inttypes.h"
30#include "sql/dd/collection.h" // dd::Collection
31#include "sql/dd/sdi_fwd.h" // RJ_Document
32#include "sql/dd/types/entity_object.h" // dd::Entity_object
33
34#include "sql/gis/srid.h"
35
36namespace dd {
37
38///////////////////////////////////////////////////////////////////////////
39
40class Abstract_table;
41class Column_impl;
42class Column_type_element;
43class Properties;
44
45namespace tables {
46class Columns;
47}
48
49///////////////////////////////////////////////////////////////////////////
50
51// Redefined enum_field_types here. We can remove some old types ?
53 DECIMAL = 1, // This is 1 > than MYSQL_TYPE_DECIMAL
54 TINY,
55 SHORT,
56 LONG,
57 FLOAT,
58 DOUBLE,
62 INT24,
63 DATE,
64 TIME,
66 YEAR,
67 NEWDATE,
68 VARCHAR,
69 BIT,
72 TIME2,
74 ENUM,
75 SET,
79 BLOB,
81 STRING,
83 JSON
84};
85
86class Column : virtual public Entity_object {
87 public:
91
93
94 enum class enum_hidden_type {
95 /// The column is visible (a normal column)
96 HT_VISIBLE = 1,
97 /// The column is completely invisible to the server
98 HT_HIDDEN_SE = 2,
99 /// The column is visible to the server, but hidden from the user.
100 /// This is used for i.e. implementing functional indexes.
101 HT_HIDDEN_SQL = 3,
102 /// User table column marked as INVISIBLE by using the column visibility
103 /// attribute. Column is hidden from the user unless it is explicitly
104 /// referenced in the statement. Column is visible to the server.
106 };
107
108 ~Column() override = default;
109
110 /////////////////////////////////////////////////////////////////////////
111 // Table.
112 /////////////////////////////////////////////////////////////////////////
113
114 virtual const Abstract_table &table() const = 0;
115
116 virtual Abstract_table &table() = 0;
117
118 /////////////////////////////////////////////////////////////////////////
119 // collation.
120 /////////////////////////////////////////////////////////////////////////
121
122 virtual Object_id collation_id() const = 0;
124
126 virtual bool is_explicit_collation() const = 0;
127
128 /////////////////////////////////////////////////////////////////////////
129 // type.
130 /////////////////////////////////////////////////////////////////////////
131
132 virtual enum_column_types type() const = 0;
133 virtual void set_type(enum_column_types type) = 0;
134
135 /////////////////////////////////////////////////////////////////////////
136 // nullable.
137 /////////////////////////////////////////////////////////////////////////
138
139 virtual bool is_nullable() const = 0;
140 virtual void set_nullable(bool nullable) = 0;
141
142 /////////////////////////////////////////////////////////////////////////
143 // is_zerofill.
144 /////////////////////////////////////////////////////////////////////////
145
146 virtual bool is_zerofill() const = 0;
147 virtual void set_zerofill(bool zerofill) = 0;
148
149 /////////////////////////////////////////////////////////////////////////
150 // is_unsigned.
151 /////////////////////////////////////////////////////////////////////////
152
153 virtual bool is_unsigned() const = 0;
154 virtual void set_unsigned(bool unsigned_flag) = 0;
155
156 /////////////////////////////////////////////////////////////////////////
157 // auto increment.
158 /////////////////////////////////////////////////////////////////////////
159
160 virtual bool is_auto_increment() const = 0;
161 virtual void set_auto_increment(bool auto_increment) = 0;
162
163 /////////////////////////////////////////////////////////////////////////
164 // ordinal_position
165 /////////////////////////////////////////////////////////////////////////
166
167 virtual uint ordinal_position() const = 0;
168
169 /////////////////////////////////////////////////////////////////////////
170 // char_length.
171 /////////////////////////////////////////////////////////////////////////
172
173 virtual size_t char_length() const = 0;
174 virtual void set_char_length(size_t char_length) = 0;
175
176 /////////////////////////////////////////////////////////////////////////
177 // numeric_precision.
178 /////////////////////////////////////////////////////////////////////////
179
180 virtual uint numeric_precision() const = 0;
182
183 /////////////////////////////////////////////////////////////////////////
184 // srid
185 /////////////////////////////////////////////////////////////////////////
186
187 virtual void set_srs_id(std::optional<gis::srid_t> srs_id) = 0;
188 virtual std::optional<gis::srid_t> srs_id() const = 0;
189
190 /////////////////////////////////////////////////////////////////////////
191 // numeric_scale.
192 /////////////////////////////////////////////////////////////////////////
193
194 virtual uint numeric_scale() const = 0;
195 virtual void set_numeric_scale(uint numeric_scale) = 0;
196 virtual void set_numeric_scale_null(bool is_null) = 0;
197 virtual bool is_numeric_scale_null() const = 0;
198
199 /////////////////////////////////////////////////////////////////////////
200 // datetime_precision.
201 /////////////////////////////////////////////////////////////////////////
202
203 virtual uint datetime_precision() const = 0;
205 virtual void set_datetime_precision_null(bool is_null) = 0;
206 virtual bool is_datetime_precision_null() const = 0;
207
208 /////////////////////////////////////////////////////////////////////////
209 // has_no_default.
210 /////////////////////////////////////////////////////////////////////////
211
212 virtual bool has_no_default() const = 0;
213 virtual void set_has_no_default(bool has_explicit_default) = 0;
214
215 /////////////////////////////////////////////////////////////////////////
216 // default_value (binary).
217 /////////////////////////////////////////////////////////////////////////
218
219 virtual const String_type &default_value() const = 0;
221 virtual void set_default_value_null(bool is_null) = 0;
222 virtual bool is_default_value_null() const = 0;
223
224 /////////////////////////////////////////////////////////////////////////
225 // default_value_utf8
226 /////////////////////////////////////////////////////////////////////////
227
228 virtual const String_type &default_value_utf8() const = 0;
231 virtual void set_default_value_utf8_null(bool is_null) = 0;
232 virtual bool is_default_value_utf8_null() const = 0;
233
234 /////////////////////////////////////////////////////////////////////////
235 // is virtual ?
236 /////////////////////////////////////////////////////////////////////////
237
238 virtual bool is_virtual() const = 0;
239
240 virtual void set_virtual(bool is_virtual) = 0;
241
242 /////////////////////////////////////////////////////////////////////////
243 // generation_expression (binary).
244 /////////////////////////////////////////////////////////////////////////
245
246 virtual const String_type &generation_expression() const = 0;
247
250
251 virtual bool is_generation_expression_null() const = 0;
252
253 /////////////////////////////////////////////////////////////////////////
254 // generation_expression_utf8
255 /////////////////////////////////////////////////////////////////////////
256
257 virtual const String_type &generation_expression_utf8() const = 0;
258
261
262 virtual bool is_generation_expression_utf8_null() const = 0;
263
264 /////////////////////////////////////////////////////////////////////////
265 // default_option.
266 /////////////////////////////////////////////////////////////////////////
267
268 virtual const String_type &default_option() const = 0;
270
271 /////////////////////////////////////////////////////////////////////////
272 // update_option.
273 /////////////////////////////////////////////////////////////////////////
274
275 virtual const String_type &update_option() const = 0;
277
278 /////////////////////////////////////////////////////////////////////////
279 // Comment.
280 /////////////////////////////////////////////////////////////////////////
281
282 virtual const String_type &comment() const = 0;
283 virtual void set_comment(const String_type &comment) = 0;
284
285 /////////////////////////////////////////////////////////////////////////
286 // hidden.
287 /////////////////////////////////////////////////////////////////////////
288
289 virtual enum_hidden_type hidden() const = 0;
291 bool is_se_hidden() const {
293 }
294
295 /////////////////////////////////////////////////////////////////////////
296 // Options.
297 /////////////////////////////////////////////////////////////////////////
298
299 virtual const Properties &options() const = 0;
300
301 virtual Properties &options() = 0;
302 virtual bool set_options(const String_type &options_raw) = 0;
303
304 /////////////////////////////////////////////////////////////////////////
305 // se_private_data.
306 /////////////////////////////////////////////////////////////////////////
307
308 virtual const Properties &se_private_data() const = 0;
309
312 virtual bool set_se_private_data(const String_type &se_private_data_raw) = 0;
313
314 /////////////////////////////////////////////////////////////////////////
315 // SE-specific json attributes
316 /////////////////////////////////////////////////////////////////////////
317
318 virtual LEX_CSTRING engine_attribute() const = 0;
319 virtual void set_engine_attribute(LEX_CSTRING attrs) = 0;
320
323
324 /////////////////////////////////////////////////////////////////////////
325 // Column key type.
326 /////////////////////////////////////////////////////////////////////////
327
329
330 virtual enum_column_key column_key() const = 0;
331
332 /////////////////////////////////////////////////////////////////////////
333 // Column display type.
334 /////////////////////////////////////////////////////////////////////////
335
336 virtual const String_type &column_type_utf8() const = 0;
337
339
340 /////////////////////////////////////////////////////////////////////////
341 // Elements.
342 /////////////////////////////////////////////////////////////////////////
343
345
346 virtual const Column_type_element_collection &elements() const = 0;
347
348 virtual size_t elements_count() const = 0;
349
350 /**
351 Converts *this into json.
352
353 Converts all member variables that are to be included in the sdi
354 into json by transforming them appropriately and passing them to
355 the rapidjson writer provided.
356
357 @param wctx opaque context for data needed by serialization
358 @param w rapidjson writer which will perform conversion to json
359
360 */
361
362 virtual void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const = 0;
363
364 /**
365 Re-establishes the state of *this by reading sdi information from
366 the rapidjson DOM subobject provided.
367
368 Cross-references encountered within this object are tracked in
369 sdictx, so that they can be updated when the entire object graph
370 has been established.
371
372 @param rctx stores book-keeping information for the
373 deserialization process
374 @param val subobject of rapidjson DOM containing json
375 representation of this object
376 */
377
378 virtual bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val) = 0;
379
380 virtual bool is_array() const = 0;
381};
382
383///////////////////////////////////////////////////////////////////////////
384
385} // namespace dd
386
387#endif // DD__COLUMN_INCLUDED
Abstract base class for tables and views.
Definition: abstract_table.h:68
Definition: collection.h:43
Definition: column_impl.h:61
Definition: column_type_element.h:43
Definition: column.h:86
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:94
@ 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:88
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:92
@ CK_MULTIPLE
Definition: column.h:92
@ CK_UNIQUE
Definition: column.h:92
@ CK_PRIMARY
Definition: column.h:92
@ CK_NONE
Definition: column.h:92
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:90
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:89
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:291
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:47
The Properties class defines an interface for storing key=value pairs, where both key and value may b...
Definition: properties.h:73
Opaque context which keeps reusable resoureces needed during deserialization.
Definition: sdi.cc:230
Opaque context which keeps reusable resources needed during serialization.
Definition: sdi.cc:128
Definition: columns.h:39
std::vector< Field * > Columns
Definition: dict0dd.h:776
Some integer typedefs for easier portability.
constexpr value_type zerofill
Definition: classic_protocol_constants.h:273
constexpr value_type auto_increment
Definition: classic_protocol_constants.h:276
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:42
RJ_Writer Sdi_writer
Alias for the rapidjson Writer type to use in serialization.
Definition: sdi_fwd.h:63
unsigned long long Object_id
Definition: object_id.h:30
enum_column_types
Definition: column.h:52
rapidjson::GenericValue< RJ_Encoding, RJ_Allocator > RJ_Value
Definition: sdi_fwd.h:48
Char_string_template< String_type_allocator > String_type
Definition: string_type.h:50
This header provides Rapidjson Type Aliases.
Definition: mysql_lex_string.h:39