MySQL  8.0.27
Source Code Documentation
column.h
Go to the documentation of this file.
1 /* Copyright (c) 2014, 2021, 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 
36 namespace dd {
37 
38 ///////////////////////////////////////////////////////////////////////////
39 
40 class Abstract_table;
41 class Column_impl;
42 class Column_type_element;
43 class Properties;
44 
45 namespace tables {
46 class Columns;
47 }
48 
49 ///////////////////////////////////////////////////////////////////////////
50 
51 // Redefined enum_field_types here. We can remove some old types ?
52 enum class enum_column_types {
53  DECIMAL = 1, // This is 1 > than MYSQL_TYPE_DECIMAL
54  TINY,
55  SHORT,
56  LONG,
57  FLOAT,
58  DOUBLE,
59  TYPE_NULL,
60  TIMESTAMP,
61  LONGLONG,
62  INT24,
63  DATE,
64  TIME,
65  DATETIME,
66  YEAR,
67  NEWDATE,
68  VARCHAR,
69  BIT,
70  TIMESTAMP2,
71  DATETIME2,
72  TIME2,
73  NEWDECIMAL,
74  ENUM,
75  SET,
76  TINY_BLOB,
78  LONG_BLOB,
79  BLOB,
80  VAR_STRING,
81  STRING,
82  GEOMETRY,
83  JSON
84 };
85 
86 class Column : virtual public Entity_object {
87  public:
89  typedef Column_impl Impl;
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.
105  HT_HIDDEN_USER = 4
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;
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;
220  virtual void set_default_value(const String_type &default_value) = 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;
230  const String_type &default_value_utf8) = 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;
276  virtual void set_update_option(const String_type &update_option) = 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;
290  virtual void set_hidden(enum_hidden_type hidden) = 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 
310  virtual Properties &se_private_data() = 0;
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:45
Definition: column_impl.h:61
Definition: column_type_element.h:43
Definition: column.h:86
virtual const String_type & comment() const =0
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 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 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 const String_type & generation_expression() const =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 const String_type & default_value_utf8() const =0
virtual std::optional< gis::srid_t > srs_id() const =0
virtual const Properties & se_private_data() const =0
virtual const String_type & column_type_utf8() const =0
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 Column_type_element * add_element()=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_value() const =0
virtual size_t char_length() const =0
virtual bool is_numeric_scale_null() const =0
virtual const Abstract_table & table() 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
tables::Columns DD_table
Definition: column.h:90
virtual const String_type & default_option() const =0
virtual Properties & se_private_data()=0
virtual void set_collation_id(Object_id collation_id)=0
~Column() override=default
virtual bool is_explicit_collation() const =0
virtual bool set_se_private_data(const String_type &se_private_data_raw)=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 const String_type & update_option() const =0
virtual bool is_generation_expression_null() const =0
virtual uint numeric_precision() const =0
virtual Abstract_table & table()=0
virtual void set_numeric_precision(uint numeric_precision)=0
virtual Properties & options()=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 bool is_virtual() const =0
virtual const Column_type_element_collection & elements() 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 const Properties & options() const =0
virtual bool is_auto_increment() const =0
virtual bool is_unsigned() const =0
virtual const String_type & generation_expression_utf8() 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 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:37
Some integer typedefs for easier portability.
constexpr value_type zerofill
Definition: classic_protocol_constants.h:269
constexpr value_type auto_increment
Definition: classic_protocol_constants.h:272
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
std::vector< Column, Allocator< Column > > Columns
A type that designates all the columns of a table.
Definition: column.h:226
This header provides Rapidjson Type Aliases.
Definition: mysql_lex_string.h:39
unsigned int uint
Definition: uca-dump.cc:29