Commit ccc3404f authored by Georgi Kodinov's avatar Georgi Kodinov
Browse files

merged bug 37339 to 5.0-bugteam

parents 68066aa5 0708ad5f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
SET CHARACTER SET utf8;
SHOW VARIABLES like 'character_sets_dir';
Variable_name	Value
character_sets_dir	/ß/
SHOW VARIABLES like 'character_set_filesystem';
Variable_name	Value
character_set_filesystem	latin1
SHOW VARIABLES like 'character_set_client';
Variable_name	Value
character_set_client	utf8
SET CHARACTER SET default;
+2 −0
Original line number Diff line number Diff line
--character-sets-dir=/ß
--character-set-filesystem=latin1
+5 −0
Original line number Diff line number Diff line
SET CHARACTER SET utf8;
SHOW VARIABLES like 'character_sets_dir';
SHOW VARIABLES like 'character_set_filesystem';
SHOW VARIABLES like 'character_set_client';
SET CHARACTER SET default;
+2 −0
Original line number Diff line number Diff line
@@ -3035,12 +3035,14 @@ static int init_common_variables(const char *conf_file_name, int argc,
    sys_init_connect.value_length= strlen(opt_init_connect);
  else
    sys_init_connect.value=my_strdup("",MYF(0));
  sys_init_connect.is_os_charset= TRUE;

  sys_init_slave.value_length= 0;
  if ((sys_init_slave.value= opt_init_slave))
    sys_init_slave.value_length= strlen(opt_init_slave);
  else
    sys_init_slave.value=my_strdup("",MYF(0));
  sys_init_slave.is_os_charset= TRUE;

  if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1))
    return 1;
+44 −23
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ sys_var_thd_ulong sys_auto_increment_offset("auto_increment_offset",
sys_var_bool_ptr	sys_automatic_sp_privileges("automatic_sp_privileges",
					      &sp_automatic_privileges);

sys_var_const_str       sys_basedir("basedir", mysql_home);
sys_var_const_os_str    sys_basedir("basedir", mysql_home);
sys_var_long_ptr	sys_binlog_cache_size("binlog_cache_size",
					      &binlog_cache_size);
sys_var_thd_ulong	sys_bulk_insert_buff_size("bulk_insert_buffer_size",
@@ -151,6 +151,8 @@ sys_var_character_set_client sys_character_set_client("character_set_client");
sys_var_character_set_connection  sys_character_set_connection("character_set_connection");
sys_var_character_set_results sys_character_set_results("character_set_results");
sys_var_character_set_filesystem  sys_character_set_filesystem("character_set_filesystem");
sys_var_const_os_str    sys_character_sets_dir("character_sets_dir", 
                                               mysql_charsets_dir);
sys_var_thd_ulong	sys_completion_type("completion_type",
					 &SV::completion_type,
					 check_completion_type,
@@ -162,7 +164,7 @@ sys_var_long_ptr sys_concurrent_insert("concurrent_insert",
                                              &myisam_concurrent_insert);
sys_var_long_ptr	sys_connect_timeout("connect_timeout",
					    &connect_timeout);
sys_var_const_str       sys_datadir("datadir", mysql_real_data_home);
sys_var_const_os_str    sys_datadir("datadir", mysql_real_data_home);
sys_var_enum		sys_delay_key_write("delay_key_write",
					    &delay_key_write_options,
					    &delay_key_write_typelib,
@@ -311,6 +313,7 @@ sys_var_thd_ulong sys_optimizer_prune_level("optimizer_prune_level",
                                                  &SV::optimizer_prune_level);
sys_var_thd_ulong       sys_optimizer_search_depth("optimizer_search_depth",
                                                   &SV::optimizer_search_depth);
sys_var_const_os_str    sys_plugin_dir("plugin_dir", opt_plugin_dir);
sys_var_thd_ulong       sys_preload_buff_size("preload_buffer_size",
                                              &SV::preload_buff_size);
sys_var_thd_ulong	sys_read_buff_size("read_buffer_size",
@@ -338,7 +341,7 @@ sys_var_thd_ulong sys_query_alloc_block_size("query_alloc_block_size",
sys_var_thd_ulong	sys_query_prealloc_size("query_prealloc_size",
						&SV::query_prealloc_size,
						0, fix_thd_mem_root);
sys_var_readonly        sys_tmpdir("tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
sys_var_readonly_os     sys_tmpdir("tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
sys_var_thd_ulong	sys_trans_alloc_block_size("transaction_alloc_block_size",
						   &SV::trans_alloc_block_size,
						   0, fix_trans_mem_root);
@@ -363,9 +366,11 @@ sys_var_bool_ptr sys_secure_auth("secure_auth", &opt_secure_auth);
sys_var_const_str_ptr   sys_secure_file_priv("secure_file_priv",
                                             &opt_secure_file_priv);
sys_var_long_ptr	sys_server_id("server_id", &server_id, fix_server_id);
#ifdef HAVE_REPLICATION
sys_var_bool_ptr	sys_slave_compressed_protocol("slave_compressed_protocol",
						      &opt_slave_compressed_protocol);
#ifdef HAVE_REPLICATION
sys_var_const_os_str_ptr sys_slave_load_tmpdir("slave_load_tmpdir", 
                                               &slave_load_tmpdir);
sys_var_long_ptr	sys_slave_net_timeout("slave_net_timeout",
					      &slave_net_timeout);
sys_var_long_ptr	sys_slave_trans_retries("slave_transaction_retries",
@@ -380,17 +385,17 @@ sys_var_thd_sql_mode sys_sql_mode("sql_mode",
#ifdef HAVE_OPENSSL
extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher,
            *opt_ssl_key;
sys_var_const_str_ptr	sys_ssl_ca("ssl_ca", &opt_ssl_ca);
sys_var_const_str_ptr	sys_ssl_capath("ssl_capath", &opt_ssl_capath);
sys_var_const_str_ptr	sys_ssl_cert("ssl_cert", &opt_ssl_cert);
sys_var_const_str_ptr	sys_ssl_cipher("ssl_cipher", &opt_ssl_cipher);
sys_var_const_str_ptr	sys_ssl_key("ssl_key", &opt_ssl_key);
sys_var_const_os_str_ptr  sys_ssl_ca("ssl_ca", &opt_ssl_ca);
sys_var_const_os_str_ptr  sys_ssl_capath("ssl_capath", &opt_ssl_capath);
sys_var_const_os_str_ptr  sys_ssl_cert("ssl_cert", &opt_ssl_cert);
sys_var_const_os_str_ptr  sys_ssl_cipher("ssl_cipher", &opt_ssl_cipher);
sys_var_const_os_str_ptr  sys_ssl_key("ssl_key", &opt_ssl_key);
#else
sys_var_const_str	sys_ssl_ca("ssl_ca", NULL);
sys_var_const_str	sys_ssl_capath("ssl_capath", NULL);
sys_var_const_str	sys_ssl_cert("ssl_cert", NULL);
sys_var_const_str	sys_ssl_cipher("ssl_cipher", NULL);
sys_var_const_str	sys_ssl_key("ssl_key", NULL);
sys_var_const_os_str	  sys_ssl_ca("ssl_ca", NULL);
sys_var_const_os_str	  sys_ssl_capath("ssl_capath", NULL);
sys_var_const_os_str	  sys_ssl_cert("ssl_cert", NULL);
sys_var_const_os_str	  sys_ssl_cipher("ssl_cipher", NULL);
sys_var_const_os_str	  sys_ssl_key("ssl_key", NULL);
#endif
sys_var_thd_enum
sys_updatable_views_with_limit("updatable_views_with_limit",
@@ -460,6 +465,14 @@ sys_var_long_ptr sys_innodb_commit_concurrency("innodb_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);
sys_var_const_os_str_ptr sys_innodb_data_file_path("innodb_data_file_path", 
                                               &innobase_data_file_path);
sys_var_const_os_str_ptr sys_innodb_data_home_dir("innodb_data_home_dir", 
                                               &innobase_data_home_dir);
sys_var_const_os_str_ptr sys_innodb_log_arch_dir("innodb_log_arch_dir", 
                                               &innobase_log_arch_dir);
sys_var_const_os_str_ptr sys_innodb_log_group_home_dir("innodb_log_group_home_dir", 
                                                       &innobase_log_group_home_dir);
#endif

/* Condition pushdown to storage engine */
@@ -844,7 +857,7 @@ struct show_var_st init_vars[]= {
  {sys_character_set_results.name,(char*) &sys_character_set_results, SHOW_SYS},
  {sys_character_set_server.name, (char*) &sys_character_set_server,SHOW_SYS},
  {sys_charset_system.name,   (char*) &sys_charset_system,          SHOW_SYS},
  {"character_sets_dir",      mysql_charsets_dir,                   SHOW_CHAR},
  {sys_character_sets_dir.name, (char *) &sys_character_sets_dir,   SHOW_SYS},
  {sys_collation_connection.name,(char*) &sys_collation_connection, SHOW_SYS},
  {sys_collation_database.name,(char*) &sys_collation_database,     SHOW_SYS},
  {sys_collation_server.name,(char*) &sys_collation_server,         SHOW_SYS},
@@ -905,8 +918,8 @@ struct show_var_st init_vars[]= {
  {"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL},
  {sys_innodb_commit_concurrency.name, (char*) &sys_innodb_commit_concurrency, SHOW_SYS},
  {sys_innodb_concurrency_tickets.name, (char*) &sys_innodb_concurrency_tickets, SHOW_SYS},
  {"innodb_data_file_path", (char*) &innobase_data_file_path,	    SHOW_CHAR_PTR},
  {"innodb_data_home_dir",  (char*) &innobase_data_home_dir,	    SHOW_CHAR_PTR},
  {sys_innodb_data_file_path.name, (char*) &sys_innodb_data_file_path, SHOW_SYS},
  {sys_innodb_data_home_dir.name, (char*) &sys_innodb_data_home_dir, SHOW_SYS},
  {"innodb_adaptive_hash_index", (char*) &innobase_adaptive_hash_index, SHOW_MY_BOOL},
  {"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL},
  {sys_innodb_fast_shutdown.name,(char*) &sys_innodb_fast_shutdown, SHOW_SYS},
@@ -917,12 +930,12 @@ struct show_var_st init_vars[]= {
  {"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
  {"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },
  {"innodb_locks_unsafe_for_binlog", (char*) &innobase_locks_unsafe_for_binlog, SHOW_MY_BOOL},
  {"innodb_log_arch_dir",   (char*) &innobase_log_arch_dir, 	    SHOW_CHAR_PTR},
  {sys_innodb_log_arch_dir.name, (char*) &sys_innodb_log_arch_dir,  SHOW_SYS},
  {"innodb_log_archive",    (char*) &innobase_log_archive, 	    SHOW_MY_BOOL},
  {"innodb_log_buffer_size", (char*) &innobase_log_buffer_size, SHOW_LONG },
  {"innodb_log_file_size", (char*) &innobase_log_file_size, SHOW_LONGLONG},
  {"innodb_log_files_in_group", (char*) &innobase_log_files_in_group,	SHOW_LONG},
  {"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR},
  {sys_innodb_log_group_home_dir.name, (char*) &sys_innodb_log_group_home_dir, SHOW_SYS},
  {sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS},
  {sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
  {"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
@@ -1026,7 +1039,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},
  {sys_plugin_dir.name,       (char*) &sys_plugin_dir,              SHOW_SYS},
  {"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},
@@ -1068,7 +1081,7 @@ struct show_var_st init_vars[]= {
#ifdef HAVE_REPLICATION
  {sys_slave_compressed_protocol.name,
    (char*) &sys_slave_compressed_protocol,           SHOW_SYS},
  {"slave_load_tmpdir",       (char*) &slave_load_tmpdir,           SHOW_CHAR_PTR},
  {sys_slave_load_tmpdir.name,(char*) &sys_slave_load_tmpdir,       SHOW_SYS},
  {sys_slave_net_timeout.name,(char*) &sys_slave_net_timeout,	    SHOW_SYS},
  {"slave_skip_errors",       (char*) &slave_error_mask,            SHOW_SLAVE_SKIP_ERRORS},
  {sys_slave_trans_retries.name,(char*) &sys_slave_trans_retries,   SHOW_SYS},
@@ -1175,6 +1188,7 @@ bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex,
  old_value= var_str->value;
  var_str->value= res;
  var_str->value_length= new_length;
  var_str->is_os_charset= FALSE;
  rw_unlock(var_mutex);
  my_free(old_value, MYF(MY_ALLOW_ZERO_PTR));
  return 0;
@@ -1914,11 +1928,11 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
    char *str= (char*) value_ptr(thd, var_type, base);
    if (str)
      tmp= new Item_string(str, strlen(str),
                           system_charset_info, DERIVATION_SYSCONST);
                           charset(thd), DERIVATION_SYSCONST);
    else
    {
      tmp= new Item_null();
      tmp->collation.set(system_charset_info, DERIVATION_SYSCONST);
      tmp->collation.set(charset(thd), DERIVATION_SYSCONST);
    }
    pthread_mutex_unlock(&LOCK_global_system_variables);
    return tmp;
@@ -1930,6 +1944,13 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
}


CHARSET_INFO *sys_var::charset(THD *thd)
{
  return is_os_charset ? thd->variables.character_set_filesystem : 
    system_charset_info;
}


bool sys_var_thd_enum::update(THD *thd, set_var *var)
{
  if (var->type == OPT_GLOBAL)
Loading