Loading mysql-test/r/variables.result +18 −0 Original line number Diff line number Diff line Loading @@ -566,3 +566,21 @@ set global character_set_system = latin1; ERROR HY000: Variable 'character_set_system' is a read only variable set @@global.version_compile_os='234'; ERROR HY000: Variable 'version_compile_os' is a read only variable set character_set_filesystem=latin1; select @@character_set_filesystem; @@character_set_filesystem latin1 set @@global.character_set_filesystem=latin2; set character_set_filesystem=latin1; select @@character_set_filesystem; @@character_set_filesystem latin1 set @@global.character_set_filesystem=latin2; set character_set_filesystem=default; select @@character_set_filesystem; @@character_set_filesystem latin2 set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; @@global.character_set_filesystem binary mysql-test/t/variables.test +14 −0 Original line number Diff line number Diff line Loading @@ -456,4 +456,18 @@ set global character_set_system = latin1; --error 1238 set @@global.version_compile_os='234'; # # Check character_set_filesystem variable # set character_set_filesystem=latin1; select @@character_set_filesystem; set @@global.character_set_filesystem=latin2; set character_set_filesystem=latin1; select @@character_set_filesystem; set @@global.character_set_filesystem=latin2; set character_set_filesystem=default; select @@character_set_filesystem; set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; # End of 5.0 tests sql/mysqld.cc +16 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,7 @@ static const char *sql_mode_str= "OFF"; static char *mysqld_user, *mysqld_chroot, *log_error_file_ptr; static char *opt_init_slave, *language_ptr, *opt_init_connect; static char *default_character_set_name; static char *character_set_filesystem_name; static char *my_bind_addr_str; static char *default_collation_name; static char mysql_data_home_buff[2]; Loading Loading @@ -469,6 +470,7 @@ MY_BITMAP temp_pool; CHARSET_INFO *system_charset_info, *files_charset_info ; CHARSET_INFO *national_charset_info, *table_alias_charset; CHARSET_INFO *character_set_filesystem; SHOW_COMP_OPTION have_berkeley_db, have_innodb, have_isam, have_ndbcluster, have_example_db, have_archive_db, have_csv_db; Loading Loading @@ -2677,6 +2679,12 @@ static int init_common_variables(const char *conf_file_name, int argc, global_system_variables.character_set_client= default_charset_info; global_system_variables.collation_connection= default_charset_info; if (!(character_set_filesystem= get_charset_by_csname(character_set_filesystem_name, MY_CS_PRIMARY, MYF(MY_WME)))) return 1; global_system_variables.character_set_filesystem= character_set_filesystem; sys_init_connect.value_length= 0; if ((sys_init_connect.value= opt_init_connect)) sys_init_connect.value_length= strlen(opt_init_connect); Loading Loading @@ -4563,6 +4571,7 @@ enum options_mysqld OPT_GROUP_CONCAT_MAX_LEN, OPT_DEFAULT_COLLATION, OPT_CHARACTER_SET_CLIENT_HANDSHAKE, OPT_CHARACTER_SET_FILESYSTEM, OPT_INIT_CONNECT, OPT_INIT_SLAVE, OPT_SECURE_AUTH, Loading Loading @@ -4671,6 +4680,11 @@ Disable with --skip-bdb (will save memory).", (gptr*) &opt_character_set_client_handshake, (gptr*) &opt_character_set_client_handshake, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, {"character-set-filesystem", OPT_CHARACTER_SET_FILESYSTEM, "Set the filesystem character set.", (gptr*) &character_set_filesystem_name, (gptr*) &character_set_filesystem_name, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, {"character-set-server", 'C', "Set the default character set.", (gptr*) &default_character_set_name, (gptr*) &default_character_set_name, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, Loading Loading @@ -6260,6 +6274,7 @@ static void mysql_init_variables(void) files_charset_info= &my_charset_utf8_general_ci; national_charset_info= &my_charset_utf8_general_ci; table_alias_charset= &my_charset_bin; character_set_filesystem= &my_charset_bin; opt_date_time_formats[0]= opt_date_time_formats[1]= opt_date_time_formats[2]= 0; Loading Loading @@ -6320,6 +6335,7 @@ static void mysql_init_variables(void) default_character_set_name= (char*) MYSQL_DEFAULT_CHARSET_NAME; default_collation_name= (char*) MYSQL_DEFAULT_COLLATION_NAME; sys_charset_system.value= (char*) system_charset_info->csname; character_set_filesystem_name= (char*) "binary"; /* Set default values for some option variables */ Loading sql/set_var.cc +30 −1 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ sys_var_character_set_database sys_character_set_database("character_set_databas 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_thd_ulong sys_completion_type("completion_type", &SV::completion_type, check_completion_type, Loading Loading @@ -580,6 +581,7 @@ sys_var *sys_variables[]= &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, Loading Loading @@ -771,6 +773,7 @@ struct show_var_st init_vars[]= { {sys_character_set_client.name,(char*) &sys_character_set_client, SHOW_SYS}, {sys_character_set_connection.name,(char*) &sys_character_set_connection,SHOW_SYS}, {sys_character_set_database.name, (char*) &sys_character_set_database,SHOW_SYS}, {sys_character_set_filesystem.name,(char*) &sys_character_set_filesystem, SHOW_SYS}, {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}, Loading Loading @@ -835,6 +838,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_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 }, Loading @@ -854,7 +858,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}, {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, 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}, Loading Loading @@ -2076,6 +2079,32 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type) } CHARSET_INFO ** sys_var_character_set_filesystem::ci_ptr(THD *thd, enum_var_type type) { if (type == OPT_GLOBAL) return &global_system_variables.character_set_filesystem; else return &thd->variables.character_set_filesystem; } extern CHARSET_INFO *character_set_filesystem; void sys_var_character_set_filesystem::set_default(THD *thd, enum_var_type type) { if (type == OPT_GLOBAL) global_system_variables.character_set_filesystem= character_set_filesystem; else { thd->variables.character_set_filesystem= (global_system_variables. character_set_filesystem); thd->update_charset(); } } CHARSET_INFO ** sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type) { Loading sql/set_var.h +9 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,15 @@ class sys_var_character_set :public sys_var_thd virtual CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type)= 0; }; class sys_var_character_set_filesystem :public sys_var_character_set { public: sys_var_character_set_filesystem(const char *name_arg) : sys_var_character_set(name_arg) {} void set_default(THD *thd, enum_var_type type); CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type); }; class sys_var_character_set_client :public sys_var_character_set { public: Loading Loading
mysql-test/r/variables.result +18 −0 Original line number Diff line number Diff line Loading @@ -566,3 +566,21 @@ set global character_set_system = latin1; ERROR HY000: Variable 'character_set_system' is a read only variable set @@global.version_compile_os='234'; ERROR HY000: Variable 'version_compile_os' is a read only variable set character_set_filesystem=latin1; select @@character_set_filesystem; @@character_set_filesystem latin1 set @@global.character_set_filesystem=latin2; set character_set_filesystem=latin1; select @@character_set_filesystem; @@character_set_filesystem latin1 set @@global.character_set_filesystem=latin2; set character_set_filesystem=default; select @@character_set_filesystem; @@character_set_filesystem latin2 set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; @@global.character_set_filesystem binary
mysql-test/t/variables.test +14 −0 Original line number Diff line number Diff line Loading @@ -456,4 +456,18 @@ set global character_set_system = latin1; --error 1238 set @@global.version_compile_os='234'; # # Check character_set_filesystem variable # set character_set_filesystem=latin1; select @@character_set_filesystem; set @@global.character_set_filesystem=latin2; set character_set_filesystem=latin1; select @@character_set_filesystem; set @@global.character_set_filesystem=latin2; set character_set_filesystem=default; select @@character_set_filesystem; set @@global.character_set_filesystem=default; select @@global.character_set_filesystem; # End of 5.0 tests
sql/mysqld.cc +16 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,7 @@ static const char *sql_mode_str= "OFF"; static char *mysqld_user, *mysqld_chroot, *log_error_file_ptr; static char *opt_init_slave, *language_ptr, *opt_init_connect; static char *default_character_set_name; static char *character_set_filesystem_name; static char *my_bind_addr_str; static char *default_collation_name; static char mysql_data_home_buff[2]; Loading Loading @@ -469,6 +470,7 @@ MY_BITMAP temp_pool; CHARSET_INFO *system_charset_info, *files_charset_info ; CHARSET_INFO *national_charset_info, *table_alias_charset; CHARSET_INFO *character_set_filesystem; SHOW_COMP_OPTION have_berkeley_db, have_innodb, have_isam, have_ndbcluster, have_example_db, have_archive_db, have_csv_db; Loading Loading @@ -2677,6 +2679,12 @@ static int init_common_variables(const char *conf_file_name, int argc, global_system_variables.character_set_client= default_charset_info; global_system_variables.collation_connection= default_charset_info; if (!(character_set_filesystem= get_charset_by_csname(character_set_filesystem_name, MY_CS_PRIMARY, MYF(MY_WME)))) return 1; global_system_variables.character_set_filesystem= character_set_filesystem; sys_init_connect.value_length= 0; if ((sys_init_connect.value= opt_init_connect)) sys_init_connect.value_length= strlen(opt_init_connect); Loading Loading @@ -4563,6 +4571,7 @@ enum options_mysqld OPT_GROUP_CONCAT_MAX_LEN, OPT_DEFAULT_COLLATION, OPT_CHARACTER_SET_CLIENT_HANDSHAKE, OPT_CHARACTER_SET_FILESYSTEM, OPT_INIT_CONNECT, OPT_INIT_SLAVE, OPT_SECURE_AUTH, Loading Loading @@ -4671,6 +4680,11 @@ Disable with --skip-bdb (will save memory).", (gptr*) &opt_character_set_client_handshake, (gptr*) &opt_character_set_client_handshake, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, {"character-set-filesystem", OPT_CHARACTER_SET_FILESYSTEM, "Set the filesystem character set.", (gptr*) &character_set_filesystem_name, (gptr*) &character_set_filesystem_name, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, {"character-set-server", 'C', "Set the default character set.", (gptr*) &default_character_set_name, (gptr*) &default_character_set_name, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, Loading Loading @@ -6260,6 +6274,7 @@ static void mysql_init_variables(void) files_charset_info= &my_charset_utf8_general_ci; national_charset_info= &my_charset_utf8_general_ci; table_alias_charset= &my_charset_bin; character_set_filesystem= &my_charset_bin; opt_date_time_formats[0]= opt_date_time_formats[1]= opt_date_time_formats[2]= 0; Loading Loading @@ -6320,6 +6335,7 @@ static void mysql_init_variables(void) default_character_set_name= (char*) MYSQL_DEFAULT_CHARSET_NAME; default_collation_name= (char*) MYSQL_DEFAULT_COLLATION_NAME; sys_charset_system.value= (char*) system_charset_info->csname; character_set_filesystem_name= (char*) "binary"; /* Set default values for some option variables */ Loading
sql/set_var.cc +30 −1 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ sys_var_character_set_database sys_character_set_database("character_set_databas 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_thd_ulong sys_completion_type("completion_type", &SV::completion_type, check_completion_type, Loading Loading @@ -580,6 +581,7 @@ sys_var *sys_variables[]= &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, Loading Loading @@ -771,6 +773,7 @@ struct show_var_st init_vars[]= { {sys_character_set_client.name,(char*) &sys_character_set_client, SHOW_SYS}, {sys_character_set_connection.name,(char*) &sys_character_set_connection,SHOW_SYS}, {sys_character_set_database.name, (char*) &sys_character_set_database,SHOW_SYS}, {sys_character_set_filesystem.name,(char*) &sys_character_set_filesystem, SHOW_SYS}, {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}, Loading Loading @@ -835,6 +838,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_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 }, Loading @@ -854,7 +858,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}, {sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, 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}, Loading Loading @@ -2076,6 +2079,32 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type) } CHARSET_INFO ** sys_var_character_set_filesystem::ci_ptr(THD *thd, enum_var_type type) { if (type == OPT_GLOBAL) return &global_system_variables.character_set_filesystem; else return &thd->variables.character_set_filesystem; } extern CHARSET_INFO *character_set_filesystem; void sys_var_character_set_filesystem::set_default(THD *thd, enum_var_type type) { if (type == OPT_GLOBAL) global_system_variables.character_set_filesystem= character_set_filesystem; else { thd->variables.character_set_filesystem= (global_system_variables. character_set_filesystem); thd->update_charset(); } } CHARSET_INFO ** sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type) { Loading
sql/set_var.h +9 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,15 @@ class sys_var_character_set :public sys_var_thd virtual CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type)= 0; }; class sys_var_character_set_filesystem :public sys_var_character_set { public: sys_var_character_set_filesystem(const char *name_arg) : sys_var_character_set(name_arg) {} void set_default(THD *thd, enum_var_type type); CHARSET_INFO **ci_ptr(THD *thd, enum_var_type type); }; class sys_var_character_set_client :public sys_var_character_set { public: Loading