summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc600
1 files changed, 314 insertions, 286 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 7be79ab59f0..bf3fdd8c8d7 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -58,16 +58,59 @@
#include <my_getopt.h>
#include <thr_alarm.h>
#include <myisam.h>
-#ifdef HAVE_BERKELEY_DB
-#include "ha_berkeley.h"
-#endif
-#ifdef HAVE_INNOBASE_DB
-#include "ha_innodb.h"
-#endif
-#ifdef HAVE_NDBCLUSTER_DB
-#include "ha_ndbcluster.h"
+
+/* WITH_BERKELEY_STORAGE_ENGINE */
+extern bool berkeley_shared_data;
+extern ulong berkeley_max_lock, berkeley_log_buffer_size;
+extern ulonglong berkeley_cache_size;
+extern ulong berkeley_region_size, berkeley_cache_parts;
+extern char *berkeley_home, *berkeley_tmpdir, *berkeley_logdir;
+
+/* WITH_INNOBASE_STORAGE_ENGINE */
+extern uint innobase_flush_log_at_trx_commit;
+extern ulong innobase_fast_shutdown;
+extern long innobase_mirrored_log_groups, innobase_log_files_in_group;
+extern longlong innobase_log_file_size;
+extern long innobase_log_buffer_size;
+extern longlong innobase_buffer_pool_size;
+extern long innobase_additional_mem_pool_size;
+extern long innobase_buffer_pool_awe_mem_mb;
+extern long innobase_file_io_threads, innobase_lock_wait_timeout;
+extern long innobase_force_recovery;
+extern long innobase_open_files;
+extern char *innobase_data_home_dir, *innobase_data_file_path;
+extern char *innobase_log_group_home_dir, *innobase_log_arch_dir;
+extern char *innobase_unix_file_flush_method;
+/* The following variables have to be my_bool for SHOW VARIABLES to work */
+extern my_bool innobase_log_archive,
+ innobase_use_doublewrite,
+ innobase_use_checksums,
+ innobase_file_per_table,
+ innobase_locks_unsafe_for_binlog;
+
+extern "C" {
+extern ulong srv_max_buf_pool_modified_pct;
+extern ulong srv_max_purge_lag;
+extern ulong srv_auto_extend_increment;
+extern ulong srv_n_spin_wait_rounds;
+extern ulong srv_n_free_tickets_to_enter;
+extern ulong srv_thread_sleep_delay;
+extern ulong srv_thread_concurrency;
+extern ulong srv_commit_concurrency;
+}
+
+/* WITH_NDBCLUSTER_STORAGE_ENGINE */
+extern ulong ndb_cache_check_time;
+extern ulong ndb_extra_logging;
+#ifdef HAVE_NDB_BINLOG
+extern ulong ndb_report_thresh_binlog_epoch_slip;
+extern ulong ndb_report_thresh_binlog_mem_usage;
#endif
+
+
+extern my_bool event_executor_running_global_var;
+
static HASH system_variable_hash;
const char *bool_type_names[]= { "OFF", "ON", NullS };
TYPELIB bool_typelib=
@@ -98,7 +141,9 @@ static int check_log_update(THD *thd, set_var *var);
static bool set_log_update(THD *thd, set_var *var);
static int check_pseudo_thread_id(THD *thd, set_var *var);
static bool set_log_bin(THD *thd, set_var *var);
+void fix_binlog_format_after_update(THD *thd, enum_var_type type);
static void fix_low_priority_updates(THD *thd, enum_var_type type);
+static int check_tx_isolation(THD *thd, set_var *var);
static void fix_tx_isolation(THD *thd, enum_var_type type);
static int check_completion_type(THD *thd, set_var *var);
static void fix_completion_type(THD *thd, enum_var_type type);
@@ -120,7 +165,6 @@ static KEY_CACHE *create_key_cache(const char *name, uint length);
void fix_sql_mode_var(THD *thd, enum_var_type type);
static byte *get_error_count(THD *thd);
static byte *get_warning_count(THD *thd);
-static byte *get_have_innodb(THD *thd);
/*
Variable definition list
@@ -129,6 +173,9 @@ static byte *get_have_innodb(THD *thd);
alphabetic order
*/
+sys_var *sys_var::first= NULL;
+uint sys_var::sys_vars= 0;
+
sys_var_thd_ulong sys_auto_increment_increment("auto_increment_increment",
&SV::auto_increment_increment);
sys_var_thd_ulong sys_auto_increment_offset("auto_increment_offset",
@@ -139,6 +186,8 @@ sys_var_bool_ptr sys_automatic_sp_privileges("automatic_sp_privileges",
sys_var_long_ptr sys_binlog_cache_size("binlog_cache_size",
&binlog_cache_size);
+sys_var_thd_binlog_format sys_binlog_format("binlog_format",
+ &SV::binlog_format);
sys_var_thd_ulong sys_bulk_insert_buff_size("bulk_insert_buffer_size",
&SV::bulk_insert_buff_size);
sys_var_character_set_server sys_character_set_server("character_set_server");
@@ -160,6 +209,9 @@ sys_var_long_ptr sys_concurrent_insert("concurrent_insert",
&myisam_concurrent_insert);
sys_var_long_ptr sys_connect_timeout("connect_timeout",
&connect_timeout);
+#ifndef DBUG_OFF
+sys_var_thd_dbug sys_dbug("debug");
+#endif
sys_var_enum sys_delay_key_write("delay_key_write",
&delay_key_write_options,
&delay_key_write_typelib,
@@ -170,6 +222,9 @@ sys_var_long_ptr sys_delayed_insert_timeout("delayed_insert_timeout",
&delayed_insert_timeout);
sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size",
&delayed_queue_size);
+sys_var_event_executor sys_event_executor("event_scheduler",
+ (my_bool *)
+ &event_executor_running_global_var);
sys_var_long_ptr sys_expire_logs_days("expire_logs_days",
&expire_logs_days);
sys_var_bool_ptr sys_flush("flush", &myisam_flush);
@@ -276,6 +331,8 @@ sys_var_long_ptr sys_myisam_data_pointer_size("myisam_data_pointer_size",
sys_var_thd_ulonglong sys_myisam_max_sort_file_size("myisam_max_sort_file_size", &SV::myisam_max_sort_file_size, fix_myisam_max_sort_file_size, 1);
sys_var_thd_ulong sys_myisam_repair_threads("myisam_repair_threads", &SV::myisam_repair_threads);
sys_var_thd_ulong sys_myisam_sort_buffer_size("myisam_sort_buffer_size", &SV::myisam_sort_buff_size);
+sys_var_bool_ptr sys_myisam_use_mmap("myisam_use_mmap",
+ &opt_myisam_use_mmap);
sys_var_thd_enum sys_myisam_stats_method("myisam_stats_method",
&SV::myisam_stats_method,
@@ -294,6 +351,8 @@ sys_var_thd_ulong sys_net_retry_count("net_retry_count",
&SV::net_retry_count,
0, fix_net_retry_count);
sys_var_thd_bool sys_new_mode("new", &SV::new_mode);
+sys_var_thd_bool sys_old_alter_table("old_alter_table",
+ &SV::old_alter_table);
sys_var_thd_bool sys_old_passwords("old_passwords", &SV::old_passwords);
sys_var_thd_ulong sys_optimizer_prune_level("optimizer_prune_level",
&SV::optimizer_prune_level);
@@ -383,7 +442,9 @@ sys_var_thd_ulong sys_sync_replication_timeout(
&SV::sync_replication_timeout);
#endif
sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm);
-sys_var_long_ptr sys_table_cache_size("table_cache",
+sys_var_long_ptr sys_table_def_size("table_definition_cache",
+ &table_def_size);
+sys_var_long_ptr sys_table_cache_size("table_open_cache",
&table_cache_size);
sys_var_long_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout",
&table_lock_wait_timeout);
@@ -392,7 +453,8 @@ sys_var_long_ptr sys_thread_cache_size("thread_cache_size",
sys_var_thd_enum sys_tx_isolation("tx_isolation",
&SV::tx_isolation,
&tx_isolation_typelib,
- fix_tx_isolation);
+ fix_tx_isolation,
+ check_tx_isolation);
sys_var_thd_ulong sys_tmp_table_size("tmp_table_size",
&SV::tmp_table_size);
sys_var_bool_ptr sys_timed_mutexes("timed_mutexes",
@@ -400,7 +462,6 @@ sys_var_bool_ptr sys_timed_mutexes("timed_mutexes",
sys_var_thd_ulong sys_net_wait_timeout("wait_timeout",
&SV::net_wait_timeout);
-#ifdef HAVE_INNOBASE_DB
sys_var_long_ptr sys_innodb_fast_shutdown("innodb_fast_shutdown",
&innobase_fast_shutdown);
sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct",
@@ -423,30 +484,43 @@ sys_var_long_ptr sys_innodb_thread_concurrency("innodb_thread_concurrency",
&srv_thread_concurrency);
sys_var_long_ptr sys_innodb_commit_concurrency("innodb_commit_concurrency",
&srv_commit_concurrency);
-sys_var_long_ptr sys_innodb_flush_log_at_trx_commit(
- "innodb_flush_log_at_trx_commit",
- &srv_flush_log_at_trx_commit);
-#endif
/* Condition pushdown to storage engine */
sys_var_thd_bool
sys_engine_condition_pushdown("engine_condition_pushdown",
&SV::engine_condition_pushdown);
-#ifdef HAVE_NDBCLUSTER_DB
/* ndb thread specific variable settings */
sys_var_thd_ulong
sys_ndb_autoincrement_prefetch_sz("ndb_autoincrement_prefetch_sz",
&SV::ndb_autoincrement_prefetch_sz);
sys_var_thd_bool
sys_ndb_force_send("ndb_force_send", &SV::ndb_force_send);
+#ifdef HAVE_NDB_BINLOG
+sys_var_long_ptr
+sys_ndb_report_thresh_binlog_epoch_slip("ndb_report_thresh_binlog_epoch_slip",
+ &ndb_report_thresh_binlog_epoch_slip);
+sys_var_long_ptr
+sys_ndb_report_thresh_binlog_mem_usage("ndb_report_thresh_binlog_mem_usage",
+ &ndb_report_thresh_binlog_mem_usage);
+#endif
sys_var_thd_bool
sys_ndb_use_exact_count("ndb_use_exact_count", &SV::ndb_use_exact_count);
sys_var_thd_bool
sys_ndb_use_transactions("ndb_use_transactions", &SV::ndb_use_transactions);
sys_var_long_ptr
sys_ndb_cache_check_time("ndb_cache_check_time", &ndb_cache_check_time);
-#endif
+sys_var_thd_bool
+sys_ndb_index_stat_enable("ndb_index_stat_enable",
+ &SV::ndb_index_stat_enable);
+sys_var_thd_ulong
+sys_ndb_index_stat_cache_entries("ndb_index_stat_cache_entries",
+ &SV::ndb_index_stat_cache_entries);
+sys_var_thd_ulong
+sys_ndb_index_stat_update_freq("ndb_index_stat_update_freq",
+ &SV::ndb_index_stat_update_freq);
+sys_var_long_ptr
+sys_ndb_extra_logging("ndb_extra_logging", &ndb_extra_logging);
/* Time/date/datetime formats */
@@ -550,225 +624,92 @@ sys_var_thd_time_zone sys_time_zone("time_zone");
/* Read only variables */
sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE);
-sys_var_readonly sys_have_innodb("have_innodb", OPT_GLOBAL,
- SHOW_CHAR, get_have_innodb);
+sys_var_have_variable sys_have_archive_db("have_archive", &have_archive_db);
+sys_var_have_variable sys_have_berkeley_db("have_bdb", &have_berkeley_db);
+sys_var_have_variable sys_have_blackhole_db("have_blackhole_engine",
+ &have_blackhole_db);
+sys_var_have_variable sys_have_compress("have_compress", &have_compress);
+sys_var_have_variable sys_have_crypt("have_crypt", &have_crypt);
+sys_var_have_variable sys_have_csv_db("have_csv", &have_csv_db);
+sys_var_have_variable sys_have_example_db("have_example_engine",
+ &have_example_db);
+sys_var_have_variable sys_have_federated_db("have_federated_engine",
+ &have_federated_db);
+sys_var_have_variable sys_have_geometry("have_geometry", &have_geometry);
+sys_var_have_variable sys_have_innodb("have_innodb", &have_innodb);
+sys_var_have_variable sys_have_ndbcluster("have_ndbcluster", &have_ndbcluster);
+sys_var_have_variable sys_have_openssl("have_openssl", &have_openssl);
+sys_var_have_variable sys_have_partition_db("have_partitioning",
+ &have_partition_db);
+sys_var_have_variable sys_have_query_cache("have_query_cache",
+ &have_query_cache);
+sys_var_have_variable sys_have_rtree_keys("have_rtree_keys", &have_rtree_keys);
+sys_var_have_variable sys_have_symlink("have_symlink", &have_symlink);
+sys_var_have_variable sys_have_row_based_replication("have_row_based_replication",&have_row_based_replication);
/* Global read-only variable describing server license */
sys_var_const_str sys_license("license", STRINGIFY_ARG(LICENSE));
-
-/*
- List of all variables for initialisation and storage in hash
- This is sorted in alphabetical order to make it easy to add new variables
-
- If the variable is not in this list, it can't be changed with
- SET variable_name=
-*/
-
-sys_var *sys_variables[]=
-{
- &sys_auto_is_null,
- &sys_auto_increment_increment,
- &sys_auto_increment_offset,
- &sys_autocommit,
- &sys_automatic_sp_privileges,
- &sys_big_tables,
- &sys_big_selects,
- &sys_binlog_cache_size,
- &sys_buffer_results,
- &sys_bulk_insert_buff_size,
- &sys_character_set_server,
- &sys_character_set_database,
- &sys_character_set_client,
- &sys_character_set_connection,
- &sys_character_set_results,
- &sys_character_set_filesystem,
- &sys_charset_system,
- &sys_collation_connection,
- &sys_collation_database,
- &sys_collation_server,
- &sys_completion_type,
- &sys_concurrent_insert,
- &sys_connect_timeout,
- &sys_date_format,
- &sys_datetime_format,
- &sys_div_precincrement,
- &sys_default_week_format,
- &sys_delay_key_write,
- &sys_delayed_insert_limit,
- &sys_delayed_insert_timeout,
- &sys_delayed_queue_size,
- &sys_error_count,
- &sys_expire_logs_days,
- &sys_flush,
- &sys_flush_time,
- &sys_ft_boolean_syntax,
- &sys_foreign_key_checks,
- &sys_group_concat_max_len,
- &sys_have_innodb,
- &sys_identity,
- &sys_init_connect,
- &sys_init_slave,
- &sys_insert_id,
- &sys_interactive_timeout,
- &sys_join_buffer_size,
- &sys_key_buffer_size,
- &sys_key_cache_block_size,
- &sys_key_cache_division_limit,
- &sys_key_cache_age_threshold,
- &sys_last_insert_id,
- &sys_license,
- &sys_local_infile,
- &sys_log_binlog,
- &sys_log_off,
- &sys_log_update,
- &sys_log_warnings,
- &sys_long_query_time,
- &sys_low_priority_updates,
- &sys_max_allowed_packet,
- &sys_max_binlog_cache_size,
- &sys_max_binlog_size,
- &sys_max_connect_errors,
- &sys_max_connections,
- &sys_max_delayed_threads,
- &sys_max_error_count,
- &sys_max_insert_delayed_threads,
- &sys_max_heap_table_size,
- &sys_max_join_size,
- &sys_max_length_for_sort_data,
- &sys_max_relay_log_size,
- &sys_max_seeks_for_key,
- &sys_max_sort_length,
- &sys_max_sp_recursion_depth,
- &sys_max_tmp_tables,
- &sys_max_user_connections,
- &sys_max_write_lock_count,
- &sys_multi_range_count,
- &sys_myisam_data_pointer_size,
- &sys_myisam_max_sort_file_size,
- &sys_myisam_repair_threads,
- &sys_myisam_sort_buffer_size,
- &sys_myisam_stats_method,
- &sys_net_buffer_length,
- &sys_net_read_timeout,
- &sys_net_retry_count,
- &sys_net_wait_timeout,
- &sys_net_write_timeout,
- &sys_new_mode,
- &sys_old_passwords,
- &sys_optimizer_prune_level,
- &sys_optimizer_search_depth,
- &sys_preload_buff_size,
- &sys_pseudo_thread_id,
- &sys_query_alloc_block_size,
- &sys_query_cache_size,
- &sys_query_prealloc_size,
-#ifdef HAVE_QUERY_CACHE
- &sys_query_cache_limit,
- &sys_query_cache_min_res_unit,
- &sys_query_cache_type,
- &sys_query_cache_wlock_invalidate,
-#endif /* HAVE_QUERY_CACHE */
- &sys_quote_show_create,
- &sys_rand_seed1,
- &sys_rand_seed2,
- &sys_range_alloc_block_size,
- &sys_readonly,
- &sys_read_buff_size,
- &sys_read_rnd_buff_size,
-#ifdef HAVE_REPLICATION
- &sys_relay_log_purge,
-#endif
- &sys_rpl_recovery_rank,
- &sys_safe_updates,
- &sys_secure_auth,
- &sys_select_limit,
- &sys_server_id,
#ifdef HAVE_REPLICATION
- &sys_slave_compressed_protocol,
- &sys_slave_net_timeout,
- &sys_slave_trans_retries,
- &sys_slave_skip_counter,
-#endif
- &sys_slow_launch_time,
- &sys_sort_buffer,
- &sys_sql_big_tables,
- &sys_sql_low_priority_updates,
- &sys_sql_max_join_size,
- &sys_sql_mode,
- &sys_sql_warnings,
- &sys_sql_notes,
- &sys_storage_engine,
-#ifdef HAVE_REPLICATION
- &sys_sync_binlog_period,
- &sys_sync_replication,
- &sys_sync_replication_slave_id,
- &sys_sync_replication_timeout,
-#endif
- &sys_sync_frm,
- &sys_table_cache_size,
- &sys_table_lock_wait_timeout,
- &sys_table_type,
- &sys_thread_cache_size,
- &sys_time_format,
- &sys_timed_mutexes,
- &sys_timestamp,
- &sys_time_zone,
- &sys_tmp_table_size,
- &sys_trans_alloc_block_size,
- &sys_trans_prealloc_size,
- &sys_tx_isolation,
- &sys_os,
-#ifdef HAVE_INNOBASE_DB
- &sys_innodb_fast_shutdown,
- &sys_innodb_max_dirty_pages_pct,
- &sys_innodb_max_purge_lag,
- &sys_innodb_table_locks,
- &sys_innodb_support_xa,
- &sys_innodb_max_purge_lag,
- &sys_innodb_autoextend_increment,
- &sys_innodb_sync_spin_loops,
- &sys_innodb_concurrency_tickets,
- &sys_innodb_thread_sleep_delay,
- &sys_innodb_thread_concurrency,
- &sys_innodb_commit_concurrency,
- &sys_innodb_flush_log_at_trx_commit,
-#endif
- &sys_trust_routine_creators,
- &sys_trust_function_creators,
- &sys_engine_condition_pushdown,
-#ifdef HAVE_NDBCLUSTER_DB
- &sys_ndb_autoincrement_prefetch_sz,
- &sys_ndb_cache_check_time,
- &sys_ndb_force_send,
- &sys_ndb_use_exact_count,
- &sys_ndb_use_transactions,
-#endif
- &sys_unique_checks,
- &sys_updatable_views_with_limit,
- &sys_warning_count
-};
+static int show_slave_skip_errors(THD *thd, SHOW_VAR *var, char *buff)
+{
+ var->type=SHOW_CHAR;
+ var->value= buff;
+ if (!use_slave_mask || bitmap_is_clear_all(&slave_error_mask))
+ {
+ var->value= const_cast<char *>("OFF");
+ }
+ else if (bitmap_is_set_all(&slave_error_mask))
+ {
+ var->value= const_cast<char *>("ALL");
+ }
+ else
+ {
+ /* 10 is enough assuming errors are max 4 digits */
+ int i;
+ var->value= buff;
+ for (i= 1;
+ i < MAX_SLAVE_ERROR &&
+ (buff - var->value) < SHOW_VAR_FUNC_BUFF_SIZE;
+ i++)
+ {
+ if (bitmap_is_set(&slave_error_mask, i))
+ {
+ buff= int10_to_str(i, buff, 10);
+ *buff++= ',';
+ }
+ }
+ if (var->value != buff)
+ buff--; // Remove last ','
+ if (i < MAX_SLAVE_ERROR)
+ buff= strmov(buff, "..."); // Couldn't show all errors
+ *buff=0;
+ }
+ return 0;
+}
+#endif /* HAVE_REPLICATION */
/*
Variables shown by SHOW variables in alphabetical order
*/
-struct show_var_st init_vars[]= {
+SHOW_VAR init_vars[]= {
{"auto_increment_increment", (char*) &sys_auto_increment_increment, SHOW_SYS},
{"auto_increment_offset", (char*) &sys_auto_increment_offset, SHOW_SYS},
{sys_automatic_sp_privileges.name,(char*) &sys_automatic_sp_privileges, SHOW_SYS},
{"back_log", (char*) &back_log, SHOW_LONG},
{"basedir", mysql_home, SHOW_CHAR},
-#ifdef HAVE_BERKELEY_DB
- {"bdb_cache_size", (char*) &berkeley_cache_size, SHOW_LONG},
+ {"bdb_cache_parts", (char*) &berkeley_cache_parts, SHOW_LONG},
+ {"bdb_cache_size", (char*) &berkeley_cache_size, SHOW_LONGLONG},
{"bdb_home", (char*) &berkeley_home, SHOW_CHAR_PTR},
{"bdb_log_buffer_size", (char*) &berkeley_log_buffer_size, SHOW_LONG},
{"bdb_logdir", (char*) &berkeley_logdir, SHOW_CHAR_PTR},
{"bdb_max_lock", (char*) &berkeley_max_lock, SHOW_LONG},
+ {"bdb_region_size", (char*) &berkeley_region_size, SHOW_LONG},
{"bdb_shared_data", (char*) &berkeley_shared_data, SHOW_BOOL},
{"bdb_tmpdir", (char*) &berkeley_tmpdir, SHOW_CHAR_PTR},
-#endif
{sys_binlog_cache_size.name,(char*) &sys_binlog_cache_size, SHOW_SYS},
+ {sys_binlog_format.name, (char*) &sys_binlog_format, SHOW_SYS},
{sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS},
{sys_character_set_client.name,(char*) &sys_character_set_client, SHOW_SYS},
{sys_character_set_connection.name,(char*) &sys_character_set_connection,SHOW_SYS},
@@ -787,14 +728,18 @@ struct show_var_st init_vars[]= {
{"datadir", mysql_real_data_home, SHOW_CHAR},
{sys_date_format.name, (char*) &sys_date_format, SHOW_SYS},
{sys_datetime_format.name, (char*) &sys_datetime_format, SHOW_SYS},
+#ifndef DBUG_OFF
+ {sys_dbug.name, (char*) &sys_dbug, SHOW_SYS},
+#endif
{sys_default_week_format.name, (char*) &sys_default_week_format, SHOW_SYS},
{sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS},
{sys_delayed_insert_limit.name, (char*) &sys_delayed_insert_limit,SHOW_SYS},
{sys_delayed_insert_timeout.name, (char*) &sys_delayed_insert_timeout, SHOW_SYS},
{sys_delayed_queue_size.name,(char*) &sys_delayed_queue_size, SHOW_SYS},
{sys_div_precincrement.name,(char*) &sys_div_precincrement,SHOW_SYS},
- {sys_engine_condition_pushdown.name,
+ {sys_engine_condition_pushdown.name,
(char*) &sys_engine_condition_pushdown, SHOW_SYS},
+ {sys_event_executor.name, (char*) &sys_event_executor, SHOW_SYS},
{sys_expire_logs_days.name, (char*) &sys_expire_logs_days, SHOW_SYS},
{sys_flush.name, (char*) &sys_flush, SHOW_SYS},
{sys_flush_time.name, (char*) &sys_flush_time, SHOW_SYS},
@@ -804,27 +749,26 @@ struct show_var_st init_vars[]= {
{"ft_query_expansion_limit",(char*) &ft_query_expansion_limit, SHOW_LONG},
{"ft_stopword_file", (char*) &ft_stopword_file, SHOW_CHAR_PTR},
{sys_group_concat_max_len.name, (char*) &sys_group_concat_max_len, SHOW_SYS},
- {"have_archive", (char*) &have_archive_db, SHOW_HAVE},
- {"have_bdb", (char*) &have_berkeley_db, SHOW_HAVE},
- {"have_blackhole_engine", (char*) &have_blackhole_db, SHOW_HAVE},
- {"have_compress", (char*) &have_compress, SHOW_HAVE},
- {"have_crypt", (char*) &have_crypt, SHOW_HAVE},
- {"have_csv", (char*) &have_csv_db, SHOW_HAVE},
- {"have_example_engine", (char*) &have_example_db, SHOW_HAVE},
- {"have_federated_engine", (char*) &have_federated_db, SHOW_HAVE},
- {"have_geometry", (char*) &have_geometry, SHOW_HAVE},
- {"have_innodb", (char*) &have_innodb, SHOW_HAVE},
- {"have_isam", (char*) &have_isam, SHOW_HAVE},
- {"have_ndbcluster", (char*) &have_ndbcluster, SHOW_HAVE},
- {"have_openssl", (char*) &have_openssl, SHOW_HAVE},
- {"have_query_cache", (char*) &have_query_cache, SHOW_HAVE},
- {"have_raid", (char*) &have_raid, SHOW_HAVE},
- {"have_rtree_keys", (char*) &have_rtree_keys, SHOW_HAVE},
- {"have_symlink", (char*) &have_symlink, SHOW_HAVE},
+ {sys_have_archive_db.name, (char*) &have_archive_db, SHOW_HAVE},
+ {sys_have_berkeley_db.name, (char*) &have_berkeley_db, SHOW_HAVE},
+ {sys_have_blackhole_db.name,(char*) &have_blackhole_db, SHOW_HAVE},
+ {sys_have_compress.name, (char*) &have_compress, SHOW_HAVE},
+ {sys_have_crypt.name, (char*) &have_crypt, SHOW_HAVE},
+ {sys_have_csv_db.name, (char*) &have_csv_db, SHOW_HAVE},
+ {sys_have_example_db.name, (char*) &have_example_db, SHOW_HAVE},
+ {sys_have_federated_db.name,(char*) &have_federated_db, SHOW_HAVE},
+ {sys_have_geometry.name, (char*) &have_geometry, SHOW_HAVE},
+ {sys_have_innodb.name, (char*) &have_innodb, SHOW_HAVE},
+ {sys_have_ndbcluster.name, (char*) &have_ndbcluster, SHOW_HAVE},
+ {sys_have_openssl.name, (char*) &have_openssl, SHOW_HAVE},
+ {sys_have_partition_db.name,(char*) &have_partition_db, SHOW_HAVE},
+ {sys_have_query_cache.name, (char*) &have_query_cache, SHOW_HAVE},
+ {sys_have_row_based_replication.name, (char*) &have_row_based_replication, SHOW_HAVE},
+ {sys_have_rtree_keys.name, (char*) &have_rtree_keys, SHOW_HAVE},
+ {sys_have_symlink.name, (char*) &have_symlink, SHOW_HAVE},
{"init_connect", (char*) &sys_init_connect, SHOW_SYS},
{"init_file", (char*) &opt_init_file, SHOW_CHAR_PTR},
{"init_slave", (char*) &sys_init_slave, SHOW_SYS},
-#ifdef HAVE_INNOBASE_DB
{"innodb_additional_mem_pool_size", (char*) &innobase_additional_mem_pool_size, SHOW_LONG },
{sys_innodb_autoextend_increment.name, (char*) &sys_innodb_autoextend_increment, SHOW_SYS},
{"innodb_buffer_pool_awe_mem_mb", (char*) &innobase_buffer_pool_awe_mem_mb, SHOW_LONG },
@@ -838,7 +782,7 @@ struct show_var_st init_vars[]= {
{sys_innodb_fast_shutdown.name,(char*) &sys_innodb_fast_shutdown, SHOW_SYS},
{"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
{"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
- {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
+ {"innodb_flush_log_at_trx_commit", (char*) &innobase_flush_log_at_trx_commit, SHOW_INT},
{"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
{"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
{"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },
@@ -858,7 +802,6 @@ struct show_var_st init_vars[]= {
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
{sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
{sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
-#endif
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
{sys_key_buffer_size.name, (char*) &sys_key_buffer_size, SHOW_SYS},
@@ -921,23 +864,33 @@ struct show_var_st init_vars[]= {
{sys_myisam_sort_buffer_size.name, (char*) &sys_myisam_sort_buffer_size, SHOW_SYS},
{sys_myisam_stats_method.name, (char*) &sys_myisam_stats_method, SHOW_SYS},
+ {sys_myisam_use_mmap.name, (char*) &sys_myisam_use_mmap, SHOW_SYS},
#ifdef __NT__
{"named_pipe", (char*) &opt_enable_named_pipe, SHOW_MY_BOOL},
#endif
-#ifdef HAVE_NDBCLUSTER_DB
{sys_ndb_autoincrement_prefetch_sz.name,
(char*) &sys_ndb_autoincrement_prefetch_sz, SHOW_SYS},
+ {sys_ndb_cache_check_time.name,(char*) &sys_ndb_cache_check_time, SHOW_SYS},
+ {sys_ndb_extra_logging.name,(char*) &sys_ndb_extra_logging, SHOW_SYS},
{sys_ndb_force_send.name, (char*) &sys_ndb_force_send, SHOW_SYS},
+ {sys_ndb_index_stat_cache_entries.name, (char*) &sys_ndb_index_stat_cache_entries, SHOW_SYS},
+ {sys_ndb_index_stat_enable.name, (char*) &sys_ndb_index_stat_enable, SHOW_SYS},
+ {sys_ndb_index_stat_update_freq.name, (char*) &sys_ndb_index_stat_update_freq, SHOW_SYS},
+#ifdef HAVE_NDB_BINLOG
+ {sys_ndb_report_thresh_binlog_epoch_slip.name,
+ (char*) &sys_ndb_report_thresh_binlog_epoch_slip, SHOW_SYS},
+ {sys_ndb_report_thresh_binlog_mem_usage.name,
+ (char*) &sys_ndb_report_thresh_binlog_mem_usage, SHOW_SYS},
+#endif
{sys_ndb_use_exact_count.name,(char*) &sys_ndb_use_exact_count, SHOW_SYS},
{sys_ndb_use_transactions.name,(char*) &sys_ndb_use_transactions, SHOW_SYS},
- {sys_ndb_cache_check_time.name,(char*) &sys_ndb_cache_check_time, SHOW_SYS},
-#endif
{sys_net_buffer_length.name,(char*) &sys_net_buffer_length, SHOW_SYS},
{sys_net_read_timeout.name, (char*) &sys_net_read_timeout, SHOW_SYS},
{sys_net_retry_count.name, (char*) &sys_net_retry_count, SHOW_SYS},
{sys_net_write_timeout.name,(char*) &sys_net_write_timeout, SHOW_SYS},
{sys_new_mode.name, (char*) &sys_new_mode, SHOW_SYS},
+ {sys_old_alter_table.name, (char*) &sys_old_alter_table, SHOW_SYS},
{sys_old_passwords.name, (char*) &sys_old_passwords, SHOW_SYS},
{"open_files_limit", (char*) &open_files_limit, SHOW_LONG},
{sys_optimizer_prune_level.name, (char*) &sys_optimizer_prune_level,
@@ -945,6 +898,7 @@ struct show_var_st init_vars[]= {
{sys_optimizer_search_depth.name,(char*) &sys_optimizer_search_depth,
SHOW_SYS},
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
+ {"plugin_dir", (char*) opt_plugin_dir, SHOW_CHAR},
{"port", (char*) &mysqld_port, SHOW_INT},
{sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS},
{"protocol_version", (char*) &protocol_version, SHOW_INT},
@@ -984,7 +938,7 @@ struct show_var_st init_vars[]= {
(char*) &sys_slave_compressed_protocol, SHOW_SYS},
{"slave_load_tmpdir", (char*) &slave_load_tmpdir, SHOW_CHAR_PTR},
{sys_slave_net_timeout.name,(char*) &sys_slave_net_timeout, SHOW_SYS},
- {"slave_skip_errors", (char*) &slave_error_mask, SHOW_SLAVE_SKIP_ERRORS},
+ {"slave_skip_errors", (char*) &show_slave_skip_errors, SHOW_FUNC},
{sys_slave_trans_retries.name,(char*) &sys_slave_trans_retries, SHOW_SYS},
#endif
{sys_slow_launch_time.name, (char*) &sys_slow_launch_time, SHOW_SYS},
@@ -1008,8 +962,9 @@ struct show_var_st init_vars[]= {
#ifdef HAVE_TZNAME
{"system_time_zone", system_time_zone, SHOW_CHAR},
#endif
- {"table_cache", (char*) &table_cache_size, SHOW_LONG},
+ {"table_definition_cache", (char*) &table_def_size, SHOW_LONG},
{"table_lock_wait_timeout", (char*) &table_lock_wait_timeout, SHOW_LONG },
+ {"table_open_cache", (char*) &table_cache_size, SHOW_LONG},
{sys_table_type.name, (char*) &sys_table_type, SHOW_SYS},
{sys_thread_cache_size.name,(char*) &sys_thread_cache_size, SHOW_SYS},
#ifdef HAVE_THR_SETCONCURRENCY
@@ -1028,9 +983,6 @@ struct show_var_st init_vars[]= {
{sys_updatable_views_with_limit.name,
(char*) &sys_updatable_views_with_limit,SHOW_SYS},
{"version", server_version, SHOW_CHAR},
-#ifdef HAVE_BERKELEY_DB
- {"version_bdb", (char*) DB_VERSION_STRING, SHOW_CHAR},
-#endif
{"version_comment", (char*) MYSQL_COMPILATION_COMMENT, SHOW_CHAR},
{"version_compile_machine", (char*) MACHINE_TYPE, SHOW_CHAR},
{sys_os.name, (char*) &sys_os, SHOW_SYS},
@@ -1077,7 +1029,7 @@ bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex,
uint new_length= (var ? var->value->str_value.length() : 0);
if (!old_value)
old_value= (char*) "";
- if (!(res= my_strdup_with_length((byte*)old_value, new_length, MYF(0))))
+ if (!(res= my_strndup((byte*)old_value, new_length, MYF(0))))
return 1;
/*
Replace the old value in such a way that the any thread using
@@ -1180,10 +1132,23 @@ static void fix_max_join_size(THD *thd, enum_var_type type)
/*
+ Can't change the 'next' tx_isolation while we are already in
+ a transaction
+*/
+static int check_tx_isolation(THD *thd, set_var *var)
+{
+ if (var->type == OPT_DEFAULT && (thd->server_status & SERVER_STATUS_IN_TRANS))
+ {
+ my_error(ER_CANT_CHANGE_TX_ISOLATION, MYF(0));
+ return 1;
+ }
+ return 0;
+}
+
+/*
If one doesn't use the SESSION modifier, the isolation level
is only active for the next command
*/
-
static void fix_tx_isolation(THD *thd, enum_var_type type)
{
if (type == OPT_SESSION)
@@ -1281,6 +1246,54 @@ extern void fix_delay_key_write(THD *thd, enum_var_type type)
}
}
+
+bool sys_var_thd_binlog_format::is_readonly() const
+{
+ /*
+ Under certain circumstances, the variable is read-only (unchangeable):
+ */
+ THD *thd= current_thd;
+ /*
+ If RBR and open temporary tables, their CREATE TABLE may not be in the
+ binlog, so we can't toggle to SBR in this connection.
+ The test below will also prevent SET GLOBAL, well it was not easy to test
+ if global or not here.
+ And this test will also prevent switching from RBR to RBR (a no-op which
+ should not happen too often).
+ */
+ if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
+ thd->temporary_tables)
+ {
+ my_error(ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR, MYF(0));
+ return 1;
+ }
+ /*
+ if in a stored function, it's too late to change mode
+ */
+ if (thd->spcont && thd->prelocked_mode)
+ {
+ DBUG_ASSERT(thd->variables.binlog_format != BINLOG_FORMAT_ROW);
+ my_error(ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT, MYF(0));
+ return 1;
+ }
+#ifdef HAVE_NDB_BINLOG
+ /*
+ Cluster does not support changing the binlog format on the fly yet.
+ */
+ if (opt_bin_log && (have_ndbcluster == SHOW_OPTION_YES))
+ {
+ my_error(ER_NDB_CANT_SWITCH_BINLOG_FORMAT, MYF(0));
+ return 1;
+ }
+#endif
+ return sys_var_thd_enum::is_readonly();
+}
+
+void fix_binlog_format_after_update(THD *thd, enum_var_type type)
+{
+ thd->reset_current_stmt_binlog_row_based();
+}
+
static void fix_max_binlog_size(THD *thd, enum_var_type type)
{
DBUG_ENTER("fix_max_binlog_size");
@@ -2762,7 +2775,7 @@ static bool set_log_update(THD *thd, set_var *var)
See sql/mysqld.cc/, comments in function init_server_components() for an
explaination of the different warnings we send below
*/
-
+
if (opt_sql_bin_update)
{
((sys_var_thd_bit*) var->var)->bit_flag|= (OPTION_BIN_LOG |
@@ -2820,12 +2833,6 @@ static byte *get_error_count(THD *thd)
}
-static byte *get_have_innodb(THD *thd)
-{
- return (byte*) show_comp_option_name[have_innodb];
-}
-
-
/****************************************************************************
Main handling of variables:
- Initialisation
@@ -2884,17 +2891,15 @@ static byte *get_sys_var_length(const sys_var *var, uint *length,
void set_var_init()
{
- hash_init(&system_variable_hash, system_charset_info,
- array_elements(sys_variables),0,0,
- (hash_get_key) get_sys_var_length,0,0);
- sys_var **var, **end;
- for (var= sys_variables, end= sys_variables+array_elements(sys_variables) ;
- var < end;
- var++)
+ sys_var *var;
+
+ hash_init(&system_variable_hash, system_charset_info, sys_var::sys_vars, 0,
+ 0, (hash_get_key) get_sys_var_length, 0, 0);
+ for (var= sys_var::first; var; var= var->next)
{
- (*var)->name_length= strlen((*var)->name);
- (*var)->option_limits= find_option(my_long_options, (*var)->name);
- my_hash_insert(&system_variable_hash, (byte*) *var);
+ var->name_length= strlen(var->name);
+ var->option_limits= find_option(my_long_options, var->name);
+ my_hash_insert(&system_variable_hash, (byte*) var);
}
/*
Special cases
@@ -3201,11 +3206,12 @@ bool sys_var_thd_storage_engine::check(THD *thd, set_var *var)
if (var->value->result_type() == STRING_RESULT)
{
- enum db_type db_type;
+ LEX_STRING name;
+ handlerton *db_type;
if (!(res=var->value->val_str(&str)) ||
- !(var->save_result.ulong_value=
- (ulong) (db_type= ha_resolve_by_name(res->ptr(), res->length()))) ||
- ha_checktype(thd, db_type, 1, 0) != db_type)
+ !(name.str= (char *)res->ptr()) || !(name.length= res->length()) ||
+ !(var->save_result.hton= db_type= ha_resolve_by_name(thd, &name)) ||
+ ha_checktype(thd, ha_legacy_type(db_type), 1, 0) != db_type)
{
value= res ? res->c_ptr() : "NULL";
goto err;
@@ -3223,38 +3229,34 @@ err:
byte *sys_var_thd_storage_engine::value_ptr(THD *thd, enum_var_type type,
LEX_STRING *base)
{
- ulong val;
- val= ((type == OPT_GLOBAL) ? global_system_variables.*offset :
- thd->variables.*offset);
- const char *table_type= ha_get_storage_engine((enum db_type)val);
- return (byte *) table_type;
+ handlerton *val;
+ val= (type == OPT_GLOBAL) ? global_system_variables.*offset :
+ thd->variables.*offset;
+ return (byte *) val->name;
}
void sys_var_thd_storage_engine::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
- global_system_variables.*offset= (ulong) DB_TYPE_MYISAM;
+ global_system_variables.*offset= &myisam_hton;
else
- thd->variables.*offset= (ulong) (global_system_variables.*offset);
+ thd->variables.*offset= global_system_variables.*offset;
}
bool sys_var_thd_storage_engine::update(THD *thd, set_var *var)
{
- if (var->type == OPT_GLOBAL)
- global_system_variables.*offset= var->save_result.ulong_value;
- else
- thd->variables.*offset= var->save_result.ulong_value;
+ handlerton **value= &(global_system_variables.*offset);
+ if (var->type != OPT_GLOBAL)
+ value= &(thd->variables.*offset);
+ *value= var->save_result.hton;
return 0;
}
void sys_var_thd_table_type::warn_deprecated(THD *thd)
{
- push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_WARN_DEPRECATED_SYNTAX,
- ER(ER_WARN_DEPRECATED_SYNTAX), "table_type",
- "storage_engine");
+ WARN_DEPRECATED(thd, "5.2", "table_type", "'storage_engine'");
}
void sys_var_thd_table_type::set_default(THD *thd, enum_var_type type)
@@ -3511,10 +3513,8 @@ bool process_key_caches(int (* func) (const char *name, KEY_CACHE *))
void sys_var_trust_routine_creators::warn_deprecated(THD *thd)
{
- push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_WARN_DEPRECATED_SYNTAX,
- ER(ER_WARN_DEPRECATED_SYNTAX), "log_bin_trust_routine_creators",
- "log_bin_trust_function_creators");
+ WARN_DEPRECATED(thd, "5.2", "log_bin_trust_routine_creators",
+ "'log_bin_trust_function_creators'");
}
void sys_var_trust_routine_creators::set_default(THD *thd, enum_var_type type)
@@ -3529,6 +3529,34 @@ bool sys_var_trust_routine_creators::update(THD *thd, set_var *var)
return sys_var_bool_ptr::update(thd, var);
}
+/* even session variable here requires SUPER, because of -#o,file */
+bool sys_var_thd_dbug::check(THD *thd, set_var *var)
+{
+ return check_global_access(thd, SUPER_ACL);
+}
+
+bool sys_var_thd_dbug::update(THD *thd, set_var *var)
+{
+ if (var->type == OPT_GLOBAL)
+ DBUG_SET_INITIAL(var ? var->value->str_value.c_ptr() : "");
+ else
+ {
+ DBUG_POP();
+ DBUG_PUSH(var ? var->value->str_value.c_ptr() : "");
+ }
+ return 0;
+}
+
+byte *sys_var_thd_dbug::value_ptr(THD *thd, enum_var_type type, LEX_STRING *b)
+{
+ char buf[256];
+ if (type == OPT_GLOBAL)
+ DBUG_EXPLAIN_INITIAL(buf, sizeof(buf));
+ else
+ DBUG_EXPLAIN(buf, sizeof(buf));
+ return (byte*) thd->strdup(buf);
+}
+
/****************************************************************************
Used templates
****************************************************************************/