125
121
The variables are linked into the list. A variable is added to
126
122
it in the constructor (see sys_var class for details).
128
static sys_var_chain vars = { NULL, NULL };
130
static sys_var_session_uint64_t
131
sys_auto_increment_increment(&vars, "auto_increment_increment",
132
&system_variables::auto_increment_increment);
133
static sys_var_session_uint64_t
134
sys_auto_increment_offset(&vars, "auto_increment_offset",
135
&system_variables::auto_increment_offset);
137
static sys_var_const_str sys_basedir(&vars, "basedir", drizzle_home);
138
static sys_var_session_uint64_t sys_bulk_insert_buff_size(&vars, "bulk_insert_buffer_size",
139
&system_variables::bulk_insert_buff_size);
140
static sys_var_session_uint32_t sys_completion_type(&vars, "completion_type",
141
&system_variables::completion_type,
124
static sys_var_session_uint64_t
125
sys_auto_increment_increment("auto_increment_increment",
126
&drizzle_system_variables::auto_increment_increment);
127
static sys_var_session_uint64_t
128
sys_auto_increment_offset("auto_increment_offset",
129
&drizzle_system_variables::auto_increment_offset);
131
static sys_var_fs_path sys_basedir("basedir", basedir);
132
static sys_var_fs_path sys_pid_file("pid_file", pid_file);
133
static sys_var_fs_path sys_plugin_dir("plugin_dir", plugin_dir);
135
static sys_var_size_t_ptr sys_thread_stack_size("thread_stack",
136
&my_thread_stack_size);
137
static sys_var_constrained_value_readonly<uint32_t> sys_back_log("back_log", back_log);
139
static sys_var_session_uint64_t sys_bulk_insert_buff_size("bulk_insert_buffer_size",
140
&drizzle_system_variables::bulk_insert_buff_size);
141
static sys_var_session_uint32_t sys_completion_type("completion_type",
142
&drizzle_system_variables::completion_type,
142
143
check_completion_type,
143
144
fix_completion_type);
144
145
static sys_var_collation_sv
145
sys_collation_server(&vars, "collation_server", &system_variables::collation_server, &default_charset_info);
146
static sys_var_const_str sys_datadir(&vars, "datadir", drizzle_real_data_home);
146
sys_collation_server("collation_server", &drizzle_system_variables::collation_server, &default_charset_info);
147
static sys_var_fs_path sys_datadir("datadir", getDataHome());
148
static sys_var_session_uint64_t sys_join_buffer_size(&vars, "join_buffer_size",
149
&system_variables::join_buff_size);
150
static sys_var_session_uint32_t sys_max_allowed_packet(&vars, "max_allowed_packet",
151
&system_variables::max_allowed_packet);
152
static sys_var_uint64_t_ptr sys_max_connect_errors(&vars, "max_connect_errors",
153
&max_connect_errors);
154
static sys_var_session_uint64_t sys_max_error_count(&vars, "max_error_count",
155
&system_variables::max_error_count);
156
static sys_var_session_uint64_t sys_max_heap_table_size(&vars, "max_heap_table_size",
157
&system_variables::max_heap_table_size);
158
static sys_var_session_uint64_t sys_pseudo_thread_id(&vars, "pseudo_thread_id",
159
&system_variables::pseudo_thread_id,
149
static sys_var_session_uint64_t sys_join_buffer_size("join_buffer_size",
150
&drizzle_system_variables::join_buff_size);
151
static sys_var_session_uint32_t sys_max_allowed_packet("max_allowed_packet",
152
&drizzle_system_variables::max_allowed_packet);
153
static sys_var_session_uint64_t sys_max_error_count("max_error_count",
154
&drizzle_system_variables::max_error_count);
155
static sys_var_session_uint64_t sys_max_heap_table_size("max_heap_table_size",
156
&drizzle_system_variables::max_heap_table_size);
157
static sys_var_session_uint64_t sys_pseudo_thread_id("pseudo_thread_id",
158
&drizzle_system_variables::pseudo_thread_id,
160
159
0, check_pseudo_thread_id);
161
static sys_var_session_ha_rows sys_max_join_size(&vars, "max_join_size",
162
&system_variables::max_join_size,
160
static sys_var_session_ha_rows sys_max_join_size("max_join_size",
161
&drizzle_system_variables::max_join_size,
163
162
fix_max_join_size);
164
static sys_var_session_uint64_t sys_max_seeks_for_key(&vars, "max_seeks_for_key",
165
&system_variables::max_seeks_for_key);
166
static sys_var_session_uint64_t sys_max_length_for_sort_data(&vars, "max_length_for_sort_data",
167
&system_variables::max_length_for_sort_data);
168
static sys_var_session_size_t sys_max_sort_length(&vars, "max_sort_length",
169
&system_variables::max_sort_length);
170
static sys_var_uint64_t_ptr sys_max_write_lock_count(&vars, "max_write_lock_count",
163
static sys_var_session_uint64_t sys_max_seeks_for_key("max_seeks_for_key",
164
&drizzle_system_variables::max_seeks_for_key);
165
static sys_var_session_uint64_t sys_max_length_for_sort_data("max_length_for_sort_data",
166
&drizzle_system_variables::max_length_for_sort_data);
167
static sys_var_session_size_t sys_max_sort_length("max_sort_length",
168
&drizzle_system_variables::max_sort_length);
169
static sys_var_uint64_t_ptr sys_max_write_lock_count("max_write_lock_count",
171
170
&max_write_lock_count);
172
static sys_var_session_uint64_t sys_min_examined_row_limit(&vars, "min_examined_row_limit",
173
&system_variables::min_examined_row_limit);
171
static sys_var_session_uint64_t sys_min_examined_row_limit("min_examined_row_limit",
172
&drizzle_system_variables::min_examined_row_limit);
175
174
/* these two cannot be static */
176
static sys_var_session_bool sys_optimizer_prune_level(&vars, "optimizer_prune_level",
177
&system_variables::optimizer_prune_level);
178
static sys_var_session_uint32_t sys_optimizer_search_depth(&vars, "optimizer_search_depth",
179
&system_variables::optimizer_search_depth);
181
static sys_var_session_uint64_t sys_preload_buff_size(&vars, "preload_buffer_size",
182
&system_variables::preload_buff_size);
183
static sys_var_session_uint32_t sys_read_buff_size(&vars, "read_buffer_size",
184
&system_variables::read_buff_size);
185
static sys_var_session_uint32_t sys_read_rnd_buff_size(&vars, "read_rnd_buffer_size",
186
&system_variables::read_rnd_buff_size);
187
static sys_var_session_uint32_t sys_div_precincrement(&vars, "div_precision_increment",
188
&system_variables::div_precincrement);
190
static sys_var_session_size_t sys_range_alloc_block_size(&vars, "range_alloc_block_size",
191
&system_variables::range_alloc_block_size);
192
static sys_var_session_uint32_t sys_query_alloc_block_size(&vars, "query_alloc_block_size",
193
&system_variables::query_alloc_block_size,
194
false, fix_session_mem_root);
195
static sys_var_session_uint32_t sys_query_prealloc_size(&vars, "query_prealloc_size",
196
&system_variables::query_prealloc_size,
197
false, fix_session_mem_root);
198
static sys_var_readonly sys_tmpdir(&vars, "tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
200
static sys_var_const_str_ptr sys_secure_file_priv(&vars, "secure_file_priv",
201
&opt_secure_file_priv);
202
static sys_var_uint32_t_ptr sys_server_id(&vars, "server_id", &server_id,
175
static sys_var_session_bool sys_optimizer_prune_level("optimizer_prune_level",
176
&drizzle_system_variables::optimizer_prune_level);
177
static sys_var_session_uint32_t sys_optimizer_search_depth("optimizer_search_depth",
178
&drizzle_system_variables::optimizer_search_depth);
180
static sys_var_session_uint64_t sys_preload_buff_size("preload_buffer_size",
181
&drizzle_system_variables::preload_buff_size);
182
static sys_var_session_uint32_t sys_read_buff_size("read_buffer_size",
183
&drizzle_system_variables::read_buff_size);
184
static sys_var_session_uint32_t sys_read_rnd_buff_size("read_rnd_buffer_size",
185
&drizzle_system_variables::read_rnd_buff_size);
186
static sys_var_session_uint32_t sys_div_precincrement("div_precision_increment",
187
&drizzle_system_variables::div_precincrement);
189
static sys_var_session_size_t sys_range_alloc_block_size("range_alloc_block_size",
190
&drizzle_system_variables::range_alloc_block_size);
192
static sys_var_session_bool sys_replicate_query("replicate_query",
193
&drizzle_system_variables::replicate_query);
195
static sys_var_session_uint32_t sys_query_alloc_block_size("query_alloc_block_size",
196
&drizzle_system_variables::query_alloc_block_size,
197
NULL, fix_session_mem_root);
198
static sys_var_session_uint32_t sys_query_prealloc_size("query_prealloc_size",
199
&drizzle_system_variables::query_prealloc_size,
200
NULL, fix_session_mem_root);
201
static sys_var_readonly sys_tmpdir("tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
203
static sys_var_fs_path sys_secure_file_priv("secure_file_priv",
206
static sys_var_const_str_ptr sys_scheduler("scheduler",
207
(char**)&opt_scheduler);
209
static sys_var_uint32_t_ptr sys_server_id("server_id", &server_id,
205
static sys_var_session_size_t sys_sort_buffer(&vars, "sort_buffer_size",
206
&system_variables::sortbuff_size);
208
static sys_var_session_storage_engine sys_storage_engine(&vars, "storage_engine",
209
&system_variables::storage_engine);
210
static sys_var_const_str sys_system_time_zone(&vars, "system_time_zone",
212
static sys_var_session_size_t sys_sort_buffer("sort_buffer_size",
213
&drizzle_system_variables::sortbuff_size);
215
static sys_var_size_t_ptr_readonly sys_transaction_message_threshold("transaction_message_threshold",
216
&transaction_message_threshold);
218
static sys_var_session_storage_engine sys_storage_engine("storage_engine",
219
&drizzle_system_variables::storage_engine);
220
static sys_var_const_str sys_system_time_zone("system_time_zone",
211
221
system_time_zone);
212
static sys_var_size_t_ptr sys_table_def_size(&vars, "table_definition_cache",
222
static sys_var_size_t_ptr sys_table_def_size("table_definition_cache",
213
223
&table_def_size);
214
static sys_var_uint64_t_ptr sys_table_cache_size(&vars, "table_open_cache",
224
static sys_var_uint64_t_ptr sys_table_cache_size("table_open_cache",
215
225
&table_cache_size);
216
static sys_var_uint64_t_ptr sys_table_lock_wait_timeout(&vars, "table_lock_wait_timeout",
226
static sys_var_uint64_t_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout",
217
227
&table_lock_wait_timeout);
218
static sys_var_session_enum sys_tx_isolation(&vars, "tx_isolation",
219
&system_variables::tx_isolation,
228
static sys_var_session_enum sys_tx_isolation("tx_isolation",
229
&drizzle_system_variables::tx_isolation,
220
230
&tx_isolation_typelib,
221
231
fix_tx_isolation,
222
232
check_tx_isolation);
223
static sys_var_session_uint64_t sys_tmp_table_size(&vars, "tmp_table_size",
224
&system_variables::tmp_table_size);
225
static sys_var_bool_ptr sys_timed_mutexes(&vars, "timed_mutexes", &internal::timed_mutexes);
226
static sys_var_const_str sys_version(&vars, "version", version().c_str());
233
static sys_var_session_uint64_t sys_tmp_table_size("tmp_table_size",
234
&drizzle_system_variables::tmp_table_size);
235
static sys_var_bool_ptr sys_timed_mutexes("timed_mutexes", &internal::timed_mutexes);
236
static sys_var_const_str sys_version("version", version().c_str());
228
static sys_var_const_str sys_version_comment(&vars, "version_comment",
238
static sys_var_const_str sys_version_comment("version_comment",
229
239
COMPILATION_COMMENT);
230
static sys_var_const_str sys_version_compile_machine(&vars, "version_compile_machine",
240
static sys_var_const_str sys_version_compile_machine("version_compile_machine",
232
static sys_var_const_str sys_version_compile_os(&vars, "version_compile_os",
242
static sys_var_const_str sys_version_compile_os("version_compile_os",
234
static sys_var_const_str sys_version_compile_vendor(&vars, "version_compile_vendor",
244
static sys_var_const_str sys_version_compile_vendor("version_compile_vendor",
237
247
/* Variables that are bits in Session */
239
sys_var_session_bit sys_autocommit(&vars, "autocommit", 0,
249
sys_var_session_bit sys_autocommit("autocommit", 0,
240
250
set_option_autocommit,
241
251
OPTION_NOT_AUTOCOMMIT,
243
static sys_var_session_bit sys_big_selects(&vars, "sql_big_selects", 0,
253
static sys_var_session_bit sys_big_selects("sql_big_selects", 0,
245
255
OPTION_BIG_SELECTS);
246
static sys_var_session_bit sys_sql_warnings(&vars, "sql_warnings", 0,
256
static sys_var_session_bit sys_sql_warnings("sql_warnings", 0,
248
258
OPTION_WARNINGS);
249
static sys_var_session_bit sys_sql_notes(&vars, "sql_notes", 0,
259
static sys_var_session_bit sys_sql_notes("sql_notes", 0,
251
261
OPTION_SQL_NOTES);
252
static sys_var_session_bit sys_buffer_results(&vars, "sql_buffer_result", 0,
262
static sys_var_session_bit sys_buffer_results("sql_buffer_result", 0,
254
264
OPTION_BUFFER_RESULT);
255
static sys_var_session_bit sys_foreign_key_checks(&vars, "foreign_key_checks", 0,
265
static sys_var_session_bit sys_foreign_key_checks("foreign_key_checks", 0,
257
267
OPTION_NO_FOREIGN_KEY_CHECKS, 1);
258
static sys_var_session_bit sys_unique_checks(&vars, "unique_checks", 0,
268
static sys_var_session_bit sys_unique_checks("unique_checks", 0,
260
270
OPTION_RELAXED_UNIQUE_CHECKS, 1);
261
271
/* Local state variables */
263
static sys_var_session_ha_rows sys_select_limit(&vars, "sql_select_limit",
264
&system_variables::select_limit);
265
static sys_var_timestamp sys_timestamp(&vars, "timestamp");
273
static sys_var_session_ha_rows sys_select_limit("sql_select_limit",
274
&drizzle_system_variables::select_limit);
275
static sys_var_timestamp sys_timestamp("timestamp");
266
276
static sys_var_last_insert_id
267
sys_last_insert_id(&vars, "last_insert_id");
277
sys_last_insert_id("last_insert_id");
269
279
identity is an alias for last_insert_id(), so that we are compatible
272
static sys_var_last_insert_id sys_identity(&vars, "identity");
282
static sys_var_last_insert_id sys_identity("identity");
274
static sys_var_session_lc_time_names sys_lc_time_names(&vars, "lc_time_names");
284
static sys_var_session_lc_time_names sys_lc_time_names("lc_time_names");
277
287
We want statements referring explicitly to @@session.insert_id to be
285
295
statement-based logging mode: t will be different on master and
288
static sys_var_readonly sys_error_count(&vars, "error_count",
298
static sys_var_readonly sys_error_count("error_count",
291
301
get_error_count);
292
static sys_var_readonly sys_warning_count(&vars, "warning_count",
302
static sys_var_readonly sys_warning_count("warning_count",
295
305
get_warning_count);
297
sys_var_session_uint64_t sys_group_concat_max_len(&vars, "group_concat_max_len",
298
&system_variables::group_concat_max_len);
307
sys_var_session_uint64_t sys_group_concat_max_len("group_concat_max_len",
308
&drizzle_system_variables::group_concat_max_len);
300
sys_var_session_time_zone sys_time_zone(&vars, "time_zone");
310
sys_var_session_time_zone sys_time_zone("time_zone");
302
312
/* Global read-only variable containing hostname */
303
static sys_var_const_str sys_hostname(&vars, "hostname", glob_hostname);
306
Additional variables (not derived from sys_var class, not accessible as
307
@@varname in SELECT or SET). Sorted in alphabetical order to facilitate
308
maintenance - SHOW VARIABLES will sort its output.
309
TODO: remove this list completely
312
#define FIXED_VARS_SIZE (sizeof(fixed_vars) / sizeof(drizzle_show_var))
313
static drizzle_show_var fixed_vars[]= {
314
{"back_log", (char*) &back_log, SHOW_INT},
315
{"language", language, SHOW_CHAR},
316
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
317
{"plugin_dir", (char*) opt_plugin_dir, SHOW_CHAR},
318
{"thread_stack", (char*) &my_thread_stack_size, SHOW_INT},
321
bool sys_var::check(Session *, set_var *var)
313
static sys_var_const_str sys_hostname("hostname", glob_hostname);
315
bool sys_var::check(Session *session, set_var *var)
323
var->save_result.uint64_t_value= var->value->val_int();
320
if ((res=(*check_func)(session, var)) < 0)
321
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
327
328
bool sys_var_str::check(Session *session, set_var *var)
333
334
if ((res=(*check_func)(session, var)) < 0)
334
335
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
339
bool sys_var_std_string::check(Session *session, set_var *var)
341
if (check_func == NULL)
346
int res= (*check_func)(session, var);
349
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), getName().c_str(), var->value->str_value.ptr());
339
356
Functions to check and update variables
453
static bool get_unsigned32(Session *session, set_var *var)
455
if (var->value->unsigned_flag)
456
var->save_result.uint32_t_value=
457
static_cast<uint32_t>(var->value->val_int());
460
int64_t v= var->value->val_int();
462
throw_bounds_warning(session, true, true,var->var->getName().c_str(), v);
464
var->save_result.uint32_t_value=
465
static_cast<uint32_t>((v > UINT32_MAX) ? UINT32_MAX : (v < 0) ? 0 : v);
470
static bool get_unsigned64(Session *, set_var *var)
472
if (var->value->unsigned_flag)
473
var->save_result.uint64_t_value=(uint64_t) var->value->val_int();
476
int64_t v= var->value->val_int();
477
var->save_result.uint64_t_value= (uint64_t) ((v < 0) ? 0 : v);
482
static bool get_size_t(Session *, set_var *var)
484
if (var->value->unsigned_flag)
485
var->save_result.size_t_value= (size_t) var->value->val_int();
488
ssize_t v= (ssize_t)var->value->val_int();
489
var->save_result.size_t_value= (size_t) ((v < 0) ? 0 : v);
494
469
bool sys_var_uint32_t_ptr::check(Session *, set_var *var)
496
var->save_result.uint32_t_value= (uint32_t)var->value->val_int();
500
475
bool sys_var_uint32_t_ptr::update(Session *session, set_var *var)
502
uint32_t tmp= var->save_result.uint32_t_value;
503
pthread_mutex_lock(&LOCK_global_system_variables);
477
uint64_t tmp= var->getInteger();
478
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
504
480
if (option_limits)
506
482
uint32_t newvalue= (uint32_t) fix_unsigned(session, tmp, option_limits);
483
if(static_cast<uint64_t>(newvalue) == tmp)
508
484
*value= newvalue;
511
*value= (uint32_t) tmp;
512
pthread_mutex_unlock(&LOCK_global_system_variables);
488
*value= static_cast<uint32_t>(tmp);
517
void sys_var_uint32_t_ptr::set_default(Session *, sql_var_t)
495
void sys_var_uint32_t_ptr::set_default(Session *session, sql_var_t)
520
pthread_mutex_lock(&LOCK_global_system_variables);
498
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
521
499
*value= (uint32_t)getopt_ull_limit_value((uint32_t) option_limits->def_value,
522
500
option_limits, ¬_used);
523
pthread_mutex_unlock(&LOCK_global_system_variables);
527
504
bool sys_var_uint64_t_ptr::update(Session *session, set_var *var)
529
uint64_t tmp= var->save_result.uint64_t_value;
530
pthread_mutex_lock(&LOCK_global_system_variables);
506
uint64_t tmp= var->getInteger();
507
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
531
509
if (option_limits)
533
uint64_t newvalue= (uint64_t) fix_unsigned(session, tmp, option_limits);
511
uint64_t newvalue= fix_unsigned(session, tmp, option_limits);
534
512
if(newvalue==tmp)
535
513
*value= newvalue;
538
*value= (uint64_t) tmp;
539
pthread_mutex_unlock(&LOCK_global_system_variables);
544
void sys_var_uint64_t_ptr::set_default(Session *, sql_var_t)
524
void sys_var_uint64_t_ptr::set_default(Session *session, sql_var_t)
547
pthread_mutex_lock(&LOCK_global_system_variables);
548
*value= getopt_ull_limit_value((uint64_t) option_limits->def_value,
549
option_limits, ¬_used);
550
pthread_mutex_unlock(&LOCK_global_system_variables);
526
if (have_default_value)
528
*value= default_value;
533
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
534
*value= getopt_ull_limit_value((uint64_t) option_limits->def_value,
535
option_limits, ¬_used);
554
540
bool sys_var_size_t_ptr::update(Session *session, set_var *var)
556
size_t tmp= var->save_result.size_t_value;
557
pthread_mutex_lock(&LOCK_global_system_variables);
542
size_t tmp= size_t(var->getInteger());
544
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
558
546
if (option_limits)
559
547
*value= fix_size_t(session, tmp, option_limits);
562
pthread_mutex_unlock(&LOCK_global_system_variables);
567
void sys_var_size_t_ptr::set_default(Session *, sql_var_t)
555
void sys_var_size_t_ptr::set_default(Session *session, sql_var_t)
570
pthread_mutex_lock(&LOCK_global_system_variables);
558
boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
571
559
*value= (size_t)getopt_ull_limit_value((size_t) option_limits->def_value,
572
560
option_limits, ¬_used);
573
pthread_mutex_unlock(&LOCK_global_system_variables);
563
bool sys_var_bool_ptr::check(Session *session, set_var *var)
565
return check_enum(session, var, &bool_typelib);
576
568
bool sys_var_bool_ptr::update(Session *, set_var *var)
578
*value= (bool) var->save_result.uint32_t_value;
570
*value= bool(var->getInteger());
583
575
void sys_var_bool_ptr::set_default(Session *, sql_var_t)
585
*value= (bool) option_limits->def_value;
577
*value= default_value;
1517
void add_sys_var_to_list(sys_var *var)
1519
string lower_name(var->getName());
1520
transform(lower_name.begin(), lower_name.end(),
1521
lower_name.begin(), ::tolower);
1523
/* this fails if there is a conflicting variable name. */
1524
if (system_variable_map.find(lower_name) != system_variable_map.end())
1526
errmsg_printf(error::ERROR, _("Variable named %s already exists!\n"),
1527
var->getName().c_str());
1531
pair<SystemVariableMap::iterator, bool> ret=
1532
system_variable_map.insert(make_pair(lower_name, var));
1533
if (ret.second == false)
1535
errmsg_printf(error::ERROR, _("Could not add Variable: %s\n"),
1536
var->getName().c_str());
1541
void add_sys_var_to_list(sys_var *var, struct option *long_options)
1543
add_sys_var_to_list(var);
1544
var->setOptionLimits(find_option(long_options, var->getName().c_str()));
1599
1548
Initialize the system variables
1606
1555
otherwise FAILURE
1613
for (sys_var *var= vars.first; var; var= var->getNext(), count++) {};
1615
if (my_init_dynamic_array(&fixed_show_vars, sizeof(drizzle_show_var),
1616
FIXED_VARS_SIZE + 64, 64))
1619
fixed_show_vars.elements= FIXED_VARS_SIZE;
1620
memcpy(fixed_show_vars.buffer, fixed_vars, sizeof(fixed_vars));
1622
vars.last->setNext(NULL);
1623
if (mysql_add_sys_var_chain(vars.first, my_long_options))
1562
add_sys_var_to_list(&sys_auto_increment_increment, my_long_options);
1563
add_sys_var_to_list(&sys_auto_increment_offset, my_long_options);
1564
add_sys_var_to_list(&sys_autocommit, my_long_options);
1565
add_sys_var_to_list(&sys_back_log, my_long_options);
1566
add_sys_var_to_list(&sys_basedir, my_long_options);
1567
add_sys_var_to_list(&sys_big_selects, my_long_options);
1568
add_sys_var_to_list(&sys_buffer_results, my_long_options);
1569
add_sys_var_to_list(&sys_bulk_insert_buff_size, my_long_options);
1570
add_sys_var_to_list(&sys_collation_server, my_long_options);
1571
add_sys_var_to_list(&sys_completion_type, my_long_options);
1572
add_sys_var_to_list(&sys_datadir, my_long_options);
1573
add_sys_var_to_list(&sys_div_precincrement, my_long_options);
1574
add_sys_var_to_list(&sys_error_count, my_long_options);
1575
add_sys_var_to_list(&sys_foreign_key_checks, my_long_options);
1576
add_sys_var_to_list(&sys_group_concat_max_len, my_long_options);
1577
add_sys_var_to_list(&sys_hostname, my_long_options);
1578
add_sys_var_to_list(&sys_identity, my_long_options);
1579
add_sys_var_to_list(&sys_join_buffer_size, my_long_options);
1580
add_sys_var_to_list(&sys_last_insert_id, my_long_options);
1581
add_sys_var_to_list(&sys_lc_time_names, my_long_options);
1582
add_sys_var_to_list(&sys_max_allowed_packet, my_long_options);
1583
add_sys_var_to_list(&sys_max_error_count, my_long_options);
1584
add_sys_var_to_list(&sys_max_heap_table_size, my_long_options);
1585
add_sys_var_to_list(&sys_max_join_size, my_long_options);
1586
add_sys_var_to_list(&sys_max_length_for_sort_data, my_long_options);
1587
add_sys_var_to_list(&sys_max_seeks_for_key, my_long_options);
1588
add_sys_var_to_list(&sys_max_sort_length, my_long_options);
1589
add_sys_var_to_list(&sys_max_write_lock_count, my_long_options);
1590
add_sys_var_to_list(&sys_min_examined_row_limit, my_long_options);
1591
add_sys_var_to_list(&sys_optimizer_prune_level, my_long_options);
1592
add_sys_var_to_list(&sys_optimizer_search_depth, my_long_options);
1593
add_sys_var_to_list(&sys_pid_file, my_long_options);
1594
add_sys_var_to_list(&sys_plugin_dir, my_long_options);
1595
add_sys_var_to_list(&sys_preload_buff_size, my_long_options);
1596
add_sys_var_to_list(&sys_pseudo_thread_id, my_long_options);
1597
add_sys_var_to_list(&sys_query_alloc_block_size, my_long_options);
1598
add_sys_var_to_list(&sys_query_prealloc_size, my_long_options);
1599
add_sys_var_to_list(&sys_range_alloc_block_size, my_long_options);
1600
add_sys_var_to_list(&sys_read_buff_size, my_long_options);
1601
add_sys_var_to_list(&sys_read_rnd_buff_size, my_long_options);
1602
add_sys_var_to_list(&sys_replicate_query, my_long_options);
1603
add_sys_var_to_list(&sys_scheduler, my_long_options);
1604
add_sys_var_to_list(&sys_secure_file_priv, my_long_options);
1605
add_sys_var_to_list(&sys_select_limit, my_long_options);
1606
add_sys_var_to_list(&sys_server_id, my_long_options);
1607
add_sys_var_to_list(&sys_sort_buffer, my_long_options);
1608
add_sys_var_to_list(&sys_sql_notes, my_long_options);
1609
add_sys_var_to_list(&sys_sql_warnings, my_long_options);
1610
add_sys_var_to_list(&sys_storage_engine, my_long_options);
1611
add_sys_var_to_list(&sys_system_time_zone, my_long_options);
1612
add_sys_var_to_list(&sys_table_cache_size, my_long_options);
1613
add_sys_var_to_list(&sys_table_def_size, my_long_options);
1614
add_sys_var_to_list(&sys_table_lock_wait_timeout, my_long_options);
1615
add_sys_var_to_list(&sys_thread_stack_size, my_long_options);
1616
add_sys_var_to_list(&sys_time_zone, my_long_options);
1617
add_sys_var_to_list(&sys_timed_mutexes, my_long_options);
1618
add_sys_var_to_list(&sys_timestamp, my_long_options);
1619
add_sys_var_to_list(&sys_tmp_table_size, my_long_options);
1620
add_sys_var_to_list(&sys_tmpdir, my_long_options);
1621
add_sys_var_to_list(&sys_transaction_message_threshold, my_long_options);
1622
add_sys_var_to_list(&sys_tx_isolation, my_long_options);
1623
add_sys_var_to_list(&sys_unique_checks, my_long_options);
1624
add_sys_var_to_list(&sys_version, my_long_options);
1625
add_sys_var_to_list(&sys_version_comment, my_long_options);
1626
add_sys_var_to_list(&sys_version_compile_machine, my_long_options);
1627
add_sys_var_to_list(&sys_version_compile_os, my_long_options);
1628
add_sys_var_to_list(&sys_version_compile_vendor, my_long_options);
1629
add_sys_var_to_list(&sys_warning_count, my_long_options);
1631
catch (std::exception&)
1633
errmsg_printf(error::ERROR, _("Failed to initialize system variables"));
1629
fprintf(stderr, "failed to initialize system variables");
1636
delete_dynamic(&fixed_show_vars);
1641
1641
Find a user set-table variable.
1643
@param str Name of system variable to find
1644
@param length Length of variable. zero means that we should use strlen()
1646
@param no_error Refuse to emit an error, even if one occurred.
1643
@param name Name of system variable to find
1649
1646
pointer pointer to variable definitions
1665
1662
result= (*iter).second;
1669
This function is only called from the sql_plugin.cc.
1670
A lock on LOCK_system_variable_hash should be held
1672
1665
if (result == NULL)
1680
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), (char*) str);
1667
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), name.c_str());
1690
Execute update of all variables.
1692
First run a check of all variables that all updates will go ok.
1693
If yes, then execute all updates, returning an error if any one failed.
1695
This should ensure that in all normal cases none all or variables are
1698
@param Session Thread id
1699
@param var_list List of variables to update
1704
1 ERROR, message sent (normally no variables was updated)
1706
-1 ERROR, message not sent
1709
int sql_set_variables(Session *session, List<set_var_base> *var_list)
1712
List_iterator_fast<set_var_base> it(*var_list);
1717
if ((error= var->check(session)))
1720
if (!(error= test(session->is_error())))
1724
error|= var->update(session); // Returns 0, -1 or 1
1728
free_underlaid_joins(session, &session->lex->select_lex);
1733
/*****************************************************************************
1734
Functions to handle SET mysql_internal_variable=const_expr
1735
*****************************************************************************/
1737
int set_var::check(Session *session)
1739
if (var->is_readonly())
1741
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), var->getName().c_str(), "read only");
1744
if (var->check_type(type))
1746
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
1747
my_error(err, MYF(0), var->getName().c_str());
1750
/* value is a NULL pointer if we are using SET ... = DEFAULT */
1753
if (var->check_default(type))
1755
my_error(ER_NO_DEFAULT, MYF(0), var->getName().c_str());
1761
if ((!value->fixed &&
1762
value->fix_fields(session, &value)) || value->check_cols(1))
1764
if (var->check_update_type(value->result_type()))
1766
my_error(ER_WRONG_TYPE_FOR_VAR, MYF(0), var->getName().c_str());
1769
return var->check(session, this) ? -1 : 0;
1775
@param session thread handler
1776
@returns 0|1 ok or ERROR
1778
@note ERROR can be only due to abnormal operations involving
1779
the server's execution evironment such as
1780
out of memory, hard disk failure or the computer blows up.
1781
Consider set_var::check() method if there is a need to return
1782
an error due to logics.
1784
int set_var::update(Session *session)
1787
var->set_default(session, type);
1788
else if (var->update(session, this))
1789
return -1; // should never happen
1790
if (var->getAfterUpdateTrigger())
1791
(*var->getAfterUpdateTrigger())(session, type);
1795
/*****************************************************************************
1796
Functions to handle SET @user_variable=const_expr
1797
*****************************************************************************/
1799
int set_var_user::check(Session *session)
1802
Item_func_set_user_var can't substitute something else on its place =>
1803
0 can be passed as last argument (reference on item)
1805
return (user_var_item->fix_fields(session, (Item**) 0) ||
1806
user_var_item->check(0)) ? -1 : 0;
1810
int set_var_user::update(Session *)
1812
if (user_var_item->update())
1814
/* Give an error if it's not given already */
1815
my_message(ER_SET_CONSTANTS_ONLY, ER(ER_SET_CONSTANTS_ONLY), MYF(0));
1821
1675
/****************************************************************************
1822
1676
Functions to handle table_type
1823
1677
****************************************************************************/
1825
/* Based upon sys_var::check_enum() */
1827
bool sys_var_session_storage_engine::check(Session *session, set_var *var)
1829
char buff[STRING_BUFFER_USUAL_SIZE];
1831
String str(buff, sizeof(buff), &my_charset_utf8_general_ci), *res;
1833
var->save_result.storage_engine= NULL;
1834
if (var->value->result_type() == STRING_RESULT)
1836
res= var->value->val_str(&str);
1837
if (res == NULL || res->ptr() == NULL)
1844
const std::string engine_name(res->ptr());
1845
plugin::StorageEngine *engine;
1846
var->save_result.storage_engine= plugin::StorageEngine::findByName(*session, engine_name);
1847
if (var->save_result.storage_engine == NULL)
1849
value= res->c_ptr();
1852
engine= var->save_result.storage_engine;
1859
my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), value);
1864
1679
unsigned char *sys_var_session_storage_engine::value_ptr(Session *session,
1865
1680
sql_var_t type,
1866
1681
const LEX_STRING *)