MySQL 8.3.0
Source Code Documentation
tablespace.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__TABLESPACE_INCLUDED
24#define DD__TABLESPACE_INCLUDED
25
26#include <vector>
27
28#include "lex_string.h"
29#include "my_inttypes.h"
30#include "sql/dd/collection.h" // dd::Collection
31#include "sql/dd/impl/raw/object_keys.h" // IWYU pragma: keep
32#include "sql/dd/sdi_fwd.h" // RJ_Document
33#include "sql/dd/types/entity_object.h" // dd::Entity_object
34#include "sql/mdl.h" // enum enum_mdl_type
35
36class THD;
37class MDL_request;
38
39namespace dd {
40
41///////////////////////////////////////////////////////////////////////////
42
43class Global_name_key;
44class Properties;
45class Tablespace_impl;
46class Tablespace_file;
47class Void_key;
48
49namespace tables {
50class Tablespaces;
51}
52
53///////////////////////////////////////////////////////////////////////////
54
55class Tablespace : virtual public Entity_object {
56 public:
64
65 // We need a set of functions to update a preallocated key.
66 virtual bool update_id_key(Id_key *key) const {
67 return update_id_key(key, id());
68 }
69
70 static bool update_id_key(Id_key *key, Object_id id);
71
72 virtual bool update_name_key(Name_key *key) const {
73 return update_name_key(key, name());
74 }
75
76 static bool update_name_key(Name_key *key, const String_type &name);
77
78 virtual bool update_aux_key(Aux_key *) const { return true; }
79
80 public:
81 ~Tablespace() override = default;
82
83 /**
84 Check if the tablespace is empty, i.e., whether it has any tables.
85
86 @param thd Thread context.
87 @param [out] empty Whether the tablespace is empty.
88
89 @return true if error, false if success.
90 */
91
92 virtual bool is_empty(THD *thd, bool *empty) const = 0;
93
94 /////////////////////////////////////////////////////////////////////////
95 // comment.
96 /////////////////////////////////////////////////////////////////////////
97
98 virtual const String_type &comment() const = 0;
99 virtual void set_comment(const String_type &comment) = 0;
100
101 /////////////////////////////////////////////////////////////////////////
102 // options.
103 /////////////////////////////////////////////////////////////////////////
104
105 virtual const Properties &options() const = 0;
106
107 virtual Properties &options() = 0;
108 virtual bool set_options(const String_type &options_raw) = 0;
109
110 /////////////////////////////////////////////////////////////////////////
111 // se_private_data.
112 /////////////////////////////////////////////////////////////////////////
113
114 virtual const Properties &se_private_data() const = 0;
115
117 virtual bool set_se_private_data(const String_type &se_private_data_raw) = 0;
118
119 /////////////////////////////////////////////////////////////////////////
120 // Engine.
121 /////////////////////////////////////////////////////////////////////////
122
123 virtual const String_type &engine() const = 0;
124 virtual void set_engine(const String_type &engine) = 0;
125
126 /////////////////////////////////////////////////////////////////////////
127 // SE-specific json attributes
128 /////////////////////////////////////////////////////////////////////////
129
130 virtual LEX_CSTRING engine_attribute() const = 0;
132
133 /////////////////////////////////////////////////////////////////////////
134 // Tablespace file collection.
135 /////////////////////////////////////////////////////////////////////////
136
137 virtual Tablespace_file *add_file() = 0;
138
139 virtual bool remove_file(String_type data_file) = 0;
140
141 virtual const Tablespace_file_collection &files() const = 0;
142
143 /**
144 Allocate a new object graph and invoke the copy constructor for
145 each object.
146
147 @return pointer to dynamically allocated copy
148 */
149 virtual Tablespace *clone() const = 0;
150
151 /**
152 Allocate a new object which can serve as a placeholder for the original
153 object in the Dictionary_client's dropped registry. Such object has the
154 same keys as the original but has no other info and as result occupies
155 less memory.
156 */
158
159 /**
160 Converts *this into json.
161
162 Converts all member variables that are to be included in the sdi
163 into json by transforming them appropriately and passing them to
164 the rapidjson writer provided.
165
166 @param wctx opaque context for data needed by serialization
167 @param w rapidjson writer which will perform conversion to json
168
169 */
170
171 virtual void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const = 0;
172
173 /**
174 Re-establishes the state of *this by reading sdi information from
175 the rapidjson DOM subobject provided.
176
177 Cross-references encountered within this object are tracked in
178 sdictx, so that they can be updated when the entire object graph
179 has been established.
180
181 @param rctx stores book-keeping information for the
182 deserialization process
183 @param val subobject of rapidjson DOM containing json
184 representation of this object
185 */
186
187 virtual bool deserialize(Sdi_rcontext *rctx, const RJ_Value &val) = 0;
188};
189
190///////////////////////////////////////////////////////////////////////////
191
192/**
193 Represents tables with their id, name, schema id and schema name.
194 Needed to keep track of information when querying the dd to find
195 tables in a tablespace.
196 */
203 Tablespace_table_ref() = default; /* purecov: inspected */
205 Object_id schema_id)
206 : m_id{id},
207 m_name{std::move(name)},
208 m_schema_id{schema_id},
209 m_schema_encryption{false} {}
210};
211
212bool operator==(const Tablespace_table_ref &a, const Tablespace_table_ref &b);
213
214bool operator<(const Tablespace_table_ref &a, const Tablespace_table_ref &b);
215
216typedef std::vector<Tablespace_table_ref> Tablespace_table_ref_vec;
217
218/**
219 Fetch (by inserting into tblref vector) Tablespace_table_ref objects
220 which describe tables in a given tablespace.
221
222 @param thd thread context
223 @param tso dd object
224 @param tblrefs [OUT] Tablespace_table_ref objects for tables in tablespace
225 @retval true if error occurred
226 @retval false otherwise
227 */
228bool fetch_tablespace_table_refs(THD *thd, const Tablespace &tso,
229 Tablespace_table_ref_vec *tblrefs);
230
231/**
232 Create am MDL_request for a the table identified by a Tablespace_table_ref.
233 @param thd thread context
234 @param tref table to create request for
235 @param mdl_type The lock type requested.
236 @retval MDL_request (allocated on thd->memroot)
237 */
239 enum enum_mdl_type mdl_type);
240
241/**
242 Create am MDL_request for a the schema name provided.
243 @param thd thread context
244 @param schema_name on which to create request for
245 @retval MDL_request (allocated on thd->memroot)
246 */
247MDL_request *mdl_schema_req(THD *thd, const dd::String_type &schema_name);
248
249} // namespace dd
250
251#endif // DD__TABLESPACE_INCLUDED
A pending metadata lock request.
Definition: mdl.h:801
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
Definition: collection.h:43
Base class for dictionary objects which has single column integer primary key.
Definition: entity_object.h:47
virtual const String_type & name() const =0
Definition: object_keys.h:122
Definition: object_keys.h:76
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: tablespace_file.h:44
Definition: tablespace_impl.h:56
Definition: tablespace.h:55
tables::Tablespaces DD_table
Definition: tablespace.h:59
virtual const Properties & se_private_data() const =0
virtual Tablespace_file * add_file()=0
Void_key Aux_key
Definition: tablespace.h:62
virtual Tablespace * clone() const =0
Allocate a new object graph and invoke the copy constructor for each object.
virtual Properties & options()=0
virtual Properties & se_private_data()=0
Tablespace Cache_partition
Definition: tablespace.h:58
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 const String_type & engine() const =0
virtual bool set_options(const String_type &options_raw)=0
Primary_id_key Id_key
Definition: tablespace.h:60
virtual void set_comment(const String_type &comment)=0
~Tablespace() override=default
virtual bool is_empty(THD *thd, bool *empty) const =0
Check if the tablespace is empty, i.e., whether it has any tables.
virtual bool update_aux_key(Aux_key *) const
Definition: tablespace.h:78
virtual Tablespace * clone_dropped_object_placeholder() const =0
Allocate a new object which can serve as a placeholder for the original object in the Dictionary_clie...
virtual const Tablespace_file_collection & files() const =0
virtual LEX_CSTRING engine_attribute() const =0
Tablespace_impl Impl
Definition: tablespace.h:57
virtual void serialize(Sdi_wcontext *wctx, Sdi_writer *w) const =0
Converts *this into json.
virtual void set_engine(const String_type &engine)=0
virtual bool update_id_key(Id_key *key) const
Definition: tablespace.h:66
virtual bool set_se_private_data(const String_type &se_private_data_raw)=0
Collection< Tablespace_file * > Tablespace_file_collection
Definition: tablespace.h:63
virtual const String_type & comment() const =0
Global_name_key Name_key
Definition: tablespace.h:61
virtual bool update_name_key(Name_key *key) const
Definition: tablespace.h:72
virtual void set_engine_attribute(LEX_CSTRING a)=0
virtual bool remove_file(String_type data_file)=0
virtual const Properties & options() const =0
Definition: object_keys.h:53
Definition: tablespaces.h:40
Some integer typedefs for easier portability.
std::vector< Moved > Tablespaces
Definition: fil0fil.cc:126
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
bool operator<(const Tablespace_table_ref &a, const Tablespace_table_ref &b)
Definition: tablespace_impl.cc:403
bool fetch_tablespace_table_refs(THD *thd, const Tablespace &tso, Tablespace_table_ref_vec *tblrefsp)
Fetch (by inserting into tblref vector) Tablespace_table_ref objects which describe tables in a given...
Definition: tablespace_impl.cc:407
std::vector< Tablespace_table_ref > Tablespace_table_ref_vec
Definition: tablespace.h:216
bool operator==(const Tablespace_table_ref &a, const Tablespace_table_ref &b)
Definition: tablespace_impl.cc:399
MDL_request * mdl_req(THD *thd, const Tablespace_table_ref &tref, enum enum_mdl_type mdl_type)
Create am MDL_request for a the table identified by a Tablespace_table_ref.
Definition: tablespace_impl.cc:533
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
MDL_request * mdl_schema_req(THD *thd, const dd::String_type &schema_name)
Create am MDL_request for a the schema name provided.
Definition: tablespace_impl.cc:551
Definition: varlen_sort.h:174
required string key
Definition: replication_asynchronous_connection_failover.proto:59
This header provides Rapidjson Type Aliases.
enum_mdl_type
Type of metadata lock request.
Definition: sql_lexer_yacc_state.h:105
case opt name
Definition: sslopt-case.h:32
Definition: mysql_lex_string.h:39
Represents tables with their id, name, schema id and schema name.
Definition: tablespace.h:197
Object_id m_id
Definition: tablespace.h:198
Tablespace_table_ref(Object_id id, const String_type &&name, Object_id schema_id)
Definition: tablespace.h:204
Object_id m_schema_id
Definition: tablespace.h:200
String_type m_schema_name
Definition: tablespace.h:201
String_type m_name
Definition: tablespace.h:199
bool m_schema_encryption
Definition: tablespace.h:202
unsigned long id[MAX_DEAD]
Definition: xcom_base.cc:509