MySQL 8.2.0
Source Code Documentation
pfs_name.h
Go to the documentation of this file.
1/* Copyright (c) 2021, 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 PFS_NAME_H
24#define PFS_NAME_H
25
26/**
27 @file storage/perfschema/pfs_name.h
28 Object names (declarations).
29*/
30
31#include <assert.h>
32#include <string.h>
33
34#include "my_hostname.h" // HOSTNAME_LENGTH
35#include "my_inttypes.h"
37#include "mysql_com.h" // NAME_LEN
38
39/* Not used yet. */
40#define ROLENAME_CHAR_LENGTH 32
41#define ROLENAME_LENGTH (ROLENAME_CHAR_LENGTH * SYSTEM_CHARSET_MBMAXLEN)
42
43struct CHARSET_INFO;
44class Field;
45
46template <int max_length>
48 public:
50
51 PFS_any_name(const PFS_any_name &other) {
52 assert(other.m_length <= max_length);
53
54 if (0 < other.m_length && other.m_length <= max_length) {
55 m_length = other.m_length;
56 memcpy(m_data, other.m_data, m_length);
57 } else {
58 m_length = 0;
59 }
60 }
61
63 assert(other.m_length <= max_length);
64
65 if (0 < other.m_length && other.m_length <= max_length) {
66 m_length = other.m_length;
67 memcpy(m_data, other.m_data, m_length);
68 } else {
69 m_length = 0;
70 }
71 return *this;
72 }
73
74 void reset() { m_length = 0; }
75
76 void set(const char *str, size_t len) {
77 assert(len <= max_length);
78
79 if (0 < len && len <= max_length) {
80 m_length = len;
81 memcpy(m_data, str, len);
82 } else {
83 m_length = 0;
84 }
85 }
86
87 void casedn(const CHARSET_INFO *cs) {
88 /*
89 Conversion in place:
90 - the string is not NUL terminated.
91 - the result after conversion can be shorter.
92 */
93 char *data = reinterpret_cast<char *>(m_data);
94 m_length = cs->cset->casedn(cs, data, m_length, data, m_length);
95 assert(m_length <= max_length);
96 }
97
98 size_t length() const { return m_length; }
99
100 const char *ptr() const { return reinterpret_cast<const char *>(m_data); }
101
102 void hash(const CHARSET_INFO *cs, uint64 *nr1, uint64 *nr2) const {
103 cs->coll->hash_sort(cs, m_data, m_length, nr1, nr2);
104 }
105
106 int sort(const CHARSET_INFO *cs,
107 const PFS_any_name<max_length> *other) const {
108 int cmp;
109 cmp = my_strnncoll(cs, m_data, m_length, other->m_data, other->m_length);
110 return cmp;
111 }
112
113 uchar m_data[max_length];
114 size_t m_length;
115};
116
118 public:
119 void reset() { m_name.reset(); }
120
121 void set(const char *str, size_t len);
122
123 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(get_cs(), nr1, nr2); }
124
125 int sort(const PFS_schema_name *other) const {
126 return m_name.sort(get_cs(), &other->m_name);
127 }
128
129 size_t length() const { return m_name.length(); }
130 const char *ptr() const { return m_name.ptr(); }
131 const CHARSET_INFO *charset() const { return get_cs(); }
132
133 private:
134 static const CHARSET_INFO *get_cs();
136};
137
139 public:
140 void reset() { m_name.reset(); }
141
142 void set(const char *str, size_t len);
143
144 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(get_cs(), nr1, nr2); }
145
146 int sort(const PFS_table_name *other) const {
147 return m_name.sort(get_cs(), &other->m_name);
148 }
149
150 size_t length() const { return m_name.length(); }
151 const char *ptr() const { return m_name.ptr(); }
152 const CHARSET_INFO *charset() const { return get_cs(); }
153
154 private:
155 friend struct PFS_object_name;
156
157 static const CHARSET_INFO *get_cs();
159};
160
162 public:
163 void reset() { m_name.reset(); }
164
165 void set(const char *str, size_t len);
166
167 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(m_cs, nr1, nr2); }
168
169 int sort(const PFS_routine_name *other) const {
170 return m_name.sort(m_cs, &other->m_name);
171 }
172
173 size_t length() const { return m_name.length(); }
174 const char *ptr() const { return m_name.ptr(); }
175 const CHARSET_INFO *charset() const { return m_cs; }
176
177 private:
178 friend struct PFS_object_name;
179
180 static const CHARSET_INFO *m_cs;
182};
183
185 public:
186 void reset() { m_name.reset(); }
187
188 void set_as_table(const char *str, size_t len);
189 void set_as_routine(const char *str, size_t len);
190
191 void hash_as_table(uint64 *nr1, uint64 *nr2) const {
192 m_name.hash(PFS_table_name::get_cs(), nr1, nr2);
193 }
194
195 int sort_as_table(const PFS_object_name *other) const {
196 return m_name.sort(PFS_table_name::get_cs(), &other->m_name);
197 }
198
199 void hash_as_routine(uint64 *nr1, uint64 *nr2) const {
200 m_name.hash(PFS_routine_name::m_cs, nr1, nr2);
201 }
202
203 int sort_as_routine(const PFS_object_name *other) const {
204 return m_name.sort(PFS_routine_name::m_cs, &other->m_name);
205 }
206
208 m_name = other.m_name;
209 return *this;
210 }
211
213 m_name = other.m_name;
214 return *this;
215 }
216
217 size_t length() const { return m_name.length(); }
218 const char *ptr() const { return m_name.ptr(); }
219
220 private:
222};
223
225 public:
226 void reset() { m_name.reset(); }
227
228 void set(const char *str, size_t len);
229
230 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(m_cs, nr1, nr2); }
231
232 int sort(const PFS_user_name *other) const {
233 return m_name.sort(m_cs, &other->m_name);
234 }
235
236 size_t length() const { return m_name.length(); }
237 const char *ptr() const { return m_name.ptr(); }
238 const CHARSET_INFO *charset() const { return m_cs; }
239
240 private:
241 static const CHARSET_INFO *m_cs;
243};
244
246 public:
247 void reset() { m_name.reset(); }
248
249 void set(const char *str, size_t len);
250
251 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(m_cs, nr1, nr2); }
252
253 int sort(const PFS_host_name *other) const {
254 return m_name.sort(m_cs, &other->m_name);
255 }
256
257 size_t length() const { return m_name.length(); }
258 const char *ptr() const { return m_name.ptr(); }
259 const CHARSET_INFO *charset() const { return m_cs; }
260
261 private:
262 static const CHARSET_INFO *m_cs;
264};
265
267 public:
268 void reset() { m_name.reset(); }
269
270 void set(const char *str, size_t len);
271
272 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(m_cs, nr1, nr2); }
273
274 int sort(const PFS_role_name *other) const {
275 return m_name.sort(m_cs, &other->m_name);
276 }
277
278 size_t length() const { return m_name.length(); }
279 const char *ptr() const { return m_name.ptr(); }
280 const CHARSET_INFO *charset() const { return m_cs; }
281
282 private:
283 static const CHARSET_INFO *m_cs;
285};
286
288 public:
289 void reset() { m_name.reset(); }
290
291 void set(const char *str, size_t len);
292
293 void hash(uint64 *nr1, uint64 *nr2) const { m_name.hash(m_cs, nr1, nr2); }
294
295 int sort(const PFS_file_name *other) const {
296 return m_name.sort(m_cs, &other->m_name);
297 }
298
299 size_t length() const { return m_name.length(); }
300 const char *ptr() const { return m_name.ptr(); }
301 const CHARSET_INFO *charset() const { return m_cs; }
302
303 private:
304 static const CHARSET_INFO *m_cs;
306};
307
308#endif
Definition: field.h:576
static int cmp(Bigint *a, Bigint *b)
Definition: dtoa.cc:1059
A better implementation of the UNIX ctype(3) library.
int my_strnncoll(const CHARSET_INFO *cs, const uint8_t *a, size_t a_length, const uint8_t *b, size_t b_length)
Definition: m_ctype.h:635
Common definition used by mysys, performance schema and server & client.
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:51
uint64_t uint64
Definition: my_inttypes.h:68
Common definition between mysql server & client.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1085
Definition: commit_order_queue.h:33
Definition: m_ctype.h:422
Definition: pfs_name.h:47
int sort(const CHARSET_INFO *cs, const PFS_any_name< max_length > *other) const
Definition: pfs_name.h:106
void reset()
Definition: pfs_name.h:74
size_t m_length
Definition: pfs_name.h:114
PFS_any_name()
Definition: pfs_name.h:49
const char * ptr() const
Definition: pfs_name.h:100
void casedn(const CHARSET_INFO *cs)
Definition: pfs_name.h:87
void set(const char *str, size_t len)
Definition: pfs_name.h:76
PFS_any_name< max_length > & operator=(const PFS_any_name< max_length > &other)
Definition: pfs_name.h:62
size_t length() const
Definition: pfs_name.h:98
void hash(const CHARSET_INFO *cs, uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:102
uchar m_data[max_length]
Definition: pfs_name.h:113
PFS_any_name(const PFS_any_name &other)
Definition: pfs_name.h:51
Definition: pfs_name.h:287
void set(const char *str, size_t len)
Definition: pfs_name.cc:89
const CHARSET_INFO * charset() const
Definition: pfs_name.h:301
int sort(const PFS_file_name *other) const
Definition: pfs_name.h:295
const char * ptr() const
Definition: pfs_name.h:300
void reset()
Definition: pfs_name.h:289
static const CHARSET_INFO * m_cs
Definition: pfs_name.h:304
size_t length() const
Definition: pfs_name.h:299
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:293
PFS_any_name< FN_REFLEN > m_name
Definition: pfs_name.h:305
Definition: pfs_name.h:245
const CHARSET_INFO * charset() const
Definition: pfs_name.h:259
int sort(const PFS_host_name *other) const
Definition: pfs_name.h:253
PFS_any_name< HOSTNAME_LENGTH > m_name
Definition: pfs_name.h:263
const char * ptr() const
Definition: pfs_name.h:258
void reset()
Definition: pfs_name.h:247
void set(const char *str, size_t len)
Definition: pfs_name.cc:81
static const CHARSET_INFO * m_cs
Definition: pfs_name.h:262
size_t length() const
Definition: pfs_name.h:257
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:251
Definition: pfs_name.h:184
int sort_as_routine(const PFS_object_name *other) const
Definition: pfs_name.h:203
void reset()
Definition: pfs_name.h:186
PFS_any_name< NAME_LEN > m_name
Definition: pfs_name.h:221
const char * ptr() const
Definition: pfs_name.h:218
PFS_object_name & operator=(const PFS_routine_name &other)
Definition: pfs_name.h:207
void set_as_table(const char *str, size_t len)
Definition: pfs_name.cc:64
PFS_object_name & operator=(const PFS_table_name &other)
Definition: pfs_name.h:212
size_t length() const
Definition: pfs_name.h:217
int sort_as_table(const PFS_object_name *other) const
Definition: pfs_name.h:195
void set_as_routine(const char *str, size_t len)
Definition: pfs_name.cc:73
void hash_as_routine(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:199
void hash_as_table(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:191
Definition: pfs_name.h:266
PFS_any_name< ROLENAME_LENGTH > m_name
Definition: pfs_name.h:284
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:272
int sort(const PFS_role_name *other) const
Definition: pfs_name.h:274
size_t length() const
Definition: pfs_name.h:278
void set(const char *str, size_t len)
Definition: pfs_name.cc:85
static const CHARSET_INFO * m_cs
Definition: pfs_name.h:283
void reset()
Definition: pfs_name.h:268
const char * ptr() const
Definition: pfs_name.h:279
const CHARSET_INFO * charset() const
Definition: pfs_name.h:280
Definition: pfs_name.h:161
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:167
const CHARSET_INFO * charset() const
Definition: pfs_name.h:175
void reset()
Definition: pfs_name.h:163
size_t length() const
Definition: pfs_name.h:173
PFS_any_name< NAME_LEN > m_name
Definition: pfs_name.h:181
const char * ptr() const
Definition: pfs_name.h:174
int sort(const PFS_routine_name *other) const
Definition: pfs_name.h:169
void set(const char *str, size_t len)
Definition: pfs_name.cc:57
static const CHARSET_INFO * m_cs
Definition: pfs_name.h:180
Definition: pfs_name.h:117
size_t length() const
Definition: pfs_name.h:129
void set(const char *str, size_t len)
Definition: pfs_name.cc:33
static const CHARSET_INFO * get_cs()
Definition: pfs_name.cc:41
const CHARSET_INFO * charset() const
Definition: pfs_name.h:131
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:123
int sort(const PFS_schema_name *other) const
Definition: pfs_name.h:125
const char * ptr() const
Definition: pfs_name.h:130
void reset()
Definition: pfs_name.h:119
PFS_any_name< NAME_LEN > m_name
Definition: pfs_name.h:135
Definition: pfs_name.h:138
const CHARSET_INFO * charset() const
Definition: pfs_name.h:152
void reset()
Definition: pfs_name.h:140
PFS_any_name< NAME_LEN > m_name
Definition: pfs_name.h:158
const char * ptr() const
Definition: pfs_name.h:151
int sort(const PFS_table_name *other) const
Definition: pfs_name.h:146
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:144
void set(const char *str, size_t len)
Definition: pfs_name.cc:45
static const CHARSET_INFO * get_cs()
Definition: pfs_name.cc:53
size_t length() const
Definition: pfs_name.h:150
Definition: pfs_name.h:224
const char * ptr() const
Definition: pfs_name.h:237
size_t length() const
Definition: pfs_name.h:236
void set(const char *str, size_t len)
Definition: pfs_name.cc:77
void reset()
Definition: pfs_name.h:226
int sort(const PFS_user_name *other) const
Definition: pfs_name.h:232
static const CHARSET_INFO * m_cs
Definition: pfs_name.h:241
PFS_any_name< USERNAME_LENGTH > m_name
Definition: pfs_name.h:242
const CHARSET_INFO * charset() const
Definition: pfs_name.h:238
void hash(uint64 *nr1, uint64 *nr2) const
Definition: pfs_name.h:230