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