Commit db36a2aa authored by unknown's avatar unknown

Bug#18743: Several test cases fails if "classic" configuration in 5.0

The problem happened because those tests were using "cp932" and "ucs2" without checking whether these character sets are available. This fix moves test parts to make character set specific parts be tested only if they are:
- some parts were moved to "ctype_ucs.test" and "ctype_cp932.test"
- some parts were moved to the newly added tests "innodb-ucs2.test", "mysqlbinglog-cp932.test" and "sp-ucs2.test"


mysql-test/r/ctype_cp932.result:
  Moved cp932-specific test case from mysql.test
mysql-test/r/innodb.result:
  Moved ucs2-specific test cases to innodb-ucs2.test
mysql-test/r/mysql.result:
  Move cp932-specific test cases to ctype_cp932.test
mysql-test/r/mysqlbinlog.result:
  Moved cp932-specific test case to mysqlbinlog-cp932.test
mysql-test/r/sp.result:
  Moved ucs2-specific test case to sp-ucs2.test
mysql-test/t/ctype_cp932.test:
  Moved cp932-specific test case from mysql.test
mysql-test/t/ctype_ucs2_def-master.opt:
  Use the comma-separated list of character sets to avoid mysql-test errors when ucs2 is not available in the server
mysql-test/t/ctype_ucs2_def.test:
  Added requirement for ucs2 in the server
mysql-test/t/innodb.test:
  Moved ucs2-specific test cases to innodb-ucs2.test
mysql-test/t/mysql.test:
  Move cp932-specific test cases to ctype_cp932.test
mysql-test/t/mysqlbinlog.test:
  Moved cp932-specific test case to mysqlbinlog-cp932.test
mysql-test/t/sp.test:
  Moved ucs2-specific test case to sp-ucs2.test
sql/mysqld.cc:
  Allow specifying several character sets for test purposes, to make "mysqld" start even if the character set being tested is not compiled:
  mysqld --default-character-set=ucs2,latin1
  The first available character set will be chosen.
mysql-test/r/innodb-ucs2.result:
  New BitKeeper file ``mysql-test/r/innodb-ucs2.result''
mysql-test/r/mysqlbinlog-cp932.result:
  New BitKeeper file ``mysql-test/r/mysqlbinlog-cp932.result''
mysql-test/r/sp-ucs2.result:
  New BitKeeper file ``mysql-test/r/sp-ucs2.result''
mysql-test/t/innodb-ucs2.test:
  New BitKeeper file ``mysql-test/t/innodb-ucs2.test''
mysql-test/t/mysqlbinlog-cp932.test:
  New BitKeeper file ``mysql-test/t/mysqlbinlog-cp932.test''
mysql-test/t/sp-ucs2.test:
  New BitKeeper file ``mysql-test/t/sp-ucs2.test''
parent 6f65e1bc
......@@ -11353,3 +11353,13 @@ a
a
a
drop table t1;
\
\
c_cp932
\
\
\
\
\
This diff is collapsed.
This diff is collapsed.
......@@ -61,16 +61,6 @@ database()
test
unlock tables;
drop table t1;
\
\
c_cp932
\
\
\
\
\
+----------------------+------------+--------+
| concat('>',col1,'<') | col2 | col3 |
+----------------------+------------+--------+
......
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
flush logs;
rename table t3 to t03, t4 to t04;
select HEX(f) from t03;
HEX(f)
E382BD
select HEX(f) from t3;
HEX(f)
E382BD
select HEX(f) from t04;
HEX(f)
835C
select HEX(f) from t4;
HEX(f)
835C
drop table t3, t4, t03, t04;
End of 5.0 tests
......@@ -173,25 +173,9 @@ insert t1 values (1);
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
flush logs;
rename table t3 to t03, t4 to t04;
select HEX(f) from t03;
HEX(f)
E382BD
select HEX(f) from t3;
HEX(f)
E382BD
select HEX(f) from t04;
HEX(f)
835C
select HEX(f) from t4;
HEX(f)
835C
flush logs;
select * from t5 /* must be (1),(1) */;
a
1
1
drop table t1, t2, t03, t04, t3, t4, t5;
drop table t1, t2, t5;
End of 5.0 tests
drop function if exists bug17615|
create table t3 (a varchar(256) unicode)|
create function bug17615() returns varchar(256) unicode
begin
declare tmp_res varchar(256) unicode;
set tmp_res= 'foo string';
return tmp_res;
end|
insert into t3 values(bug17615())|
select * from t3|
a
foo string
drop function bug17615|
drop table t3|
......@@ -4697,20 +4697,6 @@ Handler
Inner
drop procedure bug15011|
drop table t3|
drop function if exists bug17615|
create table t3 (a varchar(256) unicode)|
create function bug17615() returns varchar(256) unicode
begin
declare tmp_res varchar(256) unicode;
set tmp_res= 'foo string';
return tmp_res;
end|
insert into t3 values(bug17615())|
select * from t3|
a
foo string
drop function bug17615|
drop table t3|
drop procedure if exists bug17476|
create table t3 ( d date )|
insert into t3 values
......
......@@ -413,3 +413,17 @@ select * from t1;
insert into t1 values ('abc');
select * from t1;
drop table t1;
#
# BUG#16217 - MySQL client misinterpretes multi-byte char as escape `\'
#
# new command \C or charset
--exec $MYSQL --default-character-set=utf8 test -e "\C cp932 \g"
--exec $MYSQL --default-character-set=cp932 test -e "charset utf8;"
# its usage to switch internally in mysql to requested charset
--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; select '\'; create table t1 (c_cp932 TEXT CHARACTER SET cp932); insert into t1 values('\'); select * from t1; drop table t1;"
--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; select '\'"
--exec $MYSQL --default-character-set=utf8 test -e "/*charset cp932 */; set character_set_client= cp932; select '\'"
--exec $MYSQL --default-character-set=utf8 test -e "/*!\C cp932 */; set character_set_client= cp932; select '\'"
--default-collation=ucs2_unicode_ci --default-character-set=ucs2
--default-collation=ucs2_unicode_ci --default-character-set=ucs2,latin1
-- source include/have_ucs2.inc
#
# MySQL Bug#15276: MySQL ignores collation-server
#
......
This diff is collapsed.
This diff is collapsed.
......@@ -43,20 +43,6 @@ lock tables t1 write;
unlock tables;
drop table t1;
#
# BUG#16217 - MySQL client misinterpretes multi-byte char as escape `\'
#
# new command \C or charset
--exec $MYSQL --default-character-set=utf8 test -e "\C cp932 \g"
--exec $MYSQL --default-character-set=cp932 test -e "charset utf8;"
# its usage to switch internally in mysql to requested charset
--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; select '\'; create table t1 (c_cp932 TEXT CHARACTER SET cp932); insert into t1 values('\'); select * from t1; drop table t1;"
--exec $MYSQL --default-character-set=utf8 test -e "charset cp932; select '\'"
--exec $MYSQL --default-character-set=utf8 test -e "/*charset cp932 */; set character_set_client= cp932; select '\'"
--exec $MYSQL --default-character-set=utf8 test -e "/*!\C cp932 */; set character_set_client= cp932; select '\'"
#
# Bug#16859 -- NULLs in columns must not truncate data as if a C-language "string".
#
......
-- source include/have_cp932.inc
# Bug#16217 (mysql client did not know how not switch its internal charset)
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
--exec $MYSQL --default-character-set=utf8 test -e "insert into t3 values(_utf8'ソ')"
--exec $MYSQL --default-character-set=cp932 test -e "insert into t4 values(_cp932'\');"
flush logs;
rename table t3 to t03, t4 to t04;
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000002 | $MYSQL --default-character-set=utf8
# original and recovered data must be equal
select HEX(f) from t03;
select HEX(f) from t3;
select HEX(f) from t04;
select HEX(f) from t4;
drop table t3, t4, t03, t04;
--echo End of 5.0 tests
......@@ -107,21 +107,6 @@ select "--- reading stdin --" as "";
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--exec $MYSQL_BINLOG --short-form --position=79 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
# Bug#16217 (mysql client did not know how not switch its internal charset)
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
--exec $MYSQL --default-character-set=utf8 test -e "insert into t3 values(_utf8'ソ')"
--exec $MYSQL --default-character-set=cp932 test -e "insert into t4 values(_cp932'\');"
flush logs;
rename table t3 to t03, t4 to t04;
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL --default-character-set=utf8
# original and recovered data must be equal
select HEX(f) from t03;
select HEX(f) from t3;
select HEX(f) from t04;
select HEX(f) from t4;
#
#BUG#14157: utf8 encoding in binlog without set character_set_client
#
......@@ -131,10 +116,10 @@ flush logs;
# resulted binlog, parly consisting of multi-byte utf8 chars,
# must be digestable for both client and server. In 4.1 the client
# should use default-character-set same as the server.
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL
select * from t5 /* must be (1),(1) */;
# clean up
drop table t1, t2, t03, t04, t3, t4, t5;
drop table t1, t2, t5;
# End of 5.0 tests
--echo End of 5.0 tests
-- source include/have_ucs2.inc
delimiter |;
#
# BUG#17615: problem with character set
#
--disable_warnings
drop function if exists bug17615|
--enable_warnings
create table t3 (a varchar(256) unicode)|
create function bug17615() returns varchar(256) unicode
begin
declare tmp_res varchar(256) unicode;
set tmp_res= 'foo string';
return tmp_res;
end|
insert into t3 values(bug17615())|
select * from t3|
drop function bug17615|
drop table t3|
delimiter ;|
......@@ -11,6 +11,8 @@
# Tests that uses 'goto' to into sp-goto.test (currently disabled)
# Tests that destroys system tables (e.g. mysql.proc) for error testing
# go to sp-destruct.
# Tests that require multibyte character sets, which are not always available,
# go into separate files (e.g. sp-ucs2.test)
use test;
......@@ -5525,29 +5527,6 @@ drop procedure bug15011|
drop table t3|
#
# BUG#17615: problem with character set
#
--disable_warnings
drop function if exists bug17615|
--enable_warnings
create table t3 (a varchar(256) unicode)|
create function bug17615() returns varchar(256) unicode
begin
declare tmp_res varchar(256) unicode;
set tmp_res= 'foo string';
return tmp_res;
end|
insert into t3 values(bug17615())|
select * from t3|
drop function bug17615|
drop table t3|
#
# BUG#17476: Stored procedure not returning data when it is called first
# time per connection
......
......@@ -2718,10 +2718,33 @@ static int init_common_variables(const char *conf_file_name, int argc,
#ifdef USE_REGEX
my_regex_init(&my_charset_latin1);
#endif
if (!(default_charset_info= get_charset_by_csname(default_character_set_name,
MY_CS_PRIMARY,
MYF(MY_WME))))
return 1;
/*
Process a comma-separated character set list and choose
the first available character set. This is mostly for
test purposes, to be able to start "mysqld" even if
the requested character set is not available (see bug#18743).
*/
for (;;)
{
char *next_character_set_name= strchr(default_character_set_name, ',');
if (next_character_set_name)
*next_character_set_name++= '\0';
if (!(default_charset_info=
get_charset_by_csname(default_character_set_name,
MY_CS_PRIMARY, MYF(MY_WME))))
{
if (next_character_set_name)
{
default_character_set_name= next_character_set_name;
default_collation_name= 0; // Ignore collation
}
else
return 1; // Eof of the list
}
else
break;
}
if (default_collation_name)
{
CHARSET_INFO *default_collation;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment