126
122
The variables are linked into the list. A variable is added to
127
123
it in the constructor (see sys_var class for details).
129
static sys_var_chain vars = { NULL, NULL };
131
static sys_var_session_uint64_t
132
sys_auto_increment_increment(&vars, "auto_increment_increment",
133
&system_variables::auto_increment_increment);
134
static sys_var_session_uint64_t
135
sys_auto_increment_offset(&vars, "auto_increment_offset",
136
&system_variables::auto_increment_offset);
138
static sys_var_const_str sys_basedir(&vars, "basedir", drizzle_home);
139
static sys_var_session_uint64_t sys_bulk_insert_buff_size(&vars, "bulk_insert_buffer_size",
140
&system_variables::bulk_insert_buff_size);
141
static sys_var_session_uint32_t sys_completion_type(&vars, "completion_type",
142
&system_variables::completion_type,
125
static sys_var_session_uint64_t
126
sys_auto_increment_increment("auto_increment_increment",
127
&drizzle_system_variables::auto_increment_increment);
128
static sys_var_session_uint64_t
129
sys_auto_increment_offset("auto_increment_offset",
130
&drizzle_system_variables::auto_increment_offset);
132
static sys_var_fs_path sys_basedir("basedir", basedir);
133
static sys_var_fs_path sys_pid_file("pid_file", pid_file);
134
static sys_var_fs_path sys_plugin_dir("plugin_dir", plugin_dir);
136
static sys_var_size_t_ptr sys_thread_stack_size("thread_stack",
137
&my_thread_stack_size);
138
static sys_var_constrained_value_readonly<uint32_t> sys_back_log("back_log", back_log);
140
static sys_var_session_uint64_t sys_bulk_insert_buff_size("bulk_insert_buffer_size",
141
&drizzle_system_variables::bulk_insert_buff_size);
142
static sys_var_session_uint32_t sys_completion_type("completion_type",
143
&drizzle_system_variables::completion_type,
143
144
check_completion_type,
144
145
fix_completion_type);
145
146
static sys_var_collation_sv
146
sys_collation_server(&vars, "collation_server", &system_variables::collation_server, &default_charset_info);
147
static sys_var_const_str sys_datadir(&vars, "datadir", data_home_real);
147
sys_collation_server("collation_server", &drizzle_system_variables::collation_server, &default_charset_info);
148
static sys_var_fs_path sys_datadir("datadir", getDataHome());
149
static sys_var_session_uint64_t sys_join_buffer_size(&vars, "join_buffer_size",
150
&system_variables::join_buff_size);
151
static sys_var_session_uint32_t sys_max_allowed_packet(&vars, "max_allowed_packet",
152
&system_variables::max_allowed_packet);
153
static sys_var_uint64_t_ptr sys_max_connect_errors(&vars, "max_connect_errors",
154
&max_connect_errors);
155
static sys_var_session_uint64_t sys_max_error_count(&vars, "max_error_count",
156
&system_variables::max_error_count);
157
static sys_var_session_uint64_t sys_max_heap_table_size(&vars, "max_heap_table_size",
158
&system_variables::max_heap_table_size);
159
static sys_var_session_uint64_t sys_pseudo_thread_id(&vars, "pseudo_thread_id",
160
&system_variables::pseudo_thread_id,
150
static sys_var_session_uint64_t sys_join_buffer_size("join_buffer_size",
151
&drizzle_system_variables::join_buff_size);
152
static sys_var_session_uint32_t sys_max_allowed_packet("max_allowed_packet",
153
&drizzle_system_variables::max_allowed_packet);
154
static sys_var_session_uint64_t sys_max_error_count("max_error_count",
155
&drizzle_system_variables::max_error_count);
156
static sys_var_session_uint64_t sys_max_heap_table_size("max_heap_table_size",
157
&drizzle_system_variables::max_heap_table_size);
158
static sys_var_session_uint64_t sys_pseudo_thread_id("pseudo_thread_id",
159
&drizzle_system_variables::pseudo_thread_id,
161
160
0, check_pseudo_thread_id);
162
static sys_var_session_ha_rows sys_max_join_size(&vars, "max_join_size",
163
&system_variables::max_join_size,
161
static sys_var_session_ha_rows sys_max_join_size("max_join_size",
162
&drizzle_system_variables::max_join_size,
164
163
fix_max_join_size);
165
static sys_var_session_uint64_t sys_max_seeks_for_key(&vars, "max_seeks_for_key",
166
&system_variables::max_seeks_for_key);
167
static sys_var_session_uint64_t sys_max_length_for_sort_data(&vars, "max_length_for_sort_data",
168
&system_variables::max_length_for_sort_data);
169
static sys_var_session_size_t sys_max_sort_length(&vars, "max_sort_length",
170
&system_variables::max_sort_length);
171
static sys_var_uint64_t_ptr sys_max_write_lock_count(&vars, "max_write_lock_count",
164
static sys_var_session_uint64_t sys_max_seeks_for_key("max_seeks_for_key",
165
&drizzle_system_variables::max_seeks_for_key);
166
static sys_var_session_uint64_t sys_max_length_for_sort_data("max_length_for_sort_data",
167
&drizzle_system_variables::max_length_for_sort_data);
168
static sys_var_session_size_t sys_max_sort_length("max_sort_length",
169
&drizzle_system_variables::max_sort_length);
170
static sys_var_uint64_t_ptr sys_max_write_lock_count("max_write_lock_count",
172
171
&max_write_lock_count);
173
static sys_var_session_uint64_t sys_min_examined_row_limit(&vars, "min_examined_row_limit",
174
&system_variables::min_examined_row_limit);
172
static sys_var_session_uint64_t sys_min_examined_row_limit("min_examined_row_limit",
173
&drizzle_system_variables::min_examined_row_limit);
176
175
/* these two cannot be static */
177
static sys_var_session_bool sys_optimizer_prune_level(&vars, "optimizer_prune_level",
178
&system_variables::optimizer_prune_level);
179
static sys_var_session_uint32_t sys_optimizer_search_depth(&vars, "optimizer_search_depth",
180
&system_variables::optimizer_search_depth);
182
static sys_var_session_uint64_t sys_preload_buff_size(&vars, "preload_buffer_size",
183
&system_variables::preload_buff_size);
184
static sys_var_session_uint32_t sys_read_buff_size(&vars, "read_buffer_size",
185
&system_variables::read_buff_size);
186
static sys_var_session_uint32_t sys_read_rnd_buff_size(&vars, "read_rnd_buffer_size",
187
&system_variables::read_rnd_buff_size);
188
static sys_var_session_uint32_t sys_div_precincrement(&vars, "div_precision_increment",
189
&system_variables::div_precincrement);
191
static sys_var_session_size_t sys_range_alloc_block_size(&vars, "range_alloc_block_size",
192
&system_variables::range_alloc_block_size);
193
static sys_var_session_uint32_t sys_query_alloc_block_size(&vars, "query_alloc_block_size",
194
&system_variables::query_alloc_block_size,
195
false, fix_session_mem_root);
196
static sys_var_session_uint32_t sys_query_prealloc_size(&vars, "query_prealloc_size",
197
&system_variables::query_prealloc_size,
198
false, fix_session_mem_root);
199
static sys_var_readonly sys_tmpdir(&vars, "tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
201
static sys_var_const_str_ptr sys_secure_file_priv(&vars, "secure_file_priv",
202
&opt_secure_file_priv);
204
static sys_var_const_str_ptr sys_scheduler(&vars, "scheduler",
207
static sys_var_uint32_t_ptr sys_server_id(&vars, "server_id", &server_id,
176
static sys_var_session_bool sys_optimizer_prune_level("optimizer_prune_level",
177
&drizzle_system_variables::optimizer_prune_level);
178
static sys_var_session_uint32_t sys_optimizer_search_depth("optimizer_search_depth",
179
&drizzle_system_variables::optimizer_search_depth);
181
static sys_var_session_uint64_t sys_preload_buff_size("preload_buffer_size",
182
&drizzle_system_variables::preload_buff_size);
183
static sys_var_session_uint32_t sys_read_buff_size("read_buffer_size",
184
&drizzle_system_variables::read_buff_size);
185
static sys_var_session_uint32_t sys_read_rnd_buff_size("read_rnd_buffer_size",
186
&drizzle_system_variables::read_rnd_buff_size);
187
static sys_var_session_uint32_t sys_div_precincrement("div_precision_increment",
188
&drizzle_system_variables::div_precincrement);
190
static sys_var_session_size_t sys_range_alloc_block_size("range_alloc_block_size",
191
&drizzle_system_variables::range_alloc_block_size);
193
static sys_var_session_bool sys_replicate_query("replicate_query",
194
&drizzle_system_variables::replicate_query);
196
static sys_var_session_uint32_t sys_query_alloc_block_size("query_alloc_block_size",
197
&drizzle_system_variables::query_alloc_block_size,
198
NULL, fix_session_mem_root);
199
static sys_var_session_uint32_t sys_query_prealloc_size("query_prealloc_size",
200
&drizzle_system_variables::query_prealloc_size,
201
NULL, fix_session_mem_root);
202
static sys_var_readonly sys_tmpdir("tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
204
static sys_var_fs_path sys_secure_file_priv("secure_file_priv",
207
static sys_var_const_str_ptr sys_scheduler("scheduler",
208
(char**)&opt_scheduler);
210
static sys_var_uint32_t_ptr sys_server_id("server_id", &server_id,
210
static sys_var_session_size_t sys_sort_buffer(&vars, "sort_buffer_size",
211
&system_variables::sortbuff_size);
213
static sys_var_session_storage_engine sys_storage_engine(&vars, "storage_engine",
214
&system_variables::storage_engine);
215
static sys_var_const_str sys_system_time_zone(&vars, "system_time_zone",
213
static sys_var_session_size_t sys_sort_buffer("sort_buffer_size",
214
&drizzle_system_variables::sortbuff_size);
216
static sys_var_size_t_ptr_readonly sys_transaction_message_threshold("transaction_message_threshold",
217
&transaction_message_threshold);
219
static sys_var_session_storage_engine sys_storage_engine("storage_engine",
220
&drizzle_system_variables::storage_engine);
221
static sys_var_const_str sys_system_time_zone("system_time_zone",
216
222
system_time_zone);
217
static sys_var_size_t_ptr sys_table_def_size(&vars, "table_definition_cache",
223
static sys_var_size_t_ptr sys_table_def_size("table_definition_cache",
218
224
&table_def_size);
219
static sys_var_uint64_t_ptr sys_table_cache_size(&vars, "table_open_cache",
225
static sys_var_uint64_t_ptr sys_table_cache_size("table_open_cache",
220
226
&table_cache_size);
221
static sys_var_uint64_t_ptr sys_table_lock_wait_timeout(&vars, "table_lock_wait_timeout",
227
static sys_var_uint64_t_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout",
222
228
&table_lock_wait_timeout);
223
static sys_var_session_enum sys_tx_isolation(&vars, "tx_isolation",
224
&system_variables::tx_isolation,
229
static sys_var_session_enum sys_tx_isolation("tx_isolation",
230
&drizzle_system_variables::tx_isolation,
225
231
&tx_isolation_typelib,
226
232
fix_tx_isolation,
227
233
check_tx_isolation);
228
static sys_var_session_uint64_t sys_tmp_table_size(&vars, "tmp_table_size",
229
&system_variables::tmp_table_size);
230
static sys_var_bool_ptr sys_timed_mutexes(&vars, "timed_mutexes", &internal::timed_mutexes);
231
static sys_var_const_str sys_version(&vars, "version", version().c_str());
234
static sys_var_session_uint64_t sys_tmp_table_size("tmp_table_size",
235
&drizzle_system_variables::tmp_table_size);
236
static sys_var_bool_ptr sys_timed_mutexes("timed_mutexes", &internal::timed_mutexes);
237
static sys_var_const_str sys_version("version", version().c_str());
233
static sys_var_const_str sys_version_comment(&vars, "version_comment",
239
static sys_var_const_str sys_version_comment("version_comment",
234
240
COMPILATION_COMMENT);
235
static sys_var_const_str sys_version_compile_machine(&vars, "version_compile_machine",
241
static sys_var_const_str sys_version_compile_machine("version_compile_machine",
237
static sys_var_const_str sys_version_compile_os(&vars, "version_compile_os",
243
static sys_var_const_str sys_version_compile_os("version_compile_os",
239
static sys_var_const_str sys_version_compile_vendor(&vars, "version_compile_vendor",
245
static sys_var_const_str sys_version_compile_vendor("version_compile_vendor",
242
248
/* Variables that are bits in Session */
244
sys_var_session_bit sys_autocommit(&vars, "autocommit", 0,
250
sys_var_session_bit sys_autocommit("autocommit", 0,
245
251
set_option_autocommit,
246
252
OPTION_NOT_AUTOCOMMIT,
248
static sys_var_session_bit sys_big_selects(&vars, "sql_big_selects", 0,
254
static sys_var_session_bit sys_big_selects("sql_big_selects", 0,
250
256
OPTION_BIG_SELECTS);
251
static sys_var_session_bit sys_sql_warnings(&vars, "sql_warnings", 0,
257
static sys_var_session_bit sys_sql_warnings("sql_warnings", 0,
253
259
OPTION_WARNINGS);
254
static sys_var_session_bit sys_sql_notes(&vars, "sql_notes", 0,
260
static sys_var_session_bit sys_sql_notes("sql_notes", 0,
256
262
OPTION_SQL_NOTES);
257
static sys_var_session_bit sys_buffer_results(&vars, "sql_buffer_result", 0,
263
static sys_var_session_bit sys_buffer_results("sql_buffer_result", 0,
259
265
OPTION_BUFFER_RESULT);
260
static sys_var_session_bit sys_foreign_key_checks(&vars, "foreign_key_checks", 0,
266
static sys_var_session_bit sys_foreign_key_checks("foreign_key_checks", 0,
262
268
OPTION_NO_FOREIGN_KEY_CHECKS, 1);
263
static sys_var_session_bit sys_unique_checks(&vars, "unique_checks", 0,
269
static sys_var_session_bit sys_unique_checks("unique_checks", 0,
265
271
OPTION_RELAXED_UNIQUE_CHECKS, 1);
266
272
/* Local state variables */
268
static sys_var_session_ha_rows sys_select_limit(&vars, "sql_select_limit",
269
&system_variables::select_limit);
270
static sys_var_timestamp sys_timestamp(&vars, "timestamp");
274
static sys_var_session_ha_rows sys_select_limit("sql_select_limit",
275
&drizzle_system_variables::select_limit);
276
static sys_var_timestamp sys_timestamp("timestamp");
271
277
static sys_var_last_insert_id
272
sys_last_insert_id(&vars, "last_insert_id");
278
sys_last_insert_id("last_insert_id");
274
280
identity is an alias for last_insert_id(), so that we are compatible
277
static sys_var_last_insert_id sys_identity(&vars, "identity");
283
static sys_var_last_insert_id sys_identity("identity");
279
static sys_var_session_lc_time_names sys_lc_time_names(&vars, "lc_time_names");
285
static sys_var_session_lc_time_names sys_lc_time_names("lc_time_names");
282
288
We want statements referring explicitly to @@session.insert_id to be
290
296
statement-based logging mode: t will be different on master and
293
static sys_var_readonly sys_error_count(&vars, "error_count",
299
static sys_var_readonly sys_error_count("error_count",
296
302
get_error_count);
297
static sys_var_readonly sys_warning_count(&vars, "warning_count",
303
static sys_var_readonly sys_warning_count("warning_count",
300
306
get_warning_count);
302
sys_var_session_uint64_t sys_group_concat_max_len(&vars, "group_concat_max_len",
303
&system_variables::group_concat_max_len);
308
sys_var_session_uint64_t sys_group_concat_max_len("group_concat_max_len",
309
&drizzle_system_variables::group_concat_max_len);
305
sys_var_session_time_zone sys_time_zone(&vars, "time_zone");
311
sys_var_session_time_zone sys_time_zone("time_zone");
307
313
/* Global read-only variable containing hostname */
308
static sys_var_const_str sys_hostname(&vars, "hostname", glob_hostname);
311
Additional variables (not derived from sys_var class, not accessible as
312
@@varname in SELECT or SET). Sorted in alphabetical order to facilitate
313
maintenance - SHOW VARIABLES will sort its output.
314
TODO: remove this list completely
317
#define FIXED_VARS_SIZE (sizeof(fixed_vars) / sizeof(drizzle_show_var))
318
static drizzle_show_var fixed_vars[]= {
319
{"back_log", (char*) &back_log, SHOW_INT},
320
{"language", language, SHOW_CHAR},
321
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
322
{"plugin_dir", (char*) opt_plugin_dir, SHOW_CHAR},
323
{"thread_stack", (char*) &my_thread_stack_size, SHOW_INT},
326
bool sys_var::check(Session *, set_var *var)
314
static sys_var_const_str sys_hostname("hostname", glob_hostname);
316
bool sys_var::check(Session *session, set_var *var)
328
var->save_result.uint64_t_value= var->value->val_int();
321
if ((res=(*check_func)(session, var)) < 0)
322
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
332
329
bool sys_var_str::check(Session *session, set_var *var)
338
335
if ((res=(*check_func)(session, var)) < 0)
339
336
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
340
bool sys_var_std_string::check(Session *session, set_var *var)
342
if (check_func == NULL)
347
int res= (*check_func)(session, var);
350
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
344
357
Functions to check and update variables
457
static bool get_unsigned32(Session *session, set_var *var)
459
if (var->value->unsigned_flag)
460
var->save_result.uint32_t_value=
461
static_cast<uint32_t>(var->value->val_int());
464
int64_t v= var->value->val_int();
466
throw_bounds_warning(session, true, true,var->var->getName().c_str(), v);
468
var->save_result.uint32_t_value=
469
static_cast<uint32_t>((v > UINT32_MAX) ? UINT32_MAX : (v < 0) ? 0 : v);
474
static bool get_unsigned64(Session *, set_var *var)
476
if (var->value->unsigned_flag)
477
var->save_result.uint64_t_value=(uint64_t) var->value->val_int();
480
int64_t v= var->value->val_int();
481
var->save_result.uint64_t_value= (uint64_t) ((v < 0) ? 0 : v);
486
static bool get_size_t(Session *, set_var *var)
488
if (var->value->unsigned_flag)
489
var->save_result.size_t_value= (size_t) var->value->val_int();
492
ssize_t v= (ssize_t)var->value->val_int();
493
var->save_result.size_t_value= (size_t) ((v < 0) ? 0 : v);
498
470
bool sys_var_uint32_t_ptr::check(Session *, set_var *var)
500
var->save_result.uint32_t_value= (uint32_t)var->value->val_int();
504
476
bool sys_var_uint32_t_ptr::update(Session *session, set_var *var)
506
uint32_t tmp= var->save_result.uint32_t_value;
507
LOCK_global_system_variables.lock();
478
uint64_t tmp= var->getInteger();
479
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
508
481
if (option_limits)
510
483
uint32_t newvalue= (uint32_t) fix_unsigned(session, tmp, option_limits);
484
if(static_cast<uint64_t>(newvalue) == tmp)
512
485
*value= newvalue;
515
*value= (uint32_t) tmp;
516
LOCK_global_system_variables.unlock();
489
*value= static_cast<uint32_t>(tmp);
521
void sys_var_uint32_t_ptr::set_default(Session *, sql_var_t)
496
void sys_var_uint32_t_ptr::set_default(Session *session, sql_var_t)
524
LOCK_global_system_variables.lock();
499
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
525
500
*value= (uint32_t)getopt_ull_limit_value((uint32_t) option_limits->def_value,
526
501
option_limits, ¬_used);
527
LOCK_global_system_variables.unlock();
531
505
bool sys_var_uint64_t_ptr::update(Session *session, set_var *var)
533
uint64_t tmp= var->save_result.uint64_t_value;
534
LOCK_global_system_variables.lock();
507
uint64_t tmp= var->getInteger();
508
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
535
510
if (option_limits)
537
uint64_t newvalue= (uint64_t) fix_unsigned(session, tmp, option_limits);
512
uint64_t newvalue= fix_unsigned(session, tmp, option_limits);
538
513
if(newvalue==tmp)
539
514
*value= newvalue;
542
*value= (uint64_t) tmp;
543
LOCK_global_system_variables.unlock();
548
void sys_var_uint64_t_ptr::set_default(Session *, sql_var_t)
525
void sys_var_uint64_t_ptr::set_default(Session *session, sql_var_t)
551
LOCK_global_system_variables.lock();
552
*value= getopt_ull_limit_value((uint64_t) option_limits->def_value,
553
option_limits, ¬_used);
554
LOCK_global_system_variables.unlock();
527
if (have_default_value)
529
*value= default_value;
534
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
535
*value= getopt_ull_limit_value((uint64_t) option_limits->def_value,
536
option_limits, ¬_used);
558
541
bool sys_var_size_t_ptr::update(Session *session, set_var *var)
560
size_t tmp= var->save_result.size_t_value;
561
LOCK_global_system_variables.lock();
543
size_t tmp= size_t(var->getInteger());
545
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
562
547
if (option_limits)
563
548
*value= fix_size_t(session, tmp, option_limits);
566
LOCK_global_system_variables.unlock();
571
void sys_var_size_t_ptr::set_default(Session *, sql_var_t)
556
void sys_var_size_t_ptr::set_default(Session *session, sql_var_t)
574
LOCK_global_system_variables.lock();
559
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
575
560
*value= (size_t)getopt_ull_limit_value((size_t) option_limits->def_value,
576
561
option_limits, ¬_used);
577
LOCK_global_system_variables.unlock();
564
bool sys_var_bool_ptr::check(Session *session, set_var *var)
566
return check_enum(session, var, &bool_typelib);
580
569
bool sys_var_bool_ptr::update(Session *, set_var *var)
582
*value= (bool) var->save_result.uint32_t_value;
571
*value= bool(var->getInteger());
587
576
void sys_var_bool_ptr::set_default(Session *, sql_var_t)
589
*value= (bool) option_limits->def_value;
578
*value= default_value;
1518
void add_sys_var_to_list(sys_var *var)
1520
string lower_name(var->getName());
1521
transform(lower_name.begin(), lower_name.end(),
1522
lower_name.begin(), ::tolower);
1524
/* this fails if there is a conflicting variable name. */
1525
if (system_variable_map.find(lower_name) != system_variable_map.end())
1527
errmsg_printf(error::ERROR, _("Variable named %s already exists!\n"),
1528
var->getName().c_str());
1532
pair<SystemVariableMap::iterator, bool> ret=
1533
system_variable_map.insert(make_pair(lower_name, var));
1534
if (ret.second == false)
1536
errmsg_printf(error::ERROR, _("Could not add Variable: %s\n"),
1537
var->getName().c_str());
1542
void add_sys_var_to_list(sys_var *var, struct option *long_options)
1544
add_sys_var_to_list(var);
1545
var->setOptionLimits(find_option(long_options, var->getName().c_str()));
1603
1549
Initialize the system variables
1610
1556
otherwise FAILURE
1617
for (sys_var *var= vars.first; var; var= var->getNext(), count++) {};
1619
if (my_init_dynamic_array(&fixed_show_vars, sizeof(drizzle_show_var),
1620
FIXED_VARS_SIZE + 64, 64))
1623
fixed_show_vars.elements= FIXED_VARS_SIZE;
1624
memcpy(fixed_show_vars.buffer, fixed_vars, sizeof(fixed_vars));
1626
vars.last->setNext(NULL);
1627
if (mysql_add_sys_var_chain(vars.first, my_long_options))
1563
add_sys_var_to_list(&sys_auto_increment_increment, my_long_options);
1564
add_sys_var_to_list(&sys_auto_increment_offset, my_long_options);
1565
add_sys_var_to_list(&sys_autocommit, my_long_options);
1566
add_sys_var_to_list(&sys_back_log, my_long_options);
1567
add_sys_var_to_list(&sys_basedir, my_long_options);
1568
add_sys_var_to_list(&sys_big_selects, my_long_options);
1569
add_sys_var_to_list(&sys_buffer_results, my_long_options);
1570
add_sys_var_to_list(&sys_bulk_insert_buff_size, my_long_options);
1571
add_sys_var_to_list(&sys_collation_server, my_long_options);
1572
add_sys_var_to_list(&sys_completion_type, my_long_options);
1573
add_sys_var_to_list(&sys_datadir, my_long_options);
1574
add_sys_var_to_list(&sys_div_precincrement, my_long_options);
1575
add_sys_var_to_list(&sys_error_count, my_long_options);
1576
add_sys_var_to_list(&sys_foreign_key_checks, my_long_options);
1577
add_sys_var_to_list(&sys_group_concat_max_len, my_long_options);
1578
add_sys_var_to_list(&sys_hostname, my_long_options);
1579
add_sys_var_to_list(&sys_identity, my_long_options);
1580
add_sys_var_to_list(&sys_join_buffer_size, my_long_options);
1581
add_sys_var_to_list(&sys_last_insert_id, my_long_options);
1582
add_sys_var_to_list(&sys_lc_time_names, my_long_options);
1583
add_sys_var_to_list(&sys_max_allowed_packet, my_long_options);
1584
add_sys_var_to_list(&sys_max_error_count, my_long_options);
1585
add_sys_var_to_list(&sys_max_heap_table_size, my_long_options);
1586
add_sys_var_to_list(&sys_max_join_size, my_long_options);
1587
add_sys_var_to_list(&sys_max_length_for_sort_data, my_long_options);
1588
add_sys_var_to_list(&sys_max_seeks_for_key, my_long_options);
1589
add_sys_var_to_list(&sys_max_sort_length, my_long_options);
1590
add_sys_var_to_list(&sys_max_write_lock_count, my_long_options);
1591
add_sys_var_to_list(&sys_min_examined_row_limit, my_long_options);
1592
add_sys_var_to_list(&sys_optimizer_prune_level, my_long_options);
1593
add_sys_var_to_list(&sys_optimizer_search_depth, my_long_options);
1594
add_sys_var_to_list(&sys_pid_file, my_long_options);
1595
add_sys_var_to_list(&sys_plugin_dir, my_long_options);
1596
add_sys_var_to_list(&sys_preload_buff_size, my_long_options);
1597
add_sys_var_to_list(&sys_pseudo_thread_id, my_long_options);
1598
add_sys_var_to_list(&sys_query_alloc_block_size, my_long_options);
1599
add_sys_var_to_list(&sys_query_prealloc_size, my_long_options);
1600
add_sys_var_to_list(&sys_range_alloc_block_size, my_long_options);
1601
add_sys_var_to_list(&sys_read_buff_size, my_long_options);
1602
add_sys_var_to_list(&sys_read_rnd_buff_size, my_long_options);
1603
add_sys_var_to_list(&sys_replicate_query, my_long_options);
1604
add_sys_var_to_list(&sys_scheduler, my_long_options);
1605
add_sys_var_to_list(&sys_secure_file_priv, my_long_options);
1606
add_sys_var_to_list(&sys_select_limit, my_long_options);
1607
add_sys_var_to_list(&sys_server_id, my_long_options);
1608
add_sys_var_to_list(&sys_sort_buffer, my_long_options);
1609
add_sys_var_to_list(&sys_sql_notes, my_long_options);
1610
add_sys_var_to_list(&sys_sql_warnings, my_long_options);
1611
add_sys_var_to_list(&sys_storage_engine, my_long_options);
1612
add_sys_var_to_list(&sys_system_time_zone, my_long_options);
1613
add_sys_var_to_list(&sys_table_cache_size, my_long_options);
1614
add_sys_var_to_list(&sys_table_def_size, my_long_options);
1615
add_sys_var_to_list(&sys_table_lock_wait_timeout, my_long_options);
1616
add_sys_var_to_list(&sys_thread_stack_size, my_long_options);
1617
add_sys_var_to_list(&sys_time_zone, my_long_options);
1618
add_sys_var_to_list(&sys_timed_mutexes, my_long_options);
1619
add_sys_var_to_list(&sys_timestamp, my_long_options);
1620
add_sys_var_to_list(&sys_tmp_table_size, my_long_options);
1621
add_sys_var_to_list(&sys_tmpdir, my_long_options);
1622
add_sys_var_to_list(&sys_transaction_message_threshold, my_long_options);
1623
add_sys_var_to_list(&sys_tx_isolation, my_long_options);
1624
add_sys_var_to_list(&sys_unique_checks, my_long_options);
1625
add_sys_var_to_list(&sys_version, my_long_options);
1626
add_sys_var_to_list(&sys_version_comment, my_long_options);
1627
add_sys_var_to_list(&sys_version_compile_machine, my_long_options);
1628
add_sys_var_to_list(&sys_version_compile_os, my_long_options);
1629
add_sys_var_to_list(&sys_version_compile_vendor, my_long_options);
1630
add_sys_var_to_list(&sys_warning_count, my_long_options);
1632
catch (std::exception&)
1634
errmsg_printf(error::ERROR, _("Failed to initialize system variables"));
1633
errmsg_printf(ERRMSG_LVL_ERROR, _("Failed to initialize system variables"));
1640
delete_dynamic(&fixed_show_vars);
1645
1642
Find a user set-table variable.
1647
@param str Name of system variable to find
1648
@param length Length of variable. zero means that we should use strlen()
1650
@param no_error Refuse to emit an error, even if one occurred.
1644
@param name Name of system variable to find
1653
1647
pointer pointer to variable definitions
1669
1663
result= (*iter).second;
1673
This function is only called from the sql_plugin.cc.
1674
A lock on LOCK_system_variable_hash should be held
1676
1666
if (result == NULL)
1684
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), (char*) str);
1668
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), name.c_str());
1694
Execute update of all variables.
1696
First run a check of all variables that all updates will go ok.
1697
If yes, then execute all updates, returning an error if any one failed.
1699
This should ensure that in all normal cases none all or variables are
1702
@param Session Thread id
1703
@param var_list List of variables to update
1708
1 ERROR, message sent (normally no variables was updated)
1710
-1 ERROR, message not sent
1713
int sql_set_variables(Session *session, List<set_var_base> *var_list)
1716
List_iterator_fast<set_var_base> it(*var_list);
1721
if ((error= var->check(session)))
1724
if (!(error= test(session->is_error())))
1728
error|= var->update(session); // Returns 0, -1 or 1
1732
free_underlaid_joins(session, &session->lex->select_lex);
1737
/*****************************************************************************
1738
Functions to handle SET mysql_internal_variable=const_expr
1739
*****************************************************************************/
1741
int set_var::check(Session *session)
1743
if (var->is_readonly())
1745
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), var->getName().c_str(), "read only");
1748
if (var->check_type(type))
1750
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
1751
my_error(err, MYF(0), var->getName().c_str());
1754
/* value is a NULL pointer if we are using SET ... = DEFAULT */
1757
if (var->check_default(type))
1759
my_error(ER_NO_DEFAULT, MYF(0), var->getName().c_str());
1765
if ((!value->fixed &&
1766
value->fix_fields(session, &value)) || value->check_cols(1))
1768
if (var->check_update_type(value->result_type()))
1770
my_error(ER_WRONG_TYPE_FOR_VAR, MYF(0), var->getName().c_str());
1773
return var->check(session, this) ? -1 : 0;
1779
@param session thread handler
1780
@returns 0|1 ok or ERROR
1782
@note ERROR can be only due to abnormal operations involving
1783
the server's execution evironment such as
1784
out of memory, hard disk failure or the computer blows up.
1785
Consider set_var::check() method if there is a need to return
1786
an error due to logics.
1788
int set_var::update(Session *session)
1791
var->set_default(session, type);
1792
else if (var->update(session, this))
1793
return -1; // should never happen
1794
if (var->getAfterUpdateTrigger())
1795
(*var->getAfterUpdateTrigger())(session, type);
1799
/*****************************************************************************
1800
Functions to handle SET @user_variable=const_expr
1801
*****************************************************************************/
1803
int set_var_user::check(Session *session)
1806
Item_func_set_user_var can't substitute something else on its place =>
1807
0 can be passed as last argument (reference on item)
1809
return (user_var_item->fix_fields(session, (Item**) 0) ||
1810
user_var_item->check(0)) ? -1 : 0;
1814
int set_var_user::update(Session *)
1816
if (user_var_item->update())
1818
/* Give an error if it's not given already */
1819
my_message(ER_SET_CONSTANTS_ONLY, ER(ER_SET_CONSTANTS_ONLY), MYF(0));
1825
1676
/****************************************************************************
1826
1677
Functions to handle table_type
1827
1678
****************************************************************************/
1829
/* Based upon sys_var::check_enum() */
1831
bool sys_var_session_storage_engine::check(Session *session, set_var *var)
1833
char buff[STRING_BUFFER_USUAL_SIZE];
1835
String str(buff, sizeof(buff), &my_charset_utf8_general_ci), *res;
1837
var->save_result.storage_engine= NULL;
1838
if (var->value->result_type() == STRING_RESULT)
1840
res= var->value->val_str(&str);
1841
if (res == NULL || res->ptr() == NULL)
1848
const std::string engine_name(res->ptr());
1849
plugin::StorageEngine *engine;
1850
var->save_result.storage_engine= plugin::StorageEngine::findByName(*session, engine_name);
1851
if (var->save_result.storage_engine == NULL)
1853
value= res->c_ptr();
1856
engine= var->save_result.storage_engine;
1863
my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), value);
1868
1680
unsigned char *sys_var_session_storage_engine::value_ptr(Session *session,
1869
1681
sql_var_t type,
1870
1682
const LEX_STRING *)