1 | /* -*- c-basic-offset: 2 -*- */ |
2 | /* |
3 | Copyright(C) 2011-2017 Kouhei Sutou <kou@clear-code.com> |
4 | |
5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public |
7 | License as published by the Free Software Foundation; either |
8 | version 2.1 of the License, or (at your option) any later version. |
9 | |
10 | This library is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | Lesser General Public License for more details. |
14 | |
15 | You should have received a copy of the GNU Lesser General Public |
16 | License along with this library; if not, write to the Free Software |
17 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
18 | */ |
19 | |
20 | #ifndef MRN_MYSQL_COMPAT_H_ |
21 | #define MRN_MYSQL_COMPAT_H_ |
22 | |
23 | #include "mrn_mysql.h" |
24 | |
25 | #if MYSQL_VERSION_ID >= 50604 |
26 | # define MRN_HAVE_MYSQL_TYPE_TIMESTAMP2 |
27 | # define MRN_HAVE_MYSQL_TYPE_DATETIME2 |
28 | # define MRN_HAVE_MYSQL_TYPE_TIME2 |
29 | #endif |
30 | |
31 | #if MYSQL_VERSION_ID >= 50709 && !defined(MRN_MARIADB_P) |
32 | # define MRN_HAVE_MYSQL_TYPE_JSON |
33 | #endif |
34 | |
35 | #if MYSQL_VERSION_ID < 50603 |
36 | typedef MYSQL_ERROR Sql_condition; |
37 | #endif |
38 | |
39 | #if defined(MRN_MARIADB_P) |
40 | # if MYSQL_VERSION_ID < 100000 |
41 | typedef COST_VECT Cost_estimate; |
42 | # endif |
43 | #endif |
44 | |
45 | #ifndef MRN_MARIADB_P |
46 | typedef char *range_id_t; |
47 | #endif |
48 | |
49 | #if defined(MRN_MARIADB_P) || MYSQL_VERSION_ID < 80002 |
50 | typedef st_select_lex SELECT_LEX; |
51 | #endif |
52 | |
53 | #if MYSQL_VERSION_ID >= 50609 |
54 | # define MRN_KEY_HAS_USER_DEFINED_KEYPARTS |
55 | #endif |
56 | |
57 | #ifdef MRN_KEY_HAS_USER_DEFINED_KEYPARTS |
58 | # define KEY_N_KEY_PARTS(key) (key)->user_defined_key_parts |
59 | #else |
60 | # define KEY_N_KEY_PARTS(key) (key)->key_parts |
61 | #endif |
62 | |
63 | #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100213 |
64 | # define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \ |
65 | init_alloc_root(PTR, "mroonga", SZ1, SZ2, FLAG) |
66 | #elif defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000 |
67 | # define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \ |
68 | init_alloc_root(PTR, SZ1, SZ2, FLAG) |
69 | #elif MYSQL_VERSION_ID >= 50706 |
70 | # define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \ |
71 | init_alloc_root(mrn_memory_key, PTR, SZ1, SZ2) |
72 | #else |
73 | # define mrn_init_alloc_root(PTR, SZ1, SZ2, FLAG) \ |
74 | init_alloc_root(PTR, SZ1, SZ2) |
75 | #endif |
76 | |
77 | #if MYSQL_VERSION_ID < 100002 || !defined(MRN_MARIADB_P) |
78 | # define GTS_TABLE 0 |
79 | #endif |
80 | |
81 | #if MYSQL_VERSION_ID >= 50607 |
82 | # if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P) |
83 | # define MRN_GET_ERROR_MESSAGE thd_get_error_message(current_thd) |
84 | # define MRN_GET_ERROR_NUMBER thd_get_error_number(current_thd) |
85 | # define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd_get_error_row(thd) |
86 | # else |
87 | # define MRN_GET_ERROR_MESSAGE current_thd->get_stmt_da()->message() |
88 | # define MRN_GET_ERROR_NUMBER current_thd->get_stmt_da()->sql_errno() |
89 | # if MYSQL_VERSION_ID >= 50706 |
90 | # define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) \ |
91 | thd->get_stmt_da()->current_row_for_condition() |
92 | # else |
93 | # define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) \ |
94 | thd->get_stmt_da()->current_row_for_warning() |
95 | # endif |
96 | # endif |
97 | #else |
98 | # define MRN_GET_ERROR_MESSAGE current_thd->stmt_da->message() |
99 | # define MRN_GET_ERROR_NUMBER current_thd->stmt_da->sql_errno() |
100 | # define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->warning_info->current_row_for_warning() |
101 | #endif |
102 | |
103 | #if MYSQL_VERSION_ID >= 50607 && !defined(MRN_MARIADB_P) |
104 | # define MRN_ITEM_HAVE_ITEM_NAME |
105 | #endif |
106 | |
107 | #if MYSQL_VERSION_ID < 100000 |
108 | # define MRN_HAVE_TABLE_DEF_CACHE |
109 | #endif |
110 | |
111 | #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100009 |
112 | # define MRN_HAVE_TDC_ACQUIRE_SHARE |
113 | # if MYSQL_VERSION_ID < 100200 |
114 | # define MRN_TDC_ACQUIRE_SHARE_REQUIRE_KEY |
115 | # endif |
116 | #endif |
117 | |
118 | #if MYSQL_VERSION_ID >= 50613 |
119 | # define MRN_HAVE_ALTER_INFO |
120 | #endif |
121 | |
122 | #if MYSQL_VERSION_ID >= 50603 |
123 | # define MRN_HAVE_GET_TABLE_DEF_KEY |
124 | #endif |
125 | |
126 | #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100004 |
127 | # define MRN_TABLE_SHARE_HAVE_LOCK_SHARE |
128 | #endif |
129 | |
130 | #ifndef TIME_FUZZY_DATE |
131 | /* For MariaDB 10. */ |
132 | # ifdef TIME_FUZZY_DATES |
133 | # define TIME_FUZZY_DATE TIME_FUZZY_DATES |
134 | # endif |
135 | #endif |
136 | |
137 | #if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P) |
138 | # define MRN_USE_MYSQL_DATA_HOME |
139 | #endif |
140 | |
141 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
142 | # define MRN_SEVERITY_WARNING Sql_condition::SL_WARNING |
143 | #else |
144 | # define MRN_SEVERITY_WARNING Sql_condition::WARN_LEVEL_WARN |
145 | #endif |
146 | |
147 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
148 | # define MRN_HAVE_PSI_MEMORY_KEY |
149 | #endif |
150 | |
151 | #ifdef MRN_HAVE_PSI_MEMORY_KEY |
152 | # define mrn_my_malloc(size, flags) \ |
153 | my_malloc(mrn_memory_key, size, flags) |
154 | # define mrn_my_strdup(string, flags) \ |
155 | my_strdup(mrn_memory_key, string, flags) |
156 | # define mrn_my_strndup(string, size, flags) \ |
157 | my_strndup(mrn_memory_key, string, size, flags) |
158 | # define mrn_my_multi_malloc(flags, ...) \ |
159 | my_multi_malloc(mrn_memory_key, flags, __VA_ARGS__) |
160 | #else |
161 | # define mrn_my_malloc(size, flags) my_malloc(size, flags) |
162 | # define mrn_my_strdup(string, flags) my_strdup(string, flags) |
163 | # define mrn_my_strndup(string, size, flags) \ |
164 | my_strndup(string, size, flags) |
165 | # define mrn_my_multi_malloc(flags, ...) \ |
166 | my_multi_malloc(flags, __VA_ARGS__) |
167 | #endif |
168 | |
169 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
170 | # define MRN_STRING_FREE(string) string.mem_free(); |
171 | #else |
172 | # define MRN_STRING_FREE(string) string.free(); |
173 | #endif |
174 | |
175 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
176 | # define MRN_THD_DB_PATH(thd) ((thd)->db().str) |
177 | #else |
178 | # define MRN_THD_DB_PATH(thd) ((thd)->db.str) |
179 | #endif |
180 | |
181 | #ifndef INT_MAX64 |
182 | # define INT_MAX64 LONGLONG_MAX |
183 | #endif |
184 | |
185 | #ifdef UINT_MAX |
186 | # define UINT_MAX64 UINT_MAX |
187 | #else |
188 | # define UINT_MAX64 LONGLONG_MAX |
189 | #endif |
190 | |
191 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
192 | # define mrn_my_stpmov(dst, src) my_stpmov(dst, src) |
193 | #else |
194 | # define mrn_my_stpmov(dst, src) strmov(dst, src) |
195 | #endif |
196 | |
197 | #if MYSQL_VERSION_ID >= 50607 |
198 | # if !defined(MRN_MARIADB_P) |
199 | # define MRN_HAVE_SQL_OPTIMIZER_H |
200 | # endif |
201 | #endif |
202 | |
203 | #if MYSQL_VERSION_ID >= 50600 && !defined(MRN_MARIADB_P) |
204 | # define MRN_HAVE_BINLOG_H |
205 | #endif |
206 | |
207 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
208 | # define MRN_HAVE_SPATIAL |
209 | #elif defined(HAVE_SPATIAL) |
210 | # define MRN_HAVE_SPATIAL |
211 | #endif |
212 | |
213 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
214 | # define MRN_FORMAT_STRING_LENGTH "zu" |
215 | #else |
216 | # define MRN_FORMAT_STRING_LENGTH "u" |
217 | #endif |
218 | |
219 | #ifdef MRN_MARIADB_P |
220 | # define MRN_SUPPORT_CUSTOM_OPTIONS |
221 | #endif |
222 | |
223 | #ifdef MRN_MARIADB_P |
224 | # define MRN_HAVE_ITEM_EQUAL_FIELDS_ITERATOR |
225 | #endif |
226 | |
227 | #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) |
228 | # define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ |
229 | ((select_lex)->where_cond()) |
230 | # define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ |
231 | ((select_lex)->having_cond()) |
232 | # define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ |
233 | ((select_lex)->active_options()) |
234 | #else |
235 | # define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ |
236 | ((select_lex)->where) |
237 | # define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ |
238 | ((select_lex)->having) |
239 | # define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ |
240 | ((select_lex)->options) |
241 | #endif |
242 | |
243 | #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000 |
244 | # if MYSQL_VERSION_ID >= 100213 |
245 | # define mrn_init_sql_alloc(thd, mem_root) \ |
246 | init_sql_alloc(mem_root, "Mroonga", \ |
247 | TABLE_ALLOC_BLOCK_SIZE, \ |
248 | 0, \ |
249 | MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC)) |
250 | #elif MYSQL_VERSION_ID >= 100104 |
251 | # define mrn_init_sql_alloc(thd, mem_root) \ |
252 | init_sql_alloc(mem_root, \ |
253 | TABLE_ALLOC_BLOCK_SIZE, \ |
254 | 0, \ |
255 | MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC)) |
256 | # else |
257 | # define mrn_init_sql_alloc(thd, mem_root) \ |
258 | init_sql_alloc(mem_root, \ |
259 | TABLE_ALLOC_BLOCK_SIZE, \ |
260 | 0, \ |
261 | MYF(0)) |
262 | # endif |
263 | #else |
264 | # if MYSQL_VERSION_ID >= 50709 |
265 | # define mrn_init_sql_alloc(thd, mem_root) \ |
266 | init_sql_alloc(mrn_memory_key, \ |
267 | mem_root, \ |
268 | TABLE_ALLOC_BLOCK_SIZE, \ |
269 | 0) |
270 | # else |
271 | # define mrn_init_sql_alloc(thd, mem_root) \ |
272 | init_sql_alloc(mem_root, \ |
273 | TABLE_ALLOC_BLOCK_SIZE, \ |
274 | 0) |
275 | # endif |
276 | #endif |
277 | |
278 | #ifdef MRN_MARIADB_P |
279 | # define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning |
280 | #else |
281 | # if MYSQL_VERSION_ID >= 50706 |
282 | # define MRN_ABORT_ON_WARNING(thd) thd->is_strict_mode() |
283 | # else |
284 | # define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning |
285 | # endif |
286 | #endif |
287 | |
288 | #define MRN_ERROR_CODE_DATA_TRUNCATE(thd) \ |
289 | (MRN_ABORT_ON_WARNING(thd) ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED) |
290 | |
291 | #if MYSQL_VERSION_ID >= 50709 && !defined(MRN_MARIADB_P) |
292 | # define mrn_my_hash_init(hash, \ |
293 | charset, \ |
294 | default_array_elements, \ |
295 | key_offset, \ |
296 | key_length, \ |
297 | get_key, \ |
298 | free_element, \ |
299 | flags) \ |
300 | my_hash_init(hash, \ |
301 | charset, \ |
302 | default_array_elements, \ |
303 | key_offset, \ |
304 | key_length, \ |
305 | get_key, \ |
306 | free_element, \ |
307 | flags, \ |
308 | mrn_memory_key) |
309 | #else |
310 | # define mrn_my_hash_init(hash, \ |
311 | charset, \ |
312 | default_array_elements, \ |
313 | key_offset, \ |
314 | key_length, \ |
315 | get_key, \ |
316 | free_element, \ |
317 | flags) \ |
318 | my_hash_init(hash, \ |
319 | charset, \ |
320 | default_array_elements, \ |
321 | key_offset, \ |
322 | key_length, \ |
323 | get_key, \ |
324 | free_element, \ |
325 | flags) |
326 | #endif |
327 | |
328 | #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000 |
329 | # define mrn_strconvert(from_cs, \ |
330 | from, \ |
331 | from_length, \ |
332 | to_cs, \ |
333 | to, \ |
334 | to_length, \ |
335 | errors) \ |
336 | strconvert((from_cs), \ |
337 | (from), \ |
338 | (from_length), \ |
339 | (to_cs), \ |
340 | (to), \ |
341 | (to_length), \ |
342 | (errors)) |
343 | #else |
344 | # define mrn_strconvert(from_cs, \ |
345 | from, \ |
346 | from_length, \ |
347 | to_cs, \ |
348 | to, \ |
349 | to_length, \ |
350 | errors) \ |
351 | strconvert((from_cs), \ |
352 | (from), \ |
353 | (to_cs), \ |
354 | (to), \ |
355 | (to_length), \ |
356 | (errors)) |
357 | #endif |
358 | |
359 | #if MYSQL_VERSION_ID >= 50717 && !defined(MRN_MARIADB_P) |
360 | # define mrn_is_directory_separator(c) \ |
361 | is_directory_separator((c)) |
362 | #else |
363 | # define mrn_is_directory_separator(c) \ |
364 | (c == FN_LIBCHAR || c == FN_LIBCHAR2) |
365 | #endif |
366 | |
367 | #if ((MYSQL_VERSION_ID < 50636) || \ |
368 | (MYSQL_VERSION_ID >= 50700 && MYSQL_VERSION_ID < 50718)) && !defined(MRN_MARIADB_P) |
369 | # define MRN_HAVE_MYSQL_FIELD_PART_OF_KEY_NOT_CLUSTERED |
370 | #endif |
371 | |
372 | #if defined(MRN_MARIADB_P) && \ |
373 | ((MYSQL_VERSION_ID >= 100207) || \ |
374 | ((MYSQL_VERSION_ID >= 100126) && (MYSQL_VERSION_ID < 100200)) || \ |
375 | ((MYSQL_VERSION_ID >= 100032) && (MYSQL_VERSION_ID < 100100)) || \ |
376 | ((MYSQL_VERSION_ID >= 50557) && (MYSQL_VERSION_ID < 100000))) |
377 | # define mrn_create_partition_name(out, \ |
378 | out_length, \ |
379 | in1, \ |
380 | in2, \ |
381 | name_variant, \ |
382 | translate) \ |
383 | create_partition_name(out, out_length, in1, in2, name_variant, translate) |
384 | # define mrn_create_subpartition_name(out, \ |
385 | out_length, \ |
386 | in1, \ |
387 | in2, \ |
388 | in3, \ |
389 | name_variant) \ |
390 | create_subpartition_name(out, out_length, in1, in2, in3, name_variant) |
391 | #else |
392 | # define mrn_create_partition_name(out, \ |
393 | out_length, \ |
394 | in1, \ |
395 | in2, \ |
396 | name_variant, \ |
397 | translate) \ |
398 | (create_partition_name(out, in1, in2, name_variant, translate), 0) |
399 | # define mrn_create_subpartition_name(out, \ |
400 | out_length, \ |
401 | in1, \ |
402 | in2, \ |
403 | in3, \ |
404 | name_variant) \ |
405 | (create_subpartition_name(out, in1, in2, in3, name_variant), 0) |
406 | #endif |
407 | |
408 | #if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) |
409 | # define ITEM_SUM_GET_NEST_LEVEL(sum_item) (sum_item)->base_select->nest_level |
410 | # define ITEM_SUM_GET_AGGR_LEVEL(sum_item) (sum_item)->aggr_select->nest_level |
411 | # define ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item) (sum_item)->max_aggr_level |
412 | #else |
413 | # define ITEM_SUM_GET_NEST_LEVEL(sum_item) (sum_item)->nest_level |
414 | # define ITEM_SUM_GET_AGGR_LEVEL(sum_item) (sum_item)->aggr_level |
415 | # define ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item) (sum_item)->max_arg_level |
416 | #endif |
417 | |
418 | #if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) |
419 | typedef bool mrn_bool; |
420 | #else |
421 | typedef my_bool mrn_bool; |
422 | #endif |
423 | |
424 | #define MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(type, variable_name, variable_size) \ |
425 | type *variable_name = \ |
426 | (type *)mrn_my_malloc(sizeof(type) * (variable_size), MYF(MY_WME)) |
427 | #define MRN_FREE_VARIABLE_LENGTH_ARRAYS(variable_name) \ |
428 | my_free(variable_name) |
429 | |
430 | #if ((defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100203)) || \ |
431 | (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50711) |
432 | # define MRN_ALTER_INPLACE_INFO_ADD_VIRTUAL_COLUMN \ |
433 | ALTER_ADD_VIRTUAL_COLUMN |
434 | # define MRN_ALTER_INPLACE_INFO_ADD_STORED_BASE_COLUMN \ |
435 | ALTER_ADD_STORED_BASE_COLUMN |
436 | # define MRN_ALTER_INPLACE_INFO_ADD_STORED_GENERATED_COLUMN \ |
437 | ALTER_ADD_STORED_GENERATED_COLUMN |
438 | #else |
439 | # define MRN_ALTER_INPLACE_INFO_ADD_VIRTUAL_COLUMN 0 |
440 | # define MRN_ALTER_INPLACE_INFO_ADD_STORED_BASE_COLUMN \ |
441 | Alter_inplace_info::ADD_COLUMN |
442 | # define MRN_ALTER_INPLACE_INFO_ADD_STORED_GENERATED_COLUMN 0 |
443 | #endif |
444 | |
445 | #if (defined(HA_CAN_VIRTUAL_COLUMNS) || defined(HA_GENERATED_COLUMNS)) |
446 | # define MRN_SUPPORT_GENERATED_COLUMNS |
447 | #endif |
448 | |
449 | #ifdef MRN_MARIADB_P |
450 | # if (MYSQL_VERSION_ID >= 100200) |
451 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ |
452 | (!field->stored_in_db()) |
453 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ |
454 | (field->vcol_info && field->vcol_info->is_stored()) |
455 | # elif (MYSQL_VERSION_ID >= 50500) |
456 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ |
457 | (!field->stored_in_db) |
458 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ |
459 | (field->vcol_info && field->vcol_info->is_stored()) |
460 | # else |
461 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) false |
462 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) false |
463 | # endif |
464 | #else |
465 | # if (MYSQL_VERSION_ID >= 50708) |
466 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ |
467 | (field->is_virtual_gcol()) |
468 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ |
469 | (field->is_gcol() && !field->is_virtual_gcol()) |
470 | # elif (MYSQL_VERSION_ID >= 50706) |
471 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ |
472 | (!field->stored_in_db) |
473 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ |
474 | (field->gcol_info && field->gcol_info->get_field_stored()) |
475 | # else |
476 | # define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) false |
477 | # define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) false |
478 | # endif |
479 | #endif |
480 | |
481 | #ifdef MRN_MARIADB_P |
482 | # if (MYSQL_VERSION_ID >= 100203) |
483 | # define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \ |
484 | (table->update_virtual_field(field)) |
485 | # else |
486 | # define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \ |
487 | (field->vcol_info->expr_item->save_in_field(field, 0)) |
488 | # endif |
489 | #endif |
490 | |
491 | #endif /* MRN_MYSQL_COMPAT_H_ */ |
492 | |