Loading mysql-test/r/ctype_ucs.result +8 −0 Original line number Diff line number Diff line Loading @@ -803,4 +803,12 @@ quote(name) ???????? ???????????????? drop table bug20536; set names ucs2; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set names ucs2 collate ucs2_bin; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set character_set_client= ucs2; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set character_set_client= concat('ucs', substr('2', 1)); ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' End of 4.1 tests mysql-test/t/ctype_ucs.test +12 −0 Original line number Diff line number Diff line Loading @@ -535,4 +535,16 @@ select quote(name) from bug20536; drop table bug20536; # # Bug #31615: crash after set names ucs2 collate xxx # --error 1231 set names ucs2; --error 1231 set names ucs2 collate ucs2_bin; --error 1231 set character_set_client= ucs2; --error 1231 set character_set_client= concat('ucs', substr('2', 1)); --echo End of 4.1 tests sql/set_var.cc +22 −0 Original line number Diff line number Diff line Loading @@ -1992,6 +1992,21 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type) } bool sys_var_character_set_client::check(THD *thd, set_var *var) { if (sys_var_character_set::check(thd, var)) return 1; /* Currently, UCS-2 cannot be used as a client character set */ if (var->save_result.charset->mbminlen > 1) { my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, var->save_result.charset->csname); return 1; } return 0; } CHARSET_INFO ** sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type) { Loading Loading @@ -2355,6 +2370,13 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var) int set_var_collation_client::check(THD *thd) { /* Currently, UCS-2 cannot be used as a client character set */ if (character_set_client->mbminlen > 1) { my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client", character_set_client->csname); return 1; } return 0; } Loading sql/set_var.h +1 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ class sys_var_character_set_client :public sys_var_character_set 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); bool check(THD *thd, set_var *var); }; class sys_var_character_set_results :public sys_var_character_set Loading Loading
mysql-test/r/ctype_ucs.result +8 −0 Original line number Diff line number Diff line Loading @@ -803,4 +803,12 @@ quote(name) ???????? ???????????????? drop table bug20536; set names ucs2; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set names ucs2 collate ucs2_bin; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set character_set_client= ucs2; ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' set character_set_client= concat('ucs', substr('2', 1)); ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2' End of 4.1 tests
mysql-test/t/ctype_ucs.test +12 −0 Original line number Diff line number Diff line Loading @@ -535,4 +535,16 @@ select quote(name) from bug20536; drop table bug20536; # # Bug #31615: crash after set names ucs2 collate xxx # --error 1231 set names ucs2; --error 1231 set names ucs2 collate ucs2_bin; --error 1231 set character_set_client= ucs2; --error 1231 set character_set_client= concat('ucs', substr('2', 1)); --echo End of 4.1 tests
sql/set_var.cc +22 −0 Original line number Diff line number Diff line Loading @@ -1992,6 +1992,21 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type) } bool sys_var_character_set_client::check(THD *thd, set_var *var) { if (sys_var_character_set::check(thd, var)) return 1; /* Currently, UCS-2 cannot be used as a client character set */ if (var->save_result.charset->mbminlen > 1) { my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, var->save_result.charset->csname); return 1; } return 0; } CHARSET_INFO ** sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type) { Loading Loading @@ -2355,6 +2370,13 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var) int set_var_collation_client::check(THD *thd) { /* Currently, UCS-2 cannot be used as a client character set */ if (character_set_client->mbminlen > 1) { my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client", character_set_client->csname); return 1; } return 0; } Loading
sql/set_var.h +1 −0 Original line number Diff line number Diff line Loading @@ -578,6 +578,7 @@ class sys_var_character_set_client :public sys_var_character_set 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); bool check(THD *thd, set_var *var); }; class sys_var_character_set_results :public sys_var_character_set Loading