forked from alibaba/AliSQL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathha_ndbcluster_glue.h
More file actions
241 lines (199 loc) · 5.96 KB
/
ha_ndbcluster_glue.h
File metadata and controls
241 lines (199 loc) · 5.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
/*
Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef HA_NDBCLUSTER_GLUE_H
#define HA_NDBCLUSTER_GLUE_H
#include <mysql_version.h>
#ifndef MYSQL_SERVER
#define MYSQL_SERVER
#endif
#if MYSQL_VERSION_ID >= 50501
/* Include files for sql/ was split in 5.5, and ha_ndb* uses a few.. */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_table.h" // build_table_filename,
// tablename_to_filename,
// filename_to_tablename
#include "sql_partition.h" // HA_CAN_*, partition_info, part_id_range
#include "sql_base.h" // close_cached_tables
#include "discover.h" // readfrm
#include "sql_acl.h" // wild_case_compare
#include "transaction.h"
#include "sql_test.h" // print_where
#include "key.h" // key_restore
#else
#include "mysql_priv.h"
#endif
#include "sql_show.h" // init_fill_schema_files_row,
// schema_table_store_record
#if MYSQL_VERSION_ID >= 50501
/* my_free has lost last argument */
static inline
void my_free(void* ptr, myf MyFlags)
{
my_free(ptr);
}
/* close_cached_tables has new signature, emulate old */
static inline
bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock,
bool wait_for_refresh, bool wait_for_placeholders)
{
return close_cached_tables(thd, tables, wait_for_refresh, LONG_TIMEOUT);
}
/* thd has no version field anymore */
#define NDB_THD_HAS_NO_VERSION
/* thd->binlog_query has new parameter "direct" */
#define NDB_THD_BINLOG_QUERY_HAS_DIRECT
/* No mysql_rm_table_part2 anymore in 5.5.8 */
#define NDB_NO_MYSQL_RM_TABLE_PART2
#endif
extern ulong opt_server_id_mask;
static inline
uint32 thd_unmasked_server_id(const THD* thd)
{
#ifndef NDB_WITHOUT_SERVER_ID_BITS
const uint32 unmasked_server_id = thd->unmasked_server_id;
assert(thd->server_id == (thd->unmasked_server_id & opt_server_id_mask));
return unmasked_server_id;
#else
return thd->server_id;
#endif
}
/* extract the bitmask of options from THD */
static inline
ulonglong thd_options(const THD * thd)
{
#if MYSQL_VERSION_ID < 50500
return thd->options;
#else
/* "options" has moved to "variables.option_bits" */
return thd->variables.option_bits;
#endif
}
/* set the "command" member of thd */
static inline
void thd_set_command(THD* thd, enum enum_server_command command)
{
#if MYSQL_VERSION_ID < 50600
thd->command = command;
#else
/* "command" renamed to "m_command", use accessor function */
thd->set_command(command);
#endif
}
/* get pointer to diagnostic area for statement from THD */
static inline
Diagnostics_area* thd_stmt_da(THD* thd)
{
#if MYSQL_VERSION_ID < 50500
return &(thd->main_da);
#else
#if MYSQL_VERSION_ID < 50603
/* "main_da" has been made private and one should use "stmt_da*" */
return thd->stmt_da;
#else
/* "stmt_da*" has been made private and one should use 'get_stmt_da()' */
return thd->get_stmt_da();
#endif
#endif
}
#if MYSQL_VERSION_ID < 50500
/*
MySQL Server has got its own mutex type in 5.5, add backwards
compatibility support allowing to write code in 7.0 that works
in future MySQL Server
*/
typedef pthread_mutex_t mysql_mutex_t;
static inline
int mysql_mutex_lock(mysql_mutex_t* mutex)
{
return pthread_mutex_lock(mutex);
}
static inline
int mysql_mutex_unlock(mysql_mutex_t* mutex)
{
return pthread_mutex_unlock(mutex);
}
static inline
void mysql_mutex_assert_owner(mysql_mutex_t* mutex)
{
return safe_mutex_assert_owner(mutex);
}
typedef pthread_cond_t mysql_cond_t;
static inline
int mysql_cond_wait(mysql_cond_t* cond, mysql_mutex_t* mutex)
{
return pthread_cond_wait(cond, mutex);
}
static inline
int mysql_cond_timedwait(mysql_cond_t* cond, mysql_mutex_t* mutex,
struct timespec* abstime)
{
return pthread_cond_timedwait(cond, mutex, abstime);
}
#endif
static inline
uint partition_info_num_full_part_fields(const partition_info* part_info)
{
#if MYSQL_VERSION_ID < 50500
return part_info->no_full_part_fields;
#else
/* renamed to 'num_full_part_fields' and no accessor function*/
return part_info->num_full_part_fields;
#endif
}
static inline
uint partition_info_num_parts(const partition_info* part_info)
{
#if MYSQL_VERSION_ID < 50500
return part_info->no_parts;
#else
/* renamed to 'num_parts' and no accessor function */
return part_info->num_parts;
#endif
}
static inline
uint partition_info_num_list_values(const partition_info* part_info)
{
#if MYSQL_VERSION_ID < 50500
return part_info->no_list_values;
#else
/* renamed to 'num_list_values' and no accessor function */
return part_info->num_list_values;
#endif
}
static inline
bool partition_info_use_default_num_partitions(const partition_info* part_info)
{
#if MYSQL_VERSION_ID < 50500
return part_info->use_default_no_partitions;
#else
/* renamed to 'use_default_num_partitions' and no accessor function */
return part_info->use_default_num_partitions;
#endif
}
static inline
uint partition_info_num_subparts(const partition_info* part_info)
{
#if MYSQL_VERSION_ID < 50500
return part_info->no_subparts;
#else
/* renamed to 'num_subparts' and no accessor function */
return part_info->num_subparts;
#endif
}
#if MYSQL_VERSION_ID >= 50600
/* New multi range read interface replaced original mrr */
#define NDB_WITH_NEW_MRR_INTERFACE
#endif
#endif