From 95825fa28a7e84a2f5dbdef5241078f7055c5b04 Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Thu, 7 Jan 2016 12:53:18 +0100 Subject: Bug#21682356: STOP INJECTING DATA ITEMS IN AN ERROR MESSAGE GENERATED BY THE EXP() FUNCTION When generating the error message for numeric overflow, pass a flag to Item::print() that prevents it from expanding constant expressions and parameters to the values they evaluate to. For consistency, also pass the flag to Item::print() when Item_func_spatial_collection::fix_length_and_dec() generates an error message. It doesn't make any difference at the moment, since constant expressions haven't been evaluated yet when this function is called. --- mysql-test/r/func_math.result | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index ec0ca748c49..8a505d8bb9d 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -632,9 +632,9 @@ ERROR 22003: BIGINT UNSIGNED value is out of range in '(18446744073709551615 DIV CREATE TABLE t1(a BIGINT, b BIGINT UNSIGNED); INSERT INTO t1 VALUES(-9223372036854775808, 9223372036854775809); SELECT -a FROM t1; -ERROR 22003: BIGINT value is out of range in '-('-9223372036854775808')' +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)' SELECT -b FROM t1; -ERROR 22003: BIGINT value is out of range in '-('9223372036854775809')' +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)' DROP TABLE t1; SET @a:=999999999999999999999999999999999999999999999999999999999999999999999999999999999; SELECT @a + @a; -- cgit v1.2.1 From 7d19d4b2dd692deb38d230e64d3c4c3b64570ad6 Mon Sep 17 00:00:00 2001 From: Deepthi Eranti_Sreenivas Date: Wed, 20 Jan 2016 18:23:16 +0530 Subject: Bug#22086528 : TEST CODE DISABLED THOUGH THE HISTORIC REASONS - BUGS - ARE FIXED Problem: mysql-test/suite/rpl/t/rpl_killed_ddl.test This test contains code which was disabled because of certain bugs. BUG#44041 declared to be a duplicate of Bug#45516 which was fixed 2010 BUG#43353 fixed 2012 BUG#44171 fixed 2010 Fix: Enabled the test code related to the above mentioned bugs. --- mysql-test/suite/rpl/r/rpl_killed_ddl.result | 14 +++++++++ mysql-test/suite/rpl/t/rpl_killed_ddl.test | 43 +++++++++------------------- 2 files changed, 28 insertions(+), 29 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/rpl/r/rpl_killed_ddl.result b/mysql-test/suite/rpl/r/rpl_killed_ddl.result index a02c9b599bf..4d9f8b77735 100644 --- a/mysql-test/suite/rpl/r/rpl_killed_ddl.result +++ b/mysql-test/suite/rpl/r/rpl_killed_ddl.result @@ -56,6 +56,10 @@ CREATE VIEW v1 AS SELECT a FROM t1 WHERE a < 100; CREATE DATABASE d2; source include/kill_query.inc; include/rpl_diff.inc +ALTER DATABASE d1 +DEFAULT CHARACTER SET = 'utf8'; +source include/kill_query.inc; +include/rpl_diff.inc DROP DATABASE d1; source include/kill_query.inc; include/rpl_diff.inc @@ -67,6 +71,10 @@ ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO INSERT INTO test.t1 VALUES (2); source include/kill_query.inc; include/rpl_diff.inc +ALTER EVENT e1 +ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; +source include/kill_query.inc; +include/rpl_diff.inc DROP EVENT e1; source include/kill_query.inc; include/rpl_diff.inc @@ -83,6 +91,9 @@ include/rpl_diff.inc DROP FUNCTION f1; source include/kill_query.inc; include/rpl_diff.inc +DROP FUNCTION IF EXISTS f2; +source include/kill_query.inc; +include/rpl_diff.inc CREATE PROCEDURE p2 (OUT rows INT) BEGIN SELECT COUNT(*) INTO rows FROM t2; @@ -96,6 +107,9 @@ include/rpl_diff.inc DROP PROCEDURE p1; source include/kill_query.inc; include/rpl_diff.inc +DROP PROCEDURE IF EXISTS p2; +source include/kill_query.inc; +include/rpl_diff.inc CREATE TABLE t2 (b int); source include/kill_query.inc; include/rpl_diff.inc diff --git a/mysql-test/suite/rpl/t/rpl_killed_ddl.test b/mysql-test/suite/rpl/t/rpl_killed_ddl.test index a56a39a2784..76e9b3af091 100644 --- a/mysql-test/suite/rpl/t/rpl_killed_ddl.test +++ b/mysql-test/suite/rpl/t/rpl_killed_ddl.test @@ -26,10 +26,7 @@ # # There are some part of the test are temporarily disabled because of # the following bugs, please enable then once they get fixed: -# - BUG#44041 -# - BUG#43353 -# - BUG#25705 -# - BUG#44171 +# - BUG#22473427 source include/have_debug.inc; source include/master-slave.inc; @@ -145,11 +142,9 @@ let $rpl_diff_statement= SELECT schema_name FROM information_schema.schemata send CREATE DATABASE d2; source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled, see BUG#44041, the ALTER DATABASE can affect the -# collation of other database on slave -#send ALTER DATABASE d1 -# DEFAULT CHARACTER SET = 'utf8'; -#source include/kill_query_and_diff_master_slave.inc; +send ALTER DATABASE d1 + DEFAULT CHARACTER SET = 'utf8'; +source include/kill_query_and_diff_master_slave.inc; send DROP DATABASE d1; source include/kill_query_and_diff_master_slave.inc; @@ -168,11 +163,9 @@ send CREATE EVENT e2 DO INSERT INTO test.t1 VALUES (2); source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled because of BUG#44171, killing ALTER EVENT can -# crash the server -#send ALTER EVENT e1 -# ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; -#source include/kill_query_and_diff_master_slave.inc; +send ALTER EVENT e1 + ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; +source include/kill_query_and_diff_master_slave.inc; send DROP EVENT e1; source include/kill_query_and_diff_master_slave.inc; @@ -198,16 +191,8 @@ source include/kill_query_and_diff_master_slave.inc; # function f2 probably does not exist because the CREATE query was # killed -# -# Temporarily disabled. Because of BUG#43353, KILL the query may -# result in function not found, and for 5.1, DROP statements will be -# logged if the function is not found on master, so the following DROP -# FUNCTION statement may be interrupted and not drop the function on -# master, but still get logged and executed on slave and cause -# inconsistence. Also disable the following DROP PROCEDURE IF EXITS -# below. -#send DROP FUNCTION IF EXISTS f2; -#source include/kill_query_and_diff_master_slave.inc; +send DROP FUNCTION IF EXISTS f2; +source include/kill_query_and_diff_master_slave.inc; ######## PROCEDURE ######## @@ -228,9 +213,8 @@ source include/kill_query_and_diff_master_slave.inc; send DROP PROCEDURE p1; source include/kill_query_and_diff_master_slave.inc; -# Temporarily disabled because of bug#43353, see comment above for DROP FUNCTION IF EXISTS -#send DROP PROCEDURE IF EXISTS p2; -#source include/kill_query_and_diff_master_slave.inc; +send DROP PROCEDURE IF EXISTS p2; +source include/kill_query_and_diff_master_slave.inc; ######## TABLE ######## @@ -258,9 +242,10 @@ source include/kill_query_and_diff_master_slave.inc; ######## SERVER ######## -# Tempoarily disabled, see bug#25705 +# Temporarily disabled, see Bug #22473427 - DROP SERVER FAILS +# AFTER ALTER SERVER+KILL QUERY -# --let $rpl_diff_statement= SELECT * FROM mysql.server WHERE name like \'s%\' +# --let $rpl_diff_statement= SELECT * FROM mysql.servers WHERE Server_name like \'s%\' # send CREATE SERVER s2 # FOREIGN DATA WRAPPER mysql -- cgit v1.2.1 From 1624c26d429171c33ad33613e73bba23a5a3cbdd Mon Sep 17 00:00:00 2001 From: Deepthi Eranti_Sreenivas Date: Fri, 22 Jan 2016 16:51:21 +0530 Subject: Bug#22086528: TEST CODE DISABLED THOUGH THE HISTORIC REASONS - BUGS - ARE FIXED Post push fix for 5.5 and 5.6.Disabled the test code due to Bug#22587377 --- mysql-test/suite/rpl/r/rpl_killed_ddl.result | 4 ---- mysql-test/suite/rpl/t/rpl_killed_ddl.test | 9 ++++++--- 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/rpl/r/rpl_killed_ddl.result b/mysql-test/suite/rpl/r/rpl_killed_ddl.result index 4d9f8b77735..ed8745ca2c1 100644 --- a/mysql-test/suite/rpl/r/rpl_killed_ddl.result +++ b/mysql-test/suite/rpl/r/rpl_killed_ddl.result @@ -71,10 +71,6 @@ ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO INSERT INTO test.t1 VALUES (2); source include/kill_query.inc; include/rpl_diff.inc -ALTER EVENT e1 -ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; -source include/kill_query.inc; -include/rpl_diff.inc DROP EVENT e1; source include/kill_query.inc; include/rpl_diff.inc diff --git a/mysql-test/suite/rpl/t/rpl_killed_ddl.test b/mysql-test/suite/rpl/t/rpl_killed_ddl.test index 76e9b3af091..e9f5a5c47c2 100644 --- a/mysql-test/suite/rpl/t/rpl_killed_ddl.test +++ b/mysql-test/suite/rpl/t/rpl_killed_ddl.test @@ -27,6 +27,7 @@ # There are some part of the test are temporarily disabled because of # the following bugs, please enable then once they get fixed: # - BUG#22473427 +# - Bug#22587377 source include/have_debug.inc; source include/master-slave.inc; @@ -163,9 +164,11 @@ send CREATE EVENT e2 DO INSERT INTO test.t1 VALUES (2); source include/kill_query_and_diff_master_slave.inc; -send ALTER EVENT e1 - ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; -source include/kill_query_and_diff_master_slave.inc; +# Temporarily disabled,see Bug#22587377-RPL.RPL_KILLED_DDL +# FAILS SPORADICALLY ON PB2 IN 5.5 AND 5.6 +#send ALTER EVENT e1 +# ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; +#source include/kill_query_and_diff_master_slave.inc; send DROP EVENT e1; source include/kill_query_and_diff_master_slave.inc; -- cgit v1.2.1 From d9c541cb1be5b239787833d9d499067d44ea44d3 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 10 Feb 2016 19:57:17 +0530 Subject: BUG#22037930: INSERT IGNORE FAILS TO IGNORE FOREIGN KEY CONSTRAINT. Analysis ======= INSERT and UPDATE operations using the IGNORE keyword which causes FOREIGN KEY constraint violations reports an error despite using the IGNORE keyword. Foreign key violation errors were not ignored and reported as errors instead of warnings even when IGNORE was set. Fix === Added code to ignore the foreign key violation errors and report them as warnings when the IGNORE keyword is used. --- mysql-test/r/insert.result | 38 ++++++++++++++++++++++++++++++++++++++ mysql-test/t/insert.test | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result index 655303be7f4..1aa22349593 100644 --- a/mysql-test/r/insert.result +++ b/mysql-test/r/insert.result @@ -686,3 +686,41 @@ ERROR 42000: Column 'a' specified twice INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; ERROR 42000: Column 'a' specified twice DROP TABLE t1; +# +# BUG#22037930: INSERT IGNORE FAILS TO IGNORE +# FOREIGN KEY CONSTRAINT +# Setup. +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB; +CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1)) +ENGINE=INNODB; +INSERT INTO t1 VALUES(0); +INSERT INTO t2 VALUES(0); +# Without fix, an error is reported. +INSERT IGNORE INTO t2 VALUES(1); +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0; +Warnings: +Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +# Test for multi update. +UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3; +Warnings: +Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +# Reports an error since IGNORE is not used. +INSERT INTO t2 VALUES(1); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t2 SET fld2=20 WHERE fld2=0; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1 SET fld1=20 WHERE fld1=0; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +DROP TABLE t2, t1; diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test index 2bf543511ac..ea89872200c 100644 --- a/mysql-test/t/insert.test +++ b/mysql-test/t/insert.test @@ -550,3 +550,44 @@ INSERT IGNORE t1 (a, a) SELECT 1,1; INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2; DROP TABLE t1; + + +--echo # +--echo # BUG#22037930: INSERT IGNORE FAILS TO IGNORE +--echo # FOREIGN KEY CONSTRAINT + +--echo # Setup. +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB; +CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1)) +ENGINE=INNODB; +INSERT INTO t1 VALUES(0); +INSERT INTO t2 VALUES(0); + +--echo # Without fix, an error is reported. +--enable_warnings +INSERT IGNORE INTO t2 VALUES(1); +UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0; +UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0; + +--echo # Test for multi update. +UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3; +UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3; +--disable_warnings + +--echo # Reports an error since IGNORE is not used. +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO t2 VALUES(1); + +--error ER_NO_REFERENCED_ROW_2 +UPDATE t2 SET fld2=20 WHERE fld2=0; + +--error ER_ROW_IS_REFERENCED_2 +UPDATE t1 SET fld1=20 WHERE fld1=0; + +--error ER_NO_REFERENCED_ROW_2 +UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3; + +--error ER_ROW_IS_REFERENCED_2 +UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; + +DROP TABLE t2, t1; -- cgit v1.2.1 From b3e9211e48a3fb586e88b0270a175d2348935424 Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Fri, 19 Feb 2016 23:31:10 +0400 Subject: WL#9072: Backport WL#8785 to 5.5 --- mysql-test/r/ssl_mode.result | 44 ++++++++++++++++++++++++++++++ mysql-test/r/ssl_mode_no_ssl.result | 22 +++++++++++++++ mysql-test/t/ssl_mode.test | 47 +++++++++++++++++++++++++++++++++ mysql-test/t/ssl_mode_no_ssl-master.opt | 1 + mysql-test/t/ssl_mode_no_ssl.test | 41 ++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 mysql-test/r/ssl_mode.result create mode 100644 mysql-test/r/ssl_mode_no_ssl.result create mode 100644 mysql-test/t/ssl_mode.test create mode 100644 mysql-test/t/ssl_mode_no_ssl-master.opt create mode 100644 mysql-test/t/ssl_mode_no_ssl.test (limited to 'mysql-test') diff --git a/mysql-test/r/ssl_mode.result b/mysql-test/r/ssl_mode.result new file mode 100644 index 00000000000..38fc4e1dca2 --- /dev/null +++ b/mysql-test/r/ssl_mode.result @@ -0,0 +1,44 @@ +# positive client tests +# mysql +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(0); +# mysqldump +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0); +# mysqladmin +mysqld is alive +# mysqlcheck +test.t1 OK +# mysqlimport +CREATE TABLE words(a VARCHAR(255)); +test.words: Records: 70 Deleted: 0 Skipped: 0 Warnings: 0 +DROP TABLE words; +# mysqlshow +Database: test ++--------+ +| Tables | ++--------+ +| t1 | ++--------+ +# mysqlslap +# mysqltest +Output from mysqltest-x.inc +DROP TABLE t1; +# negative client tests +# mysql +Unknown value to --ssl-mode: ''. Use --ssl-mode=REQUIRED +Unknown value to --ssl-mode: 'DERIUQER'. Use --ssl-mode=REQUIRED +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections + +End of tests diff --git a/mysql-test/r/ssl_mode_no_ssl.result b/mysql-test/r/ssl_mode_no_ssl.result new file mode 100644 index 00000000000..409b7a0fa1b --- /dev/null +++ b/mysql-test/r/ssl_mode_no_ssl.result @@ -0,0 +1,22 @@ +# negative client tests +# mysql +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +ERROR 2026 (HY000): --ssl-mode=REQUIRED option forbids non SSL connections +# mysqldump +mysqldump: Got error: 2026: --ssl-mode=REQUIRED option forbids non SSL connections when trying to connect +# mysqladmin +mysqladmin: error: '--ssl-mode=REQUIRED option forbids non SSL connections' +# mysqlcheck +mysqlcheck: Got error: 2026: --ssl-mode=REQUIRED option forbids non SSL connections when trying to connect +# mysqlimport +mysqlimport: Error: 2026 --ssl-mode=REQUIRED option forbids non SSL connections +# mysqlshow +mysqlshow: --ssl-mode=REQUIRED option forbids non SSL connections +# mysqlslap +mysqlslap: Error when connecting to server: --ssl-mode=REQUIRED option forbids non SSL connections +# mysqltest +mysqltest: Could not open connection 'default': 2026 --ssl-mode=REQUIRED option forbids non SSL connections + +End of tests diff --git a/mysql-test/t/ssl_mode.test b/mysql-test/t/ssl_mode.test new file mode 100644 index 00000000000..ce1f2aa5e0a --- /dev/null +++ b/mysql-test/t/ssl_mode.test @@ -0,0 +1,47 @@ +-- source include/not_embedded.inc +-- source include/have_ssl_communication.inc + +--echo # positive client tests +--echo # mysql +--exec $MYSQL test --ssl-mode=ReQuIrEd --ssl-cipher=DHE-RSA-AES256-SHA -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl --ssl-cipher=DHE-RSA-AES256-SHA -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(0); + +--echo # mysqldump +--exec $MYSQL_DUMP --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --compact --skip-comments test 2>&1 +--echo # mysqladmin +--exec $MYSQLADMIN --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--echo # mysqlcheck +--exec $MYSQL_CHECK --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test 2>&1 +--echo # mysqlimport +CREATE TABLE words(a VARCHAR(255)); +--exec $MYSQL_IMPORT --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test $MYSQLTEST_VARDIR/std_data/words.dat 2>&1 +DROP TABLE words; +--echo # mysqlshow +--exec $MYSQL_SHOW --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA test 2>&1 +--echo # mysqlslap +--exec $MYSQL_SLAP --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --create-schema=test --query="select * from t1" --silent 2>&1 +--echo # mysqltest +--exec $MYSQL_TEST --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA -x $MYSQL_TEST_DIR/include/mysqltest-x.inc 2>&1 + +DROP TABLE t1; + +--echo # negative client tests +--echo # mysql +--error 5 +--exec $MYSQL test --ssl-mode +--error 1 +--exec $MYSQL test --ssl-mode= 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=DERIUQER 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA --skip-ssl 2>&1 + +--echo +--echo End of tests diff --git a/mysql-test/t/ssl_mode_no_ssl-master.opt b/mysql-test/t/ssl_mode_no_ssl-master.opt new file mode 100644 index 00000000000..0ca403efdfb --- /dev/null +++ b/mysql-test/t/ssl_mode_no_ssl-master.opt @@ -0,0 +1 @@ +--skip-ssl diff --git a/mysql-test/t/ssl_mode_no_ssl.test b/mysql-test/t/ssl_mode_no_ssl.test new file mode 100644 index 00000000000..65f7d1cd46b --- /dev/null +++ b/mysql-test/t/ssl_mode_no_ssl.test @@ -0,0 +1,41 @@ +-- source include/not_embedded.inc + +--echo # negative client tests +--echo # mysql +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl-cipher=DHE-RSA-AES256-SHA 2>&1 +--error 1 +--exec $MYSQL test --ssl-mode=REQUIRED --ssl --ssl-cipher=DHE-RSA-AES256-SHA 2>&1 +--echo # mysqldump +--error 2 +--exec $MYSQL_DUMP --ssl-mode=REQUIRED test 2>&1 +--echo # mysqladmin +--replace_regex /.*mysqladmin.*/mysqladmin: / +--error 1 +--exec $MYSQLADMIN --ssl-mode=REQUIRED -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 +--echo # mysqlcheck +--replace_regex /.*mysqlcheck(\.exe)*/mysqlcheck/ +--error 2 +--exec $MYSQL_CHECK --ssl-mode=REQUIRED test 2>&1 +--echo # mysqlimport +--replace_regex /.*mysqlimport(\.exe)*/mysqlimport/ +--error 1 +--exec $MYSQL_IMPORT --ssl-mode=REQUIRED test $MYSQLTEST_VARDIR/tmp/t1.txt 2>&1 +--echo # mysqlshow +--replace_regex /.*mysqlshow(\.exe)*/mysqlshow/ +--error 1 +--exec $MYSQL_SHOW --ssl-mode=REQUIRED test 2>&1 +--echo # mysqlslap +--replace_regex /.*mysqlslap(\.exe)*/mysqlslap/ +--error 1 +--exec $MYSQL_SLAP --ssl-mode=REQUIRED 2>&1 +--echo # mysqltest +--error 1 +--exec $MYSQL_TEST --ssl-mode=REQUIRED -x $MYSQL_TEST_DIR/include/mysqltest-x.inc 2>&1 + +--echo +--echo End of tests -- cgit v1.2.1 From 29cc2c28832ae4733804ac6b29d650238ee0559c Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 26 Feb 2016 09:01:49 +0530 Subject: BUG#20574550 MAIN.MERGE TEST CASE FAILS IF BINLOG_FORMAT=ROW The main.merge test case was failing when tested using row based binlog format. While analyzing the issue it was found the following issues: a) The server is calling binlog related code even when a statement will not be binlogged; b) The child table list was not present into table structure by the time to generate the create table statement; c) The tables in the child table list will not be opened yet when generating table create info using row based replication; d) CREATE TABLE LIKE TEMP_TABLE does not preserve original table storage engine when using row based replication; This patch addressed all above issues. @ sql/sql_class.h Added a function to determine if the binary log is disabled to the current session. This is related with issue (a) above. @ sql/sql_table.cc Added code to skip binary logging related code if the statement will not be binlogged. This is related with issue (a) above. Added code to add the children to the query list of the table that will have its CREATE TABLE generated. This is related with issue (b) above. Added code to force the storage engine to be generated into the CREATE TABLE. This is related with issue (d) above. @ storage/myisammrg/ha_myisammrg.cc Added a test to skip a table getting info about a child table if the child table is not opened. This is related to issue (c) above. --- mysql-test/suite/binlog/r/binlog_row_binlog.result | 4 +- mysql-test/suite/rpl/r/rpl_row_merge_engine.result | 5 ++- .../suite/rpl/r/rpl_tmp_table_and_DDL.result | 10 +++++ mysql-test/suite/rpl/t/rpl_row_merge_engine.test | 6 ++- mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test | 51 ++++++++++++++++++++++ 5 files changed, 70 insertions(+), 6 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/binlog/r/binlog_row_binlog.result b/mysql-test/suite/binlog/r/binlog_row_binlog.result index 75105689246..1fcc915fa1f 100644 --- a/mysql-test/suite/binlog/r/binlog_row_binlog.result +++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result @@ -1203,7 +1203,7 @@ master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t2` ( master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` ( `a` int(11) DEFAULT NULL -) +) ENGINE=MyISAM master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F @@ -1238,7 +1238,7 @@ master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t2` ( master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` ( `a` int(11) DEFAULT NULL -) +) ENGINE=MyISAM master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F diff --git a/mysql-test/suite/rpl/r/rpl_row_merge_engine.result b/mysql-test/suite/rpl/r/rpl_row_merge_engine.result index c61167e84e0..3b2e02bf97c 100644 --- a/mysql-test/suite/rpl/r/rpl_row_merge_engine.result +++ b/mysql-test/suite/rpl/r/rpl_row_merge_engine.result @@ -4,8 +4,9 @@ CREATE TABLE t1 (a int) ENGINE=MyISAM; CREATE TABLE t2 (a int) ENGINE=MyISAM; INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t2 VALUES (4), (5), (6); -CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; -ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1; +ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TABLE t1_merge LIKE tt1_merge; include/diff_tables.inc [master:test.t1, slave:test.t1] include/diff_tables.inc [master:test.t2, slave:test.t2] UPDATE t1_merge SET a=10 WHERE a=1; diff --git a/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result b/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result index 0264c9421fc..fb4e8f8ab8a 100644 --- a/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result +++ b/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result @@ -192,4 +192,14 @@ DROP FUNCTION f2; DROP PROCEDURE p2; DROP EVENT e2; DROP TABLE t1, t2; +CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=InnoDB; +CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=MyISAM; +CREATE TABLE t1 LIKE temp_t1; +CREATE TABLE t2 LIKE temp_t2; +include/assert.inc ["t1 on master and temp_t1 have the same storage engine"] +include/assert.inc ["t2 on master and temp_t2 have the same storage engine"] +include/assert.inc ["t1 on slave and temp_t1 have the same storage engine"] +include/assert.inc ["t2 on slave and temp_t2 have the same storage engine"] +DROP TEMPORARY TABLE temp_t1, temp_t2; +DROP TABLE t1, t2; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_row_merge_engine.test b/mysql-test/suite/rpl/t/rpl_row_merge_engine.test index 5add8dc1cda..dcbb8b891d8 100644 --- a/mysql-test/suite/rpl/t/rpl_row_merge_engine.test +++ b/mysql-test/suite/rpl/t/rpl_row_merge_engine.test @@ -20,8 +20,10 @@ CREATE TABLE t1 (a int) ENGINE=MyISAM; CREATE TABLE t2 (a int) ENGINE=MyISAM; INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t2 VALUES (4), (5), (6); -CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; -ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); +# Changed a little to check also an issue reported on BUG#20574550 +CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1; +ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1); +CREATE TABLE t1_merge LIKE tt1_merge; --sync_slave_with_master diff --git a/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test index d722a15f255..decbdcc1f99 100644 --- a/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test +++ b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test @@ -166,4 +166,55 @@ DROP PROCEDURE p2; DROP EVENT e2; DROP TABLE t1, t2; +--sync_slave_with_master +# +# BUG#20574550 +# CREATE TABLE LIKE does not preserve original table storage +# engine when using row based replication +# +--connection master + +# Define temp_t1 and temp_t2 storage engines +--let $engine_temp_t1= InnoDB +--let $engine_temp_t2= MyISAM + +# Create the two temporary tables +--eval CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=$engine_temp_t1 +--eval CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=$engine_temp_t2 + +# Create t1 and t2 based on temporary tables +CREATE TABLE t1 LIKE temp_t1; +CREATE TABLE t2 LIKE temp_t2; +--sync_slave_with_master + +# On master +--connection master +# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2 +--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1) +--let $assert_cond= "$engine_t1" = "$engine_temp_t1" +--let $assert_text= "t1 on master and temp_t1 have the same storage engine" +--source include/assert.inc + +--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1) +--let $assert_cond= "$engine_t2" = "$engine_temp_t2" +--let $assert_text= "t2 on master and temp_t2 have the same storage engine" +--source include/assert.inc + +# On slave +--connection slave +# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2 +--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1) +--let $assert_cond= "$engine_t1" = "$engine_temp_t1" +--let $assert_text= "t1 on slave and temp_t1 have the same storage engine" +--source include/assert.inc + +--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1) +--let $assert_cond= "$engine_t2" = "$engine_temp_t2" +--let $assert_text= "t2 on slave and temp_t2 have the same storage engine" +--source include/assert.inc + +# Cleanup +--connection master +DROP TEMPORARY TABLE temp_t1, temp_t2; +DROP TABLE t1, t2; --source include/rpl_end.inc -- cgit v1.2.1 From c7e68606c02b7f87a48c27eb358d4d07480f40f4 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Tue, 1 Mar 2016 10:17:25 +0530 Subject: Bug#21920657: SSL-CA FAILS SILENTLY IF THE PATH CANNOT BE FOUND Description:- Failure during the validation of CA certificate path which is provided as an option for 'ssl-ca' returns two different errors for YaSSL and OPENSSL. Analysis:- 'ssl-ca', option used for specifying the ssl ca certificate path. Failing to validate this certificate with OPENSSL returns an error, "ERROR 2026 (HY000): SSL connection error: SSL_CTX_set_default_verify_paths failed". While YASSL returns "ERROR 2026 (HY000): SSL connection error: ASN: bad other signature confirmation". Error returned by the OPENSSL is correct since "SSL_CTX_load_verify_locations()" returns 0 (in case of OPENSSL) for the failure and sets error as "SSL_INITERR_BAD_PATHS". In case of YASSL, "SSL_CTX_load_verify_locations()" returns an error number which is less than or equal to 0 in case of error. Error numbers for YASSL is mentioned in the file, 'extra/yassl/include/openssl/ssl.h'(line no : 292). Also 'ssl-ca' does not accept tilde home directory path substitution. Fix:- The condition which checks for the error in the "SSL_CTX_load_verify_locations()" is changed in order to accommodate YASSL as well. A logic is written in "mysql_ssl_set()" in order accept the tilde home directory path substitution for all ssl options. --- mysql-test/r/ssl_ca.result | 24 ++++++++++++++++++++++++ mysql-test/t/ssl_ca.test | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 mysql-test/r/ssl_ca.result create mode 100644 mysql-test/t/ssl_ca.test (limited to 'mysql-test') diff --git a/mysql-test/r/ssl_ca.result b/mysql-test/r/ssl_ca.result new file mode 100644 index 00000000000..ffc5671f85f --- /dev/null +++ b/mysql-test/r/ssl_ca.result @@ -0,0 +1,24 @@ +# +# Bug#21920657: SSL-CA FAILS SILENTLY IF THE PATH CANNOT BE FOUND +# +# try to connect with wrong '--ssl-ca' path : should fail +ERROR 2026 (HY000): SSL connection error: SSL_CTX_set_default_verify_paths failed +# try to connect with correct '--ssl-ca' path : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# +# Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +# PATH SUBSTITUTION +# +# try to connect with '--ssl-ca' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# try to connect with '--ssl-key' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA +# try to connect with '--ssl-cert' option using tilde home directoy +# path substitution : should connect +Variable_name Value +Ssl_cipher DHE-RSA-AES256-SHA diff --git a/mysql-test/t/ssl_ca.test b/mysql-test/t/ssl_ca.test new file mode 100644 index 00000000000..92695de4b0d --- /dev/null +++ b/mysql-test/t/ssl_ca.test @@ -0,0 +1,35 @@ +--source include/have_ssl.inc +--source include/not_embedded.inc + +--echo # +--echo # Bug#21920657: SSL-CA FAILS SILENTLY IF THE PATH CANNOT BE FOUND +--echo # + +--echo # try to connect with wrong '--ssl-ca' path : should fail +--error 1 +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/wrong-cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 + +--echo # try to connect with correct '--ssl-ca' path : should connect +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # +--echo # Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY +--echo # PATH SUBSTITUTION +--echo # + +--let $mysql_test_dir_path= `SELECT REPLACE('$MYSQL_TEST_DIR', '$HOME', '~')` + +--echo # try to connect with '--ssl-ca' option using tilde home directoy +--echo # path substitution : should connect +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--exec $MYSQL --ssl-ca=$mysql_test_dir_path/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # try to connect with '--ssl-key' option using tilde home directoy +--echo # path substitution : should connect +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$mysql_test_dir_path/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" + +--echo # try to connect with '--ssl-cert' option using tilde home directoy +--echo # path substitution : should connect +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$mysql_test_dir_path/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" -- cgit v1.2.1 From 8361151765cc5efd72ad18c5553f80aa440a1d83 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Tue, 1 Mar 2016 12:29:51 +0530 Subject: Bug#20685029: SLAVE IO THREAD SHOULD STOP WHEN DISK IS FULL Bug#21753696: MAKE SHOW SLAVE STATUS NON BLOCKING IF IO THREAD WAITS FOR DISK SPACE Problem: ======== Currently SHOW SLAVE STATUS blocks if IO thread waits for disk space. This makes automation tools verifying server health block on taking relevant action. Finally this will create SHOW SLAVE STATUS piles. Analysis: ========= SHOW SLAVE STATUS hangs on mi->data_lock if relay log write is waiting for free disk space while holding mi->data_lock. mi->data_lock is needed to protect the format description event (mi->format_description_event) which is accessed by the clients running FLUSH LOGS and slave IO thread. Note relay log writes don't need to be protected by mi->data_lock, LOCK_log is used to protect relay log between IO and SQL thread (see MYSQL_BIN_LOG::append_event). The code takes mi->data_lock to protect mi->format_description_event during relay log rotate which might get triggered right after relay log write. Fix: ==== Release the data_lock just for the duration of writing into relay log. Made change to ensure the following lock order is maintained to avoid deadlocks. data_lock, LOCK_log data_lock is held during relay log rotations to protect the description event. --- mysql-test/include/assert_grep.inc | 154 +++++++++++++++++++++ mysql-test/include/rpl_init.inc | 31 ++++- mysql-test/include/rpl_reconnect.inc | 33 +++-- mysql-test/include/start_slave_sql.inc | 39 ++++++ .../rpl/r/rpl_io_thd_wait_for_disk_space.result | 15 ++ .../rpl/t/rpl_io_thd_wait_for_disk_space.test | 71 ++++++++++ 6 files changed, 329 insertions(+), 14 deletions(-) create mode 100644 mysql-test/include/assert_grep.inc create mode 100644 mysql-test/include/start_slave_sql.inc create mode 100644 mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result create mode 100644 mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test (limited to 'mysql-test') diff --git a/mysql-test/include/assert_grep.inc b/mysql-test/include/assert_grep.inc new file mode 100644 index 00000000000..a980a6d73b1 --- /dev/null +++ b/mysql-test/include/assert_grep.inc @@ -0,0 +1,154 @@ +# ==== Purpose ==== +# +# Grep a file for a pattern, produce a single string out of the +# matching lines, and assert that the string matches a given regular +# expression. +# +# ==== Usage ==== +# +# --let $assert_text= TEXT +# --let $assert_file= FILE +# --let $assert_select= REGEX +# [--let $assert_match= REGEX | --let $assert_count= NUMBER] +# [--let $assert_only_after= REGEX] +# --source include/assert_grep.inc +# +# Parameters: +# +# $assert_text +# Text that describes what is being checked. This text is written to +# the query log so it should not contain non-deterministic elements. +# +# $assert_file +# File to search. +# +# $assert_select +# All lines matching this text will be checked. +# +# $assert_match +# The script will find all lines that match $assert_select, +# concatenate them to a long string, and assert that it matches +# $assert_match. +# +# $assert_count +# Instead of asserting that the selected lines match +# $assert_match, assert that there were exactly $assert_count +# matching lines. +# +# $assert_only_after +# Reset all the lines matched and the counter when finding this pattern. +# It is useful for searching things in the mysqld.err log file just +# after the last server restart for example (discarding the log content +# of previous server executions). + + +if (!$assert_text) +{ + --die !!!ERROR IN TEST: you must set $assert_text +} +if (!$assert_file) +{ + --die !!!ERROR IN TEST: you must set $assert_file +} +if (!$assert_select) +{ + --die !!!ERROR IN TEST: you must set $assert_select +} +if ($assert_match == '') +{ + if ($assert_count == '') + { + --die !!!ERROR IN TEST: you must set either $assert_match or $assert_count + } +} +if ($assert_match != '') +{ + if ($assert_count != '') + { + --echo assert_text='$assert_text' assert_count='$assert_count' + --die !!!ERROR IN TEST: you must set only one of $assert_match or $assert_count + } +} + + +--let $include_filename= assert_grep.inc [$assert_text] +--source include/begin_include_file.inc + + +--let _AG_ASSERT_TEXT= $assert_text +--let _AG_ASSERT_FILE= $assert_file +--let _AG_ASSERT_SELECT= $assert_select +--let _AG_ASSERT_MATCH= $assert_match +--let _AG_ASSERT_COUNT= $assert_count +--let _AG_OUT= `SELECT CONCAT('$MYSQLTEST_VARDIR/tmp/_ag_', UUID())` +--let _AG_ASSERT_ONLY_AFTER= $assert_only_after + + +--perl + use strict; + use warnings; + my $file= $ENV{'_AG_ASSERT_FILE'}; + my $assert_select= $ENV{'_AG_ASSERT_SELECT'}; + my $assert_match= $ENV{'_AG_ASSERT_MATCH'}; + my $assert_count= $ENV{'_AG_ASSERT_COUNT'}; + my $assert_only_after= $ENV{'_AG_ASSERT_ONLY_AFTER'}; + my $out= $ENV{'_AG_OUT'}; + + my $result= ''; + my $count= 0; + open(FILE, "$file") or die("Error $? opening $file: $!\n"); + while () { + my $line = $_; + if ($assert_only_after && $line =~ /$assert_only_after/) { + $result = ""; + $count = 0; + } + if ($line =~ /$assert_select/) { + if ($assert_count ne '') { + $count++; + } + else { + $result .= $line; + } + } + } + close(FILE) or die("Error $? closing $file: $!"); + open OUT, "> $out" or die("Error $? opening $out: $!"); + if ($assert_count ne '' && ($count != $assert_count)) { + print OUT ($count) or die("Error $? writing $out: $!"); + } + elsif ($assert_count eq '' && $result !~ /$assert_match/) { + print OUT ($result) or die("Error $? writing $out: $!"); + } + else { + print OUT ("assert_grep.inc ok"); + } + close OUT or die("Error $? closing $out: $!"); +EOF + + +--let $_ag_outcome= `SELECT LOAD_FILE('$_AG_OUT')` +if ($_ag_outcome != 'assert_grep.inc ok') +{ + --source include/show_rpl_debug_info.inc + --echo include/assert_grep.inc failed! + --echo assert_text: '$assert_text' + --echo assert_file: '$assert_file' + --echo assert_select: '$assert_select' + --echo assert_match: '$assert_match' + --echo assert_count: '$assert_count' + --echo assert_only_after: '$assert_only_after' + if ($assert_match != '') + { + --echo matching lines: '$_ag_outcome' + } + if ($assert_count != '') + { + --echo number of matching lines: $_ag_outcome + } + --die assert_grep.inc failed. +} + + +--let $include_filename= include/assert_grep.inc [$assert_text] +--source include/end_include_file.inc diff --git a/mysql-test/include/rpl_init.inc b/mysql-test/include/rpl_init.inc index 2abfd901b03..820bc8e9016 100644 --- a/mysql-test/include/rpl_init.inc +++ b/mysql-test/include/rpl_init.inc @@ -43,6 +43,7 @@ # # [--let $rpl_server_count= 7] # --let $rpl_topology= 1->2->3->1->4, 2->5, 6->7 +# [--let $rpl_extra_connections_per_server= 1] # [--let $rpl_check_server_ids= 1] # [--let $rpl_skip_change_master= 1] # [--let $rpl_skip_start_slave= 1] @@ -65,6 +66,12 @@ # want to specify the empty topology (no server replicates at # all), you have to set $rpl_topology=none. # +# $rpl_extra_connections_per_server +# By default, this script creates connections server_N and +# server_N_1. If you can set this variable to a number, the +# script creates: +# server_N, server_N_1, ..., server_N_$rpl_extra_connections_per_server +# # $rpl_check_server_ids # If $rpl_check_server_ids is set, this script checks that the # @@server_id of all servers are different. This is normally @@ -139,8 +146,17 @@ if (!$SERVER_MYPORT_4) # Check that $rpl_server_count is set if (!$rpl_server_count) { - --let $_compute_rpl_server_count= `SELECT REPLACE('$rpl_topology', '->', ',')` - --let $rpl_server_count= `SELECT GREATEST($_compute_rpl_server_count)` + --let $rpl_server_count= `SELECT REPLACE('$rpl_topology', '->', ',')` + if (`SELECT LOCATE(',', '$rpl_server_count')`) + { + --let $rpl_server_count= `SELECT GREATEST($rpl_server_count)` + } +} + +--let $_rpl_extra_connections_per_server= $rpl_extra_connections_per_server +if ($_rpl_extra_connections_per_server == '') +{ + --let $_rpl_extra_connections_per_server= 1 } @@ -159,15 +175,20 @@ if (!$rpl_debug) # Create two connections to each server; reset master/slave, select # database, set autoinc variables. --let $_rpl_server= $rpl_server_count ---let $_rpl_one= _1 +--let $underscore= _ while ($_rpl_server) { # Connect. --let $rpl_server_number= $_rpl_server --let $rpl_connection_name= server_$_rpl_server --source include/rpl_connect.inc - --let $rpl_connection_name= server_$_rpl_server$_rpl_one - --source include/rpl_connect.inc + --let $_rpl_connection_number= 1 + while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) + { + --let $rpl_connection_name= server_$_rpl_server$underscore$_rpl_connection_number + --source include/rpl_connect.inc + --inc $_rpl_connection_number + } # Configure server. --let $rpl_connection_name= server_$_rpl_server diff --git a/mysql-test/include/rpl_reconnect.inc b/mysql-test/include/rpl_reconnect.inc index cdbbd0a1bf1..673f382bac0 100644 --- a/mysql-test/include/rpl_reconnect.inc +++ b/mysql-test/include/rpl_reconnect.inc @@ -12,6 +12,7 @@ # ==== Usage ==== # # --let $rpl_server_number= N +# [--let $rpl_extra_connections_per_server= 1] # [--let $rpl_debug= 1] # --source include/rpl_reconnect.inc # @@ -21,7 +22,7 @@ # master server, 2 the slave server, 3 the 3rd server, and so on. # Cf. include/rpl_init.inc # -# $rpl_debug +# $rpl_extra_connections_per_server, $rpl_debug # See include/rpl_init.inc --let $include_filename= rpl_reconnect.inc @@ -32,6 +33,11 @@ if (!$rpl_server_number) --die ERROR IN TEST: you must set $rpl_server_number before you source rpl_connect.inc } +if ($_rpl_extra_connections_per_server == '') +{ + --let $_rpl_extra_connections_per_server= 1 +} + if ($rpl_debug) { @@ -72,10 +78,14 @@ if (!$_rpl_server_number) --source include/rpl_connection.inc --enable_reconnect ---let $_rpl_one= _1 ---let $rpl_connection_name= server_$rpl_server_number$_rpl_one ---source include/rpl_connection.inc ---enable_reconnect +--let $_rpl_connection_number= 1 +while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) +{ + --let $rpl_connection_name= server_$rpl_server_number$underscore$_rpl_connection_number + --source include/rpl_connection.inc + --enable_reconnect + --inc $_rpl_connection_number +} if ($rpl_debug) { @@ -122,10 +132,15 @@ if (!$_rpl_server_number) --source include/wait_until_connected_again.inc --disable_reconnect ---let $rpl_connection_name= server_$rpl_server_number$_rpl_one ---source include/rpl_connection.inc ---source include/wait_until_connected_again.inc ---disable_reconnect +--let $_rpl_connection_number= 1 +while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) +{ + --let $rpl_connection_name= server_$rpl_server_number$underscore$_rpl_connection_number + --source include/rpl_connection.inc + --source include/wait_until_connected_again.inc + --disable_reconnect + --inc $_rpl_connection_number +} --let $include_filename= rpl_reconnect.inc diff --git a/mysql-test/include/start_slave_sql.inc b/mysql-test/include/start_slave_sql.inc new file mode 100644 index 00000000000..9cb66a2eb40 --- /dev/null +++ b/mysql-test/include/start_slave_sql.inc @@ -0,0 +1,39 @@ +# ==== Purpose ==== +# +# Issues START SLAVE SQL_THREAD on the current connection. Then waits +# until the SQL thread has started, or until a timeout is reached. +# +# Please use this instead of 'START SLAVE SQL_THREAD', to reduce the +# risk of races in test cases. +# +# +# ==== Usage ==== +# +# [--let $slave_timeout= NUMBER] +# [--let $rpl_debug= 1] +# --source include/start_slave_sql.inc +# +# Parameters: +# $slave_timeout +# See include/wait_for_slave_param.inc +# +# $rpl_debug +# See include/rpl_init.inc + + +--let $include_filename= start_slave_sql.inc +--source include/begin_include_file.inc + + +if (!$rpl_debug) +{ + --disable_query_log +} + + +START SLAVE SQL_THREAD; +--source include/wait_for_slave_sql_to_start.inc + + +--let $include_filename= start_slave_sql.inc +--source include/end_include_file.inc diff --git a/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result b/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result new file mode 100644 index 00000000000..c601c9a4169 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result @@ -0,0 +1,15 @@ +include/master-slave.inc +[connection master] +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(1); +CALL mtr.add_suppression("Disk is full writing"); +CALL mtr.add_suppression("Retry in 60 secs"); +include/stop_slave_sql.inc +SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; +INSERT INTO t1 VALUES(2); +include/wait_for_slave_param.inc [Slave_IO_State] +SET @@GLOBAL.DEBUG= '$debug_saved'; +include/assert_grep.inc [Found the disk full error message on the slave] +include/start_slave_sql.inc +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test new file mode 100644 index 00000000000..d0c74b94cd1 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test @@ -0,0 +1,71 @@ +# ==== Purpose ==== +# +# Check that the execution of SHOW SLAVE STATUS command is not blocked when IO +# thread is blocked waiting for disk space. +# +# ==== Implementation ==== +# +# Simulate a scenario where IO thread is waiting for disk space while writing +# into the relay log. Execute SHOW SLAVE STATUS command after IO thread is +# blocked waiting for space. The command should not be blocked. +# +# ==== References ==== +# +# Bug#21753696: MAKE SHOW SLAVE STATUS NON BLOCKING IF IO THREAD WAITS FOR +# DISK SPACE +# Bug#20685029: SLAVE IO THREAD SHOULD STOP WHEN DISK IS FULL +# +############################################################################### +--source include/have_debug.inc +--source include/master-slave.inc + +# Generate events to be replicated to the slave +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES(1); +--sync_slave_with_master + +# Those errors will only happen in the slave +CALL mtr.add_suppression("Disk is full writing"); +CALL mtr.add_suppression("Retry in 60 secs"); + +# Stop the SQL thread to avoid writing on disk +--source include/stop_slave_sql.inc + +# Set the debug option that will simulate disk full +--let $debug_saved= `SELECT @@GLOBAL.DEBUG` +SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; + +# Generate events to be replicated to the slave +--connection master +INSERT INTO t1 VALUES(2); + +--connection slave +# Wait until IO thread is queuing events from master +# Notice that this is performed by querying SHOW SLAVE STATUS +--let $slave_param= Slave_IO_State +--let $slave_param_value= Queueing master event to the relay log +--source include/wait_for_slave_param.inc + +# Get the relay log file name, also using SHOW SLAVE STATUS +--let $relay_log_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1) + +# Restore the debug options to "simulate" freed space on disk +SET @@GLOBAL.DEBUG= '$debug_saved'; + +# There should be a message in the error log of the slave stating +# that it was waiting for space to write on the relay log. +--let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err +# Grep only after the message that the I/O thread has started +--let $assert_only_after= Slave I/O .* connected to master .*replication started in log .* at position +--let $assert_count= 1 +--let $assert_select=Disk is full writing .*$relay_log_file.* +--let $assert_text= Found the disk full error message on the slave +--source include/assert_grep.inc + +# Start the SQL thread to let the slave to sync and finish gracefully +--source include/start_slave_sql.inc + +# Cleanup +--connection master +DROP TABLE t1; +--source include/rpl_end.inc -- cgit v1.2.1 From 5102a7f278460027fc0ff8d47f2d3f4d72deeacd Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Mon, 7 Mar 2016 18:19:26 +0530 Subject: Bug#20685029: SLAVE IO THREAD SHOULD STOP WHEN DISK IS FULL Bug#21753696: MAKE SHOW SLAVE STATUS NON BLOCKING IF IO THREAD WAITS FOR DISK SPACE Fixing a post push test issue. --- mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test index d0c74b94cd1..9eed1089e6d 100644 --- a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test +++ b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test @@ -17,6 +17,9 @@ # ############################################################################### --source include/have_debug.inc +# Inorder to grep a specific error pattern in error log a fresh error log +# needs to be generated. +--source include/force_restart.inc --source include/master-slave.inc # Generate events to be replicated to the slave -- cgit v1.2.1 From 777c2131dd7aeaf25adbbbbb0c213950e852f22b Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Sat, 2 Apr 2016 00:04:47 +0400 Subject: MDEV-9862 Illegal mix of collation, when comparing column with CASE expression --- mysql-test/r/ctype_cp850.result | 14 ++++++++++++++ mysql-test/t/ctype_cp850.test | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 mysql-test/r/ctype_cp850.result create mode 100644 mysql-test/t/ctype_cp850.test (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_cp850.result b/mysql-test/r/ctype_cp850.result new file mode 100644 index 00000000000..c028f72b58a --- /dev/null +++ b/mysql-test/r/ctype_cp850.result @@ -0,0 +1,14 @@ +# +# Start of 5.5 tests +# +# +# MDEV-9862 Illegal mix of collation, when comparing column with CASE expression +# +SET NAMES cp850; +CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1); +SELECT a FROM t1 WHERE CASE a WHEN 'aaaa' THEN 'Y' WHEN 'aaaa' THEN 'Y' ELSE NULL END <> a; +a +DROP TABLE t1; +# +# End of 5.5 tests +# diff --git a/mysql-test/t/ctype_cp850.test b/mysql-test/t/ctype_cp850.test new file mode 100644 index 00000000000..358829eb351 --- /dev/null +++ b/mysql-test/t/ctype_cp850.test @@ -0,0 +1,16 @@ +--echo # +--echo # Start of 5.5 tests +--echo # + +--echo # +--echo # MDEV-9862 Illegal mix of collation, when comparing column with CASE expression +--echo # +SET NAMES cp850; +CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1); +SELECT a FROM t1 WHERE CASE a WHEN 'aaaa' THEN 'Y' WHEN 'aaaa' THEN 'Y' ELSE NULL END <> a; +DROP TABLE t1; + + +--echo # +--echo # End of 5.5 tests +--echo # -- cgit v1.2.1 From f8adeccd78bff80725a95b73447e34a5f4528179 Mon Sep 17 00:00:00 2001 From: Elena Stepanova Date: Mon, 4 Apr 2016 17:04:14 +0300 Subject: MDEV-9713 Sporadic test failure: sys_vars.innodb_buffer_pool_load_now_basic Previous fix using wait condition did not work because of MDEV-9867, so we have to use conditional sleep instead. Sleep will only happen if the test is executed after another one which also ran buffer pool dump without server restart between two tests --- .../sys_vars/t/innodb_buffer_pool_load_now_basic.test | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test b/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test index 160b3ba52cc..a0409901865 100644 --- a/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test +++ b/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test @@ -13,11 +13,19 @@ let $old_status= `SELECT variable_value FROM information_schema.global_status # A previous test could have run buffer pool dump already; # in this case we want to make sure that the current time is different -# from the timestamp in the status variable - -let $wait_condition = - SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s'); --- source include/wait_condition.inc +# from the timestamp in the status variable. +# We should have had a smart wait condition here, like the commented one below, +# but we can't because of MDEV-9867, so there will be just sleep instead. +# And it might be not enough to sleep one second, so we'll have to sleep two. +# let $wait_condition = +# SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s'); +# -- source include/wait_condition.inc + +if (`SELECT variable_value LIKE '%dump completed at%' FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'`) +{ + -- sleep 2 +} # Do the dump SET GLOBAL innodb_buffer_pool_dump_now = ON; -- cgit v1.2.1 From 6fd54c01bb5bc480497b143d63181837148ff47f Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 18 Apr 2016 23:15:15 +0400 Subject: MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null Item_func_ifnull::date_op() and Item_func_coalesce::date_op() could erroneously return 0000-00-00 instead of NULL when get_date() was called with the TIME_FUZZY_DATES flag, e.g. from LEAST(). --- mysql-test/r/type_date.result | 35 +++++++++++++++++++++++++++++++++++ mysql-test/t/type_date.test | 29 +++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/type_date.result b/mysql-test/r/type_date.result index 4e299ecf0b1..7678f038862 100644 --- a/mysql-test/r/type_date.result +++ b/mysql-test/r/type_date.result @@ -440,3 +440,38 @@ id select_type table type possible_keys key key_len ref rows Extra select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; 1 drop table t1; +# +# MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null +# +CREATE TABLE t1 ( +id BIGINT NOT NULL, +date_debut DATE NOT NULL, +date_fin DATE DEFAULT NULL); +CREATE TABLE t2( +id BIGINT NOT NULL, +date_debut DATE NOT NULL, +date_fin DATE DEFAULT NULL); +INSERT INTO t1 VALUES (1,'2016-01-01','2016-01-31'); +INSERT INTO t1 VALUES (2,'2016-02-01',null); +INSERT INTO t1 VALUES (3,'2016-03-01','2016-03-31'); +INSERT INTO t1 VALUES (4,'2016-04-01',null); +INSERT INTO t2 VALUES (1,'2016-01-01','2016-01-31'); +INSERT INTO t2 VALUES (2,'2016-02-01','2016-01-28'); +INSERT INTO t2 VALUES (3,'2016-03-01',null); +INSERT INTO t2 VALUES (4,'2016-04-01',null); +SELECT t1.id, +GREATEST(t2.date_debut, t1.date_debut) AS date_debut, +LEAST(IFNULL(t2.date_fin, IFNULL(t1.date_fin, NULL)), +IFNULL(t1.date_fin, IFNULL(t2.date_fin, NULL))) AS date_fin +FROM t1 LEFT JOIN t2 ON (t1.id=t2.id); +id date_debut date_fin +1 2016-01-01 2016-01-31 00:00:00 +2 2016-02-01 2016-01-28 00:00:00 +3 2016-03-01 2016-03-31 00:00:00 +4 2016-04-01 NULL +DROP TABLE t1,t2; +SELECT +LEAST(COALESCE(DATE(NULL), DATE(NULL)), COALESCE(DATE(NULL), DATE(NULL))) AS d0, +LEAST(IFNULL(DATE(NULL), DATE(NULL)), IFNULL(DATE(NULL), DATE(NULL))) AS d1; +d0 d1 +NULL NULL diff --git a/mysql-test/t/type_date.test b/mysql-test/t/type_date.test index 0b2ce16b7cc..4b058171ad2 100644 --- a/mysql-test/t/type_date.test +++ b/mysql-test/t/type_date.test @@ -386,3 +386,32 @@ select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; drop table t1; +--echo # +--echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null +--echo # +CREATE TABLE t1 ( + id BIGINT NOT NULL, + date_debut DATE NOT NULL, + date_fin DATE DEFAULT NULL); +CREATE TABLE t2( + id BIGINT NOT NULL, + date_debut DATE NOT NULL, + date_fin DATE DEFAULT NULL); +INSERT INTO t1 VALUES (1,'2016-01-01','2016-01-31'); +INSERT INTO t1 VALUES (2,'2016-02-01',null); +INSERT INTO t1 VALUES (3,'2016-03-01','2016-03-31'); +INSERT INTO t1 VALUES (4,'2016-04-01',null); + +INSERT INTO t2 VALUES (1,'2016-01-01','2016-01-31'); +INSERT INTO t2 VALUES (2,'2016-02-01','2016-01-28'); +INSERT INTO t2 VALUES (3,'2016-03-01',null); +INSERT INTO t2 VALUES (4,'2016-04-01',null); +SELECT t1.id, + GREATEST(t2.date_debut, t1.date_debut) AS date_debut, + LEAST(IFNULL(t2.date_fin, IFNULL(t1.date_fin, NULL)), + IFNULL(t1.date_fin, IFNULL(t2.date_fin, NULL))) AS date_fin +FROM t1 LEFT JOIN t2 ON (t1.id=t2.id); +DROP TABLE t1,t2; +SELECT + LEAST(COALESCE(DATE(NULL), DATE(NULL)), COALESCE(DATE(NULL), DATE(NULL))) AS d0, + LEAST(IFNULL(DATE(NULL), DATE(NULL)), IFNULL(DATE(NULL), DATE(NULL))) AS d1; -- cgit v1.2.1 From 3a8f43bec76d3d93a809b6a3c76e26e946ba0425 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Mon, 11 Apr 2016 11:41:47 +0530 Subject: Bug#22897202: RPL_IO_THD_WAIT_FOR_DISK_SPACE HAS OCCASIONAL FAILURES Analysis: ========= Test script is not ensuring that "assert_grep.inc" should be called only after 'Disk is full' error is written to the error log. Test checks for "Queueing master event to the relay log" state. But this state is set before invoking 'queue_event'. Actual 'Disk is full' error happens at a very lower level. It can happen that we might even reset the debug point before even the actual disk full simulation occurs and the "Disk is full" message will never appear in the error log. In order to guarentee that we must have some mechanism where in after we write "Disk is full" error messge into the error log we must signal the test to execute SSS and then reset the debug point. So that test is deterministic. Fix: === Added debug sync point to make script deterministic. --- mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result | 2 +- mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result b/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result index c601c9a4169..b11ad4f53bd 100644 --- a/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result +++ b/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result @@ -7,7 +7,7 @@ CALL mtr.add_suppression("Retry in 60 secs"); include/stop_slave_sql.inc SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; INSERT INTO t1 VALUES(2); -include/wait_for_slave_param.inc [Slave_IO_State] +SET DEBUG_SYNC='now WAIT_FOR parked'; SET @@GLOBAL.DEBUG= '$debug_saved'; include/assert_grep.inc [Found the disk full error message on the slave] include/start_slave_sql.inc diff --git a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test index 9eed1089e6d..6076be60ebc 100644 --- a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test +++ b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test @@ -42,16 +42,13 @@ SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; --connection master INSERT INTO t1 VALUES(2); ---connection slave -# Wait until IO thread is queuing events from master -# Notice that this is performed by querying SHOW SLAVE STATUS ---let $slave_param= Slave_IO_State ---let $slave_param_value= Queueing master event to the relay log ---source include/wait_for_slave_param.inc +--connection slave1 +SET DEBUG_SYNC='now WAIT_FOR parked'; -# Get the relay log file name, also using SHOW SLAVE STATUS +# Get the relay log file name using SHOW SLAVE STATUS --let $relay_log_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1) +--connection slave # Restore the debug options to "simulate" freed space on disk SET @@GLOBAL.DEBUG= '$debug_saved'; -- cgit v1.2.1 From 18ff6f654b1ca595fc5c0eebddbc1d0c5ee0d09e Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Tue, 19 Apr 2016 12:38:00 +0400 Subject: MDEV-9944 - main.events_2 fails sporadically Fixed wait condition in test case to actually wait for get_lock() completion (not for lock acquisition as it was before). This removes sporadic extra row in subsequent processlist queries. --- mysql-test/t/events_2.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/t/events_2.test b/mysql-test/t/events_2.test index 48949d5630b..5443f76d1a1 100644 --- a/mysql-test/t/events_2.test +++ b/mysql-test/t/events_2.test @@ -67,10 +67,10 @@ select /*2*/ user, host, db, command, state, info select release_lock("test_lock2"); drop event закачка; -# Wait for release_lock("test_lock2") to complete, +# Wait for get_lock("test_lock2") to complete, # to avoid polluting the next test information_schema.processlist let $wait_condition= select count(*) = 0 from information_schema.processlist - where (state like 'User lock%' AND info like 'select get_lock%'); + where info='select get_lock("test_lock2", 20)'; --source include/wait_condition.inc -- cgit v1.2.1 From edf71fd1d7b2d93c7f550d7b2cfecaf6b048fcec Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 16 Apr 2016 10:28:03 +0200 Subject: MDEV-9928 LC_TIME_NAMES=de_AT; unusual name for february s/Feber/Februar/ --- mysql-test/r/locale.result | 11 +++++++++++ mysql-test/t/locale.test | 9 +++++++++ 2 files changed, 20 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/locale.result b/mysql-test/r/locale.result index aa61d8cd86f..195468c4c12 100644 --- a/mysql-test/r/locale.result +++ b/mysql-test/r/locale.result @@ -90,3 +90,14 @@ SELECT DATE_FORMAT('2001-01-07', '%w %a %W'); DATE_FORMAT('2001-01-07', '%w %a %W') 0 Du Duminică End of 5.4 tests +SET NAMES utf8; +SET lc_time_names=de_AT; +SELECT monthname('2001-01-01'); +monthname('2001-01-01') +Jänner +SELECT monthname('2001-02-01'); +monthname('2001-02-01') +Februar +SELECT monthname('2001-03-01'); +monthname('2001-03-01') +März diff --git a/mysql-test/t/locale.test b/mysql-test/t/locale.test index 04ac95cea06..899d293545d 100644 --- a/mysql-test/t/locale.test +++ b/mysql-test/t/locale.test @@ -54,3 +54,12 @@ SELECT DATE_FORMAT('2001-01-05', '%w %a %W'); SELECT DATE_FORMAT('2001-01-06', '%w %a %W'); SELECT DATE_FORMAT('2001-01-07', '%w %a %W'); --echo End of 5.4 tests + +# +# MDEV-9928 LC_TIME_NAMES=de_AT; unusual name for february +# +SET NAMES utf8; +SET lc_time_names=de_AT; +SELECT monthname('2001-01-01'); +SELECT monthname('2001-02-01'); +SELECT monthname('2001-03-01'); -- cgit v1.2.1 From 4f133fbf7951d0f48860cdefe79416f930615dab Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 16 Apr 2016 12:39:20 +0200 Subject: MDEV-9493 --tc-heuristic-recover option values off by one fix typelib to match defines: #define TC_HEURISTIC_RECOVER_COMMIT 1 #define TC_HEURISTIC_RECOVER_ROLLBACK 2 --- mysql-test/r/mysqld--help.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/r/mysqld--help.result b/mysql-test/r/mysqld--help.result index 8bcad2a3cf5..ef68c064dd4 100644 --- a/mysql-test/r/mysqld--help.result +++ b/mysql-test/r/mysqld--help.result @@ -1091,7 +1091,7 @@ sysdate-is-now FALSE table-cache 400 table-definition-cache 400 table-open-cache 400 -tc-heuristic-recover COMMIT +tc-heuristic-recover OFF thread-cache-size 0 thread-stack 294912 time-format %H:%i:%s -- cgit v1.2.1 From 95fe71afa6f1243af63429c5295b8b4bd74d6459 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 17 Apr 2016 18:51:54 +0200 Subject: MDEV-9707 MAX(timestamp(6) column) in correlated sub-query returns non-existent row data in original table special treatment for temporal values in create_tmp_field_from_item(). old code only did it when result_type() was STRING_RESULT, but Item_cache_temporal::result_type() is INT_RESULT --- mysql-test/r/cache_temporal_4265.result | 13 +++++++++++++ mysql-test/t/cache_temporal_4265.test | 11 +++++++++++ 2 files changed, 24 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/cache_temporal_4265.result b/mysql-test/r/cache_temporal_4265.result index 1b4b3c2c4aa..7f215de43fb 100644 --- a/mysql-test/r/cache_temporal_4265.result +++ b/mysql-test/r/cache_temporal_4265.result @@ -7,4 +7,17 @@ a 2002-03-04 Warnings: Note 1003 2000-01-01 +set debug_dbug=''; +drop table t1; +create table t1 (id int not null, ut timestamp(6) not null); +insert into t1 values(1, '2001-01-01 00:00:00.2'); +insert into t1 values(1, '2001-01-01 00:00:00.1'); +select * from t1; +id ut +1 2001-01-01 00:00:00.200000 +1 2001-01-01 00:00:00.100000 +select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1; +(select max(m2.ut) from t1 m2 where m1.id <> 0) +2001-01-01 00:00:00.200000 +2001-01-01 00:00:00.200000 drop table t1; diff --git a/mysql-test/t/cache_temporal_4265.test b/mysql-test/t/cache_temporal_4265.test index 6135438f023..c62f3c3c506 100644 --- a/mysql-test/t/cache_temporal_4265.test +++ b/mysql-test/t/cache_temporal_4265.test @@ -7,5 +7,16 @@ create table t1 (a date); insert t1 values ('2000-01-02'), ('2001-02-03'), ('2002-03-04'); set debug_dbug='d,str_to_datetime_warn'; select * from t1 where a > date_add('2000-01-01', interval 5 day); +set debug_dbug=''; +drop table t1; + +# +# MDEV-9707 MAX(timestamp(6) column) in correlated sub-query returns non-existent row data in original table +# +create table t1 (id int not null, ut timestamp(6) not null); +insert into t1 values(1, '2001-01-01 00:00:00.2'); +insert into t1 values(1, '2001-01-01 00:00:00.1'); +select * from t1; +select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1; drop table t1; -- cgit v1.2.1 From cc04a9fc0f60610d900f27ef60f8916a4ce1bb4c Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 18 Apr 2016 18:30:42 +0200 Subject: MDEV-9835 Valid password is not working after server restart On SET PASSWORD if the plugin is mysql_native_password or mysql_old_password, do reset plugin and auth_str fields. --- mysql-test/r/set_password_plugin-9835.result | 158 +++++++++++++++++++++++++++ mysql-test/t/set_password_plugin-9835.test | 128 ++++++++++++++++++++++ 2 files changed, 286 insertions(+) create mode 100644 mysql-test/r/set_password_plugin-9835.result create mode 100644 mysql-test/t/set_password_plugin-9835.test (limited to 'mysql-test') diff --git a/mysql-test/r/set_password_plugin-9835.result b/mysql-test/r/set_password_plugin-9835.result new file mode 100644 index 00000000000..e9ee09fe952 --- /dev/null +++ b/mysql-test/r/set_password_plugin-9835.result @@ -0,0 +1,158 @@ +create user natauth@localhost identified via 'mysql_native_password' using '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; +create user newpass@localhost identified by password '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; +create user newpassnat@localhost identified via 'mysql_native_password'; +set password for newpassnat@localhost = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; +create user oldauth@localhost identified with 'mysql_old_password' using '378b243e220ca493'; +create user oldpass@localhost identified by password '378b243e220ca493'; +create user oldpassold@localhost identified with 'mysql_old_password'; +set password for oldpassold@localhost = '378b243e220ca493'; +select user, host, password, plugin, authentication_string from mysql.user where user != 'root'; +user host password plugin authentication_string +natauth localhost mysql_native_password *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 +newpass localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 +newpassnat localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 +oldauth localhost mysql_old_password 378b243e220ca493 +oldpass localhost 378b243e220ca493 +oldpassold localhost 378b243e220ca493 +connect con,localhost,natauth,test,; +select current_user(); +current_user() +natauth@localhost +disconnect con; +connect con,localhost,newpass,test,; +select current_user(); +current_user() +newpass@localhost +disconnect con; +connect con,localhost,newpassnat,test,; +select current_user(); +current_user() +newpassnat@localhost +disconnect con; +connect con,localhost,oldauth,test,; +select current_user(); +current_user() +oldauth@localhost +disconnect con; +connect con,localhost,oldpass,test,; +select current_user(); +current_user() +oldpass@localhost +disconnect con; +connect con,localhost,oldpassold,test,; +select current_user(); +current_user() +oldpassold@localhost +disconnect con; +connection default; +flush privileges; +connect con,localhost,natauth,test,; +select current_user(); +current_user() +natauth@localhost +disconnect con; +connect con,localhost,newpass,test,; +select current_user(); +current_user() +newpass@localhost +disconnect con; +connect con,localhost,newpassnat,test,; +select current_user(); +current_user() +newpassnat@localhost +disconnect con; +connect con,localhost,oldauth,test,; +select current_user(); +current_user() +oldauth@localhost +disconnect con; +connect con,localhost,oldpass,test,; +select current_user(); +current_user() +oldpass@localhost +disconnect con; +connect con,localhost,oldpassold,test,; +select current_user(); +current_user() +oldpassold@localhost +disconnect con; +connection default; +set password for natauth@localhost = PASSWORD('test2'); +set password for newpass@localhost = PASSWORD('test2'); +set password for newpassnat@localhost = PASSWORD('test2'); +set password for oldauth@localhost = PASSWORD('test2'); +set password for oldpass@localhost = PASSWORD('test2'); +set password for oldpassold@localhost = PASSWORD('test2'); +select user, host, password, plugin, authentication_string from mysql.user where user != 'root'; +user host password plugin authentication_string +natauth localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +newpass localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +newpassnat localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +oldauth localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +oldpass localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +oldpassold localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E +connect con,localhost,natauth,test2,; +select current_user(); +current_user() +natauth@localhost +disconnect con; +connect con,localhost,newpass,test2,; +select current_user(); +current_user() +newpass@localhost +disconnect con; +connect con,localhost,newpassnat,test2,; +select current_user(); +current_user() +newpassnat@localhost +disconnect con; +connect con,localhost,oldauth,test2,; +select current_user(); +current_user() +oldauth@localhost +disconnect con; +connect con,localhost,oldpass,test2,; +select current_user(); +current_user() +oldpass@localhost +disconnect con; +connect con,localhost,oldpassold,test2,; +select current_user(); +current_user() +oldpassold@localhost +disconnect con; +connection default; +flush privileges; +connect con,localhost,natauth,test2,; +select current_user(); +current_user() +natauth@localhost +disconnect con; +connect con,localhost,newpass,test2,; +select current_user(); +current_user() +newpass@localhost +disconnect con; +connect con,localhost,newpassnat,test2,; +select current_user(); +current_user() +newpassnat@localhost +disconnect con; +connect con,localhost,oldauth,test2,; +select current_user(); +current_user() +oldauth@localhost +disconnect con; +connect con,localhost,oldpass,test2,; +select current_user(); +current_user() +oldpass@localhost +disconnect con; +connect con,localhost,oldpassold,test2,; +select current_user(); +current_user() +oldpassold@localhost +disconnect con; +connection default; +drop user natauth@localhost, newpass@localhost, newpassnat@localhost; +drop user oldauth@localhost, oldpass@localhost, oldpassold@localhost; diff --git a/mysql-test/t/set_password_plugin-9835.test b/mysql-test/t/set_password_plugin-9835.test new file mode 100644 index 00000000000..a10a339540f --- /dev/null +++ b/mysql-test/t/set_password_plugin-9835.test @@ -0,0 +1,128 @@ +# +# MDEV-9835 Valid password is not working after server restart. +# +# Various combinations of SET PASSWORD and not-empty mysql.user.plugin field +# +--source include/not_embedded.inc + +--enable_connect_log + +# The hash (old and new) is for 'test' +create user natauth@localhost identified via 'mysql_native_password' using '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; + +create user newpass@localhost identified by password '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; + +create user newpassnat@localhost identified via 'mysql_native_password'; +set password for newpassnat@localhost = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'; + +create user oldauth@localhost identified with 'mysql_old_password' using '378b243e220ca493'; + +create user oldpass@localhost identified by password '378b243e220ca493'; + +create user oldpassold@localhost identified with 'mysql_old_password'; +set password for oldpassold@localhost = '378b243e220ca493'; + +--sorted_result +select user, host, password, plugin, authentication_string from mysql.user where user != 'root'; + +--connect(con,localhost,natauth,test,) +select current_user(); +--disconnect con +--connect(con,localhost,newpass,test,) +select current_user(); +--disconnect con +--connect(con,localhost,newpassnat,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldauth,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpass,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpassold,test,) +select current_user(); +--disconnect con + +--connection default + +flush privileges; + +--connect(con,localhost,natauth,test,) +select current_user(); +--disconnect con +--connect(con,localhost,newpass,test,) +select current_user(); +--disconnect con +--connect(con,localhost,newpassnat,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldauth,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpass,test,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpassold,test,) +select current_user(); +--disconnect con + +--connection default + +# changing to the NEW password hash +set password for natauth@localhost = PASSWORD('test2'); +set password for newpass@localhost = PASSWORD('test2'); +set password for newpassnat@localhost = PASSWORD('test2'); +set password for oldauth@localhost = PASSWORD('test2'); +set password for oldpass@localhost = PASSWORD('test2'); +set password for oldpassold@localhost = PASSWORD('test2'); + +--sorted_result +select user, host, password, plugin, authentication_string from mysql.user where user != 'root'; + +--connect(con,localhost,natauth,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,newpass,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,newpassnat,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldauth,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpass,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpassold,test2,) +select current_user(); +--disconnect con + +--connection default + +flush privileges; + +--connect(con,localhost,natauth,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,newpass,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,newpassnat,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldauth,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpass,test2,) +select current_user(); +--disconnect con +--connect(con,localhost,oldpassold,test2,) +select current_user(); +--disconnect con + +--connection default +drop user natauth@localhost, newpass@localhost, newpassnat@localhost; +drop user oldauth@localhost, oldpass@localhost, oldpassold@localhost; + -- cgit v1.2.1 From 1bc0b0b5245977172e2c3a3c64a42a2c4e762e06 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 19 Apr 2016 11:08:16 +0200 Subject: fix a couple of dbug tests not to write to /tmp --- mysql-test/r/mdev6830.result | 3 +-- mysql-test/r/select_debug.result | 2 +- mysql-test/t/mdev6830-master.opt | 1 - mysql-test/t/mdev6830.test | 10 +++++----- mysql-test/t/select_debug.test | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 mysql-test/t/mdev6830-master.opt (limited to 'mysql-test') diff --git a/mysql-test/r/mdev6830.result b/mysql-test/r/mdev6830.result index 0570659e860..d1cf8c98ac1 100644 --- a/mysql-test/r/mdev6830.result +++ b/mysql-test/r/mdev6830.result @@ -1,5 +1,4 @@ -drop table if exists t1,t2,t3; -drop view if exists v2,v3; +set @@debug_dbug= 'd,opt'; CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; CREATE TABLE t2 ( f1 DATE, diff --git a/mysql-test/r/select_debug.result b/mysql-test/r/select_debug.result index a056affc2cd..55882ad337a 100644 --- a/mysql-test/r/select_debug.result +++ b/mysql-test/r/select_debug.result @@ -6,7 +6,7 @@ insert into t1 values (2,2), (1,1); create table t2 (a int); insert into t2 values (2), (3); set session join_cache_level=3; -set @@debug_dbug= 'd:t:O,/tmp/trace.out'; +set @@debug_dbug= 'd,opt'; explain select t1.b from t1,t2 where t1.b=t2.a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where diff --git a/mysql-test/t/mdev6830-master.opt b/mysql-test/t/mdev6830-master.opt deleted file mode 100644 index 2a8c27d4731..00000000000 --- a/mysql-test/t/mdev6830-master.opt +++ /dev/null @@ -1 +0,0 @@ ---debug diff --git a/mysql-test/t/mdev6830.test b/mysql-test/t/mdev6830.test index 24565d04fed..3898d5bbef6 100644 --- a/mysql-test/t/mdev6830.test +++ b/mysql-test/t/mdev6830.test @@ -1,10 +1,10 @@ - +# +# MDEV-6830 Server crashes in best_access_path after a sequence of SELECTs invollving a temptable view +# --source include/have_debug.inc ---disable_warnings -drop table if exists t1,t2,t3; -drop view if exists v2,v3; ---enable_warnings +set @@debug_dbug= 'd,opt'; + CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; CREATE TABLE t2 ( diff --git a/mysql-test/t/select_debug.test b/mysql-test/t/select_debug.test index 4b77f9fd047..49415400db3 100644 --- a/mysql-test/t/select_debug.test +++ b/mysql-test/t/select_debug.test @@ -10,7 +10,7 @@ create table t2 (a int); insert into t2 values (2), (3); set session join_cache_level=3; -set @@debug_dbug= 'd:t:O,/tmp/trace.out'; +set @@debug_dbug= 'd,opt'; explain select t1.b from t1,t2 where t1.b=t2.a; select t1.b from t1,t2 where t1.b=t2.a; -- cgit v1.2.1 From 6c0e231c0282b43d6a46a4983f5971e960d3b8ca Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Tue, 19 Apr 2016 14:05:52 +0400 Subject: MDEV-9945 - main.kill_processlist-6619 fails sporadically SHOW PROCESSLIST output can be affected by not completed concurrent queries. Removed this affected SHOW PROCESSLIST since it doesn't seem to affect original problem. --- mysql-test/r/kill_processlist-6619.result | 4 ---- mysql-test/t/kill_processlist-6619.test | 2 -- 2 files changed, 6 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/kill_processlist-6619.result b/mysql-test/r/kill_processlist-6619.result index 588c8e6d139..a3d971e2115 100644 --- a/mysql-test/r/kill_processlist-6619.result +++ b/mysql-test/r/kill_processlist-6619.result @@ -1,8 +1,4 @@ connect con1,localhost,root,,; -SHOW PROCESSLIST; -Id User Host db Command Time State Info Progress -# root # test Sleep # # NULL 0.000 -# root # test Query # # SHOW PROCESSLIST 0.000 connection default; KILL QUERY con_id; connection con1; diff --git a/mysql-test/t/kill_processlist-6619.test b/mysql-test/t/kill_processlist-6619.test index 2333f02eac6..d73859ce8cd 100644 --- a/mysql-test/t/kill_processlist-6619.test +++ b/mysql-test/t/kill_processlist-6619.test @@ -5,8 +5,6 @@ --enable_connect_log --connect (con1,localhost,root,,) --let $con_id = `SELECT CONNECTION_ID()` ---replace_column 1 # 3 # 6 # 7 # -SHOW PROCESSLIST; --connection default --replace_result $con_id con_id eval KILL QUERY $con_id; -- cgit v1.2.1 From 9a987142f93756b37b2ff02d513034cc4079c978 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 20 Apr 2016 08:53:30 +0400 Subject: MDEV-9745 Crash with CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END This is a backport of the patch for MDEV-9653 (fixed earlier in 10.1.13). The code in Item_func_case::fix_length_and_dec() did not calculate max_length and decimals properly. In case of any numeric result (DECIMAL, REAL, INT) a generic method Item_func_case::agg_num_lengths() was called, which could erroneously result into a DECIMAL item with max_length==0 and decimals==0, so the constructor of Field_new_decimals tried to create a field of DECIMAL(0,0) type, which caused a crash. Unlike Item_func_case, the code responsible for merging attributes in Item_func_coalesce::fix_length_and_dec() works fine: it has specific execution branches for all distinct numeric types and correctly creates a DECIMAL(1,0) column instead of DECIMAL(0,0) for the same set of arguments. The fix does the following: - Moves the attribute merging code from Item_func_coalesce::fix_length_and_dec() to a new method Item_func_hybrid_result_type::fix_attributes() - Removes the wrong code from Item_func_case::fix_length_and_dec() and reuses fix_attributes() in both Item_func_coalesce::fix_length_and_dec() and Item_func_case::fix_length_and_dec() - Fixes count_real_length() and count_decimal_length() to get an array of Items as an argument, instead of using Item::args directly. This is needed for Item_func_case::fix_length_and_dec(). - Moves methods Item_func::count_xxx_length() from "public" to "protected". - Removes Item_func_case::agg_num_length(), as it's not used any more. - Additionally removes Item_func_case::agg_str_length(), as it also was not used (dead code). --- mysql-test/r/case.result | 13 +++++++++++++ mysql-test/t/case.test | 9 +++++++++ 2 files changed, 22 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/case.result b/mysql-test/r/case.result index 3852da5d4b0..274d5da7d1c 100644 --- a/mysql-test/r/case.result +++ b/mysql-test/r/case.result @@ -231,3 +231,16 @@ case t1.f1 when '00:00:00' then 1 end 1 NULL drop table t1; +# +# MDEV-9745 Crash with CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END +# +CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END AS a; +DESCRIBE t1; +Field Type Null Key Default Extra +a decimal(1,0) YES NULL +DROP TABLE t1; +CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 40 END AS a; +DESCRIBE t1; +Field Type Null Key Default Extra +a decimal(2,0) YES NULL +DROP TABLE t1; diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test index f536f556780..c127836d352 100644 --- a/mysql-test/t/case.test +++ b/mysql-test/t/case.test @@ -193,3 +193,12 @@ insert t1 values ('00:00:00'),('00:01:00'); select case t1.f1 when '00:00:00' then 1 end from t1; drop table t1; +--echo # +--echo # MDEV-9745 Crash with CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END +--echo # +CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END AS a; +DESCRIBE t1; +DROP TABLE t1; +CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 40 END AS a; +DESCRIBE t1; +DROP TABLE t1; -- cgit v1.2.1 From 2564650fb91faec3e409d6ffe369c82252042710 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 20 Apr 2016 11:02:34 +0400 Subject: MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) The patch for MDEV-9745 earlier fixed the problem reported in MDEV-9662 as well. Only adding tests. --- mysql-test/include/ctype_numconv.inc | 6 ++++++ mysql-test/r/ctype_binary.result | 9 +++++++++ mysql-test/r/ctype_cp1251.result | 9 +++++++++ mysql-test/r/ctype_latin1.result | 9 +++++++++ mysql-test/r/ctype_ucs.result | 9 +++++++++ mysql-test/r/ctype_utf8.result | 9 +++++++++ 6 files changed, 51 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/include/ctype_numconv.inc b/mysql-test/include/ctype_numconv.inc index 25314d53fba..9b21e7f38c1 100644 --- a/mysql-test/include/ctype_numconv.inc +++ b/mysql-test/include/ctype_numconv.inc @@ -1794,6 +1794,12 @@ SELECT f1() FROM t1 LEFT JOIN (SELECT 1 AS a FROM t1 LIMIT 0) AS d ON 1 GROUP BY DROP FUNCTION f1; DROP TABLE t1; +--echo # +--echo # MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +--echo # +SELECT @@collation_connection; +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; + --echo # --echo # MDEV-5702 Incorrect results are returned with NULLIF() --echo # diff --git a/mysql-test/r/ctype_binary.result b/mysql-test/r/ctype_binary.result index 73c81c4eb06..e7bf1238210 100644 --- a/mysql-test/r/ctype_binary.result +++ b/mysql-test/r/ctype_binary.result @@ -2849,6 +2849,15 @@ f1() DROP FUNCTION f1; DROP TABLE t1; # +# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +# +SELECT @@collation_connection; +@@collation_connection +binary +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; +CASE 1 WHEN 2 THEN ( - '3' ) END +NULL +# # MDEV-5702 Incorrect results are returned with NULLIF() # CREATE TABLE t1 (d DATE); diff --git a/mysql-test/r/ctype_cp1251.result b/mysql-test/r/ctype_cp1251.result index 313f60ef276..2a7d4ed1fb4 100644 --- a/mysql-test/r/ctype_cp1251.result +++ b/mysql-test/r/ctype_cp1251.result @@ -3241,6 +3241,15 @@ f1() DROP FUNCTION f1; DROP TABLE t1; # +# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +# +SELECT @@collation_connection; +@@collation_connection +cp1251_general_ci +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; +CASE 1 WHEN 2 THEN ( - '3' ) END +NULL +# # MDEV-5702 Incorrect results are returned with NULLIF() # CREATE TABLE t1 (d DATE); diff --git a/mysql-test/r/ctype_latin1.result b/mysql-test/r/ctype_latin1.result index 11a9479afa3..dc96495b1ac 100644 --- a/mysql-test/r/ctype_latin1.result +++ b/mysql-test/r/ctype_latin1.result @@ -3423,6 +3423,15 @@ f1() DROP FUNCTION f1; DROP TABLE t1; # +# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +# +SELECT @@collation_connection; +@@collation_connection +latin1_swedish_ci +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; +CASE 1 WHEN 2 THEN ( - '3' ) END +NULL +# # MDEV-5702 Incorrect results are returned with NULLIF() # CREATE TABLE t1 (d DATE); diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result index f9e9a69de42..96e0970e4a6 100644 --- a/mysql-test/r/ctype_ucs.result +++ b/mysql-test/r/ctype_ucs.result @@ -4239,6 +4239,15 @@ f1() DROP FUNCTION f1; DROP TABLE t1; # +# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +# +SELECT @@collation_connection; +@@collation_connection +ucs2_general_ci +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; +CASE 1 WHEN 2 THEN ( - '3' ) END +NULL +# # MDEV-5702 Incorrect results are returned with NULLIF() # CREATE TABLE t1 (d DATE); diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 09bb5195b74..217d3ca26d8 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -5060,6 +5060,15 @@ f1() DROP FUNCTION f1; DROP TABLE t1; # +# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool) +# +SELECT @@collation_connection; +@@collation_connection +utf8_general_ci +SELECT CASE 1 WHEN 2 THEN ( - '3' ) END; +CASE 1 WHEN 2 THEN ( - '3' ) END +NULL +# # MDEV-5702 Incorrect results are returned with NULLIF() # CREATE TABLE t1 (d DATE); -- cgit v1.2.1 From e90f8b7a683a47b47417d847b69c52e2138e2259 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 20 Apr 2016 11:11:13 +0400 Subject: MDEV-9413 "datetime >= coalesce(c1(NULL))" doesn't return expected NULL The patch for MDEV-9521 earlier fixed the problem reported in MDEV-9413. Only adding tests. --- mysql-test/r/type_timestamp.result | 9 +++++++++ mysql-test/t/type_timestamp.test | 8 ++++++++ 2 files changed, 17 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 52c7f05839e..1f17247b02a 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -644,4 +644,13 @@ SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1; MAX(dt) = '2011-01-06 12:34:30' 1 DROP TABLE t1; +# +# MDEV-9413 "datetime >= coalesce(c1(NULL))" doesn't return expected NULL +# +CREATE TABLE t1(c1 TIMESTAMP(6) NULL DEFAULT NULL); +INSERT INTO t1 VALUES(NULL); +SELECT c1, '2016-06-13 20:00:00.000003' >= COALESCE( c1 ) FROM t1; +c1 '2016-06-13 20:00:00.000003' >= COALESCE( c1 ) +NULL NULL +DROP TABLE t1; End of 5.5 tests diff --git a/mysql-test/t/type_timestamp.test b/mysql-test/t/type_timestamp.test index 575c30431b6..0cc9c37fee9 100644 --- a/mysql-test/t/type_timestamp.test +++ b/mysql-test/t/type_timestamp.test @@ -446,4 +446,12 @@ SELECT MAX(ts) = '2011-01-06 12:34:30' FROM t1; SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-9413 "datetime >= coalesce(c1(NULL))" doesn't return expected NULL +--echo # +CREATE TABLE t1(c1 TIMESTAMP(6) NULL DEFAULT NULL); +INSERT INTO t1 VALUES(NULL); +SELECT c1, '2016-06-13 20:00:00.000003' >= COALESCE( c1 ) FROM t1; +DROP TABLE t1; + --echo End of 5.5 tests -- cgit v1.2.1 From 8f1f869f68581238b7718169fd50e9d7b6c7f0a3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 20 Apr 2016 15:26:37 +0200 Subject: another test case for ER_DATA_OUT_OF_RANGE on insert tests it with a non-const table too --- mysql-test/r/func_math.result | 5 +++++ mysql-test/t/func_math.test | 8 ++++++++ 2 files changed, 13 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index 3f8ab6c78d9..d122d435ac7 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -663,6 +663,11 @@ SELECT -a FROM t1; ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)' SELECT -b FROM t1; ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)' +INSERT INTO t1 VALUES(0,0); +SELECT -a FROM t1; +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)' +SELECT -b FROM t1; +ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)' DROP TABLE t1; SET @a:=999999999999999999999999999999999999999999999999999999999999999999999999999999999; SELECT @a + @a; diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index b843cf8c364..cd90184ebf5 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -484,6 +484,14 @@ SELECT -a FROM t1; --error ER_DATA_OUT_OF_RANGE SELECT -b FROM t1; +# try with two rows now +INSERT INTO t1 VALUES(0,0); + +--error ER_DATA_OUT_OF_RANGE +SELECT -a FROM t1; +--error ER_DATA_OUT_OF_RANGE +SELECT -b FROM t1; + DROP TABLE t1; # Decimal overflows -- cgit v1.2.1 From 24ac546d0f16d5f56b11c068e4f187a9c4c56bd0 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 20 Apr 2016 18:27:23 +0200 Subject: use consistent error messaging for IGNORE 1. the same message text for INSERT and INSERT IGNORE 2. no new warnings in UPDATE IGNORE yet (big change for 5.5) and replace a commonly used expression with a named constant --- mysql-test/r/insert_innodb.result | 9 --------- 1 file changed, 9 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/insert_innodb.result b/mysql-test/r/insert_innodb.result index e7a133a8945..ffba9388ec4 100644 --- a/mysql-test/r/insert_innodb.result +++ b/mysql-test/r/insert_innodb.result @@ -11,20 +11,11 @@ INSERT INTO t2 VALUES(0); INSERT IGNORE INTO t2 VALUES(1); Warnings: Warning 1452 Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) -Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0; -Warnings: -Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0; -Warnings: -Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) # Test for multi update. UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3; -Warnings: -Warning 1452 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3; -Warnings: -Warning 1451 `test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) # Reports an error since IGNORE is not used. INSERT INTO t2 VALUES(1); ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) -- cgit v1.2.1 From 2a45fa900b5916e9b789b1a4052ffd7c724f4166 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 20 Apr 2016 19:03:59 +0200 Subject: MDEV-9836 Connection lost when using SSL Don't read from socket in yassl in SSL_pending(). Just return size of the buffered processed data. This is what OpenSSL is documented to do too: SSL_pending() returns the number of bytes which have been processed, buffered and are available inside ssl for immediate read. --- mysql-test/r/ssl_timeout-9836.result | 7 +++++++ mysql-test/t/ssl_timeout-9836.opt | 1 + mysql-test/t/ssl_timeout-9836.test | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 mysql-test/r/ssl_timeout-9836.result create mode 100644 mysql-test/t/ssl_timeout-9836.opt create mode 100644 mysql-test/t/ssl_timeout-9836.test (limited to 'mysql-test') diff --git a/mysql-test/r/ssl_timeout-9836.result b/mysql-test/r/ssl_timeout-9836.result new file mode 100644 index 00000000000..bc2e19e1475 --- /dev/null +++ b/mysql-test/r/ssl_timeout-9836.result @@ -0,0 +1,7 @@ +SET @@net_read_timeout=1; +SELECT 1; +1 +1 +SELECT 1; +1 +1 diff --git a/mysql-test/t/ssl_timeout-9836.opt b/mysql-test/t/ssl_timeout-9836.opt new file mode 100644 index 00000000000..7a2696875b8 --- /dev/null +++ b/mysql-test/t/ssl_timeout-9836.opt @@ -0,0 +1 @@ +--loose-thread-handling=pool-of-threads diff --git a/mysql-test/t/ssl_timeout-9836.test b/mysql-test/t/ssl_timeout-9836.test new file mode 100644 index 00000000000..5b57917f3b8 --- /dev/null +++ b/mysql-test/t/ssl_timeout-9836.test @@ -0,0 +1,11 @@ +# +# MDEV-9836 Connection lost when using SSL +# +-- source include/have_ssl_communication.inc +connect(con1,localhost,root,,,,,SSL); +SET @@net_read_timeout=1; +SELECT 1; +# MDEV-9836 - YASSL bug - SSL connection lost if it has been idle, for longer than net_read_timeout +-- sleep 2 +SELECT 1; +disconnect con1; -- cgit v1.2.1 From 3b6f9aac02b126db57fa3e3f1873713438d0a950 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Fri, 22 Apr 2016 10:25:16 +0530 Subject: BUG#23135731: INSERT WITH DUPLICATE KEY UPDATE REPORTS INCORRECT ERROR. Analysis ======== INSERT with DUPLICATE KEY UPDATE and REPLACE on a table where foreign key constraint is defined fails with an incorrect 'duplicate entry' error rather than foreign key constraint violation error. As part of the bug fix for BUG#22037930, a new flag 'HA_CHECK_FK_ERROR' was added while checking for non fatal errors to manage FK errors based on the 'IGNORE' flag. For INSERT with DUPLICATE KEY UPDATE and REPLACE queries, the foreign key constraint violation error was marked as non-fatal, even though IGNORE was not set. Hence it continued with the duplicate key processing resulting in an incorrect error. Fix: === Foreign key violation errors are treated as non fatal only when the IGNORE is not set in the above mentioned queries. Hence reports the appropriate foreign key violation error. --- mysql-test/r/insert.result | 15 +++++++++++++++ mysql-test/t/insert.test | 22 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result index 1aa22349593..e840b95f1ba 100644 --- a/mysql-test/r/insert.result +++ b/mysql-test/r/insert.result @@ -724,3 +724,18 @@ ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (` UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) DROP TABLE t2, t1; +# +# BUG#22037930: INSERT IGNORE FAILS TO IGNORE FOREIGN +# KEY CONSTRAINT +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= INNODB; +CREATE TABLE t2 (fld1 VARCHAR(10), fld2 INT NOT NULL, +CONSTRAINT fk FOREIGN KEY (fld2) REFERENCES t1(fld1)) ENGINE= INNODB; +# Without patch, reports incorrect error. +INSERT INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +REPLACE INTO t2 VALUES('abc', 2); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`)) +INSERT IGNORE INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +Warnings: +Warning 1452 `test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`) +DROP TABLE t2, t1; diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test index ea89872200c..94cf5d3b475 100644 --- a/mysql-test/t/insert.test +++ b/mysql-test/t/insert.test @@ -591,3 +591,25 @@ UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3; UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3; DROP TABLE t2, t1; + + +--echo # +--echo # BUG#22037930: INSERT IGNORE FAILS TO IGNORE FOREIGN +--echo # KEY CONSTRAINT + +CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= INNODB; + +CREATE TABLE t2 (fld1 VARCHAR(10), fld2 INT NOT NULL, +CONSTRAINT fk FOREIGN KEY (fld2) REFERENCES t1(fld1)) ENGINE= INNODB; + +--echo # Without patch, reports incorrect error. +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +--error ER_NO_REFERENCED_ROW_2 +REPLACE INTO t2 VALUES('abc', 2); + +--enable_warnings +INSERT IGNORE INTO t2 VALUES('abc', 2) ON DUPLICATE KEY UPDATE fld1= 'def'; +--disable_warnings + +DROP TABLE t2, t1; -- cgit v1.2.1 From 628bc576b328f85ed2674c49c1d2ab5dd3a63d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Thu, 21 Apr 2016 10:52:52 +0300 Subject: MDEV-9918: [ERROR] mysqld got signal 11 during ALTER TABLE `name` COLUMN ADD Problem was that in-place online alter table was used on a table that had mismatch between MySQL frm file and InnoDB data dictionary. Fixed so that traditional "Copy" method is used if the MySQL frm and InnoDB data dictionary is not consistent. --- .../suite/innodb/r/innodb-corrupted-table.result | 49 ++++++++++++++++++++++ .../suite/innodb/t/innodb-corrupted-table.test | 46 ++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 mysql-test/suite/innodb/r/innodb-corrupted-table.result create mode 100644 mysql-test/suite/innodb/t/innodb-corrupted-table.test (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb-corrupted-table.result b/mysql-test/suite/innodb/r/innodb-corrupted-table.result new file mode 100644 index 00000000000..61d10fbb949 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-corrupted-table.result @@ -0,0 +1,49 @@ +call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MySQL.*"); +call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB, which is different from the number of indexes .* defined in the MySQL.*"); +create table t1 (pk int, i int, key(i)) engine=InnoDB; +insert into t1 values (1,1),(2,2); +flush tables; +# Save the .frm file without the PK +alter table t1 add primary key (pk); +# Stop the server, replace the frm with the old one and restart the server +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) DEFAULT NULL, + `i` int(11) DEFAULT NULL, + KEY `i` (`i`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +Warnings: +Warning 1082 InnoDB: Table test/t1 has a primary key in InnoDB data dictionary, but not in MySQL! +Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL +select * from t1; +pk i +1 1 +2 2 +alter table t1 add j int; +Warnings: +Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL +show warnings; +Level Code Message +Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) DEFAULT NULL, + `i` int(11) DEFAULT NULL, + `j` int(11) DEFAULT NULL, + KEY `i` (`i`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +alter table t1 add primary key (pk); +show warnings; +Level Code Message +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL DEFAULT '0', + `i` int(11) DEFAULT NULL, + `j` int(11) DEFAULT NULL, + PRIMARY KEY (`pk`), + KEY `i` (`i`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +drop table t1; diff --git a/mysql-test/suite/innodb/t/innodb-corrupted-table.test b/mysql-test/suite/innodb/t/innodb-corrupted-table.test new file mode 100644 index 00000000000..94c5454429f --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-corrupted-table.test @@ -0,0 +1,46 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc + +# +# MDEV-9918: [ERROR] mysqld got signal 11 during ALTER TABLE `name` COLUMN ADD +# + +call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MySQL.*"); +call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB, which is different from the number of indexes .* defined in the MySQL.*"); + +create table t1 (pk int, i int, key(i)) engine=InnoDB; +insert into t1 values (1,1),(2,2); + +--let $datadir= `select @@datadir` + +flush tables; + +--echo # Save the .frm file without the PK + +--copy_file $datadir/test/t1.frm $MYSQLTEST_VARDIR/tmp/t1.frm + +alter table t1 add primary key (pk); + +--echo # Stop the server, replace the frm with the old one and restart the server + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server 10 +--source include/wait_until_disconnected.inc + +--remove_file $datadir/test/t1.frm +--copy_file $MYSQLTEST_VARDIR/tmp/t1.frm $datadir/test/t1.frm + +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +show create table t1; +select * from t1; +alter table t1 add j int; +show warnings; +show create table t1; +alter table t1 add primary key (pk); +show warnings; +show create table t1; +# Cleanup +drop table t1; -- cgit v1.2.1 From 3f0d07e55b0a2ab8c7bdc1209d55ec2f66542830 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 22 Apr 2016 16:04:20 +0400 Subject: MDEV-9372 select 100 between 1 and 9223372036854775808 returns false Integer comparison of INT expressions with different signess in BETWEEN is not safe. Switching to DECIMAL comparison in case if INT arguments have different signess. --- mysql-test/r/bigint.result | 6 ++++++ mysql-test/t/bigint.test | 5 +++++ 2 files changed, 11 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 505d655b6bb..b06ec5805a0 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -502,3 +502,9 @@ a SELECT * FROM t1 WHERE a IN (0.8,0.9); a DROP TABLE t1; +# +# MDEV-9372 select 100 between 1 and 9223372036854775808 returns false +# +SELECT 100 BETWEEN 1 AND 9223372036854775808; +100 BETWEEN 1 AND 9223372036854775808 +1 diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 41f33b8a7f2..fb18d60edd9 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -409,3 +409,8 @@ SELECT * FROM t1 WHERE a=0.9; SELECT * FROM t1 WHERE a IN (0.8,0.9); DROP TABLE t1; + +--echo # +--echo # MDEV-9372 select 100 between 1 and 9223372036854775808 returns false +--echo # +SELECT 100 BETWEEN 1 AND 9223372036854775808; -- cgit v1.2.1 From 618e300bce133cd4b4379b9f456d65144ae4c62b Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Fri, 22 Apr 2016 12:57:39 +0400 Subject: MDEV-9970 - main.sp-threads fails sporadically Added proper waiting for thread to enter required state. Also reduced amount of information dumped from processlist. --- mysql-test/r/sp-threads.result | 9 +++------ mysql-test/t/sp-threads.test | 9 ++++++--- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/sp-threads.result b/mysql-test/r/sp-threads.result index 4dc4d81224b..ddf709d462b 100644 --- a/mysql-test/r/sp-threads.result +++ b/mysql-test/r/sp-threads.result @@ -32,12 +32,9 @@ update t1, t2 set val= 1 where id1=id2; call bug9486(); lock tables t2 write; call bug9486(); -show processlist; -Id User Host db Command Time State Info Progress -# root localhost test Sleep # NULL 0.000 -# root localhost test Query # Waiting for table metadata lock update t1, t2 set val= 1 where id1=id2 0.000 -# root localhost test Query # NULL show processlist 0.000 -# root localhost test Sleep # NULL 0.000 +SELECT state,info FROM information_schema.processlist WHERE id=con1root_id; +state info +Waiting for table metadata lock update t1, t2 set val= 1 where id1=id2 unlock tables; drop procedure bug9486; drop table t1, t2; diff --git a/mysql-test/t/sp-threads.test b/mysql-test/t/sp-threads.test index e1012e2b72d..7a6d1258331 100644 --- a/mysql-test/t/sp-threads.test +++ b/mysql-test/t/sp-threads.test @@ -77,12 +77,15 @@ call bug9486(); connection con2root; lock tables t2 write; connection con1root; +let $con1root_id=`SELECT CONNECTION_ID()`; send call bug9486(); connection con2root; ---sleep 2 # There should be call statement in locked state. ---replace_column 1 # 3 localhost 6 # -show processlist; +let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist WHERE + id=$con1root_id AND state='Waiting for table metadata lock'; +--source include/wait_condition.inc +--replace_result $con1root_id con1root_id +eval SELECT state,info FROM information_schema.processlist WHERE id=$con1root_id; unlock tables; connection con1root; reap; -- cgit v1.2.1 From 19e3597e0c718a4cfdfe8789c7b4b11a4e0ba0c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Thu, 7 Apr 2016 10:47:46 +0300 Subject: MDEV-9142 :Adding Constraint with no database reference results in ERROR 1046 (3D000) at line 13: No database selected. Use database from create table to foreign key database if nothing else is given. --- mysql-test/suite/innodb/r/innodb-fk.result | 44 ++++++++++++++++++++++++++++++ mysql-test/suite/innodb/t/innodb-fk.test | 41 ++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb-fk.result b/mysql-test/suite/innodb/r/innodb-fk.result index 6c3306f5c15..7ba300b245e 100644 --- a/mysql-test/suite/innodb/r/innodb-fk.result +++ b/mysql-test/suite/innodb/r/innodb-fk.result @@ -68,3 +68,47 @@ Warning 150 Alter table `test`.`t2` with foreign key constraint failed. Referen Error 1005 Can't create table '#sql-temporary' (errno: 150) drop table t2; drop table t1; +CREATE DATABASE kg_test1; +CREATE DATABASE kg_test2; +CREATE TABLE `kg_test1`.`group` ( +Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `kg_test1`.`person` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; +show create table `kg_test1`.`person`; +Table Create Table +person CREATE TABLE `person` ( + `Id` int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(50) NOT NULL, + PRIMARY KEY (`Id`), + CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +CREATE TABLE `kg_test2`.`person2` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; +ERROR HY000: Can't create table 'kg_test2.person2' (errno: 150) +CREATE TABLE `kg_test2`.`person2` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; +show create table `kg_test2`.`person2`; +Table Create Table +person2 CREATE TABLE `person2` ( + `Id` int(11) NOT NULL AUTO_INCREMENT, + `Name` varchar(50) NOT NULL, + PRIMARY KEY (`Id`), + CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +SHOW WARNINGS; +Level Code Message +DROP DATABASE kg_test2; +DROP DATABASE kg_test1; diff --git a/mysql-test/suite/innodb/t/innodb-fk.test b/mysql-test/suite/innodb/t/innodb-fk.test index 9bfd16b88e9..fd8dce7594c 100644 --- a/mysql-test/suite/innodb/t/innodb-fk.test +++ b/mysql-test/suite/innodb/t/innodb-fk.test @@ -124,3 +124,44 @@ show warnings; drop table t2; drop table t1; + +# +# MDEV-9142 :Adding Constraint with no database reference +# results in ERROR 1046 (3D000) at line 13: No database selected +# +CREATE DATABASE kg_test1; +CREATE DATABASE kg_test2; + +CREATE TABLE `kg_test1`.`group` ( + Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `kg_test1`.`person` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; + +show create table `kg_test1`.`person`; + +--error 1005 +CREATE TABLE `kg_test2`.`person2` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; + +CREATE TABLE `kg_test2`.`person2` ( +`Id` INT(11) NOT NULL AUTO_INCREMENT, +`Name` VARCHAR(50) NOT NULL, +PRIMARY KEY (`Id`), +CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`) +) ENGINE=INNODB DEFAULT CHARSET=utf8; + +show create table `kg_test2`.`person2`; + +SHOW WARNINGS; +DROP DATABASE kg_test2; +DROP DATABASE kg_test1; -- cgit v1.2.1 From d821dd106ad5086299e3e469f02dfd32eddf04ae Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 21 Apr 2016 14:51:37 +0200 Subject: MDEV-9580 SHOW GRANTS FOR fails use get_current_user() to distinguish user name without a hostname and a role name. move privilege checks inside mysql_show_grants() to remove duplicate get_current_user() calls --- mysql-test/r/grant5.result | 16 ++++++++++++++++ mysql-test/t/grant5.test | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/grant5.result b/mysql-test/r/grant5.result index 2df394c0432..d7f3b6812bb 100644 --- a/mysql-test/r/grant5.result +++ b/mysql-test/r/grant5.result @@ -1,2 +1,18 @@ SHOW GRANTS FOR root@invalid_host; ERROR 42000: There is no such grant defined for user 'root' on host 'invalid_host' +create user test; +create user foo; +create role foo; +grant foo to test; +set role foo; +show grants for test; +Grants for test@% +GRANT foo TO 'test'@'%' +GRANT USAGE ON *.* TO 'test'@'%' +show grants for foo; +Grants for foo +GRANT USAGE ON *.* TO 'foo' +show grants for foo@'%'; +ERROR 42000: Access denied for user 'test'@'%' to database 'mysql' +drop user test, foo; +drop role foo; diff --git a/mysql-test/t/grant5.test b/mysql-test/t/grant5.test index db953d97fb3..14f2fd65020 100644 --- a/mysql-test/t/grant5.test +++ b/mysql-test/t/grant5.test @@ -5,3 +5,21 @@ # --error ER_NONEXISTING_GRANT SHOW GRANTS FOR root@invalid_host; + +# +# MDEV-9580 SHOW GRANTS FOR fails +# +create user test; +create user foo; +create role foo; +grant foo to test; +--connect (conn_1, localhost, test,,) +set role foo; +show grants for test; # user +show grants for foo; # role +--error ER_DBACCESS_DENIED_ERROR +show grants for foo@'%'; # user +--connection default +drop user test, foo; +drop role foo; + -- cgit v1.2.1 From b233b15ccda8d8a1633e82113e5731cefce5eb84 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 22 Apr 2016 08:25:36 +0200 Subject: MDEV-9868 Altering a partitioned table comment does a full copy let handler::check_if_supported_inplace_alter() (that detects frm-only changes) to work for partitioned tables too. --- mysql-test/r/alter_table_online.result | 4 +++- mysql-test/t/alter_table_online.test | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/alter_table_online.result b/mysql-test/r/alter_table_online.result index db7319cadf1..7254fbec413 100644 --- a/mysql-test/r/alter_table_online.result +++ b/mysql-test/r/alter_table_online.result @@ -1,4 +1,3 @@ -drop table if exists t1,t2,t3; create table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b')); insert into t1 (a) values (1),(2),(3); alter online table t1 modify b int default 5; @@ -62,3 +61,6 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge alter online table t3 union=(t1,t2); ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. drop table t1,t2,t3; +create table t1 (i int) partition by hash(i) partitions 2; +alter online table t1 comment 'test'; +drop table t1; diff --git a/mysql-test/t/alter_table_online.test b/mysql-test/t/alter_table_online.test index a160abc8fe2..9ff2f766803 100644 --- a/mysql-test/t/alter_table_online.test +++ b/mysql-test/t/alter_table_online.test @@ -3,9 +3,7 @@ # --source include/have_innodb.inc ---disable_warnings -drop table if exists t1,t2,t3; ---enable_warnings +--source include/have_partition.inc # # Test of things that can be done online # @@ -101,3 +99,10 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge --error ER_ALTER_OPERATION_NOT_SUPPORTED alter online table t3 union=(t1,t2); drop table t1,t2,t3; + +# +# MDEV-9868 Altering a partitioned table comment does a full copy +# +create table t1 (i int) partition by hash(i) partitions 2; +alter online table t1 comment 'test'; +drop table t1; -- cgit v1.2.1 From 78989b67d1b41259a7ce646ca93485d604ba215b Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 22 Apr 2016 08:46:38 +0200 Subject: MDEV-9168 altering a column comment does a full copy add a test case --- mysql-test/r/alter_table_online.result | 9 +++++++++ mysql-test/t/alter_table_online.test | 15 +++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/alter_table_online.result b/mysql-test/r/alter_table_online.result index 7254fbec413..f416c53f42c 100644 --- a/mysql-test/r/alter_table_online.result +++ b/mysql-test/r/alter_table_online.result @@ -64,3 +64,12 @@ drop table t1,t2,t3; create table t1 (i int) partition by hash(i) partitions 2; alter online table t1 comment 'test'; drop table t1; +create table t1 (a int); +alter online table t1 modify a int comment 'test'; +drop table t1; +create table t1 (a int) engine=innodb; +alter online table t1 modify a int comment 'test'; +drop table t1; +create table t1 (a int) partition by hash(a) partitions 2; +alter online table t1 modify a int comment 'test'; +drop table t1; diff --git a/mysql-test/t/alter_table_online.test b/mysql-test/t/alter_table_online.test index 9ff2f766803..d9c2a2c4d4f 100644 --- a/mysql-test/t/alter_table_online.test +++ b/mysql-test/t/alter_table_online.test @@ -106,3 +106,18 @@ drop table t1,t2,t3; create table t1 (i int) partition by hash(i) partitions 2; alter online table t1 comment 'test'; drop table t1; + +# +# MDEV-9168 altering a column comment does a full copy +# +create table t1 (a int); +alter online table t1 modify a int comment 'test'; +drop table t1; + +create table t1 (a int) engine=innodb; +alter online table t1 modify a int comment 'test'; +drop table t1; + +create table t1 (a int) partition by hash(a) partitions 2; +alter online table t1 modify a int comment 'test'; +drop table t1; -- cgit v1.2.1 From 906f97d3108df8370489f1f5a2531d8a43d8ce1a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 22 Apr 2016 13:10:14 +0200 Subject: MDEV-8481 mysql-test - main.func_crypt fails if FIPS=1 disable the test when crypt(3) doesn't work --- mysql-test/include/have_crypt.inc | 9 +++++---- mysql-test/r/have_crypt.require | 2 -- 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 mysql-test/r/have_crypt.require (limited to 'mysql-test') diff --git a/mysql-test/include/have_crypt.inc b/mysql-test/include/have_crypt.inc index cbf0a7ac876..422f8922edc 100644 --- a/mysql-test/include/have_crypt.inc +++ b/mysql-test/include/have_crypt.inc @@ -1,4 +1,5 @@ --- require r/have_crypt.require -disable_query_log; -show variables like 'have_crypt'; -enable_query_log; +# encrypt('a') is NULL if crypt(3) is not available +# encrypt('a') is "*0" in fips mode +if (`select length(encrypt('a')) > 3 IS NOT TRUE`) { + skip No crypt(3); +} diff --git a/mysql-test/r/have_crypt.require b/mysql-test/r/have_crypt.require deleted file mode 100644 index 739fbb738f0..00000000000 --- a/mysql-test/r/have_crypt.require +++ /dev/null @@ -1,2 +0,0 @@ -Variable_name Value -have_crypt YES -- cgit v1.2.1 From 797cadce47ecacd9dff2ee4829786e0be3009748 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 22 Apr 2016 13:13:48 +0200 Subject: MDEV-8482 mysql-test - main.func_encrypt fails if FIPS=1 * check for openssl errors in DES_ENCRYPT/DES_DECRYPT * disable the test when DES doesn't work * also disable main.func_des_encrypt --- mysql-test/include/have_des.inc | 6 ++++++ mysql-test/t/func_des_encrypt.test | 2 +- mysql-test/t/func_encrypt.test | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 mysql-test/include/have_des.inc (limited to 'mysql-test') diff --git a/mysql-test/include/have_des.inc b/mysql-test/include/have_des.inc new file mode 100644 index 00000000000..5abdaf6e2aa --- /dev/null +++ b/mysql-test/include/have_des.inc @@ -0,0 +1,6 @@ +# in the FIPS mode, OpenSSL disables DES and other weak algorithms +source include/have_ssl_crypto_functs.inc; + +if (`select des_encrypt("a", "b") IS NULL`) { + skip DES is disabled (fips mode?); +} diff --git a/mysql-test/t/func_des_encrypt.test b/mysql-test/t/func_des_encrypt.test index e121aedab06..c9661b81cc0 100644 --- a/mysql-test/t/func_des_encrypt.test +++ b/mysql-test/t/func_des_encrypt.test @@ -1,4 +1,4 @@ --- source include/have_ssl_crypto_functs.inc +-- source include/have_des.inc # This test can't be in func_encrypt.test, because it requires # --des-key-file to not be set. diff --git a/mysql-test/t/func_encrypt.test b/mysql-test/t/func_encrypt.test index 18fb072966b..e24cb80f995 100644 --- a/mysql-test/t/func_encrypt.test +++ b/mysql-test/t/func_encrypt.test @@ -1,4 +1,4 @@ --- source include/have_ssl_crypto_functs.inc +-- source include/have_des.inc --disable_warnings drop table if exists t1; -- cgit v1.2.1 From 0ee919b86e214a79541f1e9a16b63ae8784b4790 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 22 Apr 2016 13:15:04 +0200 Subject: MDEV-8480 mysql-test - main.func_encrypt_ucs2 fails if FIPS=1 disable the test when DES doesn't work --- mysql-test/t/func_encrypt_ucs2.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/t/func_encrypt_ucs2.test b/mysql-test/t/func_encrypt_ucs2.test index 8b4cd44d354..1242c3b9e6a 100644 --- a/mysql-test/t/func_encrypt_ucs2.test +++ b/mysql-test/t/func_encrypt_ucs2.test @@ -1,4 +1,4 @@ --- source include/have_ssl_crypto_functs.inc +-- source include/have_des.inc -- source include/have_ucs2.inc --echo # -- cgit v1.2.1 From 7b58fd5ef0c1ecdc7c6d6d3347110620e67313c2 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 23 Apr 2016 18:49:19 +0200 Subject: tests -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci This fixes: MDEV-7693 MariaDB - mysql-test - SUITE:funcs_1 - funcs_1.is_tables_mysql is failing on TABLE_COLLATION /DATABASE_COLLATION MDEV-8487 mysql-test - main.information_schema 'xtradb' fails MDEV-8486 mysql-test - main.bootstrap fails --- mysql-test/mysql-test-run.pl | 2 +- mysql-test/r/mysqld--help.result | 2 -- mysql-test/t/bootstrap.test | 2 +- mysql-test/t/mysqld--help.test | 1 + 4 files changed, 3 insertions(+), 4 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e90e464d118..81001174172 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3638,7 +3638,7 @@ sub mysql_install_db { # Create mtr database mtr_tofile($bootstrap_sql_file, - "CREATE DATABASE mtr;\n"); + "CREATE DATABASE mtr CHARSET=latin1;\n"); # Add help tables and data for warning detection and supression mtr_tofile($bootstrap_sql_file, diff --git a/mysql-test/r/mysqld--help.result b/mysql-test/r/mysqld--help.result index 65045416a5b..e5a5f61cf83 100644 --- a/mysql-test/r/mysqld--help.result +++ b/mysql-test/r/mysqld--help.result @@ -1079,10 +1079,8 @@ binlog-stmt-cache-size 32768 bulk-insert-buffer-size 8388608 character-set-client-handshake TRUE character-set-filesystem binary -character-set-server latin1 character-sets-dir MYSQL_CHARSETSDIR/ chroot (No default value) -collation-server latin1_swedish_ci completion-type NO_CHAIN concurrent-insert AUTO console FALSE diff --git a/mysql-test/t/bootstrap.test b/mysql-test/t/bootstrap.test index 97376eb7412..e2d21c0d990 100644 --- a/mysql-test/t/bootstrap.test +++ b/mysql-test/t/bootstrap.test @@ -79,7 +79,7 @@ EOF # --write_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql use test; -create table t1(a int) engine=example; +create table t1(a int) engine=example charset=latin1; EOF --exec $MYSQLD_BOOTSTRAP_CMD --plugin-dir=$PLUGIN_DIR < $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 --remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql diff --git a/mysql-test/t/mysqld--help.test b/mysql-test/t/mysqld--help.test index fabc2e21f18..cee9337ccc3 100644 --- a/mysql-test/t/mysqld--help.test +++ b/mysql-test/t/mysqld--help.test @@ -22,6 +22,7 @@ perl; log-slow-queries pid-file slow-query-log-file log-basename datadir slave-load-tmpdir tmpdir socket thread-pool-size large-files-support lower-case-file-system system-time-zone + collation-server character-set-server version.*/; # Plugins which may or may not be there: -- cgit v1.2.1 From 2b7573ecdda4e542fc65e5d0992f5c05474975c0 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Sun, 24 Apr 2016 13:36:51 +0400 Subject: MDEV-9975 - main.partition_innodb_plugin fails sporadically Fixed wait condition to wait for InnoDB to actually acquire row locks instead of waiting for thread to enter "Searching rows for update" state (which happens earlier). Also use default wait timeout, 2 seconds can be too few for threads to enter appropriate state. --- mysql-test/t/partition_innodb_plugin.test | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/t/partition_innodb_plugin.test b/mysql-test/t/partition_innodb_plugin.test index 4693288a4dd..a951945a87c 100644 --- a/mysql-test/t/partition_innodb_plugin.test +++ b/mysql-test/t/partition_innodb_plugin.test @@ -124,12 +124,8 @@ SEND; UPDATE `t``\""e` SET a = 12 WHERE a = 0; --echo # default connection connection default; -let $wait_timeout= 2; -let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST -WHERE ID = $id_1 AND STATE = 'Searching rows for update'; +let $wait_condition= SELECT COUNT(*)=2 FROM INFORMATION_SCHEMA.INNODB_LOCKS; --source include/wait_condition.inc -#--echo # tested wait condition $wait_condition_reps times -# INNODB_LOCKS only exists in innodb_plugin --sorted_result SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS GROUP BY lock_table; -- cgit v1.2.1 From f6cc7f1bdc56e57cf441f99f2c88ca92aeeebc11 Mon Sep 17 00:00:00 2001 From: Monty Date: Mon, 25 Apr 2016 15:37:24 +0300 Subject: Fixed failing test cases and compiler warnings - Fixed wait condition in kill_processlist-6619 - Updated Ssl_chiper for openssl tests - Added supression for valgrinds when using libcrypto - Fixed wrong argument to pthread_mutex in server_audit.c when compiling with debug - Adding missing debug_sync_update() to debug_sync.h - Added initializers to some variables and fixed error handling in jsonudf.cpp - Fixed cluster_filter_unpack_varchar which doesn't have a stable index type. - Updated compiler_warnings.supp --- mysql-test/t/kill_processlist-6619.test | 9 ++++++++- mysql-test/t/openssl_1.test | 4 ++-- mysql-test/t/openssl_6975.test | 1 + mysql-test/t/ssl.test | 4 ++-- mysql-test/t/ssl_compress.test | 4 ++-- mysql-test/t/ssl_timeout.test | 2 +- mysql-test/valgrind.supp | 7 +++++++ 7 files changed, 23 insertions(+), 8 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/t/kill_processlist-6619.test b/mysql-test/t/kill_processlist-6619.test index 95af83be56d..d599d204dda 100644 --- a/mysql-test/t/kill_processlist-6619.test +++ b/mysql-test/t/kill_processlist-6619.test @@ -1,5 +1,5 @@ # -# MDEV-6619 SHOW PROCESSLIST returns empty result set after KILL QUERY +# 6619 SHOW PROCESSLIST returns empty result set after KILL QUERY # --source include/not_embedded.inc --source include/have_debug_sync.inc @@ -23,5 +23,12 @@ SET DEBUG_SYNC='now SIGNAL go'; --error ER_QUERY_INTERRUPTED reap; SET DEBUG_SYNC='reset'; + +# Wait until default connection has reset query string +let $wait_condition= + SELECT COUNT(*) = 1 from information_schema.processlist + WHERE info is NULL; +--source include/wait_condition.inc + --replace_column 1 # 3 # 6 # 7 # SHOW PROCESSLIST; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index e36f106a5be..4578a05be36 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -132,7 +132,7 @@ drop table t1; # verification of servers certificate by setting both ca certificate # and ca path to NULL # ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA --exec $MYSQL --ssl --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1 --echo End of 5.0 tests @@ -257,7 +257,7 @@ select 'is still running; no cipher request crashed the server' as result from d GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509; FLUSH PRIVILEGES; connect(con1,localhost,bug42158,,,,,SSL); ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; disconnect con1; connection default; diff --git a/mysql-test/t/openssl_6975.test b/mysql-test/t/openssl_6975.test index bc6397c5c28..89e6983cf47 100644 --- a/mysql-test/t/openssl_6975.test +++ b/mysql-test/t/openssl_6975.test @@ -15,6 +15,7 @@ let $mysql=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$ disable_abort_on_error; echo TLS1.2 ciphers: user is ok with any cipher; exec $mysql --ssl-cipher=AES128-SHA256; +--replace_result DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-GCM-SHA384 exec $mysql --ssl-cipher=TLSv1.2; echo TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA; exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA256; diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test index 0d14ad82692..21733f7e594 100644 --- a/mysql-test/t/ssl.test +++ b/mysql-test/t/ssl.test @@ -11,7 +11,7 @@ connect (ssl_con,localhost,root,,,,,SSL); # Check ssl turned on ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; # Check ssl expiration @@ -22,7 +22,7 @@ SHOW STATUS LIKE 'Ssl_server_not_after'; -- source include/common-tests.inc # Check ssl turned on ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; # diff --git a/mysql-test/t/ssl_compress.test b/mysql-test/t/ssl_compress.test index 5e45e3824a2..28f3453c23e 100644 --- a/mysql-test/t/ssl_compress.test +++ b/mysql-test/t/ssl_compress.test @@ -11,7 +11,7 @@ connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS); # Check ssl turned on ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; # Check compression turned on @@ -21,7 +21,7 @@ SHOW STATUS LIKE 'Compression'; -- source include/common-tests.inc # Check ssl turned on ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; # Check compression turned on diff --git a/mysql-test/t/ssl_timeout.test b/mysql-test/t/ssl_timeout.test index 0d96b3f6601..806b928aca0 100644 --- a/mysql-test/t/ssl_timeout.test +++ b/mysql-test/t/ssl_timeout.test @@ -7,7 +7,7 @@ connect (ssl_con,localhost,root,,,,,SSL read_timeout=5); --echo # Check ssl turned on ---replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA SHOW STATUS LIKE 'Ssl_cipher'; # --error CR_SERVER_LOST diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index e8eb47eb1cb..d83bb1d206c 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -1158,6 +1158,13 @@ fun:SSL_library_init } +{ + libcrypto 2.2.1 leak + Memcheck:Leak + fun:malloc + ... + fun:ERR_get_state +} { Problem with udf and libresolve -- cgit v1.2.1 From a98ecc2aafcbc08f27a2f7faba872e7a0d25fee2 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 23 Apr 2016 12:19:40 +0200 Subject: support SEARCH_RANGE in search_pattern_in_file.inc Backport a part of commit 439f75f Author: Kristian Nielsen Date: Mon Jun 30 13:59:21 2014 +0200 Fix test failures in rpl.rpl_checksum and rpl.rpl_gtid_errorlog. --- mysql-test/include/search_pattern_in_file.inc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/include/search_pattern_in_file.inc b/mysql-test/include/search_pattern_in_file.inc index c047b5bc499..0d09cdcd36e 100644 --- a/mysql-test/include/search_pattern_in_file.inc +++ b/mysql-test/include/search_pattern_in_file.inc @@ -10,6 +10,10 @@ # The environment variables SEARCH_FILE and SEARCH_PATTERN must be set # before sourcing this routine. # +# Optionally, SEARCH_RANGE can be set to the max number of bytes of the file +# to search. If negative, it will search that many bytes at the end of the +# file. The default is to search only the first 50000 bytes of the file. +# # In case of # - SEARCH_FILE and/or SEARCH_PATTERN is not set # - SEARCH_FILE cannot be opened @@ -38,6 +42,7 @@ # --error 0,1 # --remove_file $error_log # let SEARCH_FILE= $error_log; +# let SEARCH_RANGE= -50000; # # Stop the server # let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; # --exec echo "wait" > $restart_file @@ -57,8 +62,18 @@ perl; use strict; my $search_file= $ENV{'SEARCH_FILE'} or die "SEARCH_FILE not set"; my $search_pattern= $ENV{'SEARCH_PATTERN'} or die "SEARCH_PATTERN not set"; + my $search_range= $ENV{'SEARCH_RANGE'}; + my $file_content; + $search_range= 50000 unless $search_range =~ /-?[0-9]+/; open(FILE, "$search_file") or die("Unable to open '$search_file': $!\n"); - read(FILE, my $file_content, 50000, 0); + if ($search_range >= 0) { + read(FILE, $file_content, $search_range, 0); + } else { + my $size= -s $search_file; + $search_range = -$size if $size > -$search_range; + seek(FILE, $search_range, 2); + read(FILE, $file_content, -$search_range, 0); + } close(FILE); if ( not $file_content =~ m{$search_pattern} ) { die("# ERROR: The file '$search_file' does not contain the expected pattern $search_pattern\n->$file_content<-\n"); -- cgit v1.2.1 From 22204807317c467b2f09dd0dcd13898a48501b10 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 25 Apr 2016 18:59:41 +0200 Subject: MDEV-7775 Wrong error message (Unknown error) when idle sessions are killed after wait_timeout restore the error message that was removed by mistake in ec38c1bbd709 --- mysql-test/r/wait_timeout_not_windows.result | 3 +++ mysql-test/t/wait_timeout_not_windows.test | 15 +++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 mysql-test/r/wait_timeout_not_windows.result create mode 100644 mysql-test/t/wait_timeout_not_windows.test (limited to 'mysql-test') diff --git a/mysql-test/r/wait_timeout_not_windows.result b/mysql-test/r/wait_timeout_not_windows.result new file mode 100644 index 00000000000..df70aa99221 --- /dev/null +++ b/mysql-test/r/wait_timeout_not_windows.result @@ -0,0 +1,3 @@ +set global log_warnings=2; +set @@wait_timeout=1; +set global log_warnings=@@log_warnings; diff --git a/mysql-test/t/wait_timeout_not_windows.test b/mysql-test/t/wait_timeout_not_windows.test new file mode 100644 index 00000000000..43ba48e4c43 --- /dev/null +++ b/mysql-test/t/wait_timeout_not_windows.test @@ -0,0 +1,15 @@ +source include/not_windows.inc; + +# +# MDEV-7775 Wrong error message (Unknown error) when idle sessions are killed after wait_timeout +# +set global log_warnings=2; +connect (foo,localhost,root); +set @@wait_timeout=1; +sleep 2; +connection default; +let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_RANGE= -50; +let SEARCH_PATTERN= Aborted.*Got timeout reading communication packets; +source include/search_pattern_in_file.inc; +set global log_warnings=@@log_warnings; -- cgit v1.2.1 From 7f5ceb77689d4858875bfae7c4f2abc11534b7f1 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 26 Apr 2016 11:49:35 +0200 Subject: disable main.wait_timeout_not_windows for embedded --- mysql-test/t/wait_timeout_not_windows.test | 1 + 1 file changed, 1 insertion(+) (limited to 'mysql-test') diff --git a/mysql-test/t/wait_timeout_not_windows.test b/mysql-test/t/wait_timeout_not_windows.test index 43ba48e4c43..de4904fada2 100644 --- a/mysql-test/t/wait_timeout_not_windows.test +++ b/mysql-test/t/wait_timeout_not_windows.test @@ -1,3 +1,4 @@ +source include/not_embedded.inc; source include/not_windows.inc; # -- cgit v1.2.1 From 44554d611194e2ac02e5beaf4b88ffe5a349ebb4 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Tue, 26 Apr 2016 14:37:19 +0400 Subject: MDEV-9605 mysqlbinlog does not accept ssl-ca option as expected. Added SSL support to the mysqlbinlog. --- mysql-test/r/openssl_1.result | 9 +++++++++ mysql-test/t/openssl_1.test | 7 +++++++ 2 files changed, 16 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index c5dd1500110..dd78b1967c4 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -207,3 +207,12 @@ Variable_name Value Ssl_cipher DHE-RSA-AES256-SHA DROP USER bug42158@localhost; End of 5.1 tests +/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; +/*!40019 SET @@session.max_insert_delayed_threads=0*/; +/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; +DELIMITER /*!*/; +DELIMITER ; +# End of log file +ROLLBACK /* added by mysqlbinlog */; +/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; +/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 4578a05be36..91a8cc57b1b 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -265,5 +265,12 @@ DROP USER bug42158@localhost; --echo End of 5.1 tests +# +# MDEV-9605 mysqlbinlog does not accept ssl-ca option as expected. +# + +--error 1 +--exec $MYSQL_BINLOG --read-from-remote-server --ssl-ca --user=root --host=localhost nobinlog.111111 + # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc -- cgit v1.2.1 From 29868de2fff62c3ebd8af5cf533d3d224da1b332 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 26 Apr 2016 12:58:14 +0200 Subject: MDEV-9986 Full-text search of the utf8mb4 column causes crash take into account that agg_arg_charsets_for_comparison() can replace Item_field's with Item_func_conv_charset --- mysql-test/r/fulltext3.result | 12 ++++++++++++ mysql-test/t/fulltext3.test | 15 +++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/fulltext3.result b/mysql-test/r/fulltext3.result index 4ec48369ad1..c0b871cd5a7 100644 --- a/mysql-test/r/fulltext3.result +++ b/mysql-test/r/fulltext3.result @@ -15,3 +15,15 @@ CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci, FULLTEXT(a)); INSERT INTO t1 VALUES(0xA3C2); DROP TABLE t1; +create table t1 ( +id varchar(255), +business_name text null collate utf8mb4_unicode_ci, +street_address text, +fulltext index ft (business_name), +fulltext index ft2 (street_address) +); +select * from t1 where match (business_name, street_address) against ('some business name and address here'); +ERROR HY000: Can't find FULLTEXT index matching the column list +select * from t1 where match (business_name, street_address) against ('some business name and address here' in boolean mode); +id business_name street_address +drop table t1; diff --git a/mysql-test/t/fulltext3.test b/mysql-test/t/fulltext3.test index 1b6a07c540f..66f940b495e 100644 --- a/mysql-test/t/fulltext3.test +++ b/mysql-test/t/fulltext3.test @@ -32,3 +32,18 @@ INSERT INTO t1 VALUES(0xA3C2); DROP TABLE t1; # End of 5.1 tests + +# +# MDEV-9986 Full-text search of the utf8mb4 column causes crash +# +create table t1 ( + id varchar(255), + business_name text null collate utf8mb4_unicode_ci, + street_address text, + fulltext index ft (business_name), + fulltext index ft2 (street_address) +); +--error ER_FT_MATCHING_KEY_NOT_FOUND +select * from t1 where match (business_name, street_address) against ('some business name and address here'); +select * from t1 where match (business_name, street_address) against ('some business name and address here' in boolean mode); +drop table t1; -- cgit v1.2.1 From 72d23896d6590de7af3566e1f74f8dd1134f11f3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 26 Apr 2016 19:06:20 +0200 Subject: 5.6.30 --- mysql-test/suite/perfschema/r/sizing_low.result | 1 + mysql-test/suite/perfschema/r/table_name.result | 156 ++++++++++++++++++++++ mysql-test/suite/perfschema/t/sizing_low.test | 1 + mysql-test/suite/perfschema/t/table_name.test | 164 ++++++++++++++++++++++++ 4 files changed, 322 insertions(+) create mode 100644 mysql-test/suite/perfschema/r/table_name.result create mode 100644 mysql-test/suite/perfschema/t/table_name.test (limited to 'mysql-test') diff --git a/mysql-test/suite/perfschema/r/sizing_low.result b/mysql-test/suite/perfschema/r/sizing_low.result index dce5a994099..a698f55aa07 100644 --- a/mysql-test/suite/perfschema/r/sizing_low.result +++ b/mysql-test/suite/perfschema/r/sizing_low.result @@ -67,3 +67,4 @@ Performance_schema_table_instances_lost 0 Performance_schema_thread_classes_lost 0 Performance_schema_thread_instances_lost 0 Performance_schema_users_lost 0 +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); diff --git a/mysql-test/suite/perfschema/r/table_name.result b/mysql-test/suite/perfschema/r/table_name.result new file mode 100644 index 00000000000..d6369ffc79e --- /dev/null +++ b/mysql-test/suite/perfschema/r/table_name.result @@ -0,0 +1,156 @@ + +# +# TEST 1: Normal tables prefixed with "#sql" and "sql". +# +USE test; +CREATE TABLE `#sql_1` (a int, b text); +INSERT INTO `#sql_1` VALUES(1,'one'); + +CREATE TABLE `sql_1` (a int, b text); +INSERT INTO `sql_1` VALUES(1,'one'); + +# Verify that the tables are treated as normal tables . + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name +TABLE test #sql_1 +TABLE test sql_1 + +# Drop the tables, verify that the table objects are removed. + +DROP TABLE `#sql_1`; +DROP TABLE `sql_1`; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 2: Temporary tables, no special prefix. +# +CREATE TEMPORARY TABLE sql_temp2_myisam (a int, b text) ENGINE=MYISAM; +INSERT INTO sql_temp2_myisam VALUES(1,'one'); + +CREATE TEMPORARY TABLE sql_temp2_innodb (a int, b text) ENGINE=INNODB; +INSERT INTO sql_temp2_innodb VALUES(1,'one'); + +# Confirm that the temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the tables, verify that the table objects are not created. + +DROP TABLE sql_temp2_myisam; +DROP TABLE sql_temp2_innodb; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 3: Temporary tables with the "#sql" prefix. +# +CREATE TEMPORARY TABLE `#sql_temp3_myisam` (a int, b text) ENGINE=MYISAM; +CHECK TABLE `#sql_temp3_myisam`; +Table Op Msg_type Msg_text +test.#sql_temp3_myisam check status OK +INSERT INTO `#sql_temp3_myisam` VALUES(1,'one'); + +CREATE TEMPORARY TABLE `#sql_temp3_innodb` (a int, b text) ENGINE=INNODB; +CHECK TABLE `#sql_temp3_innodb`; +Table Op Msg_type Msg_text +test.#sql_temp3_innodb check status OK +INSERT INTO `#sql_temp3_innodb` VALUES(1,'one'); + +# Confirm that the temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the temporary tables. + +DROP TABLE `#sql_temp3_myisam`; +DROP TABLE `#sql_temp3_innodb`; + +# Confirm that the temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 4: Special case: MyISAM temporary tables are recreated as non-temporary +# when they are truncated. +# +CREATE TEMPORARY TABLE `sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `sql_temp4_myisam` VALUES(1,'one'); + +CREATE TEMPORARY TABLE `#sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `#sql_temp4_myisam` VALUES(1,'one'); + +# Confirm that the MyISAM temporary tables are ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary. + +TRUNCATE TABLE `sql_temp4_myisam`; +TRUNCATE TABLE `#sql_temp4_myisam`; + +# Confirm that the recreated MyISAM tables are still regarded as temporary and ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the recreated MyISAM tables; + +DROP TABLE `sql_temp4_myisam`; +DROP TABLE `#sql_temp4_myisam`; + +# Confirm that the recreated temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# +# TEST 5: Generate temporary tables with ALTER MyISAM table. +# +USE test; +CREATE TABLE t1 (a int) ENGINE=MYISAM; +INSERT INTO t1 VALUES (1), (2), (3); +ALTER TABLE t1 ADD COLUMN (b int); + +# Confirm that the recreated temporary tables are still ignored. + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name + +# Drop the MyISAM table + +DROP TABLE t1; + +# Confirm that no tables remain; + +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +object_type object_schema object_name diff --git a/mysql-test/suite/perfschema/t/sizing_low.test b/mysql-test/suite/perfschema/t/sizing_low.test index 4d02d41aecd..56446fd6973 100644 --- a/mysql-test/suite/perfschema/t/sizing_low.test +++ b/mysql-test/suite/perfschema/t/sizing_low.test @@ -7,3 +7,4 @@ --source ../include/sizing_auto.inc +CALL mtr.add_suppression("innodb_open_files should not be greater than the open_files_limit."); diff --git a/mysql-test/suite/perfschema/t/table_name.test b/mysql-test/suite/perfschema/t/table_name.test new file mode 100644 index 00000000000..00df678a392 --- /dev/null +++ b/mysql-test/suite/perfschema/t/table_name.test @@ -0,0 +1,164 @@ +# +# Performance Schema +# +# Verify that the Performance Schema correctly identifies normal and temporary +# tables with non-standard names. + +# The server uses the table name prefix "#sql" for temporary and intermediate +# tables, however user-defined tables having the "#sql" prefix are also permitted. +# Independent of the table name, temporary or intermediate tables always have the +# "#sql" prefix in the filename. (For non-temporary tables starting with "#", +# the "#" is encoded to @0023 in the filename.) +# +# Given the ambiguity with temporary table names, the Performance Schema identifies +# temporary tables tables either by the table category or by the filename. +# +--source include/have_perfschema.inc +--source include/not_embedded.inc + +--echo +--echo # +--echo # TEST 1: Normal tables prefixed with "#sql" and "sql". +--echo # +USE test; +CREATE TABLE `#sql_1` (a int, b text); +# INSERT forces path through get_table_share() +INSERT INTO `#sql_1` VALUES(1,'one'); +--echo +CREATE TABLE `sql_1` (a int, b text); +INSERT INTO `sql_1` VALUES(1,'one'); +--echo +--echo # Verify that the tables are treated as normal tables . +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the tables, verify that the table objects are removed. +--echo +DROP TABLE `#sql_1`; +DROP TABLE `sql_1`; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 2: Temporary tables, no special prefix. +--echo # +CREATE TEMPORARY TABLE sql_temp2_myisam (a int, b text) ENGINE=MYISAM; +INSERT INTO sql_temp2_myisam VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE sql_temp2_innodb (a int, b text) ENGINE=INNODB; +INSERT INTO sql_temp2_innodb VALUES(1,'one'); +--echo +--echo # Confirm that the temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the tables, verify that the table objects are not created. +--echo +DROP TABLE sql_temp2_myisam; +DROP TABLE sql_temp2_innodb; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 3: Temporary tables with the "#sql" prefix. +--echo # +CREATE TEMPORARY TABLE `#sql_temp3_myisam` (a int, b text) ENGINE=MYISAM; +CHECK TABLE `#sql_temp3_myisam`; +INSERT INTO `#sql_temp3_myisam` VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE `#sql_temp3_innodb` (a int, b text) ENGINE=INNODB; +CHECK TABLE `#sql_temp3_innodb`; +INSERT INTO `#sql_temp3_innodb` VALUES(1,'one'); +--echo +--echo # Confirm that the temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the temporary tables. +--echo +DROP TABLE `#sql_temp3_myisam`; +DROP TABLE `#sql_temp3_innodb`; +--echo +--echo # Confirm that the temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 4: Special case: MyISAM temporary tables are recreated as non-temporary +--echo # when they are truncated. +--echo # +CREATE TEMPORARY TABLE `sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `sql_temp4_myisam` VALUES(1,'one'); +--echo +CREATE TEMPORARY TABLE `#sql_temp4_myisam` (a int, b text) ENGINE=MYISAM; +INSERT INTO `#sql_temp4_myisam` VALUES(1,'one'); +--echo +--echo # Confirm that the MyISAM temporary tables are ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Truncate the MyISAM temporary tables, forcing them to be recreated as non-temporary. +--echo +TRUNCATE TABLE `sql_temp4_myisam`; +TRUNCATE TABLE `#sql_temp4_myisam`; +--echo +--echo # Confirm that the recreated MyISAM tables are still regarded as temporary and ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the recreated MyISAM tables; +--echo +DROP TABLE `sql_temp4_myisam`; +DROP TABLE `#sql_temp4_myisam`; +--echo +--echo # Confirm that the recreated temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; + +--echo +--echo # +--echo # TEST 5: Generate temporary tables with ALTER MyISAM table. +--echo # +USE test; +CREATE TABLE t1 (a int) ENGINE=MYISAM; +INSERT INTO t1 VALUES (1), (2), (3); +# Force a path throug mysql_alter_table() and ha_create_table(). +ALTER TABLE t1 ADD COLUMN (b int); +--echo +--echo # Confirm that the recreated temporary tables are still ignored. +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; +--echo +--echo # Drop the MyISAM table +--echo +DROP TABLE t1; + +--echo +--echo # Confirm that no tables remain; +--echo +SELECT object_type, object_schema, object_name +FROM performance_schema.objects_summary_global_by_type +WHERE object_schema="test"; -- cgit v1.2.1 From cf225145912508644fe00100afbc957aeff8aa87 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 27 Apr 2016 08:34:35 +0200 Subject: after-merge fixes for failures in buildbot --- mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt | 1 + 1 file changed, 1 insertion(+) create mode 100644 mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt b/mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt new file mode 100644 index 00000000000..c788dc76ac7 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt @@ -0,0 +1 @@ +--loose-innodb-buffer-pool-size=20M -- cgit v1.2.1 From 94cd0f6c9b3b04db67501ef29d470f32527ceda2 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Mon, 2 May 2016 12:58:57 +0400 Subject: MDEV-9898 SET ROLE NONE can crash mysqld. The check_user_can_set_role() used find_user_exact() to get the permissions for the SET ROLE NONE command. Which returned NULL too often, for instance when user authenticated as 'user'@'%'. Now we use find_user_wild() instead. --- mysql-test/suite/roles/set_role-simple.result | 9 +++++++++ mysql-test/suite/roles/set_role-simple.test | 15 +++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/roles/set_role-simple.result b/mysql-test/suite/roles/set_role-simple.result index 3ce6d5c054b..4fb705368b7 100644 --- a/mysql-test/suite/roles/set_role-simple.result +++ b/mysql-test/suite/roles/set_role-simple.result @@ -45,3 +45,12 @@ delete from mysql.user where user='test_role1'; delete from mysql.roles_mapping where Role='test_role1'; flush privileges; drop user 'test_user'@'localhost'; +create user user1; +select current_user; +current_user +user1@% +show grants; +Grants for user1@% +GRANT USAGE ON *.* TO 'user1'@'%' +set role none; +drop user user1; diff --git a/mysql-test/suite/roles/set_role-simple.test b/mysql-test/suite/roles/set_role-simple.test index 152a1d0eb25..ed884fa2407 100644 --- a/mysql-test/suite/roles/set_role-simple.test +++ b/mysql-test/suite/roles/set_role-simple.test @@ -37,3 +37,18 @@ delete from mysql.user where user='test_role1'; delete from mysql.roles_mapping where Role='test_role1'; flush privileges; drop user 'test_user'@'localhost'; + +# +# MDEV-9898 SET ROLE NONE can crash mysqld. +# + +create user user1; + +--connect (con1,localhost,user1,,) +select current_user; +show grants; +set role none; + +connection default; +drop user user1; + -- cgit v1.2.1 From fba385e3b19149a4ec521d85b9db7717d22e3952 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Sun, 21 Feb 2016 22:00:58 +0100 Subject: MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops with UNION in ALL subquery Do not mark subquery as inexpensive when it is not optimized. --- mysql-test/r/derived_view.result | 6 +++--- mysql-test/r/subselect.result | 12 ++++++++++++ mysql-test/r/subselect_no_exists_to_in.result | 12 ++++++++++++ mysql-test/r/subselect_no_mat.result | 12 ++++++++++++ mysql-test/r/subselect_no_opts.result | 12 ++++++++++++ mysql-test/r/subselect_no_scache.result | 12 ++++++++++++ mysql-test/r/subselect_no_semijoin.result | 12 ++++++++++++ mysql-test/r/type_year.result | 1 + mysql-test/t/subselect.test | 11 +++++++++++ 9 files changed, 87 insertions(+), 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/derived_view.result b/mysql-test/r/derived_view.result index 639942f0da9..5783247b673 100644 --- a/mysql-test/r/derived_view.result +++ b/mysql-test/r/derived_view.result @@ -1101,7 +1101,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t3 system NULL NULL NULL NULL 1 100.00 2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: -Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where (not(<6,5>(((6,5),(select 7,5 having (trigcond((((6) = 7) or isnull(7))) and trigcond((((5) = 5) or isnull(5))) and trigcond((7)) and trigcond((5)))))))) +Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where 1 SELECT t.a,t.b FROM t3 RIGHT JOIN ((SELECT * FROM t1) AS t, t2) ON t2.b != 0 WHERE (t.a,t.b) NOT IN (SELECT 7, 5); a b @@ -1115,7 +1115,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t3 system NULL NULL NULL NULL 1 100.00 3 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: -Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where (not(<6,5>(((6,5),(select 7,5 having (trigcond((((6) = 7) or isnull(7))) and trigcond((((5) = 5) or isnull(5))) and trigcond((7)) and trigcond((5)))))))) +Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where 1 SELECT t.a,t.b FROM t3 RIGHT JOIN (v1 AS t, t2) ON t2.b != 0 WHERE (t.a,t.b) NOT IN (SELECT 7, 5); a b @@ -1129,7 +1129,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t3 system NULL NULL NULL NULL 1 100.00 2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: -Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where (not(<6,5>(((6,5),(select 7,5 having (trigcond((((6) = 7) or isnull(7))) and trigcond((((5) = 5) or isnull(5))) and trigcond((7)) and trigcond((5)))))))) +Note 1003 select 6 AS `a`,5 AS `b` from `test`.`t3` where 1 DROP VIEW v1; DROP TABLE t1,t2,t3; # diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index ac874f9943c..6a531997d79 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -7147,3 +7147,15 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; diff --git a/mysql-test/r/subselect_no_exists_to_in.result b/mysql-test/r/subselect_no_exists_to_in.result index 6a5bec062c7..aa6843409c0 100644 --- a/mysql-test/r/subselect_no_exists_to_in.result +++ b/mysql-test/r/subselect_no_exists_to_in.result @@ -7147,6 +7147,18 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; set optimizer_switch=default; select @@optimizer_switch like '%exists_to_in=off%'; @@optimizer_switch like '%exists_to_in=off%' diff --git a/mysql-test/r/subselect_no_mat.result b/mysql-test/r/subselect_no_mat.result index a574319b175..754aec1db20 100644 --- a/mysql-test/r/subselect_no_mat.result +++ b/mysql-test/r/subselect_no_mat.result @@ -7140,6 +7140,18 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; set optimizer_switch=default; select @@optimizer_switch like '%materialization=on%'; @@optimizer_switch like '%materialization=on%' diff --git a/mysql-test/r/subselect_no_opts.result b/mysql-test/r/subselect_no_opts.result index 62eecd568f0..e05dd4d140d 100644 --- a/mysql-test/r/subselect_no_opts.result +++ b/mysql-test/r/subselect_no_opts.result @@ -7138,4 +7138,16 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; set @optimizer_switch_for_subselect_test=null; diff --git a/mysql-test/r/subselect_no_scache.result b/mysql-test/r/subselect_no_scache.result index 174c791489c..71ade62b423 100644 --- a/mysql-test/r/subselect_no_scache.result +++ b/mysql-test/r/subselect_no_scache.result @@ -7153,6 +7153,18 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; set optimizer_switch=default; select @@optimizer_switch like '%subquery_cache=on%'; @@optimizer_switch like '%subquery_cache=on%' diff --git a/mysql-test/r/subselect_no_semijoin.result b/mysql-test/r/subselect_no_semijoin.result index e0d62ac6d14..43d191b1225 100644 --- a/mysql-test/r/subselect_no_semijoin.result +++ b/mysql-test/r/subselect_no_semijoin.result @@ -7138,5 +7138,17 @@ sq NULL drop view v2; drop table t1,t2; +# +# MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +# with UNION in ALL subquery +# +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +f +foo +drop table t1; +SET NAMES default; set @optimizer_switch_for_subselect_test=null; set @join_cache_level_for_subselect_test=NULL; diff --git a/mysql-test/r/type_year.result b/mysql-test/r/type_year.result index 842a16e3b4a..204cec2cc66 100644 --- a/mysql-test/r/type_year.result +++ b/mysql-test/r/type_year.result @@ -387,6 +387,7 @@ a 00 select a from t1 where a=(select 2000 from dual where 1); a +00 select a from t1 where a=y2k(); a 00 diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 7a7c01e78bd..3599b523d91 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -6000,3 +6000,14 @@ SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; drop view v2; drop table t1,t2; + +--echo # +--echo # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops +--echo # with UNION in ALL subquery +--echo # +SET NAMES utf8; +CREATE TABLE t1 (f VARCHAR(8)) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('foo'); +SELECT f FROM t1 WHERE f > ALL ( SELECT 'bar' UNION SELECT 'baz' ); +drop table t1; +SET NAMES default; -- cgit v1.2.1 From 404056563e75786908aa9f6036fad6efe4ba6869 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 4 May 2016 20:28:20 +0200 Subject: fixes for buildbot --- mysql-test/r/mysqld--help,win.rdiff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/r/mysqld--help,win.rdiff b/mysql-test/r/mysqld--help,win.rdiff index a09b5603869..85e65bc2441 100644 --- a/mysql-test/r/mysqld--help,win.rdiff +++ b/mysql-test/r/mysqld--help,win.rdiff @@ -126,7 +126,7 @@ table-definition-cache 400 -table-open-cache 431 +table-open-cache 2000 - tc-heuristic-recover COMMIT + tc-heuristic-recover OFF thread-cache-size 0 -thread-pool-idle-timeout 60 thread-pool-max-threads 1000 -- cgit v1.2.1 From 4db2ebb1fe8454ea0f2a70d740fc2d9d9b408f0d Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 30 Apr 2016 09:09:10 +0200 Subject: MDEV-9940 CREATE ROLE blocked by password validation plugin --- mysql-test/suite/plugins/r/simple_password_check.result | 2 ++ mysql-test/suite/plugins/t/simple_password_check.test | 6 ++++++ 2 files changed, 8 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/plugins/r/simple_password_check.result b/mysql-test/suite/plugins/r/simple_password_check.result index a0b43a94137..c21298cea33 100644 --- a/mysql-test/suite/plugins/r/simple_password_check.result +++ b/mysql-test/suite/plugins/r/simple_password_check.result @@ -147,6 +147,8 @@ grant select on *.* to foo2 identified with mysql_old_password using '2222222222 drop user foo2; set global strict_password_validation=1; drop user foo1; +create role r1; +drop role r1; uninstall plugin simple_password_check; create user foo1 identified by 'pwd'; drop user foo1; diff --git a/mysql-test/suite/plugins/t/simple_password_check.test b/mysql-test/suite/plugins/t/simple_password_check.test index 9854f93efe8..bfe3464f5f9 100644 --- a/mysql-test/suite/plugins/t/simple_password_check.test +++ b/mysql-test/suite/plugins/t/simple_password_check.test @@ -103,6 +103,12 @@ drop user foo2; set global strict_password_validation=1; drop user foo1; +# +# MDEV-9940 CREATE ROLE blocked by password validation plugin +# +create role r1; +drop role r1; + uninstall plugin simple_password_check; create user foo1 identified by 'pwd'; -- cgit v1.2.1 From 153259874bfb32c9d1f89a682b96897e32a61986 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 3 May 2016 20:31:02 +0200 Subject: MDEV-9155 Enabling Defragmenting in 10.1.8 still causes OPTIMIZE TABLE to take metadatalocks take MDL_SHARED_WRITE instead of MDL_SHARED_NO_READ_WRITE for OPTIMIZE TABLE. For engines that need a stronger lock (like MyISAM), reopen the table with MDL_SHARED_NO_READ_WRITE. --- mysql-test/suite/handler/innodb.result | 1 - mysql-test/suite/innodb/r/defrag_mdl-9155.result | 15 +++++++++++++++ mysql-test/suite/innodb/t/defrag_mdl-9155.test | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/innodb/r/defrag_mdl-9155.result create mode 100644 mysql-test/suite/innodb/t/defrag_mdl-9155.test (limited to 'mysql-test') diff --git a/mysql-test/suite/handler/innodb.result b/mysql-test/suite/handler/innodb.result index 78660b0ef9c..617b74ca714 100644 --- a/mysql-test/suite/handler/innodb.result +++ b/mysql-test/suite/handler/innodb.result @@ -543,7 +543,6 @@ optimize table t1; proceed with the normal connection handler t1 read next; c1 -1 handler t1 close; read the result from the other connection Table Op Msg_type Msg_text diff --git a/mysql-test/suite/innodb/r/defrag_mdl-9155.result b/mysql-test/suite/innodb/r/defrag_mdl-9155.result new file mode 100644 index 00000000000..36cafd305ba --- /dev/null +++ b/mysql-test/suite/innodb/r/defrag_mdl-9155.result @@ -0,0 +1,15 @@ +set global innodb_defragment=1; +create table t1 (a int not null primary key auto_increment, b varchar(256), key second(a, b)) engine=innodb; +insert t1 select null, repeat('a', 256) from seq_1_to_100; +select count(*) from t1; +count(*) +100 +start transaction; +select count(*) from t1; +count(*) +100 +optimize table t1; +Table Op Msg_type Msg_text +test.t1 optimize status OK +drop table t1; +set global innodb_defragment=default; diff --git a/mysql-test/suite/innodb/t/defrag_mdl-9155.test b/mysql-test/suite/innodb/t/defrag_mdl-9155.test new file mode 100644 index 00000000000..1e1efb9c4c6 --- /dev/null +++ b/mysql-test/suite/innodb/t/defrag_mdl-9155.test @@ -0,0 +1,22 @@ +# +# MDEV-9155 Enabling Defragmenting in 10.1.8 still causes OPTIMIZE TABLE to take metadatalocks +# +source include/have_innodb.inc; +source include/have_sequence.inc; + +set global innodb_defragment=1; +create table t1 (a int not null primary key auto_increment, b varchar(256), key second(a, b)) engine=innodb; +insert t1 select null, repeat('a', 256) from seq_1_to_100; +select count(*) from t1; + +connect (con1,localhost,root); +start transaction; +select count(*) from t1; + +connection default; +optimize table t1; + +connection con1; +drop table t1; + +set global innodb_defragment=default; -- cgit v1.2.1 From 3a88adc3b2a046292301d708d4026bc6c5a4801e Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Thu, 5 May 2016 11:28:35 +0400 Subject: MDEV-717 LP:1003679 - Wrong binlog order on concurrent DROP schema and CREATE function. Test case added. --- mysql-test/suite/binlog/r/binlog_mdev717.result | 40 ++++++++++++++++++++++ mysql-test/suite/binlog/t/binlog_mdev717.test | 45 +++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 mysql-test/suite/binlog/r/binlog_mdev717.result create mode 100644 mysql-test/suite/binlog/t/binlog_mdev717.test (limited to 'mysql-test') diff --git a/mysql-test/suite/binlog/r/binlog_mdev717.result b/mysql-test/suite/binlog/r/binlog_mdev717.result new file mode 100644 index 00000000000..82f8e5a6e3f --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_mdev717.result @@ -0,0 +1,40 @@ +RESET MASTER; +CREATE DATABASE mysqltest; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +DROP DATABASE mysqltest;; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +CREATE FUNCTION mysqltest.f1() RETURNS INT RETURN 1; +ERROR 42000: Unknown database 'mysqltest' +CREATE DATABASE mysqltest; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +DROP DATABASE mysqltest;; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +CREATE EVENT mysqltest.e1 ON SCHEDULE EVERY 15 MINUTE DO BEGIN END; +ERROR 42000: Unknown database 'mysqltest' +CREATE DATABASE mysqltest; +CREATE EVENT mysqltest.e1 ON SCHEDULE EVERY 15 MINUTE DO BEGIN END; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +DROP DATABASE mysqltest;; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +ALTER EVENT mysqltest.e1 ON SCHEDULE EVERY 20 MINUTE DO BEGIN END; +ERROR 42000: Unknown database 'mysqltest' +SET DEBUG_SYNC= "RESET"; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # CREATE DATABASE mysqltest +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # DROP DATABASE mysqltest +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # CREATE DATABASE mysqltest +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # DROP DATABASE mysqltest +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # CREATE DATABASE mysqltest +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT mysqltest.e1 ON SCHEDULE EVERY 15 MINUTE DO BEGIN END +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # DROP DATABASE mysqltest diff --git a/mysql-test/suite/binlog/t/binlog_mdev717.test b/mysql-test/suite/binlog/t/binlog_mdev717.test new file mode 100644 index 00000000000..f321af2122f --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_mdev717.test @@ -0,0 +1,45 @@ +# MDEV-717 LP:1003679 - Wrong binlog order on concurrent DROP schema and CREATE function. + +--source include/have_log_bin.inc +RESET MASTER; + +connect(con1,localhost,root); +connection default; + +CREATE DATABASE mysqltest; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +--send DROP DATABASE mysqltest; +connection con1; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +--error ER_BAD_DB_ERROR +CREATE FUNCTION mysqltest.f1() RETURNS INT RETURN 1; +connection default; +--reap + +CREATE DATABASE mysqltest; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +--send DROP DATABASE mysqltest; +connection con1; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +--error ER_BAD_DB_ERROR +CREATE EVENT mysqltest.e1 ON SCHEDULE EVERY 15 MINUTE DO BEGIN END; +connection default; +--reap + +CREATE DATABASE mysqltest; +CREATE EVENT mysqltest.e1 ON SCHEDULE EVERY 15 MINUTE DO BEGIN END; +SET DEBUG_SYNC= "after_wait_locked_schema_name SIGNAL locked WAIT_FOR release"; +--send DROP DATABASE mysqltest; +connection con1; +SET DEBUG_SYNC= "now WAIT_FOR locked"; +SET DEBUG_SYNC= "before_wait_locked_pname SIGNAL release"; +--error ER_BAD_DB_ERROR +ALTER EVENT mysqltest.e1 ON SCHEDULE EVERY 20 MINUTE DO BEGIN END; +connection default; +--reap + +SET DEBUG_SYNC= "RESET"; +--source include/show_binlog_events.inc + -- cgit v1.2.1 From 19c4d22a1e62989bc7382985bd650eaf7ae519b0 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 5 May 2016 12:35:12 +0200 Subject: skip debug_sync test in release builds --- mysql-test/suite/binlog/t/binlog_mdev717.test | 1 + 1 file changed, 1 insertion(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/binlog/t/binlog_mdev717.test b/mysql-test/suite/binlog/t/binlog_mdev717.test index f321af2122f..61d3aa715d2 100644 --- a/mysql-test/suite/binlog/t/binlog_mdev717.test +++ b/mysql-test/suite/binlog/t/binlog_mdev717.test @@ -1,5 +1,6 @@ # MDEV-717 LP:1003679 - Wrong binlog order on concurrent DROP schema and CREATE function. +--source include/have_debug_sync.inc --source include/have_log_bin.inc RESET MASTER; -- cgit v1.2.1 From 9a5c75a07340d6883adeac699ad1a29775698d8f Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Fri, 29 Apr 2016 09:34:44 -0400 Subject: MDEV-9853: WSREP says it cannot get fake InnoDB transaction ID followed by segmentation fault Ha_trx_info should not be reset in ha_fake_trx_id() as it is later used during commit. --- mysql-test/suite/galera/r/create.result | 10 ++++++++++ mysql-test/suite/galera/suite.pm | 1 + mysql-test/suite/galera/t/create.test | 15 +++++++++++++++ 3 files changed, 26 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/r/create.result b/mysql-test/suite/galera/r/create.result index d8a2db99a68..d23fb186f5e 100644 --- a/mysql-test/suite/galera/r/create.result +++ b/mysql-test/suite/galera/r/create.result @@ -58,4 +58,14 @@ t2 CREATE TABLE `t2` ( KEY `idx` (`i`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 DROP TABLE t1, t2; +# +# MDEV-9853: WSREP says it cannot get fake InnoDB transaction ID +# followed by segmentation fault +# +CREATE TABLE `t1`(`c1` INT) ENGINE=INNODB; +SET autocommit=0; +CREATE TABLE `t2` (`c1` INT) ENGINE=INNODB SELECT * FROM t1; +COMMIT; +SET autocommit=1; +DROP TABLE t1, t2; # End of tests diff --git a/mysql-test/suite/galera/suite.pm b/mysql-test/suite/galera/suite.pm index 2da2b3ad503..b3795b91666 100644 --- a/mysql-test/suite/galera/suite.pm +++ b/mysql-test/suite/galera/suite.pm @@ -67,6 +67,7 @@ push @::global_suppressions, qr|WSREP: gcs_caused\(\) returned .*|, qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(SYNCED\). Message ignored.|, qr(WSREP: Action message in non-primary configuration from member [0-9]*), + qr(WSREP: cannot get fake InnoDB transaction ID), ); diff --git a/mysql-test/suite/galera/t/create.test b/mysql-test/suite/galera/t/create.test index fb9b0935288..9d0ab215cbb 100644 --- a/mysql-test/suite/galera/t/create.test +++ b/mysql-test/suite/galera/t/create.test @@ -54,5 +54,20 @@ SHOW CREATE TABLE t2; # Cleanup DROP TABLE t1, t2; +--echo # +--echo # MDEV-9853: WSREP says it cannot get fake InnoDB transaction ID +--echo # followed by segmentation fault +--echo # +CREATE TABLE `t1`(`c1` INT) ENGINE=INNODB; + +SET autocommit=0; +CREATE TABLE `t2` (`c1` INT) ENGINE=INNODB SELECT * FROM t1; +COMMIT; +SET autocommit=1; + +# Cleanup +DROP TABLE t1, t2; + +--source include/galera_end.inc --echo # End of tests -- cgit v1.2.1 From edbd0ceddaf25508e9949fa3f5bd4bca8f4662bf Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Fri, 29 Apr 2016 09:37:00 -0400 Subject: MDEV-9171: innodb.innodb_uninstall Test Failure An additional warning saying "tc-log cannot be enabled" is emitted when InnoDB is installed at runtime on mysqld built with wsrep-patch (-DWITH_WSREP=ON). This happens because, installing InnoDB increments the total number of 2pc-capable engines and with wsrep-patch already enabled - the total count goes >1. Even though, this condition is sufficient to enable tc-logging, it is not permitted at runtime, and thus the warning. Updated the testcase to avoid the warning. --- mysql-test/suite/innodb/r/innodb_uninstall.result | 4 ---- mysql-test/suite/innodb/t/innodb_uninstall.test | 8 ++++++++ 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb_uninstall.result b/mysql-test/suite/innodb/r/innodb_uninstall.result index b1f618c5221..5a2c6f5c2be 100644 --- a/mysql-test/suite/innodb/r/innodb_uninstall.result +++ b/mysql-test/suite/innodb/r/innodb_uninstall.result @@ -1,6 +1,4 @@ install plugin innodb soname 'ha_innodb'; -Warnings: -Warning 1105 Cannot enable tc-log at run-time. XA features of InnoDB are disabled create table t1(a int not null primary key) engine=innodb; begin; insert into t1 values(1); @@ -12,8 +10,6 @@ sleep(1) Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown install plugin innodb soname 'ha_innodb'; -Warnings: -Warning 1105 Cannot enable tc-log at run-time. XA features of InnoDB are disabled drop table t1; create table t2(a int not null primary key) engine=innodb; insert into t2 values(1); diff --git a/mysql-test/suite/innodb/t/innodb_uninstall.test b/mysql-test/suite/innodb/t/innodb_uninstall.test index 3cd02b23d8c..1b65db8a28d 100644 --- a/mysql-test/suite/innodb/t/innodb_uninstall.test +++ b/mysql-test/suite/innodb/t/innodb_uninstall.test @@ -9,7 +9,13 @@ if (!$HA_INNODB_SO) { # MDEV-8474: InnoDB sets per-connection data unsafely # Below test caused hang # +# When mysqld is built with wsrep patch (WITH_WSREP=ON), +# the following install command emits a warning about +# server unable to enable tc-log at runtime. +disable_warnings; install plugin innodb soname 'ha_innodb'; +enable_warnings; + create table t1(a int not null primary key) engine=innodb; connect (con1, localhost, root); @@ -36,7 +42,9 @@ reap; connect (con1, localhost, root); connection con1; +disable_warnings; install plugin innodb soname 'ha_innodb'; +enable_warnings; drop table t1; create table t2(a int not null primary key) engine=innodb; -- cgit v1.2.1 From 1512078a7a56779d6fdd307a93187b61494de897 Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Fri, 29 Apr 2016 10:50:39 -0400 Subject: MDEV-9851: CREATE USER w/o IDENTIFIED BY clause causes crash when using cracklib plugin Do not allow NULL password to pass directly to password validation plugin. --- mysql-test/suite/plugins/r/cracklib_password_check.result | 6 ++++++ mysql-test/suite/plugins/r/simple_password_check.result | 2 ++ mysql-test/suite/plugins/t/cracklib_password_check.test | 8 ++++++++ mysql-test/suite/plugins/t/simple_password_check.test | 4 ++++ 4 files changed, 20 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/plugins/r/cracklib_password_check.result b/mysql-test/suite/plugins/r/cracklib_password_check.result index 638f138b986..dc31cb6d044 100644 --- a/mysql-test/suite/plugins/r/cracklib_password_check.result +++ b/mysql-test/suite/plugins/r/cracklib_password_check.result @@ -39,6 +39,12 @@ Warning 1819 cracklib: it is based on a dictionary word Error 1819 Your password does not satisfy the current policy requirements grant select on *.* to foobar identified by 'q$%^&*rty'; drop user foobar; +# +# MDEV-9851: CREATE USER w/o IDENTIFIED BY clause causes crash +# when using cracklib plugin +# +create user 'newuser'@'localhost'; +ERROR HY000: Your password does not satisfy the current policy requirements uninstall plugin cracklib_password_check; create user foo1 identified by 'pwd'; drop user foo1; diff --git a/mysql-test/suite/plugins/r/simple_password_check.result b/mysql-test/suite/plugins/r/simple_password_check.result index c21298cea33..bbb96bb8c38 100644 --- a/mysql-test/suite/plugins/r/simple_password_check.result +++ b/mysql-test/suite/plugins/r/simple_password_check.result @@ -72,6 +72,8 @@ READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED create user foo1 identified by 'pwd'; ERROR HY000: Your password does not satisfy the current policy requirements +create user foo1; +ERROR HY000: Your password does not satisfy the current policy requirements grant select on *.* to foo1 identified by 'pwd'; ERROR HY000: Your password does not satisfy the current policy requirements grant select on *.* to `FooBar1!` identified by 'FooBar1!'; diff --git a/mysql-test/suite/plugins/t/cracklib_password_check.test b/mysql-test/suite/plugins/t/cracklib_password_check.test index d0e05fed926..89b53b656d6 100644 --- a/mysql-test/suite/plugins/t/cracklib_password_check.test +++ b/mysql-test/suite/plugins/t/cracklib_password_check.test @@ -30,6 +30,14 @@ show warnings; grant select on *.* to foobar identified by 'q$%^&*rty'; drop user foobar; +--echo # +--echo # MDEV-9851: CREATE USER w/o IDENTIFIED BY clause causes crash +--echo # when using cracklib plugin +--echo # + +--error ER_NOT_VALID_PASSWORD +create user 'newuser'@'localhost'; + uninstall plugin cracklib_password_check; create user foo1 identified by 'pwd'; diff --git a/mysql-test/suite/plugins/t/simple_password_check.test b/mysql-test/suite/plugins/t/simple_password_check.test index bfe3464f5f9..4965ee492d2 100644 --- a/mysql-test/suite/plugins/t/simple_password_check.test +++ b/mysql-test/suite/plugins/t/simple_password_check.test @@ -16,6 +16,10 @@ select * from information_schema.system_variables where variable_name like 'simp --error ER_NOT_VALID_PASSWORD create user foo1 identified by 'pwd'; +# Create user with no password. +--error ER_NOT_VALID_PASSWORD +create user foo1; + --error ER_NOT_VALID_PASSWORD grant select on *.* to foo1 identified by 'pwd'; -- cgit v1.2.1 From 5534d8143004022a8431068b1e1f53bd8d7046e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Fri, 6 May 2016 13:56:25 +0300 Subject: Merged following change from MySQL 5.6 to MariaDB 10.1 XtraDB including the test case: https://github.com/mysql/mysql-server/commit/520aedfe INNODB: "DATA DIRECTORY" OPTION OF CREATE TABLE FAILS WITH PWRITE() OS ERROR 22 Fix for version mysql-5.6 PROBLEM ======== For version mysql-5.6.27 onwards InnoDB fails to create a table with explicit 'data directory' option when Innodb_flush_method is set to O_DIRECT.While creating link file we get a a pwrite error 22 due to the alignment restrictions imposed by O_DIRECT flag which is being set for the link file created. FIX === Fixed the above issue by making use of file IO functions while creating the link file that wouldn't let the O_DIRECT flag restrictions arise. Reviewed-by: Kevin Lewis Reviewed-by: Shaohua Wang RB: 11387 --- .../suite/innodb/r/create_isl_with_direct.result | 10 ++++++++ .../suite/innodb/t/create_isl_with_direct.opt | 1 + .../suite/innodb/t/create_isl_with_direct.test | 28 ++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 mysql-test/suite/innodb/r/create_isl_with_direct.result create mode 100644 mysql-test/suite/innodb/t/create_isl_with_direct.opt create mode 100644 mysql-test/suite/innodb/t/create_isl_with_direct.test (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/create_isl_with_direct.result b/mysql-test/suite/innodb/r/create_isl_with_direct.result new file mode 100644 index 00000000000..87544e6dcdf --- /dev/null +++ b/mysql-test/suite/innodb/r/create_isl_with_direct.result @@ -0,0 +1,10 @@ +SHOW VARIABLES LIKE 'innodb_flush_method'; +Variable_name Value +innodb_flush_method O_DIRECT +CREATE TABLE t1 (x INT) ENGINE=INNODB, DATA DIRECTORY='MYSQL_TMP_DIR'; +# Contents of tmp/test directory containing .ibd file +t1.ibd +# Contents of the 'test' database directory containing .isl and .frm files +t1.frm +t1.isl +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/create_isl_with_direct.opt b/mysql-test/suite/innodb/t/create_isl_with_direct.opt new file mode 100644 index 00000000000..8f80f02e359 --- /dev/null +++ b/mysql-test/suite/innodb/t/create_isl_with_direct.opt @@ -0,0 +1 @@ +--innodb_flush_method=O_DIRECT diff --git a/mysql-test/suite/innodb/t/create_isl_with_direct.test b/mysql-test/suite/innodb/t/create_isl_with_direct.test new file mode 100644 index 00000000000..34ea9c77703 --- /dev/null +++ b/mysql-test/suite/innodb/t/create_isl_with_direct.test @@ -0,0 +1,28 @@ +--source include/not_embedded.inc +--source include/have_innodb.inc +--source include/not_windows.inc + +--disable_query_log +CALL mtr.add_suppression("\\[Warning\\] InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs, see MySQL Bug#26662."); + +# The below mtr suppression to avoid failure in solaris platform. +CALL mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to set DIRECTIO_ON on file.*"); +--enable_query_log + +SHOW VARIABLES LIKE 'innodb_flush_method'; + +let MYSQLD_DATADIR=`SELECT @@datadir`; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR + +# Create a table with explicit data directory option. +EVAL CREATE TABLE t1 (x INT) ENGINE=INNODB, DATA DIRECTORY='$MYSQL_TMP_DIR'; + +--echo # Contents of tmp/test directory containing .ibd file +--list_files $MYSQL_TMP_DIR/test + +--echo # Contents of the 'test' database directory containing .isl and .frm files +--list_files $MYSQLD_DATADIR/test + +DROP TABLE t1; + \ No newline at end of file -- cgit v1.2.1 From 234efb1d282ac5cc6d445447b8c52e8507ef224b Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 8 May 2016 08:21:57 +0200 Subject: update 32-bit rdiff results --- mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff index cad46e36f42..6bba4d4e8a7 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff @@ -1228,8 +1228,8 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL --GLOBAL_VALUE 5.6.29 -+GLOBAL_VALUE 5.6.28-76.1 +-GLOBAL_VALUE 5.6.30 ++GLOBAL_VALUE 5.6.29-76.2 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL -- cgit v1.2.1 From ee0695b8072783d04b27328f974d94273b3fa248 Mon Sep 17 00:00:00 2001 From: Elena Stepanova Date: Sun, 8 May 2016 13:37:12 +0300 Subject: Fix 32-bit sysvars test --- .../sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff | 45 +++++++++++----------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff index 6bba4d4e8a7..c04f4fe3e2d 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff @@ -1,5 +1,5 @@ ---- suite/sys_vars/r/sysvars_innodb.result -+++ suite/sys_vars/r/sysvars_innodb,32bit,xtradb.reject +--- suite/sys_vars/r/sysvars_innodb.result 2016-05-06 14:03:16.000000000 +0300 ++++ suite/sys_vars/r/sysvars_innodb,32bit.reject 2016-05-08 13:28:44.312418574 +0300 @@ -47,13 +47,27 @@ ENUM_VALUE_LIST NULL READ_ONLY NO @@ -313,7 +313,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_EMPTY_FREE_LIST_ALGORITHM +SESSION_VALUE NULL -+GLOBAL_VALUE BACKOFF ++GLOBAL_VALUE LEGACY +GLOBAL_VALUE_ORIGIN COMPILE-TIME +DEFAULT_VALUE BACKOFF +VARIABLE_SCOPE GLOBAL @@ -1119,21 +1119,14 @@ VARIABLE_COMMENT Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000000 -@@ -2203,14 +2637,28 @@ +@@ -2217,6 +2651,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO - COMMAND_LINE_ARGUMENT REQUIRED --VARIABLE_NAME INNODB_TMPDIR --SESSION_VALUE --GLOBAL_VALUE + COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_TRACK_CHANGED_PAGES +SESSION_VALUE NULL +GLOBAL_VALUE OFF - GLOBAL_VALUE_ORIGIN COMPILE-TIME --DEFAULT_VALUE --VARIABLE_SCOPE SESSION --VARIABLE_TYPE VARCHAR --VARIABLE_COMMENT Directory for temporary non-tablespace files. ++GLOBAL_VALUE_ORIGIN COMPILE-TIME +DEFAULT_VALUE OFF +VARIABLE_SCOPE GLOBAL +VARIABLE_TYPE BOOLEAN @@ -1152,10 +1145,16 @@ +VARIABLE_SCOPE GLOBAL +VARIABLE_TYPE BOOLEAN +VARIABLE_COMMENT Force log tracker to catch up with checkpoint now - NUMERIC_MIN_VALUE NULL - NUMERIC_MAX_VALUE NULL - NUMERIC_BLOCK_SIZE NULL -@@ -2265,7 +2713,7 @@ ++NUMERIC_MIN_VALUE NULL ++NUMERIC_MAX_VALUE NULL ++NUMERIC_BLOCK_SIZE NULL ++ENUM_VALUE_LIST NULL ++READ_ONLY NO ++COMMAND_LINE_ARGUMENT OPTIONAL + VARIABLE_NAME INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG + SESSION_VALUE NULL + GLOBAL_VALUE OFF +@@ -2265,7 +2727,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL @@ -1164,7 +1163,7 @@ VARIABLE_COMMENT Number of undo logs to use. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 -@@ -2279,7 +2727,7 @@ +@@ -2279,7 +2741,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -1173,7 +1172,7 @@ VARIABLE_COMMENT Number of undo tablespaces to use. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 126 -@@ -2294,7 +2742,7 @@ +@@ -2294,7 +2756,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN @@ -1182,7 +1181,7 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2315,6 +2763,20 @@ +@@ -2315,6 +2777,20 @@ ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT NONE @@ -1203,7 +1202,7 @@ VARIABLE_NAME INNODB_USE_MTFLUSH SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -2329,6 +2791,20 @@ +@@ -2329,6 +2805,20 @@ ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT NONE @@ -1224,7 +1223,7 @@ VARIABLE_NAME INNODB_USE_SYS_MALLOC SESSION_VALUE NULL GLOBAL_VALUE ON -@@ -2359,12 +2835,12 @@ +@@ -2359,12 +2849,12 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL @@ -1239,7 +1238,7 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2377,7 +2853,7 @@ +@@ -2377,7 +2867,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 4 VARIABLE_SCOPE GLOBAL -- cgit v1.2.1 From 964c4f070a7e96bf45979d8755beb10aa6e6617b Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 10 May 2016 19:13:06 +0400 Subject: MDEV-10052 Illegal mix of collations with DAYNAME(date_field)<>varchar_field --- mysql-test/r/locale.result | 28 ++++++++++++++++++++++++++++ mysql-test/t/locale.test | 19 +++++++++++++++++++ 2 files changed, 47 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/locale.result b/mysql-test/r/locale.result index 195468c4c12..6de1d0708ca 100644 --- a/mysql-test/r/locale.result +++ b/mysql-test/r/locale.result @@ -101,3 +101,31 @@ Februar SELECT monthname('2001-03-01'); monthname('2001-03-01') März +# +# MDEV-10052 Illegal mix of collations with DAYNAME(date_field)<>varchar_field +# +SET NAMES utf8; +CREATE TABLE t1 (c VARCHAR(8) CHARACTER SET latin1, d DATE); +INSERT INTO t1 VALUES ('test',now()); +Warnings: +Note 1265 Data truncated for column 'd' at row 1 +SET lc_time_names=ru_RU; +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +ERROR HY000: Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '<>' +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +ERROR HY000: Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '<>' +SET lc_time_names=en_US; +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +c +test +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +c +test +SET NAMES latin1; +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +c +test +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +c +test +DROP TABLE t1; diff --git a/mysql-test/t/locale.test b/mysql-test/t/locale.test index 899d293545d..4944dc7a228 100644 --- a/mysql-test/t/locale.test +++ b/mysql-test/t/locale.test @@ -63,3 +63,22 @@ SET lc_time_names=de_AT; SELECT monthname('2001-01-01'); SELECT monthname('2001-02-01'); SELECT monthname('2001-03-01'); + +--echo # +--echo # MDEV-10052 Illegal mix of collations with DAYNAME(date_field)<>varchar_field +--echo # +SET NAMES utf8; +CREATE TABLE t1 (c VARCHAR(8) CHARACTER SET latin1, d DATE); +INSERT INTO t1 VALUES ('test',now()); +SET lc_time_names=ru_RU; +--error ER_CANT_AGGREGATE_2COLLATIONS +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +--error ER_CANT_AGGREGATE_2COLLATIONS +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +SET lc_time_names=en_US; +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +SET NAMES latin1; +SELECT c FROM t1 WHERE DAYNAME(d)<>c; +SELECT c FROM t1 WHERE MONTHNAME(d)<>c; +DROP TABLE t1; -- cgit v1.2.1 From 5c68bc2c3264fa2c4832c468bad32701dd3d4ed0 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 6 May 2016 12:30:01 +0300 Subject: MDEV-10006: optimizer doesn't convert outer join to inner on views with WHERE clause When simplify_joins() converts an outer join to an inner, it should reset the value of TABLE::dep_tables. This is needed, because the function may have already set TABLE::dep_tables according to the outer join dependency. --- mysql-test/r/join_outer.result | 63 ++++++++++++++++++++++++++++++++++++++++++ mysql-test/t/join_outer.test | 58 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index 820d66b9264..266c8332b36 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -2273,4 +2273,67 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 9 1 SIMPLE t2 ref c c 5 const 393 Using where drop table t1,t2; +# +# MDEV-10006: optimizer doesn't convert outer join to inner on views with WHERE clause +# +CREATE TABLE t1(i1 int primary key, v1 int, key(v1)); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (2, 2); +INSERT INTO t1 VALUES (3, 3); +INSERT INTO t1 VALUES (4, 4); +INSERT INTO t1 VALUES (5, 3); +INSERT INTO t1 VALUES (6, 6); +INSERT INTO t1 VALUES (7, 7); +INSERT INTO t1 VALUES (8, 8); +INSERT INTO t1 VALUES (9, 9); +CREATE TABLE t2(i2 int primary key, v2 int, key(v2)); +INSERT INTO t2 VALUES (1, 1); +INSERT INTO t2 VALUES (2, 2); +INSERT INTO t2 VALUES (3, 3); +INSERT INTO t2 VALUES (4, 4); +INSERT INTO t2 VALUES (5, 3); +INSERT INTO t2 VALUES (6, 6); +INSERT INTO t2 VALUES (7, 7); +INSERT INTO t2 VALUES (8, 8); +INSERT INTO t2 VALUES (9, 9); +CREATE TABLE t3(i3 int primary key, v3 int, key(v3)); +INSERT INTO t3 VALUES (2, 2); +INSERT INTO t3 VALUES (4, 4); +INSERT INTO t3 VALUES (6, 6); +INSERT INTO t3 VALUES (8, 8); +# This should have a join order of t3,t1,t2 (or t3,t2,t1, the idea is that t3 is the first one) +EXPLAIN EXTENDED +SELECT * FROM +(SELECT t1.i1 as i1, t1.v1 as v1, +t2.i2 as i2, t2.v2 as v2, +t3.i3 as i3, t3.v3 as v3 +FROM t1 JOIN t2 on t1.i1 = t2.i2 +LEFT JOIN t3 on t2.i2 = t3.i3 +) as w1 +WHERE v3 = 4; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 ref PRIMARY,v3 v3 5 const 1 100.00 +1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +Warnings: +Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`v3` = 4) and (`test`.`t1`.`i1` = `test`.`t3`.`i3`) and (`test`.`t2`.`i2` = `test`.`t3`.`i3`)) +# This should have the same join order like the query above: +EXPLAIN EXTENDED +SELECT * FROM +(SELECT t1.i1 as i1, t1.v1 as v1, +t2.i2 as i2, t2.v2 as v2, +t3.i3 as i3, t3.v3 as v3 +FROM t1 JOIN t2 on t1.i1 = t2.i2 +LEFT JOIN t3 on t2.i2 = t3.i3 +WHERE t1.i1 = t2.i2 +AND 1 = 1 +) as w2 +WHERE v3 = 4; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 ref PRIMARY,v3 v3 5 const 1 100.00 +1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +Warnings: +Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`v3` = 4) and (`test`.`t1`.`i1` = `test`.`t3`.`i3`) and (`test`.`t2`.`i2` = `test`.`t3`.`i3`)) +drop table t1,t2,t3; SET optimizer_switch=@save_optimizer_switch; diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index 9ae65780086..a3a1278ef1e 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -1824,4 +1824,62 @@ explain select * from t1 left join t2 on t2.c is null; drop table t1,t2; +--echo # +--echo # MDEV-10006: optimizer doesn't convert outer join to inner on views with WHERE clause +--echo # + +CREATE TABLE t1(i1 int primary key, v1 int, key(v1)); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (2, 2); +INSERT INTO t1 VALUES (3, 3); +INSERT INTO t1 VALUES (4, 4); +INSERT INTO t1 VALUES (5, 3); +INSERT INTO t1 VALUES (6, 6); +INSERT INTO t1 VALUES (7, 7); +INSERT INTO t1 VALUES (8, 8); +INSERT INTO t1 VALUES (9, 9); + +CREATE TABLE t2(i2 int primary key, v2 int, key(v2)); +INSERT INTO t2 VALUES (1, 1); +INSERT INTO t2 VALUES (2, 2); +INSERT INTO t2 VALUES (3, 3); +INSERT INTO t2 VALUES (4, 4); +INSERT INTO t2 VALUES (5, 3); +INSERT INTO t2 VALUES (6, 6); +INSERT INTO t2 VALUES (7, 7); +INSERT INTO t2 VALUES (8, 8); +INSERT INTO t2 VALUES (9, 9); + +CREATE TABLE t3(i3 int primary key, v3 int, key(v3)); +INSERT INTO t3 VALUES (2, 2); +INSERT INTO t3 VALUES (4, 4); +INSERT INTO t3 VALUES (6, 6); +INSERT INTO t3 VALUES (8, 8); + +--echo # This should have a join order of t3,t1,t2 (or t3,t2,t1, the idea is that t3 is the first one) +EXPLAIN EXTENDED +SELECT * FROM + (SELECT t1.i1 as i1, t1.v1 as v1, + t2.i2 as i2, t2.v2 as v2, + t3.i3 as i3, t3.v3 as v3 + FROM t1 JOIN t2 on t1.i1 = t2.i2 + LEFT JOIN t3 on t2.i2 = t3.i3 + ) as w1 +WHERE v3 = 4; + +--echo # This should have the same join order like the query above: +EXPLAIN EXTENDED +SELECT * FROM + (SELECT t1.i1 as i1, t1.v1 as v1, + t2.i2 as i2, t2.v2 as v2, + t3.i3 as i3, t3.v3 as v3 + FROM t1 JOIN t2 on t1.i1 = t2.i2 + LEFT JOIN t3 on t2.i2 = t3.i3 + WHERE t1.i1 = t2.i2 + AND 1 = 1 + ) as w2 +WHERE v3 = 4; + +drop table t1,t2,t3; + SET optimizer_switch=@save_optimizer_switch; -- cgit v1.2.1 From ef3f09f0c9e62ea1bf86b33b5d97e954b3ae34fe Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Fri, 13 May 2016 16:42:45 +0530 Subject: Bug#23251517: SEMISYNC REPLICATION HANGING Revert following bug fix: Bug#20685029: SLAVE IO THREAD SHOULD STOP WHEN DISK IS FULL Bug#21753696: MAKE SHOW SLAVE STATUS NON BLOCKING IF IO THREAD WAITS FOR DISK SPACE This fix results in a deadlock between slave IO thread and SQL thread. (cherry picked from commit e3fea6c6dbb36c6ab21c4ab777224560e9608b53) --- mysql-test/include/assert_grep.inc | 154 --------------------- mysql-test/include/rpl_init.inc | 31 +---- mysql-test/include/rpl_reconnect.inc | 33 ++--- mysql-test/include/start_slave_sql.inc | 39 ------ .../rpl/r/rpl_io_thd_wait_for_disk_space.result | 15 -- .../rpl/t/rpl_io_thd_wait_for_disk_space.test | 71 ---------- 6 files changed, 14 insertions(+), 329 deletions(-) delete mode 100644 mysql-test/include/assert_grep.inc delete mode 100644 mysql-test/include/start_slave_sql.inc delete mode 100644 mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result delete mode 100644 mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test (limited to 'mysql-test') diff --git a/mysql-test/include/assert_grep.inc b/mysql-test/include/assert_grep.inc deleted file mode 100644 index a980a6d73b1..00000000000 --- a/mysql-test/include/assert_grep.inc +++ /dev/null @@ -1,154 +0,0 @@ -# ==== Purpose ==== -# -# Grep a file for a pattern, produce a single string out of the -# matching lines, and assert that the string matches a given regular -# expression. -# -# ==== Usage ==== -# -# --let $assert_text= TEXT -# --let $assert_file= FILE -# --let $assert_select= REGEX -# [--let $assert_match= REGEX | --let $assert_count= NUMBER] -# [--let $assert_only_after= REGEX] -# --source include/assert_grep.inc -# -# Parameters: -# -# $assert_text -# Text that describes what is being checked. This text is written to -# the query log so it should not contain non-deterministic elements. -# -# $assert_file -# File to search. -# -# $assert_select -# All lines matching this text will be checked. -# -# $assert_match -# The script will find all lines that match $assert_select, -# concatenate them to a long string, and assert that it matches -# $assert_match. -# -# $assert_count -# Instead of asserting that the selected lines match -# $assert_match, assert that there were exactly $assert_count -# matching lines. -# -# $assert_only_after -# Reset all the lines matched and the counter when finding this pattern. -# It is useful for searching things in the mysqld.err log file just -# after the last server restart for example (discarding the log content -# of previous server executions). - - -if (!$assert_text) -{ - --die !!!ERROR IN TEST: you must set $assert_text -} -if (!$assert_file) -{ - --die !!!ERROR IN TEST: you must set $assert_file -} -if (!$assert_select) -{ - --die !!!ERROR IN TEST: you must set $assert_select -} -if ($assert_match == '') -{ - if ($assert_count == '') - { - --die !!!ERROR IN TEST: you must set either $assert_match or $assert_count - } -} -if ($assert_match != '') -{ - if ($assert_count != '') - { - --echo assert_text='$assert_text' assert_count='$assert_count' - --die !!!ERROR IN TEST: you must set only one of $assert_match or $assert_count - } -} - - ---let $include_filename= assert_grep.inc [$assert_text] ---source include/begin_include_file.inc - - ---let _AG_ASSERT_TEXT= $assert_text ---let _AG_ASSERT_FILE= $assert_file ---let _AG_ASSERT_SELECT= $assert_select ---let _AG_ASSERT_MATCH= $assert_match ---let _AG_ASSERT_COUNT= $assert_count ---let _AG_OUT= `SELECT CONCAT('$MYSQLTEST_VARDIR/tmp/_ag_', UUID())` ---let _AG_ASSERT_ONLY_AFTER= $assert_only_after - - ---perl - use strict; - use warnings; - my $file= $ENV{'_AG_ASSERT_FILE'}; - my $assert_select= $ENV{'_AG_ASSERT_SELECT'}; - my $assert_match= $ENV{'_AG_ASSERT_MATCH'}; - my $assert_count= $ENV{'_AG_ASSERT_COUNT'}; - my $assert_only_after= $ENV{'_AG_ASSERT_ONLY_AFTER'}; - my $out= $ENV{'_AG_OUT'}; - - my $result= ''; - my $count= 0; - open(FILE, "$file") or die("Error $? opening $file: $!\n"); - while () { - my $line = $_; - if ($assert_only_after && $line =~ /$assert_only_after/) { - $result = ""; - $count = 0; - } - if ($line =~ /$assert_select/) { - if ($assert_count ne '') { - $count++; - } - else { - $result .= $line; - } - } - } - close(FILE) or die("Error $? closing $file: $!"); - open OUT, "> $out" or die("Error $? opening $out: $!"); - if ($assert_count ne '' && ($count != $assert_count)) { - print OUT ($count) or die("Error $? writing $out: $!"); - } - elsif ($assert_count eq '' && $result !~ /$assert_match/) { - print OUT ($result) or die("Error $? writing $out: $!"); - } - else { - print OUT ("assert_grep.inc ok"); - } - close OUT or die("Error $? closing $out: $!"); -EOF - - ---let $_ag_outcome= `SELECT LOAD_FILE('$_AG_OUT')` -if ($_ag_outcome != 'assert_grep.inc ok') -{ - --source include/show_rpl_debug_info.inc - --echo include/assert_grep.inc failed! - --echo assert_text: '$assert_text' - --echo assert_file: '$assert_file' - --echo assert_select: '$assert_select' - --echo assert_match: '$assert_match' - --echo assert_count: '$assert_count' - --echo assert_only_after: '$assert_only_after' - if ($assert_match != '') - { - --echo matching lines: '$_ag_outcome' - } - if ($assert_count != '') - { - --echo number of matching lines: $_ag_outcome - } - --die assert_grep.inc failed. -} - - ---let $include_filename= include/assert_grep.inc [$assert_text] ---source include/end_include_file.inc diff --git a/mysql-test/include/rpl_init.inc b/mysql-test/include/rpl_init.inc index 820bc8e9016..2abfd901b03 100644 --- a/mysql-test/include/rpl_init.inc +++ b/mysql-test/include/rpl_init.inc @@ -43,7 +43,6 @@ # # [--let $rpl_server_count= 7] # --let $rpl_topology= 1->2->3->1->4, 2->5, 6->7 -# [--let $rpl_extra_connections_per_server= 1] # [--let $rpl_check_server_ids= 1] # [--let $rpl_skip_change_master= 1] # [--let $rpl_skip_start_slave= 1] @@ -66,12 +65,6 @@ # want to specify the empty topology (no server replicates at # all), you have to set $rpl_topology=none. # -# $rpl_extra_connections_per_server -# By default, this script creates connections server_N and -# server_N_1. If you can set this variable to a number, the -# script creates: -# server_N, server_N_1, ..., server_N_$rpl_extra_connections_per_server -# # $rpl_check_server_ids # If $rpl_check_server_ids is set, this script checks that the # @@server_id of all servers are different. This is normally @@ -146,17 +139,8 @@ if (!$SERVER_MYPORT_4) # Check that $rpl_server_count is set if (!$rpl_server_count) { - --let $rpl_server_count= `SELECT REPLACE('$rpl_topology', '->', ',')` - if (`SELECT LOCATE(',', '$rpl_server_count')`) - { - --let $rpl_server_count= `SELECT GREATEST($rpl_server_count)` - } -} - ---let $_rpl_extra_connections_per_server= $rpl_extra_connections_per_server -if ($_rpl_extra_connections_per_server == '') -{ - --let $_rpl_extra_connections_per_server= 1 + --let $_compute_rpl_server_count= `SELECT REPLACE('$rpl_topology', '->', ',')` + --let $rpl_server_count= `SELECT GREATEST($_compute_rpl_server_count)` } @@ -175,20 +159,15 @@ if (!$rpl_debug) # Create two connections to each server; reset master/slave, select # database, set autoinc variables. --let $_rpl_server= $rpl_server_count ---let $underscore= _ +--let $_rpl_one= _1 while ($_rpl_server) { # Connect. --let $rpl_server_number= $_rpl_server --let $rpl_connection_name= server_$_rpl_server --source include/rpl_connect.inc - --let $_rpl_connection_number= 1 - while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) - { - --let $rpl_connection_name= server_$_rpl_server$underscore$_rpl_connection_number - --source include/rpl_connect.inc - --inc $_rpl_connection_number - } + --let $rpl_connection_name= server_$_rpl_server$_rpl_one + --source include/rpl_connect.inc # Configure server. --let $rpl_connection_name= server_$_rpl_server diff --git a/mysql-test/include/rpl_reconnect.inc b/mysql-test/include/rpl_reconnect.inc index 673f382bac0..cdbbd0a1bf1 100644 --- a/mysql-test/include/rpl_reconnect.inc +++ b/mysql-test/include/rpl_reconnect.inc @@ -12,7 +12,6 @@ # ==== Usage ==== # # --let $rpl_server_number= N -# [--let $rpl_extra_connections_per_server= 1] # [--let $rpl_debug= 1] # --source include/rpl_reconnect.inc # @@ -22,7 +21,7 @@ # master server, 2 the slave server, 3 the 3rd server, and so on. # Cf. include/rpl_init.inc # -# $rpl_extra_connections_per_server, $rpl_debug +# $rpl_debug # See include/rpl_init.inc --let $include_filename= rpl_reconnect.inc @@ -33,11 +32,6 @@ if (!$rpl_server_number) --die ERROR IN TEST: you must set $rpl_server_number before you source rpl_connect.inc } -if ($_rpl_extra_connections_per_server == '') -{ - --let $_rpl_extra_connections_per_server= 1 -} - if ($rpl_debug) { @@ -78,14 +72,10 @@ if (!$_rpl_server_number) --source include/rpl_connection.inc --enable_reconnect ---let $_rpl_connection_number= 1 -while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) -{ - --let $rpl_connection_name= server_$rpl_server_number$underscore$_rpl_connection_number - --source include/rpl_connection.inc - --enable_reconnect - --inc $_rpl_connection_number -} +--let $_rpl_one= _1 +--let $rpl_connection_name= server_$rpl_server_number$_rpl_one +--source include/rpl_connection.inc +--enable_reconnect if ($rpl_debug) { @@ -132,15 +122,10 @@ if (!$_rpl_server_number) --source include/wait_until_connected_again.inc --disable_reconnect ---let $_rpl_connection_number= 1 -while ($_rpl_connection_number <= $_rpl_extra_connections_per_server) -{ - --let $rpl_connection_name= server_$rpl_server_number$underscore$_rpl_connection_number - --source include/rpl_connection.inc - --source include/wait_until_connected_again.inc - --disable_reconnect - --inc $_rpl_connection_number -} +--let $rpl_connection_name= server_$rpl_server_number$_rpl_one +--source include/rpl_connection.inc +--source include/wait_until_connected_again.inc +--disable_reconnect --let $include_filename= rpl_reconnect.inc diff --git a/mysql-test/include/start_slave_sql.inc b/mysql-test/include/start_slave_sql.inc deleted file mode 100644 index 9cb66a2eb40..00000000000 --- a/mysql-test/include/start_slave_sql.inc +++ /dev/null @@ -1,39 +0,0 @@ -# ==== Purpose ==== -# -# Issues START SLAVE SQL_THREAD on the current connection. Then waits -# until the SQL thread has started, or until a timeout is reached. -# -# Please use this instead of 'START SLAVE SQL_THREAD', to reduce the -# risk of races in test cases. -# -# -# ==== Usage ==== -# -# [--let $slave_timeout= NUMBER] -# [--let $rpl_debug= 1] -# --source include/start_slave_sql.inc -# -# Parameters: -# $slave_timeout -# See include/wait_for_slave_param.inc -# -# $rpl_debug -# See include/rpl_init.inc - - ---let $include_filename= start_slave_sql.inc ---source include/begin_include_file.inc - - -if (!$rpl_debug) -{ - --disable_query_log -} - - -START SLAVE SQL_THREAD; ---source include/wait_for_slave_sql_to_start.inc - - ---let $include_filename= start_slave_sql.inc ---source include/end_include_file.inc diff --git a/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result b/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result deleted file mode 100644 index b11ad4f53bd..00000000000 --- a/mysql-test/suite/rpl/r/rpl_io_thd_wait_for_disk_space.result +++ /dev/null @@ -1,15 +0,0 @@ -include/master-slave.inc -[connection master] -CREATE TABLE t1(a INT); -INSERT INTO t1 VALUES(1); -CALL mtr.add_suppression("Disk is full writing"); -CALL mtr.add_suppression("Retry in 60 secs"); -include/stop_slave_sql.inc -SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; -INSERT INTO t1 VALUES(2); -SET DEBUG_SYNC='now WAIT_FOR parked'; -SET @@GLOBAL.DEBUG= '$debug_saved'; -include/assert_grep.inc [Found the disk full error message on the slave] -include/start_slave_sql.inc -DROP TABLE t1; -include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test b/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test deleted file mode 100644 index 6076be60ebc..00000000000 --- a/mysql-test/suite/rpl/t/rpl_io_thd_wait_for_disk_space.test +++ /dev/null @@ -1,71 +0,0 @@ -# ==== Purpose ==== -# -# Check that the execution of SHOW SLAVE STATUS command is not blocked when IO -# thread is blocked waiting for disk space. -# -# ==== Implementation ==== -# -# Simulate a scenario where IO thread is waiting for disk space while writing -# into the relay log. Execute SHOW SLAVE STATUS command after IO thread is -# blocked waiting for space. The command should not be blocked. -# -# ==== References ==== -# -# Bug#21753696: MAKE SHOW SLAVE STATUS NON BLOCKING IF IO THREAD WAITS FOR -# DISK SPACE -# Bug#20685029: SLAVE IO THREAD SHOULD STOP WHEN DISK IS FULL -# -############################################################################### ---source include/have_debug.inc -# Inorder to grep a specific error pattern in error log a fresh error log -# needs to be generated. ---source include/force_restart.inc ---source include/master-slave.inc - -# Generate events to be replicated to the slave -CREATE TABLE t1(a INT); -INSERT INTO t1 VALUES(1); ---sync_slave_with_master - -# Those errors will only happen in the slave -CALL mtr.add_suppression("Disk is full writing"); -CALL mtr.add_suppression("Retry in 60 secs"); - -# Stop the SQL thread to avoid writing on disk ---source include/stop_slave_sql.inc - -# Set the debug option that will simulate disk full ---let $debug_saved= `SELECT @@GLOBAL.DEBUG` -SET @@GLOBAL.DEBUG= 'd,simulate_io_thd_wait_for_disk_space'; - -# Generate events to be replicated to the slave ---connection master -INSERT INTO t1 VALUES(2); - ---connection slave1 -SET DEBUG_SYNC='now WAIT_FOR parked'; - -# Get the relay log file name using SHOW SLAVE STATUS ---let $relay_log_file= query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1) - ---connection slave -# Restore the debug options to "simulate" freed space on disk -SET @@GLOBAL.DEBUG= '$debug_saved'; - -# There should be a message in the error log of the slave stating -# that it was waiting for space to write on the relay log. ---let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err -# Grep only after the message that the I/O thread has started ---let $assert_only_after= Slave I/O .* connected to master .*replication started in log .* at position ---let $assert_count= 1 ---let $assert_select=Disk is full writing .*$relay_log_file.* ---let $assert_text= Found the disk full error message on the slave ---source include/assert_grep.inc - -# Start the SQL thread to let the slave to sync and finish gracefully ---source include/start_slave_sql.inc - -# Cleanup ---connection master -DROP TABLE t1; ---source include/rpl_end.inc -- cgit v1.2.1 From 9eaf9345a5a18787ef204cf1cc22348f817e359c Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Tue, 17 May 2016 14:01:16 +0300 Subject: Update test result after the last commit --- mysql-test/r/join_outer_jcl6.result | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/join_outer_jcl6.result b/mysql-test/r/join_outer_jcl6.result index 4412f8059dd..5710dac519d 100644 --- a/mysql-test/r/join_outer_jcl6.result +++ b/mysql-test/r/join_outer_jcl6.result @@ -2284,6 +2284,69 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 9 1 SIMPLE t2 ref c c 5 const 393 Using where drop table t1,t2; +# +# MDEV-10006: optimizer doesn't convert outer join to inner on views with WHERE clause +# +CREATE TABLE t1(i1 int primary key, v1 int, key(v1)); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (2, 2); +INSERT INTO t1 VALUES (3, 3); +INSERT INTO t1 VALUES (4, 4); +INSERT INTO t1 VALUES (5, 3); +INSERT INTO t1 VALUES (6, 6); +INSERT INTO t1 VALUES (7, 7); +INSERT INTO t1 VALUES (8, 8); +INSERT INTO t1 VALUES (9, 9); +CREATE TABLE t2(i2 int primary key, v2 int, key(v2)); +INSERT INTO t2 VALUES (1, 1); +INSERT INTO t2 VALUES (2, 2); +INSERT INTO t2 VALUES (3, 3); +INSERT INTO t2 VALUES (4, 4); +INSERT INTO t2 VALUES (5, 3); +INSERT INTO t2 VALUES (6, 6); +INSERT INTO t2 VALUES (7, 7); +INSERT INTO t2 VALUES (8, 8); +INSERT INTO t2 VALUES (9, 9); +CREATE TABLE t3(i3 int primary key, v3 int, key(v3)); +INSERT INTO t3 VALUES (2, 2); +INSERT INTO t3 VALUES (4, 4); +INSERT INTO t3 VALUES (6, 6); +INSERT INTO t3 VALUES (8, 8); +# This should have a join order of t3,t1,t2 (or t3,t2,t1, the idea is that t3 is the first one) +EXPLAIN EXTENDED +SELECT * FROM +(SELECT t1.i1 as i1, t1.v1 as v1, +t2.i2 as i2, t2.v2 as v2, +t3.i3 as i3, t3.v3 as v3 +FROM t1 JOIN t2 on t1.i1 = t2.i2 +LEFT JOIN t3 on t2.i2 = t3.i3 +) as w1 +WHERE v3 = 4; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 ref PRIMARY,v3 v3 5 const 1 100.00 +1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +Warnings: +Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`v3` = 4) and (`test`.`t1`.`i1` = `test`.`t3`.`i3`) and (`test`.`t2`.`i2` = `test`.`t3`.`i3`)) +# This should have the same join order like the query above: +EXPLAIN EXTENDED +SELECT * FROM +(SELECT t1.i1 as i1, t1.v1 as v1, +t2.i2 as i2, t2.v2 as v2, +t3.i3 as i3, t3.v3 as v3 +FROM t1 JOIN t2 on t1.i1 = t2.i2 +LEFT JOIN t3 on t2.i2 = t3.i3 +WHERE t1.i1 = t2.i2 +AND 1 = 1 +) as w2 +WHERE v3 = 4; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 ref PRIMARY,v3 v3 5 const 1 100.00 +1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t3.i3 1 100.00 +Warnings: +Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where ((`test`.`t3`.`v3` = 4) and (`test`.`t1`.`i1` = `test`.`t3`.`i3`) and (`test`.`t2`.`i2` = `test`.`t3`.`i3`)) +drop table t1,t2,t3; SET optimizer_switch=@save_optimizer_switch; set join_cache_level=default; show variables like 'join_cache_level'; -- cgit v1.2.1 From 99cd5a962c53e35620cdeeca35dfab4ab4b3bb4c Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Mon, 23 May 2016 21:15:01 +0300 Subject: MDEV-8989: ORDER BY optimizer ignores equality propagation Variant #4 of the fix. Make ORDER BY optimization functions take into account multiple equalities. This is done in several places: - remove_const() checks whether we can sort the first table in the join, or we need to put rows into temp.table and then sort. - test_if_order_by_key() checks whether there are indexes that can be used to produce the required ordering - make_unireg_sortorder() constructs sort criteria for filesort. --- mysql-test/r/compress.result | 2 +- mysql-test/r/order_by.result | 141 +++++++++++++++++++++++++++++++++++ mysql-test/r/pool_of_threads.result | 2 +- mysql-test/r/select.result | 2 +- mysql-test/r/select_pkeycache.result | 2 +- mysql-test/r/ssl.result | 2 +- mysql-test/r/ssl_compress.result | 2 +- mysql-test/t/order_by.test | 78 +++++++++++++++++++ 8 files changed, 225 insertions(+), 6 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/compress.result b/mysql-test/r/compress.result index 83b50351ba9..f61080d8a77 100644 --- a/mysql-test/r/compress.result +++ b/mysql-test/r/compress.result @@ -607,7 +607,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index a015819e480..3e4a2ce3643 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -2987,3 +2987,144 @@ EXPLAIN SELECT id1 FROM t2 WHERE id2=1 AND id3=1 ORDER BY date DESC LIMIT 0,4; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ref id_23_date,id_234_date id_23_date 2 const,const 3 Using where drop table t1,t2; +# +# MDEV-8989: ORDER BY optimizer ignores equality propagation +# +create table t0(a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1(a int); +insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; +create table t2 ( +pk int primary key, +a int, b int, +filler char(200), +key(a) +); +insert into t2 select a, 1000-a, 1000-a, repeat('abc-',50) from t1 where a<200 limit 200; +create table t3 ( +pk int primary key, +a int, b int, +filler char(200), +key(a) +); +insert into t3 select a, 1000-a, 1000-a, repeat('abc-',50) from t1; +insert into t3 select a+1000, 1000+a, 1000+a, repeat('abc-',50) from t1; +# The optimizer produces an order of 't2,t3' for this join +# +# Case #1 (from the bug report): +# Q1 can take advantage of t2.a to resolve ORDER BY limit w/o sorting +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 index a a 5 NULL 5 Using where +1 SIMPLE t3 ref a a 5 test.t2.a 1 +# +# This is Q2 which used to have "Using temporary; using filesort" but +# has the same query plan as Q1: +# +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 index a a 5 NULL 5 Using where +1 SIMPLE t3 ref a a 5 test.t2.a 1 +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 5; +pk a b pk a b +199 801 801 199 801 801 +198 802 802 198 802 802 +197 803 803 197 803 803 +196 804 804 196 804 804 +195 805 805 195 805 805 +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 5; +pk a b pk a b +199 801 801 199 801 801 +198 802 802 198 802 802 +197 803 803 197 803 803 +196 804 804 196 804 804 +195 805 805 195 805 805 +# +# Case #2: here, only "Using temporary" is removed. "Using filesort" remains. +# +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 25; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 ALL a NULL NULL NULL 200 Using where; Using filesort +1 SIMPLE t3 ref a a 5 test.t2.a 1 +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 25; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 ALL a NULL NULL NULL 200 Using where; Using filesort +1 SIMPLE t3 ref a a 5 test.t2.a 1 +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 25; +pk a b pk a b +199 801 801 199 801 801 +198 802 802 198 802 802 +197 803 803 197 803 803 +196 804 804 196 804 804 +195 805 805 195 805 805 +194 806 806 194 806 806 +193 807 807 193 807 807 +192 808 808 192 808 808 +191 809 809 191 809 809 +190 810 810 190 810 810 +189 811 811 189 811 811 +188 812 812 188 812 812 +187 813 813 187 813 813 +186 814 814 186 814 814 +185 815 815 185 815 815 +184 816 816 184 816 816 +183 817 817 183 817 817 +182 818 818 182 818 818 +181 819 819 181 819 819 +180 820 820 180 820 820 +179 821 821 179 821 821 +178 822 822 178 822 822 +177 823 823 177 823 823 +176 824 824 176 824 824 +175 825 825 175 825 825 +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 25; +pk a b pk a b +199 801 801 199 801 801 +198 802 802 198 802 802 +197 803 803 197 803 803 +196 804 804 196 804 804 +195 805 805 195 805 805 +194 806 806 194 806 806 +193 807 807 193 807 807 +192 808 808 192 808 808 +191 809 809 191 809 809 +190 810 810 190 810 810 +189 811 811 189 811 811 +188 812 812 188 812 812 +187 813 813 187 813 813 +186 814 814 186 814 814 +185 815 815 185 815 815 +184 816 816 184 816 816 +183 817 817 183 817 817 +182 818 818 182 818 818 +181 819 819 181 819 819 +180 820 820 180 820 820 +179 821 821 179 821 821 +178 822 822 178 822 822 +177 823 823 177 823 823 +176 824 824 176 824 824 +175 825 825 175 825 825 +# +# Case #3: single table access (the code that decides whether we need +# "Using temporary" is not invoked) +# +explain select * from t3 where b=a order by a limit 10; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t3 index NULL a 5 NULL 10 Using where +# This must not use filesort. The query plan should be like the query above: +explain select * from t3 where b=a order by b limit 10; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t3 index NULL a 5 NULL 10 Using where +drop table t0,t1,t2,t3; diff --git a/mysql-test/r/pool_of_threads.result b/mysql-test/r/pool_of_threads.result index 9611d7ff43b..ab2ba2eab35 100644 --- a/mysql-test/r/pool_of_threads.result +++ b/mysql-test/r/pool_of_threads.result @@ -603,7 +603,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 9dbf6e0c46b..9c4429caaf5 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -606,7 +606,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/select_pkeycache.result b/mysql-test/r/select_pkeycache.result index 9dbf6e0c46b..9c4429caaf5 100644 --- a/mysql-test/r/select_pkeycache.result +++ b/mysql-test/r/select_pkeycache.result @@ -606,7 +606,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/ssl.result b/mysql-test/r/ssl.result index 57427a228eb..a8c7358dd90 100644 --- a/mysql-test/r/ssl.result +++ b/mysql-test/r/ssl.result @@ -610,7 +610,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/ssl_compress.result b/mysql-test/r/ssl_compress.result index 31f484ab58c..10f3ef729cd 100644 --- a/mysql-test/r/ssl_compress.result +++ b/mysql-test/r/ssl_compress.result @@ -607,7 +607,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index bdd6f3b825f..7f53f994721 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -1997,3 +1997,81 @@ EXPLAIN SELECT id1 FROM t2 WHERE id2=1 AND id3=1 ORDER BY date DESC LIMIT 0,4; drop table t1,t2; +--echo # +--echo # MDEV-8989: ORDER BY optimizer ignores equality propagation +--echo # +create table t0(a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t1(a int); +insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; + +create table t2 ( + pk int primary key, + a int, b int, + filler char(200), + key(a) +); +insert into t2 select a, 1000-a, 1000-a, repeat('abc-',50) from t1 where a<200 limit 200; + +create table t3 ( + pk int primary key, + a int, b int, + filler char(200), + key(a) +); +insert into t3 select a, 1000-a, 1000-a, repeat('abc-',50) from t1; +insert into t3 select a+1000, 1000+a, 1000+a, repeat('abc-',50) from t1; + +--echo # The optimizer produces an order of 't2,t3' for this join +--echo # +--echo # Case #1 (from the bug report): +--echo # Q1 can take advantage of t2.a to resolve ORDER BY limit w/o sorting +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 5; + +--echo # +--echo # This is Q2 which used to have "Using temporary; using filesort" but +--echo # has the same query plan as Q1: +--echo # +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 5; + +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 5; + +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 5; + + +--echo # +--echo # Case #2: here, only "Using temporary" is removed. "Using filesort" remains. +--echo # +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 25; + +explain +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 25; + + +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t2.a limit 25; + + +select t2.pk,t2.a,t2.b,t3.pk,t3.a,t3.b +from t2, t3 where t2.a=t3.a order by t3.a limit 25; + +--echo # +--echo # Case #3: single table access (the code that decides whether we need +--echo # "Using temporary" is not invoked) +--echo # +explain select * from t3 where b=a order by a limit 10; + +--echo # This must not use filesort. The query plan should be like the query above: +explain select * from t3 where b=a order by b limit 10; +drop table t0,t1,t2,t3; + -- cgit v1.2.1 From fb35b9ad07f11c8beb24e579f365eca57bbda28a Mon Sep 17 00:00:00 2001 From: pruet Date: Thu, 26 May 2016 16:45:50 +0700 Subject: Multi-level collation in UCA, Thai sorting with contraction for UTF8. --- mysql-test/r/ctype_uca.result | 255 +++++++++++++++ mysql-test/r/ctype_uca_partitions.result | 86 +++++ mysql-test/r/ctype_uca_th.result | 96 ++++++ mysql-test/r/ctype_utf8_th.result | 521 +++++++++++++++++++++++++++++++ mysql-test/t/ctype_uca.test | 1 + mysql-test/t/ctype_uca_partitions.test | 38 +++ mysql-test/t/ctype_uca_th.test | 34 ++ mysql-test/t/ctype_utf8_th.test | 144 +++++++++ 8 files changed, 1175 insertions(+) create mode 100644 mysql-test/r/ctype_uca_partitions.result create mode 100644 mysql-test/r/ctype_uca_th.result create mode 100644 mysql-test/r/ctype_utf8_th.result create mode 100644 mysql-test/t/ctype_uca_partitions.test create mode 100644 mysql-test/t/ctype_uca_th.test create mode 100644 mysql-test/t/ctype_utf8_th.test (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 2f7cb7156a4..03d20b2651d 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -2706,6 +2706,261 @@ Z,z,Ź,ź,Ż,ż,Ž,ž ǁ ǂ ǃ +select group_concat(c1 order by c1) from t1 group by c1 collate utf8_thai_520_w2; +group_concat(c1 order by c1) +÷ +× +A,a +Á,á +À,à +Ă,ă +Ắ,ắ +Ằ,ằ +Ẵ,ẵ +Ẳ,ẳ +Â,â +Ấ,ấ +Ầ,ầ +Ẫ,ẫ +Ẩ,ẩ +Ǎ,ǎ +Å,å +Ǻ,ǻ +Ä,ä +Ǟ,ǟ +Ã,ã +Ǡ,ǡ +Ą,ą +Ā,ā +Ả,ả +Ạ,ạ +Ặ,ặ +Ậ,ậ +AA,Aa,aA,aa +AE,Ae,aE,ae +Æ,æ +Ǽ,ǽ +Ǣ,ǣ +B,b +ƀ +Ɓ +Ƃ,ƃ +C,c +Ć,ć +Ĉ,ĉ +Č,č +Ċ,ċ +Ç,ç +CH,Ch,cH,ch +Ƈ,ƈ +D,d +Ď,ď +Đ,đ +Ð,ð +DZ,Dz,dZ,dz,DZ,Dz,dz +DŽ,Dž,dŽ,dž,DŽ,Dž,dž +Ɖ +Ɗ +Ƌ,ƌ +E,e +É,é +È,è +Ĕ,ĕ +Ê,ê +Ế,ế +Ề,ề +Ễ,ễ +Ể,ể +Ě,ě +Ë,ë +Ẽ,ẽ +Ė,ė +Ę,ę +Ē,ē +Ẻ,ẻ +Ẹ,ẹ +Ệ,ệ +Ǝ,ǝ +Ə +Ɛ +F,f +Ƒ,ƒ +G,g +Ǵ,ǵ +Ğ,ğ +Ĝ,ĝ +Ǧ,ǧ +Ġ,ġ +Ģ,ģ +Ǥ,ǥ +Ɠ +Ɣ +Ƣ,ƣ +H,h +Ĥ,ĥ +Ħ,ħ +ƕ,Ƕ +I,i +Í,í +Ì,ì +Ĭ,ĭ +Î,î +Ǐ,ǐ +Ï,ï +Ĩ,ĩ +İ +Į,į +Ī,ī +Ỉ,ỉ +Ị,ị +IJ,Ij,iJ,ij,IJ,ij +ı +Ɨ +Ɩ +J,j +Ĵ,ĵ +ǰ +K,k +Ǩ,ǩ +Ķ,ķ +Ƙ,ƙ +L,l +Ĺ,ĺ +Ľ,ľ +Ļ,ļ +Ł,ł +Ŀ,ŀ +LJ,Lj,lJ,lj,LJ,Lj,lj +LL,Ll,lL,ll +ƚ +ƛ +M,m +N,n +Ń,ń +Ǹ,ǹ +Ň,ň +Ñ,ñ +Ņ,ņ +NJ,Nj,nJ,nj,NJ,Nj,nj +Ɲ +ƞ +Ŋ,ŋ +O,o +Ó,ó +Ò,ò +Ŏ,ŏ +Ô,ô +Ố,ố +Ồ,ồ +Ỗ,ỗ +Ổ,ổ +Ǒ,ǒ +Ö,ö +Ő,ő +Õ,õ +Ø,ø +Ǿ,ǿ +Ǫ,ǫ +Ǭ,ǭ +Ō,ō +Ỏ,ỏ +Ơ,ơ +Ớ,ớ +Ờ,ờ +Ỡ,ỡ +Ở,ở +Ợ,ợ +Ọ,ọ +Ộ,ộ +OE,Oe,oE,oe +Œ,œ +Ɔ +Ɵ +P,p +Ƥ,ƥ +Q,q +ĸ +R,r +Ŕ,ŕ +Ř,ř +Ŗ,ŗ +RR,Rr,rR,rr +Ʀ +S,s +Ś,ś +Ŝ,ŝ +Š,š +Ş,ş +ſ +SS,Ss,sS,ss +ß +Ʃ +ƪ +T,t +Ť,ť +Ţ,ţ +ƾ +Ŧ,ŧ +ƫ +Ƭ,ƭ +Ʈ +U,u +Ú,ú +Ù,ù +Ŭ,ŭ +Û,û +Ǔ,ǔ +Ů,ů +Ü,ü +Ǘ,ǘ +Ǜ,ǜ +Ǚ,ǚ +Ǖ,ǖ +Ű,ű +Ũ,ũ +Ų,ų +Ū,ū +Ủ,ủ +Ư,ư +Ứ,ứ +Ừ,ừ +Ữ,ữ +Ử,ử +Ự,ự +Ụ,ụ +Ɯ +Ʊ +V,v +Ʋ +W,w +Ŵ,ŵ +X,x +Y,y +Ý,ý +Ŷ,ŷ +ÿ,Ÿ +Ƴ,ƴ +Z,z +Ź,ź +Ž,ž +Ż,ż +ƍ +Ƶ,ƶ +Ʒ +Ǯ,ǯ +Ƹ,ƹ +ƺ +Þ,þ +ƿ,Ƿ +ƻ +Ƨ,ƨ +Ƽ,ƽ +Ƅ,ƅ +ʼn +ǀ +ǁ +ǂ +ǃ ALTER TABLE t1 CONVERT TO CHARACTER SET ucs2 COLLATE ucs2_bin; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_unicode_ci; GROUP_CONCAT(c1 ORDER BY c1) diff --git a/mysql-test/r/ctype_uca_partitions.result b/mysql-test/r/ctype_uca_partitions.result new file mode 100644 index 00000000000..11d4e82e27b --- /dev/null +++ b/mysql-test/r/ctype_uca_partitions.result @@ -0,0 +1,86 @@ +SET NAMES utf8; +CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2) +PARTITION BY KEY(c1) PARTITIONS 3; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (c1) +PARTITIONS 3 */ +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +INSERT INTO t1 VALUES ('B'); +INSERT INTO t1 VALUES ('C'); +INSERT INTO t1 VALUES ('D'); +INSERT INTO t1 VALUES ('E'); +INSERT INTO t1 VALUES ('F'); +INSERT INTO t1 VALUES ('G'); +INSERT INTO t1 VALUES ('H'); +INSERT INTO t1 VALUES ('I'); +INSERT INTO t1 VALUES ('J'); +INSERT INTO t1 VALUES ('K'); +INSERT INTO t1 VALUES ('L'),('Ĺ'),('Ļ'),('Ľ'),('Ŀ'),('Ł'); +INSERT INTO t1 VALUES ('M'); +INSERT INTO t1 VALUES ('N'); +INSERT INTO t1 VALUES ('O'),('Ò'),('Ó'),('Ô'),('Õ'),('Ö'),('Ø'); +INSERT INTO t1 VALUES ('P'); +INSERT INTO t1 VALUES ('Q'); +INSERT INTO t1 VALUES ('R'); +INSERT INTO t1 VALUES ('S'); +INSERT INTO t1 VALUES ('T'); +INSERT INTO t1 VALUES ('U'); +INSERT INTO t1 VALUES ('V'); +INSERT INTO t1 VALUES ('W'); +INSERT INTO t1 VALUES ('X'); +INSERT INTO t1 VALUES ('Y'); +INSERT INTO t1 VALUES ('Z'); +SELECT * FROM t1 PARTITION (p0) ORDER BY c1; +c1 +J +K +L +Ĺ +Ľ +Ļ +Ł +Ŀ +M +Q +R +T +V +X +SELECT * FROM t1 PARTITION (p1) ORDER BY c1; +c1 +A +Á +À + +Å +Ä +à +D +E +F +G +I +N +S +U +W +Z +SELECT * FROM t1 PARTITION (p2) ORDER BY c1; +c1 +B +C +H +O +Ó +Ò +Ô +Ö +Õ +Ø +P +Y +DROP TABLE t1; diff --git a/mysql-test/r/ctype_uca_th.result b/mysql-test/r/ctype_uca_th.result new file mode 100644 index 00000000000..6da8840ad75 --- /dev/null +++ b/mysql-test/r/ctype_uca_th.result @@ -0,0 +1,96 @@ +SET NAMES utf8; +# +# Testing strnxfrm +# +CREATE TABLE t1 (a VARCHAR(3) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +20 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +2020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +20 020A020A020A020A0020002000200020 +2020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +20 020A020A020A020A +2020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 (a CHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; diff --git a/mysql-test/r/ctype_utf8_th.result b/mysql-test/r/ctype_utf8_th.result new file mode 100644 index 00000000000..4fdb7440231 --- /dev/null +++ b/mysql-test/r/ctype_utf8_th.result @@ -0,0 +1,521 @@ +DROP TABLE IF EXISTS t1; +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +ALTER TABLE t1 +MODIFY a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_thai_520_w2, +ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +ADD KEY a_id (a, id); +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test index 3e5fa873e9b..4cc49af1685 100644 --- a/mysql-test/t/ctype_uca.test +++ b/mysql-test/t/ctype_uca.test @@ -70,6 +70,7 @@ select group_concat(c1 order by c1) from t1 group by c1 collate utf8_croatian_ci select group_concat(c1 order by c1) from t1 group by c1 collate utf8_german2_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_unicode_520_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_vietnamese_ci; +select group_concat(c1 order by c1) from t1 group by c1 collate utf8_thai_520_w2; ALTER TABLE t1 CONVERT TO CHARACTER SET ucs2 COLLATE ucs2_bin; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_unicode_ci; diff --git a/mysql-test/t/ctype_uca_partitions.test b/mysql-test/t/ctype_uca_partitions.test new file mode 100644 index 00000000000..5734bb52008 --- /dev/null +++ b/mysql-test/t/ctype_uca_partitions.test @@ -0,0 +1,38 @@ +--source include/have_partition.inc + +SET NAMES utf8; + +CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2) +PARTITION BY KEY(c1) PARTITIONS 3; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +INSERT INTO t1 VALUES ('B'); +INSERT INTO t1 VALUES ('C'); +INSERT INTO t1 VALUES ('D'); +INSERT INTO t1 VALUES ('E'); +INSERT INTO t1 VALUES ('F'); +INSERT INTO t1 VALUES ('G'); +INSERT INTO t1 VALUES ('H'); +INSERT INTO t1 VALUES ('I'); +INSERT INTO t1 VALUES ('J'); +INSERT INTO t1 VALUES ('K'); +INSERT INTO t1 VALUES ('L'),('Ĺ'),('Ļ'),('Ľ'),('Ŀ'),('Ł'); +INSERT INTO t1 VALUES ('M'); +INSERT INTO t1 VALUES ('N'); +INSERT INTO t1 VALUES ('O'),('Ò'),('Ó'),('Ô'),('Õ'),('Ö'),('Ø'); +INSERT INTO t1 VALUES ('P'); +INSERT INTO t1 VALUES ('Q'); +INSERT INTO t1 VALUES ('R'); +INSERT INTO t1 VALUES ('S'); +INSERT INTO t1 VALUES ('T'); +INSERT INTO t1 VALUES ('U'); +INSERT INTO t1 VALUES ('V'); +INSERT INTO t1 VALUES ('W'); +INSERT INTO t1 VALUES ('X'); +INSERT INTO t1 VALUES ('Y'); +INSERT INTO t1 VALUES ('Z'); + +SELECT * FROM t1 PARTITION (p0) ORDER BY c1; +SELECT * FROM t1 PARTITION (p1) ORDER BY c1; +SELECT * FROM t1 PARTITION (p2) ORDER BY c1; +DROP TABLE t1; diff --git a/mysql-test/t/ctype_uca_th.test b/mysql-test/t/ctype_uca_th.test new file mode 100644 index 00000000000..19094962380 --- /dev/null +++ b/mysql-test/t/ctype_uca_th.test @@ -0,0 +1,34 @@ + + +SET NAMES utf8; + + +--echo # +--echo # Testing strnxfrm +--echo # + +CREATE TABLE t1 (a VARCHAR(3) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 (a CHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; + +ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +DROP TABLE t1; + +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +SELECT * FROM t1 ORDER BY a DESC; +DROP TABLE t1; diff --git a/mysql-test/t/ctype_utf8_th.test b/mysql-test/t/ctype_utf8_th.test new file mode 100644 index 00000000000..986174f86af --- /dev/null +++ b/mysql-test/t/ctype_utf8_th.test @@ -0,0 +1,144 @@ +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# +# Test Unicode Thai collations based on libthai testcases +# + +SET NAMES utf8; + +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); + +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); + +# Sort the table according to binary 'a' +# To avoid problems with unpredictable order or 'AA' and 'aa' +ALTER TABLE t1 ORDER BY a; + +ALTER TABLE t1 + MODIFY a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_thai_520_w2, + ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + ADD KEY a_id (a, id); + +--echo # +--echo # Ascending sort, using filesort +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +SELECT a FROM t1 ORDER BY a, BINARY a; + +--echo # +--echo # Descending sort, using filesort +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; + + +--echo # +--echo # Ascending sort, using index +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +SELECT a FROM t1 ORDER BY a, id; + +--echo # +--echo # Descending sort, using index +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +SELECT a FROM t1 ORDER BY a DESC, id DESC; + +DROP TABLE t1; -- cgit v1.2.1 From 29db3b5e5c3395e1ae71e3cc5235f97f30c24888 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 26 May 2016 22:56:28 +0400 Subject: Clean-ups for MDEV-10132 utf8_thai_520_w2 collation: - Changing strnxfrm_multiply from 8 to 4, as agreed with Pruet Boonma - Adjusting tests --- mysql-test/r/ctype_uca_th.result | 5 +++++ mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result | 1 + mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result | 1 + mysql-test/suite/sys_vars/inc/collation_basic.inc | 2 ++ mysql-test/suite/sys_vars/r/collation_connection_basic.result | 8 ++++++++ mysql-test/suite/sys_vars/r/collation_database_basic.result | 8 ++++++++ mysql-test/suite/sys_vars/r/collation_server_basic.result | 8 ++++++++ mysql-test/t/ctype_uca_th.test | 3 +++ 8 files changed, 36 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_uca_th.result b/mysql-test/r/ctype_uca_th.result index 6da8840ad75..f41e0b7cc7c 100644 --- a/mysql-test/r/ctype_uca_th.result +++ b/mysql-test/r/ctype_uca_th.result @@ -1,3 +1,8 @@ +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE 'utf8_thai_520_w2'; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +578 4 utf8_thai_520_w2 utf8 SET NAMES utf8; # # Testing strnxfrm diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result index 02805c41cf7..a37a9218aa2 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result @@ -84,6 +84,7 @@ utf8_vietnamese_ci utf8 215 # # utf8_general_mysql500_ci utf8 223 # # utf8_croatian_ci utf8 576 # # utf8_myanmar_ci utf8 577 # # +utf8_thai_520_w2 utf8 578 # # ucs2_general_ci ucs2 35 Yes # # ucs2_bin ucs2 90 # # ucs2_unicode_ci ucs2 128 # # diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result index 501bd95cf55..66b6a63121e 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result @@ -84,6 +84,7 @@ utf8_vietnamese_ci utf8 215 # # utf8_general_mysql500_ci utf8 223 # # utf8_croatian_ci utf8 576 # # utf8_myanmar_ci utf8 577 # # +utf8_thai_520_w2 utf8 578 # # ucs2_general_ci ucs2 35 Yes # # ucs2_bin ucs2 90 # # ucs2_unicode_ci ucs2 128 # # diff --git a/mysql-test/suite/sys_vars/inc/collation_basic.inc b/mysql-test/suite/sys_vars/inc/collation_basic.inc index be8ae36eeb8..14b9ae4af2a 100644 --- a/mysql-test/suite/sys_vars/inc/collation_basic.inc +++ b/mysql-test/suite/sys_vars/inc/collation_basic.inc @@ -152,6 +152,8 @@ eval SET $collation_variable = utf8_esperanto_ci; eval SELECT $collation_variable; eval SET $collation_variable = utf8_hungarian_ci; eval SELECT $collation_variable; +eval SET $collation_variable = utf8_thai_520_w2; +eval SELECT $collation_variable; eval SET $collation_variable = ucs2_general_ci; eval SELECT $collation_variable; eval SET $collation_variable = ucs2_bin; diff --git a/mysql-test/suite/sys_vars/r/collation_connection_basic.result b/mysql-test/suite/sys_vars/r/collation_connection_basic.result index c8ce41cfe88..5f8d64e8fa3 100644 --- a/mysql-test/suite/sys_vars/r/collation_connection_basic.result +++ b/mysql-test/suite/sys_vars/r/collation_connection_basic.result @@ -374,6 +374,10 @@ SET @@session.collation_connection = utf8_hungarian_ci; SELECT @@session.collation_connection; @@session.collation_connection utf8_hungarian_ci +SET @@session.collation_connection = utf8_thai_520_w2; +SELECT @@session.collation_connection; +@@session.collation_connection +utf8_thai_520_w2 SET @@session.collation_connection = ucs2_general_ci; SELECT @@session.collation_connection; @@session.collation_connection @@ -883,6 +887,10 @@ SET @@global.collation_connection = utf8_hungarian_ci; SELECT @@global.collation_connection; @@global.collation_connection utf8_hungarian_ci +SET @@global.collation_connection = utf8_thai_520_w2; +SELECT @@global.collation_connection; +@@global.collation_connection +utf8_thai_520_w2 SET @@global.collation_connection = ucs2_general_ci; SELECT @@global.collation_connection; @@global.collation_connection diff --git a/mysql-test/suite/sys_vars/r/collation_database_basic.result b/mysql-test/suite/sys_vars/r/collation_database_basic.result index efe9638c5f6..5a218167bdb 100644 --- a/mysql-test/suite/sys_vars/r/collation_database_basic.result +++ b/mysql-test/suite/sys_vars/r/collation_database_basic.result @@ -376,6 +376,10 @@ SET @@session.collation_database = utf8_hungarian_ci; SELECT @@session.collation_database; @@session.collation_database utf8_hungarian_ci +SET @@session.collation_database = utf8_thai_520_w2; +SELECT @@session.collation_database; +@@session.collation_database +utf8_thai_520_w2 SET @@session.collation_database = ucs2_general_ci; SELECT @@session.collation_database; @@session.collation_database @@ -885,6 +889,10 @@ SET @@global.collation_database = utf8_hungarian_ci; SELECT @@global.collation_database; @@global.collation_database utf8_hungarian_ci +SET @@global.collation_database = utf8_thai_520_w2; +SELECT @@global.collation_database; +@@global.collation_database +utf8_thai_520_w2 SET @@global.collation_database = ucs2_general_ci; SELECT @@global.collation_database; @@global.collation_database diff --git a/mysql-test/suite/sys_vars/r/collation_server_basic.result b/mysql-test/suite/sys_vars/r/collation_server_basic.result index e60f3a3041a..352aeb9ce15 100644 --- a/mysql-test/suite/sys_vars/r/collation_server_basic.result +++ b/mysql-test/suite/sys_vars/r/collation_server_basic.result @@ -373,6 +373,10 @@ SET @@session.collation_server = utf8_hungarian_ci; SELECT @@session.collation_server; @@session.collation_server utf8_hungarian_ci +SET @@session.collation_server = utf8_thai_520_w2; +SELECT @@session.collation_server; +@@session.collation_server +utf8_thai_520_w2 SET @@session.collation_server = ucs2_general_ci; SELECT @@session.collation_server; @@session.collation_server @@ -882,6 +886,10 @@ SET @@global.collation_server = utf8_hungarian_ci; SELECT @@global.collation_server; @@global.collation_server utf8_hungarian_ci +SET @@global.collation_server = utf8_thai_520_w2; +SELECT @@global.collation_server; +@@global.collation_server +utf8_thai_520_w2 SET @@global.collation_server = ucs2_general_ci; SELECT @@global.collation_server; @@global.collation_server diff --git a/mysql-test/t/ctype_uca_th.test b/mysql-test/t/ctype_uca_th.test index 19094962380..ac344fc6fad 100644 --- a/mysql-test/t/ctype_uca_th.test +++ b/mysql-test/t/ctype_uca_th.test @@ -1,4 +1,7 @@ +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE 'utf8_thai_520_w2'; SET NAMES utf8; -- cgit v1.2.1 From a8422fa241db4779c68df219e48130b11ececc99 Mon Sep 17 00:00:00 2001 From: iangilfillan Date: Fri, 27 May 2016 18:25:14 +0200 Subject: Update sponsors --- mysql-test/r/contributors.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/r/contributors.result b/mysql-test/r/contributors.result index 1820c0a5f06..1e01ca81990 100644 --- a/mysql-test/r/contributors.result +++ b/mysql-test/r/contributors.result @@ -7,7 +7,7 @@ Visma http://visma.com Member of the MariaDB Foundation Nexedi http://www.nexedi.com Member of the MariaDB Foundation Acronis http://www.acronis.com Member of the MariaDB Foundation Verkkokauppa.com Finland Sponsor of the MariaDB Foundation -Webyog Bangalore Sponsor of the MariaDB Foundation +Virtuozzo https://virtuozzo.com/ Sponsor of the MariaDB Foundation Google USA Sponsoring encryption, parallel replication and GTID Facebook USA Sponsoring non-blocking API, LIMIT ROWS EXAMINED etc Ronald Bradford Brisbane, Australia EFF contribution for UC2006 Auction -- cgit v1.2.1 From a8cd030ee0931ba257afef75cfd79eabb15f2c39 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 30 May 2016 13:07:43 +0400 Subject: Adding LIKE range tests for tricky characters U+0425, U+045F, U+2525, U+5F5F. They have bytes 0x25 and 0x5F. Testing that these bytes are treated as parts of multi-byte characters rather than underscore and percent sign. --- mysql-test/r/ctype_like_range.result | 371 +++++++++++++++++++++++++++++++++++ mysql-test/t/ctype_like_range.test | 4 + 2 files changed, 375 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_like_range.result b/mysql-test/r/ctype_like_range.result index 41080147908..84c4f562190 100644 --- a/mysql-test/r/ctype_like_range.result +++ b/mysql-test/r/ctype_like_range.result @@ -1,3 +1,4 @@ +SET NAMES utf8; DROP TABLE IF EXISTS t1; DROP VIEW IF EXISTS v1; CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a VARBINARY(32)); @@ -284,6 +285,8 @@ id name val 32 mx 63616161616161616161616161616161 32 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8; +INSERT INTO t1 (a) VALUES (_ucs2 0x0425),(_ucs2 0x045F); +INSERT INTO t1 (a) VALUES (_ucs2 0x2525),(_ucs2 0x5F5F); SELECT * FROM v1; id name val 1 a @@ -414,6 +417,22 @@ id name val 32 mn 6361616161 32 mx 6361616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci; SELECT * FROM v1; id name val @@ -545,6 +564,22 @@ id name val 32 mn 6361616161 32 mx 6361616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_czech_ci; SELECT * FROM v1; id name val @@ -676,6 +711,22 @@ id name val 32 mn 6361616161 32 mx 6361616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_danish_ci; SELECT * FROM v1; id name val @@ -807,6 +858,22 @@ id name val 32 mn 6361616161 32 mx 6361616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4; SELECT * FROM v1; id name val @@ -938,6 +1005,22 @@ id name val 32 mn 63616161 32 mx 63616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; SELECT * FROM v1; id name val @@ -1069,6 +1152,22 @@ id name val 32 mn 63616161 32 mx 63616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_czech_ci; SELECT * FROM v1; id name val @@ -1200,6 +1299,22 @@ id name val 32 mn 63616161 32 mx 63616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_danish_ci; SELECT * FROM v1; id name val @@ -1331,6 +1446,22 @@ id name val 32 mn 63616109090909090909090909090909 32 mx 636161EFBFBFEFBFBFEFBFBFEFBFBF20 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci; SELECT * FROM v1; id name val @@ -1462,6 +1593,22 @@ id name val 32 mn 63616161 32 mx 63616161 32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2; SELECT * FROM v1; id name val @@ -1593,6 +1740,22 @@ id name val 32 mn 00630061006100610061006100610061 32 mx 00630061006100610061006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci; SELECT * FROM v1; id name val @@ -1724,6 +1887,22 @@ id name val 32 mn 00630061006100610061006100610061 32 mx 00630061006100610061006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_czech_ci; SELECT * FROM v1; id name val @@ -1855,6 +2034,22 @@ id name val 32 mn 00630061006100610061006100610061 32 mx 00630061006100610061006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_danish_ci; SELECT * FROM v1; id name val @@ -1986,6 +2181,22 @@ id name val 32 mn 00630061006100610061006100610009 32 mx 0063006100610061006100610061FFFF 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16; SELECT * FROM v1; id name val @@ -2117,6 +2328,22 @@ id name val 32 mn 0063006100610061 32 mx 0063006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_unicode_ci; SELECT * FROM v1; id name val @@ -2248,6 +2475,22 @@ id name val 32 mn 0063006100610061 32 mx 0063006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_czech_ci; SELECT * FROM v1; id name val @@ -2379,6 +2622,22 @@ id name val 32 mn 0063006100610061 32 mx 0063006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_danish_ci; SELECT * FROM v1; id name val @@ -2510,6 +2769,22 @@ id name val 32 mn 00630061006100090009000900090009 32 mx 006300610061FFFFFFFFFFFFFFFFFFFF 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_unicode_520_ci; SELECT * FROM v1; id name val @@ -2641,6 +2916,22 @@ id name val 32 mn 0063006100610061 32 mx 0063006100610061 32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32; SELECT * FROM v1; id name val @@ -2772,6 +3063,22 @@ id name val 32 mn 00000063000000610000006100000061 32 mx 00000063000000610000006100000061 32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_unicode_ci; SELECT * FROM v1; id name val @@ -2903,6 +3210,22 @@ id name val 32 mn 00000063000000610000006100000061 32 mx 00000063000000610000006100000061 32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_czech_ci; SELECT * FROM v1; id name val @@ -3034,6 +3357,22 @@ id name val 32 mn 00000063000000610000006100000061 32 mx 00000063000000610000006100000061 32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_danish_ci; SELECT * FROM v1; id name val @@ -3165,6 +3504,22 @@ id name val 32 mn 00000063000000610000006100000009 32 mx 0000006300000061000000610000FFFF 32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_unicode_520_ci; SELECT * FROM v1; id name val @@ -3296,5 +3651,21 @@ id name val 32 mn 00000063000000610000006100000061 32 mx 00000063000000610000006100000061 32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- DROP VIEW v1; DROP TABLE t1; diff --git a/mysql-test/t/ctype_like_range.test b/mysql-test/t/ctype_like_range.test index 02f2f79d168..f251dabe989 100644 --- a/mysql-test/t/ctype_like_range.test +++ b/mysql-test/t/ctype_like_range.test @@ -4,6 +4,8 @@ --source include/have_utf32.inc --source include/have_utf8mb4.inc +SET NAMES utf8; + --disable_warnings DROP TABLE IF EXISTS t1; DROP VIEW IF EXISTS v1; @@ -38,6 +40,8 @@ ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET latin1; SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8; +INSERT INTO t1 (a) VALUES (_ucs2 0x0425),(_ucs2 0x045F); +INSERT INTO t1 (a) VALUES (_ucs2 0x2525),(_ucs2 0x5F5F); SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci; -- cgit v1.2.1 From dd7f3073fb76bf48ebebb982ae2c91614f4d05c6 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 30 May 2016 13:47:57 +0400 Subject: - Moving tests from t/ctype_uca_th.test to include/ctype_uca_w2.inc and including it from t/ctype_uca.test - Deleting r/ctype_uca_th.result --- mysql-test/include/ctype_uca_w2.inc | 52 ++++++++++++++ mysql-test/r/ctype_uca.result | 136 +++++++++++++++++++++++++++++++++++- mysql-test/r/ctype_uca_th.result | 101 -------------------------- mysql-test/t/ctype_uca.test | 5 +- mysql-test/t/ctype_uca_th.test | 37 ---------- 5 files changed, 191 insertions(+), 140 deletions(-) create mode 100644 mysql-test/include/ctype_uca_w2.inc delete mode 100644 mysql-test/r/ctype_uca_th.result delete mode 100644 mysql-test/t/ctype_uca_th.test (limited to 'mysql-test') diff --git a/mysql-test/include/ctype_uca_w2.inc b/mysql-test/include/ctype_uca_w2.inc new file mode 100644 index 00000000000..d3074b82510 --- /dev/null +++ b/mysql-test/include/ctype_uca_w2.inc @@ -0,0 +1,52 @@ +--echo # +--echo # Start of ctype_uca_w2.inc +--echo # + +SELECT @@collation_connection; + +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; + +--echo # +--echo # Testing strnxfrm +--echo # + +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; + +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)', + ' CHARACTER SET ', @@character_set_connection, + ' COLLATE ', @@collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SHOW CREATE TABLE t1; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +SELECT * FROM t1 ORDER BY a DESC; +DROP TABLE t1; + +--echo # +--echo # End of ctype_uca_w2.inc +--echo # diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 03d20b2651d..07a281a11e3 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -13979,7 +13979,141 @@ SELECT * FROM t1 WHERE a='a' AND a=_utf8'a'; a a DROP TABLE t1; -SET NAMES utf8; +SET NAMES utf8 COLLATE utf8_thai_520_w2; +# +# Start of ctype_uca_w2.inc +# +SELECT @@collation_connection; +@@collation_connection +utf8_thai_520_w2 +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +578 4 utf8_thai_520_w2 utf8 +# +# Testing strnxfrm +# +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(3) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +20 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +2020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +20 020A020A020A020A0020002000200020 +2020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +20 020A020A020A020A +2020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)', +' CHARACTER SET ', @@character_set_connection, +' COLLATE ', @@collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; +# +# End of ctype_uca_w2.inc +# # # End of MariaDB-10.1 tests # diff --git a/mysql-test/r/ctype_uca_th.result b/mysql-test/r/ctype_uca_th.result deleted file mode 100644 index f41e0b7cc7c..00000000000 --- a/mysql-test/r/ctype_uca_th.result +++ /dev/null @@ -1,101 +0,0 @@ -SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME -FROM INFORMATION_SCHEMA.COLLATIONS -WHERE COLLATION_NAME LIKE 'utf8_thai_520_w2'; -ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME -578 4 utf8_thai_520_w2 utf8 -SET NAMES utf8; -# -# Testing strnxfrm -# -CREATE TABLE t1 (a VARCHAR(3) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; -HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) - 020A020A020A020A020A020A020A020A00200020002000200020002000200020 -20 020A020A020A020A020A020A020A020A00200020002000200020002000200020 -2020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; -HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) - 020A020A020A020A0020002000200020 -20 020A020A020A020A0020002000200020 -2020 020A020A020A020A0020002000200020 -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; -HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) - 020A020A020A020A -20 020A020A020A020A -2020 020A020A020A020A -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; -HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) - 0020002000200020 -20 0020002000200020 -2020 0020002000200020 -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; -HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) - 0020002000200020 -20 0020002000200020 -2020 0020002000200020 -DROP TABLE t1; -CREATE TABLE t1 (a CHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; -a HEX(WEIGHT_STRING(a LEVEL 2)) -A 0020 -Á 00200032 -À 00200035 - 0020003C -Å 00200043 -Ä 00200047 -à 0020004E -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; -a HEX(WEIGHT_STRING(a LEVEL 2)) -à 0020004E -Ä 00200047 -Å 00200043 - 0020003C -À 00200035 -Á 00200032 -A 0020 -ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; -a HEX(WEIGHT_STRING(a LEVEL 2)) -A 0020 -Á 00200032 -À 00200035 - 0020003C -Å 00200043 -Ä 00200047 -à 0020004E -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; -a HEX(WEIGHT_STRING(a LEVEL 2)) -à 0020004E -Ä 00200047 -Å 00200043 - 0020003C -À 00200035 -Á 00200032 -A 0020 -DROP TABLE t1; -CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); -INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); -SELECT * FROM t1 ORDER BY a; -a -cota -cote -coté -cotë -côte -côté -côtë -cotz -SELECT * FROM t1 ORDER BY a DESC; -a -cotz -côtë -côté -côte -cotë -coté -cote -cota -DROP TABLE t1; diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test index 4cc49af1685..c6e2bb11d5c 100644 --- a/mysql-test/t/ctype_uca.test +++ b/mysql-test/t/ctype_uca.test @@ -642,7 +642,10 @@ SELECT * FROM t1 WHERE a=_utf8'a'; # Make sure this does not return "Illegal mix of collations" SELECT * FROM t1 WHERE a='a' AND a=_utf8'a'; DROP TABLE t1; -SET NAMES utf8; + + +SET NAMES utf8 COLLATE utf8_thai_520_w2; +--source include/ctype_uca_w2.inc --echo # --echo # End of MariaDB-10.1 tests diff --git a/mysql-test/t/ctype_uca_th.test b/mysql-test/t/ctype_uca_th.test deleted file mode 100644 index ac344fc6fad..00000000000 --- a/mysql-test/t/ctype_uca_th.test +++ /dev/null @@ -1,37 +0,0 @@ - -SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME -FROM INFORMATION_SCHEMA.COLLATIONS -WHERE COLLATION_NAME LIKE 'utf8_thai_520_w2'; - -SET NAMES utf8; - - ---echo # ---echo # Testing strnxfrm ---echo # - -CREATE TABLE t1 (a VARCHAR(3) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; -SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; -DROP TABLE t1; - -CREATE TABLE t1 (a CHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; - -ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; -SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; -DROP TABLE t1; - -CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2); -INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); -INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); -SELECT * FROM t1 ORDER BY a; -SELECT * FROM t1 ORDER BY a DESC; -DROP TABLE t1; -- cgit v1.2.1 From c5733e57e73ddf5211c8cb94137db16a96fca51d Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 30 May 2016 14:27:24 +0400 Subject: - Moving ctype_utf8_th.test to ctype_thai.inc and including it from ctype_uca.test. This is to reuse ctype_thai.inc for other Unicode character sets later - Removing separate ctype_uca.result --- mysql-test/include/ctype_thai.inc | 151 +++++++++++ mysql-test/r/ctype_uca.result | 537 ++++++++++++++++++++++++++++++++++++++ mysql-test/r/ctype_utf8_th.result | 521 ------------------------------------ mysql-test/t/ctype_uca.test | 1 + mysql-test/t/ctype_utf8_th.test | 144 ---------- 5 files changed, 689 insertions(+), 665 deletions(-) create mode 100644 mysql-test/include/ctype_thai.inc delete mode 100644 mysql-test/r/ctype_utf8_th.result delete mode 100644 mysql-test/t/ctype_utf8_th.test (limited to 'mysql-test') diff --git a/mysql-test/include/ctype_thai.inc b/mysql-test/include/ctype_thai.inc new file mode 100644 index 00000000000..fb42decff5e --- /dev/null +++ b/mysql-test/include/ctype_thai.inc @@ -0,0 +1,151 @@ +--echo # +--echo # Start of ctype_thai.inc +--echo # + +# +# Test Unicode Thai collations based on libthai testcases +# + +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); + +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); + +# Sort the table according to binary 'a' +# To avoid problems with unpredictable order or 'AA' and 'aa' +ALTER TABLE t1 ORDER BY a; + +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', + ' CHARACTER SET ', @@character_set_connection, + ' COLLATE ', @@collation_connection, + ' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SHOW CREATE TABLE t1; + +--echo # +--echo # Ascending sort, using filesort +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +SELECT a FROM t1 ORDER BY a, BINARY a; + +--echo # +--echo # Descending sort, using filesort +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; + + +--echo # +--echo # Ascending sort, using index +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +SELECT a FROM t1 ORDER BY a, id; + +--echo # +--echo # Descending sort, using index +--echo # +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +SELECT a FROM t1 ORDER BY a DESC, id DESC; + +DROP TABLE t1; + +--echo # +--echo # End of ctype_thai.inc +--echo # diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 07a281a11e3..0a3c02ff68a 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -14115,5 +14115,542 @@ DROP TABLE t1; # End of ctype_uca_w2.inc # # +# Start of ctype_thai.inc +# +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', +' CHARACTER SET ', @@character_set_connection, +' COLLATE ', @@collation_connection, +' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(30) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `a_id` (`a`,`id`) +) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; +# +# End of ctype_thai.inc +# +# # End of MariaDB-10.1 tests # diff --git a/mysql-test/r/ctype_utf8_th.result b/mysql-test/r/ctype_utf8_th.result deleted file mode 100644 index 4fdb7440231..00000000000 --- a/mysql-test/r/ctype_utf8_th.result +++ /dev/null @@ -1,521 +0,0 @@ -DROP TABLE IF EXISTS t1; -SET NAMES utf8; -CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); -INSERT INTO t1 VALUES ('-กระแย่ง'); -INSERT INTO t1 VALUES ('กก'); -INSERT INTO t1 VALUES ('กราบ'); -INSERT INTO t1 VALUES ('ข่าง'); -INSERT INTO t1 VALUES ('ข้าง'); -INSERT INTO t1 VALUES ('ข้างกระดาน'); -INSERT INTO t1 VALUES ('ข้างขึ้น'); -INSERT INTO t1 VALUES ('ข้างควาย'); -INSERT INTO t1 VALUES ('ข้างเงิน'); -INSERT INTO t1 VALUES ('ข้างแรม'); -INSERT INTO t1 VALUES ('ข้างออก'); -INSERT INTO t1 VALUES ('ข้างๆ'); -INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); -INSERT INTO t1 VALUES ('ขาง'); -INSERT INTO t1 VALUES ('แข็ง'); -INSERT INTO t1 VALUES ('แข่ง'); -INSERT INTO t1 VALUES ('แข่งขัน'); -INSERT INTO t1 VALUES ('แข้ง'); -INSERT INTO t1 VALUES ('แข้งขวา'); -INSERT INTO t1 VALUES ('แข็งขัน'); -INSERT INTO t1 VALUES ('ทูลเกล้า'); -INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); -INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); -INSERT INTO t1 VALUES ('บุญญา'); -INSERT INTO t1 VALUES ('บุญ-หลง'); -INSERT INTO t1 VALUES ('บุญหลง'); -INSERT INTO t1 VALUES ('ป่า'); -INSERT INTO t1 VALUES ('ป่าน'); -INSERT INTO t1 VALUES ('ป้า'); -INSERT INTO t1 VALUES ('ป้าน'); -INSERT INTO t1 VALUES ('ป๊า'); -INSERT INTO t1 VALUES ('ป๊าน'); -INSERT INTO t1 VALUES ('ป๋า'); -INSERT INTO t1 VALUES ('ป๋าน'); -INSERT INTO t1 VALUES ('ปา'); -INSERT INTO t1 VALUES ('ปาน'); -INSERT INTO t1 VALUES ('แป้ง'); -INSERT INTO t1 VALUES ('พณิชย์'); -INSERT INTO t1 VALUES ('ม้า'); -INSERT INTO t1 VALUES ('ฯพณฯ'); -INSERT INTO t1 VALUES ('A'); -INSERT INTO t1 VALUES ('a'); -INSERT INTO t1 VALUES ('a\''); -INSERT INTO t1 VALUES ('A-'); -INSERT INTO t1 VALUES ('a-'); -INSERT INTO t1 VALUES ('-a'); -INSERT INTO t1 VALUES ('A.'); -INSERT INTO t1 VALUES ('a.'); -INSERT INTO t1 VALUES ('A-1'); -INSERT INTO t1 VALUES ('aa'); -INSERT INTO t1 VALUES ('AA'); -INSERT INTO t1 VALUES ('A.A.'); -INSERT INTO t1 VALUES ('a.a.'); -INSERT INTO t1 VALUES ('AAA'); -INSERT INTO t1 VALUES ('A.A.A.'); -INSERT INTO t1 VALUES ('AAAA'); -INSERT INTO t1 VALUES ('A.A.A.L.'); -INSERT INTO t1 VALUES ('A.A.A.S.'); -INSERT INTO t1 VALUES ('Aachen'); -INSERT INTO t1 VALUES ('A.A.E.'); -INSERT INTO t1 VALUES ('A.Ae.E.'); -INSERT INTO t1 VALUES ('A.A.E.E.'); -INSERT INTO t1 VALUES ('AAES'); -INSERT INTO t1 VALUES ('AAF'); -INSERT INTO t1 VALUES ('A.Agr'); -INSERT INTO t1 VALUES ('aah'); -INSERT INTO t1 VALUES ('@@@@@'); -INSERT INTO t1 VALUES ('0000'); -INSERT INTO t1 VALUES ('9999'); -INSERT INTO t1 VALUES ('Aalborg'); -INSERT INTO t1 VALUES ('aide'); -INSERT INTO t1 VALUES ('air'); -INSERT INTO t1 VALUES ('@@@air'); -INSERT INTO t1 VALUES ('air@@@'); -INSERT INTO t1 VALUES ('C.A.F'); -INSERT INTO t1 VALUES ('Canon'); -INSERT INTO t1 VALUES ('coop'); -INSERT INTO t1 VALUES ('co-op'); -INSERT INTO t1 VALUES ('COOP'); -INSERT INTO t1 VALUES ('CO-OP'); -INSERT INTO t1 VALUES ('Copenhegen'); -INSERT INTO t1 VALUES ('McArthur'); -INSERT INTO t1 VALUES ('Mc Arthur'); -INSERT INTO t1 VALUES ('Mc Mahon'); -INSERT INTO t1 VALUES ('vice-president'); -INSERT INTO t1 VALUES ('vice versa'); -INSERT INTO t1 VALUES ('vice-versa'); -INSERT INTO t1 VALUES ('10 ลิตร'); -INSERT INTO t1 VALUES ('๑๐ ลิตร'); -INSERT INTO t1 VALUES ('10 litre'); -INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); -INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); -INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); -INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); -INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); -INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); -ALTER TABLE t1 ORDER BY a; -ALTER TABLE t1 -MODIFY a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_thai_520_w2, -ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -ADD KEY a_id (a, id); -# -# Ascending sort, using filesort -# -EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort -SELECT a FROM t1 ORDER BY a, BINARY a; -a --a --กระแย่ง -@@@@@ -@@@air -0000 -10 litre -10 litre (10 ลิตร) -10 litre (๑๐ ลิตร) -10 ลิตร -๑๐ ลิตร -10 ลิตร (10 litre) -๑๐ ลิตร (10 litre) -๑๐ ลิตร [10 litre] -๑๐ ลิตร {10 litre} -9999 -A -a -A- -a- -A-1 -A. -a. -A.A. -a.a. -A.A.A. -A.A.A.L. -A.A.A.S. -A.A.E. -A.A.E.E. -A.Ae.E. -A.Agr -a' -AA -aa -AAA -AAAA -Aachen -AAES -AAF -aah -Aalborg -aide -air -air@@@ -C.A.F -Canon -CO-OP -co-op -COOP -coop -Copenhegen -Mc Arthur -Mc Mahon -McArthur -vice versa -vice-president -vice-versa -กก -กราบ -ขาง -ข่าง -ข้าง -ข้างๆ -ข้างๆ คูๆ -ข้างกระดาน -ข้างขึ้น -ข้างควาย -ข้างเงิน -ข้างแรม -ข้างออก -แข็ง -แข่ง -แข้ง -แข้งขวา -แข็งขัน -แข่งขัน -ทูลเกล้า -ทูลเกล้าทูลกระหม่อม -ทูลเกล้าฯ -บุญ-หลง -บุญญา -บุญหลง -ปา -ป่า -ป้า -ป๊า -ป๋า -ปาน -ป่าน -ป้าน -ป๊าน -ป๋าน -แป้ง -พณิชย์ -ม้า -ฯพณฯ -# -# Descending sort, using filesort -# -EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index; Using filesort -SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; -a -ฯพณฯ -ม้า -พณิชย์ -แป้ง -ป๋าน -ป๊าน -ป้าน -ป่าน -ปาน -ป๋า -ป๊า -ป้า -ป่า -ปา -บุญหลง -บุญญา -บุญ-หลง -ทูลเกล้าฯ -ทูลเกล้าทูลกระหม่อม -ทูลเกล้า -แข่งขัน -แข็งขัน -แข้งขวา -แข้ง -แข่ง -แข็ง -ข้างออก -ข้างแรม -ข้างเงิน -ข้างควาย -ข้างขึ้น -ข้างกระดาน -ข้างๆ คูๆ -ข้างๆ -ข้าง -ข่าง -ขาง -กราบ -กก -vice-versa -vice-president -vice versa -McArthur -Mc Mahon -Mc Arthur -Copenhegen -coop -COOP -co-op -CO-OP -Canon -C.A.F -air@@@ -air -aide -Aalborg -aah -AAF -AAES -Aachen -AAAA -AAA -aa -AA -a' -A.Agr -A.Ae.E. -A.A.E.E. -A.A.E. -A.A.A.S. -A.A.A.L. -A.A.A. -a.a. -A.A. -a. -A. -A-1 -a- -A- -a -A -9999 -๑๐ ลิตร {10 litre} -๑๐ ลิตร [10 litre] -๑๐ ลิตร (10 litre) -10 ลิตร (10 litre) -๑๐ ลิตร -10 ลิตร -10 litre (๑๐ ลิตร) -10 litre (10 ลิตร) -10 litre -0000 -@@@air -@@@@@ --กระแย่ง --a -# -# Ascending sort, using index -# -EXPLAIN SELECT a FROM t1 ORDER BY a, id; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index -SELECT a FROM t1 ORDER BY a, id; -a --a --กระแย่ง -@@@@@ -@@@air -0000 -10 litre -10 litre (10 ลิตร) -10 litre (๑๐ ลิตร) -10 ลิตร -๑๐ ลิตร -10 ลิตร (10 litre) -๑๐ ลิตร (10 litre) -๑๐ ลิตร [10 litre] -๑๐ ลิตร {10 litre} -9999 -A -a -A- -a- -A-1 -A. -a. -A.A. -a.a. -A.A.A. -A.A.A.L. -A.A.A.S. -A.A.E. -A.A.E.E. -A.Ae.E. -A.Agr -a' -AA -aa -AAA -AAAA -Aachen -AAES -AAF -aah -Aalborg -aide -air -air@@@ -C.A.F -Canon -CO-OP -co-op -COOP -coop -Copenhegen -Mc Arthur -Mc Mahon -McArthur -vice versa -vice-president -vice-versa -กก -กราบ -ขาง -ข่าง -ข้าง -ข้างๆ -ข้างๆ คูๆ -ข้างกระดาน -ข้างขึ้น -ข้างควาย -ข้างเงิน -ข้างแรม -ข้างออก -แข็ง -แข่ง -แข้ง -แข้งขวา -แข็งขัน -แข่งขัน -ทูลเกล้า -ทูลเกล้าทูลกระหม่อม -ทูลเกล้าฯ -บุญ-หลง -บุญญา -บุญหลง -ปา -ป่า -ป้า -ป๊า -ป๋า -ปาน -ป่าน -ป้าน -ป๊าน -ป๋าน -แป้ง -พณิชย์ -ม้า -ฯพณฯ -# -# Descending sort, using index -# -EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index NULL a_id 97 NULL 96 Using index -SELECT a FROM t1 ORDER BY a DESC, id DESC; -a -ฯพณฯ -ม้า -พณิชย์ -แป้ง -ป๋าน -ป๊าน -ป้าน -ป่าน -ปาน -ป๋า -ป๊า -ป้า -ป่า -ปา -บุญหลง -บุญญา -บุญ-หลง -ทูลเกล้าฯ -ทูลเกล้าทูลกระหม่อม -ทูลเกล้า -แข่งขัน -แข็งขัน -แข้งขวา -แข้ง -แข่ง -แข็ง -ข้างออก -ข้างแรม -ข้างเงิน -ข้างควาย -ข้างขึ้น -ข้างกระดาน -ข้างๆ คูๆ -ข้างๆ -ข้าง -ข่าง -ขาง -กราบ -กก -vice-versa -vice-president -vice versa -McArthur -Mc Mahon -Mc Arthur -Copenhegen -coop -COOP -co-op -CO-OP -Canon -C.A.F -air@@@ -air -aide -Aalborg -aah -AAF -AAES -Aachen -AAAA -AAA -aa -AA -a' -A.Agr -A.Ae.E. -A.A.E.E. -A.A.E. -A.A.A.S. -A.A.A.L. -A.A.A. -a.a. -A.A. -a. -A. -A-1 -a- -A- -a -A -9999 -๑๐ ลิตร {10 litre} -๑๐ ลิตร [10 litre] -๑๐ ลิตร (10 litre) -10 ลิตร (10 litre) -๑๐ ลิตร -10 ลิตร -10 litre (๑๐ ลิตร) -10 litre (10 ลิตร) -10 litre -0000 -@@@air -@@@@@ --กระแย่ง --a -DROP TABLE t1; diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test index c6e2bb11d5c..670c407e611 100644 --- a/mysql-test/t/ctype_uca.test +++ b/mysql-test/t/ctype_uca.test @@ -646,6 +646,7 @@ DROP TABLE t1; SET NAMES utf8 COLLATE utf8_thai_520_w2; --source include/ctype_uca_w2.inc +--source include/ctype_thai.inc --echo # --echo # End of MariaDB-10.1 tests diff --git a/mysql-test/t/ctype_utf8_th.test b/mysql-test/t/ctype_utf8_th.test deleted file mode 100644 index 986174f86af..00000000000 --- a/mysql-test/t/ctype_utf8_th.test +++ /dev/null @@ -1,144 +0,0 @@ ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings - -# -# Test Unicode Thai collations based on libthai testcases -# - -SET NAMES utf8; - -CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); - -INSERT INTO t1 VALUES ('-กระแย่ง'); -INSERT INTO t1 VALUES ('กก'); -INSERT INTO t1 VALUES ('กราบ'); -INSERT INTO t1 VALUES ('ข่าง'); -INSERT INTO t1 VALUES ('ข้าง'); -INSERT INTO t1 VALUES ('ข้างกระดาน'); -INSERT INTO t1 VALUES ('ข้างขึ้น'); -INSERT INTO t1 VALUES ('ข้างควาย'); -INSERT INTO t1 VALUES ('ข้างเงิน'); -INSERT INTO t1 VALUES ('ข้างแรม'); -INSERT INTO t1 VALUES ('ข้างออก'); -INSERT INTO t1 VALUES ('ข้างๆ'); -INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); -INSERT INTO t1 VALUES ('ขาง'); -INSERT INTO t1 VALUES ('แข็ง'); -INSERT INTO t1 VALUES ('แข่ง'); -INSERT INTO t1 VALUES ('แข่งขัน'); -INSERT INTO t1 VALUES ('แข้ง'); -INSERT INTO t1 VALUES ('แข้งขวา'); -INSERT INTO t1 VALUES ('แข็งขัน'); -INSERT INTO t1 VALUES ('ทูลเกล้า'); -INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); -INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); -INSERT INTO t1 VALUES ('บุญญา'); -INSERT INTO t1 VALUES ('บุญ-หลง'); -INSERT INTO t1 VALUES ('บุญหลง'); -INSERT INTO t1 VALUES ('ป่า'); -INSERT INTO t1 VALUES ('ป่าน'); -INSERT INTO t1 VALUES ('ป้า'); -INSERT INTO t1 VALUES ('ป้าน'); -INSERT INTO t1 VALUES ('ป๊า'); -INSERT INTO t1 VALUES ('ป๊าน'); -INSERT INTO t1 VALUES ('ป๋า'); -INSERT INTO t1 VALUES ('ป๋าน'); -INSERT INTO t1 VALUES ('ปา'); -INSERT INTO t1 VALUES ('ปาน'); -INSERT INTO t1 VALUES ('แป้ง'); -INSERT INTO t1 VALUES ('พณิชย์'); -INSERT INTO t1 VALUES ('ม้า'); -INSERT INTO t1 VALUES ('ฯพณฯ'); -INSERT INTO t1 VALUES ('A'); -INSERT INTO t1 VALUES ('a'); -INSERT INTO t1 VALUES ('a\''); -INSERT INTO t1 VALUES ('A-'); -INSERT INTO t1 VALUES ('a-'); -INSERT INTO t1 VALUES ('-a'); -INSERT INTO t1 VALUES ('A.'); -INSERT INTO t1 VALUES ('a.'); -INSERT INTO t1 VALUES ('A-1'); -INSERT INTO t1 VALUES ('aa'); -INSERT INTO t1 VALUES ('AA'); -INSERT INTO t1 VALUES ('A.A.'); -INSERT INTO t1 VALUES ('a.a.'); -INSERT INTO t1 VALUES ('AAA'); -INSERT INTO t1 VALUES ('A.A.A.'); -INSERT INTO t1 VALUES ('AAAA'); -INSERT INTO t1 VALUES ('A.A.A.L.'); -INSERT INTO t1 VALUES ('A.A.A.S.'); -INSERT INTO t1 VALUES ('Aachen'); -INSERT INTO t1 VALUES ('A.A.E.'); -INSERT INTO t1 VALUES ('A.Ae.E.'); -INSERT INTO t1 VALUES ('A.A.E.E.'); -INSERT INTO t1 VALUES ('AAES'); -INSERT INTO t1 VALUES ('AAF'); -INSERT INTO t1 VALUES ('A.Agr'); -INSERT INTO t1 VALUES ('aah'); -INSERT INTO t1 VALUES ('@@@@@'); -INSERT INTO t1 VALUES ('0000'); -INSERT INTO t1 VALUES ('9999'); -INSERT INTO t1 VALUES ('Aalborg'); -INSERT INTO t1 VALUES ('aide'); -INSERT INTO t1 VALUES ('air'); -INSERT INTO t1 VALUES ('@@@air'); -INSERT INTO t1 VALUES ('air@@@'); -INSERT INTO t1 VALUES ('C.A.F'); -INSERT INTO t1 VALUES ('Canon'); -INSERT INTO t1 VALUES ('coop'); -INSERT INTO t1 VALUES ('co-op'); -INSERT INTO t1 VALUES ('COOP'); -INSERT INTO t1 VALUES ('CO-OP'); -INSERT INTO t1 VALUES ('Copenhegen'); -INSERT INTO t1 VALUES ('McArthur'); -INSERT INTO t1 VALUES ('Mc Arthur'); -INSERT INTO t1 VALUES ('Mc Mahon'); -INSERT INTO t1 VALUES ('vice-president'); -INSERT INTO t1 VALUES ('vice versa'); -INSERT INTO t1 VALUES ('vice-versa'); -INSERT INTO t1 VALUES ('10 ลิตร'); -INSERT INTO t1 VALUES ('๑๐ ลิตร'); -INSERT INTO t1 VALUES ('10 litre'); -INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); -INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); -INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); -INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); -INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); -INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); - -# Sort the table according to binary 'a' -# To avoid problems with unpredictable order or 'AA' and 'aa' -ALTER TABLE t1 ORDER BY a; - -ALTER TABLE t1 - MODIFY a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_thai_520_w2, - ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - ADD KEY a_id (a, id); - ---echo # ---echo # Ascending sort, using filesort ---echo # -EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; -SELECT a FROM t1 ORDER BY a, BINARY a; - ---echo # ---echo # Descending sort, using filesort ---echo # -EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; -SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; - - ---echo # ---echo # Ascending sort, using index ---echo # -EXPLAIN SELECT a FROM t1 ORDER BY a, id; -SELECT a FROM t1 ORDER BY a, id; - ---echo # ---echo # Descending sort, using index ---echo # -EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; -SELECT a FROM t1 ORDER BY a DESC, id DESC; - -DROP TABLE t1; -- cgit v1.2.1 From bc546225c08d46f33bf0630a7755ef568b9ac3cc Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 30 May 2016 16:56:29 +0400 Subject: Adding collations utf8mb4_thai_520_w2, ucs2_thai_520_w2, utf16_thai_520_w2, utf32_thai_520_w2 --- mysql-test/include/ctype_thai.inc | 9 +- mysql-test/include/ctype_uca_w2.inc | 12 +- mysql-test/r/ctype_like_range.result | 735 +++++++++++++++++++++ mysql-test/r/ctype_uca.result | 699 +++++++++++++++++++- mysql-test/r/ctype_utf16_uca.result | 687 +++++++++++++++++++ mysql-test/r/ctype_utf32_uca.result | 687 +++++++++++++++++++ mysql-test/r/ctype_utf8mb4_uca.result | 687 +++++++++++++++++++ .../engines/funcs/r/db_alter_collate_ascii.result | 4 + .../engines/funcs/r/db_alter_collate_utf8.result | 4 + mysql-test/t/ctype_like_range.test | 15 + mysql-test/t/ctype_uca.test | 5 + mysql-test/t/ctype_utf16_uca.test | 13 + mysql-test/t/ctype_utf32_uca.test | 13 + mysql-test/t/ctype_utf8mb4_uca.test | 13 + 14 files changed, 3573 insertions(+), 10 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/include/ctype_thai.inc b/mysql-test/include/ctype_thai.inc index fb42decff5e..f72de9e93b6 100644 --- a/mysql-test/include/ctype_thai.inc +++ b/mysql-test/include/ctype_thai.inc @@ -109,14 +109,19 @@ INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); # To avoid problems with unpredictable order or 'AA' and 'aa' ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', - ' CHARACTER SET ', @@character_set_connection, - ' COLLATE ', @@collation_connection, + ' CHARACTER SET ', @backup_character_set_connection, + ' COLLATE ', @backup_collation_connection, ' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' ' , ADD KEY a_id (a, id)'); PREPARE stmt FROM @stmt; EXECUTE stmt; DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; + SHOW CREATE TABLE t1; --echo # diff --git a/mysql-test/include/ctype_uca_w2.inc b/mysql-test/include/ctype_uca_w2.inc index d3074b82510..86ed7ddd134 100644 --- a/mysql-test/include/ctype_uca_w2.inc +++ b/mysql-test/include/ctype_uca_w2.inc @@ -28,12 +28,18 @@ INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; -SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)', - ' CHARACTER SET ', @@character_set_connection, - ' COLLATE ', @@collation_connection); +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; + +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, + ' CHARACTER SET ', @backup_character_set_connection, + ' COLLATE ', @backup_collation_connection); PREPARE stmt FROM @stmt; EXECUTE stmt; DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; + SHOW CREATE TABLE t1; SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; diff --git a/mysql-test/r/ctype_like_range.result b/mysql-test/r/ctype_like_range.result index 84c4f562190..be66c680e3a 100644 --- a/mysql-test/r/ctype_like_range.result +++ b/mysql-test/r/ctype_like_range.result @@ -874,6 +874,153 @@ id name val 36 mn E5BD9F 36 mx E5BD9F 36 sp -------------------------------- +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; +SELECT * FROM v1; +id name val +1 a +1 mn +1 mx +1 sp -------------------------------- +2 a _ +2 mn 09 +2 mx EFBFBF +2 sp -------------------------------- +3 a % +3 mn 09090909090909090909090909090909 +3 mx EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF20 +3 sp -------------------------------- +4 a \_ +4 mn 5F +4 mx 5F +4 sp -------------------------------- +5 a \% +5 mn 25 +5 mx 25 +5 sp -------------------------------- +6 a \ +6 mn 5C +6 mx 5C +6 sp -------------------------------- +7 a a +7 mn 61 +7 mx 61 +7 sp -------------------------------- +8 a c +8 mn 63 +8 mx 63 +8 sp -------------------------------- +9 a a_ +9 mn 6109 +9 mx 61EFBFBF +9 sp -------------------------------- +10 a c_ +10 mn 6309 +10 mx 63EFBFBF +10 sp -------------------------------- +11 a a% +11 mn 61090909090909090909090909090909 +11 mx 61EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF +11 sp -------------------------------- +12 a c% +12 mn 63090909090909090909090909090909 +12 mx 63EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF +12 sp -------------------------------- +13 a aa +13 mn 6161 +13 mx 6161 +13 sp -------------------------------- +14 a cc +14 mn 6363 +14 mx 6363 +14 sp -------------------------------- +15 a ch +15 mn 6368 +15 mx 6368 +15 sp -------------------------------- +16 a aa_ +16 mn 616109 +16 mx 6161EFBFBF +16 sp -------------------------------- +17 a cc_ +17 mn 636309 +17 mx 6363EFBFBF +17 sp -------------------------------- +18 a ch_ +18 mn 636809 +18 mx 6368EFBFBF +18 sp -------------------------------- +19 a aa% +19 mn 61610909090909090909090909090909 +19 mx 6161EFBFBFEFBFBFEFBFBFEFBFBF2020 +19 sp -------------------------------- +20 a cc% +20 mn 63630909090909090909090909090909 +20 mx 6363EFBFBFEFBFBFEFBFBFEFBFBF2020 +20 sp -------------------------------- +21 a ch% +21 mn 63680909090909090909090909090909 +21 mx 6368EFBFBFEFBFBFEFBFBFEFBFBF2020 +21 sp -------------------------------- +22 a aaa +22 mn 616161 +22 mx 616161 +22 sp -------------------------------- +23 a ccc +23 mn 636363 +23 mx 636363 +23 sp -------------------------------- +24 a cch +24 mn 636368 +24 mx 636368 +24 sp -------------------------------- +25 a aaa_ +25 mn 61616109 +25 mx 616161EFBFBF +25 sp -------------------------------- +26 a ccc_ +26 mn 63636309 +26 mx 636363EFBFBF +26 sp -------------------------------- +27 a cch_ +27 mn 63636809 +27 mx 636368EFBFBF +27 sp -------------------------------- +28 a aaa% +28 mn 61616109090909090909090909090909 +28 mx 616161EFBFBFEFBFBFEFBFBFEFBFBF20 +28 sp -------------------------------- +29 a ccc% +29 mn 63636309090909090909090909090909 +29 mx 636363EFBFBFEFBFBFEFBFBFEFBFBF20 +29 sp -------------------------------- +30 a cch% +30 mn 63636809090909090909090909090909 +30 mx 636368EFBFBFEFBFBFEFBFBFEFBFBF20 +30 sp -------------------------------- +31 a aaaaaaaaaaaaaaaaaaaa +31 mn 6161616161 +31 mx 6161616161 +31 sp -------------------------------- +32 a caaaaaaaaaaaaaaaaaaa +32 mn 6361616161 +32 mx 6361616161 +32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4; SELECT * FROM v1; id name val @@ -1462,6 +1609,153 @@ id name val 36 mn E5BD9F 36 mx E5BD9F 36 sp -------------------------------- +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2; +SELECT * FROM v1; +id name val +1 a +1 mn +1 mx +1 sp -------------------------------- +2 a _ +2 mn 09 +2 mx EFBFBF +2 sp -------------------------------- +3 a % +3 mn 09090909090909090909090909090909 +3 mx EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF20 +3 sp -------------------------------- +4 a \_ +4 mn 5F +4 mx 5F +4 sp -------------------------------- +5 a \% +5 mn 25 +5 mx 25 +5 sp -------------------------------- +6 a \ +6 mn 5C +6 mx 5C +6 sp -------------------------------- +7 a a +7 mn 61 +7 mx 61 +7 sp -------------------------------- +8 a c +8 mn 63 +8 mx 63 +8 sp -------------------------------- +9 a a_ +9 mn 6109 +9 mx 61EFBFBF +9 sp -------------------------------- +10 a c_ +10 mn 6309 +10 mx 63EFBFBF +10 sp -------------------------------- +11 a a% +11 mn 61090909090909090909090909090909 +11 mx 61EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF +11 sp -------------------------------- +12 a c% +12 mn 63090909090909090909090909090909 +12 mx 63EFBFBFEFBFBFEFBFBFEFBFBFEFBFBF +12 sp -------------------------------- +13 a aa +13 mn 6161 +13 mx 6161 +13 sp -------------------------------- +14 a cc +14 mn 6363 +14 mx 6363 +14 sp -------------------------------- +15 a ch +15 mn 6368 +15 mx 6368 +15 sp -------------------------------- +16 a aa_ +16 mn 616109 +16 mx 6161EFBFBF +16 sp -------------------------------- +17 a cc_ +17 mn 636309 +17 mx 6363EFBFBF +17 sp -------------------------------- +18 a ch_ +18 mn 636809 +18 mx 6368EFBFBF +18 sp -------------------------------- +19 a aa% +19 mn 61610909090909090909090909090909 +19 mx 6161EFBFBFEFBFBFEFBFBFEFBFBF2020 +19 sp -------------------------------- +20 a cc% +20 mn 63630909090909090909090909090909 +20 mx 6363EFBFBFEFBFBFEFBFBFEFBFBF2020 +20 sp -------------------------------- +21 a ch% +21 mn 63680909090909090909090909090909 +21 mx 6368EFBFBFEFBFBFEFBFBFEFBFBF2020 +21 sp -------------------------------- +22 a aaa +22 mn 616161 +22 mx 616161 +22 sp -------------------------------- +23 a ccc +23 mn 636363 +23 mx 636363 +23 sp -------------------------------- +24 a cch +24 mn 636368 +24 mx 636368 +24 sp -------------------------------- +25 a aaa_ +25 mn 61616109 +25 mx 616161EFBFBF +25 sp -------------------------------- +26 a ccc_ +26 mn 63636309 +26 mx 636363EFBFBF +26 sp -------------------------------- +27 a cch_ +27 mn 63636809 +27 mx 636368EFBFBF +27 sp -------------------------------- +28 a aaa% +28 mn 61616109090909090909090909090909 +28 mx 616161EFBFBFEFBFBFEFBFBFEFBFBF20 +28 sp -------------------------------- +29 a ccc% +29 mn 63636309090909090909090909090909 +29 mx 636363EFBFBFEFBFBFEFBFBFEFBFBF20 +29 sp -------------------------------- +30 a cch% +30 mn 63636809090909090909090909090909 +30 mx 636368EFBFBFEFBFBFEFBFBFEFBFBF20 +30 sp -------------------------------- +31 a aaaaaaaaaaaaaaaaaaaa +31 mn 61616161 +31 mx 61616161 +31 sp -------------------------------- +32 a caaaaaaaaaaaaaaaaaaa +32 mn 63616161 +32 mx 63616161 +32 sp -------------------------------- +33 a Х +33 mn D0A5 +33 mx D0A5 +33 sp -------------------------------- +34 a џ +34 mn D19F +34 mx D19F +34 sp -------------------------------- +35 a ┥ +35 mn E294A5 +35 mx E294A5 +35 sp -------------------------------- +36 a 彟 +36 mn E5BD9F +36 mx E5BD9F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci; SELECT * FROM v1; id name val @@ -2197,6 +2491,153 @@ id name val 36 mn 5F5F 36 mx 5F5F 36 sp -------------------------------- +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2; +SELECT * FROM v1; +id name val +1 a +1 mn +1 mx +1 sp -------------------------------- +2 a _ +2 mn 0009 +2 mx FFFF +2 sp -------------------------------- +3 a % +3 mn 00090009000900090009000900090009 +3 mx FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3 sp -------------------------------- +4 a \_ +4 mn 005F +4 mx 005F +4 sp -------------------------------- +5 a \% +5 mn 0025 +5 mx 0025 +5 sp -------------------------------- +6 a \ +6 mn 005C +6 mx 005C +6 sp -------------------------------- +7 a a +7 mn 0061 +7 mx 0061 +7 sp -------------------------------- +8 a c +8 mn 0063 +8 mx 0063 +8 sp -------------------------------- +9 a a_ +9 mn 00610009 +9 mx 0061FFFF +9 sp -------------------------------- +10 a c_ +10 mn 00630009 +10 mx 0063FFFF +10 sp -------------------------------- +11 a a% +11 mn 00610009000900090009000900090009 +11 mx 0061FFFFFFFFFFFFFFFFFFFFFFFFFFFF +11 sp -------------------------------- +12 a c% +12 mn 00630009000900090009000900090009 +12 mx 0063FFFFFFFFFFFFFFFFFFFFFFFFFFFF +12 sp -------------------------------- +13 a aa +13 mn 00610061 +13 mx 00610061 +13 sp -------------------------------- +14 a cc +14 mn 00630063 +14 mx 00630063 +14 sp -------------------------------- +15 a ch +15 mn 00630068 +15 mx 00630068 +15 sp -------------------------------- +16 a aa_ +16 mn 006100610009 +16 mx 00610061FFFF +16 sp -------------------------------- +17 a cc_ +17 mn 006300630009 +17 mx 00630063FFFF +17 sp -------------------------------- +18 a ch_ +18 mn 006300680009 +18 mx 00630068FFFF +18 sp -------------------------------- +19 a aa% +19 mn 00610061000900090009000900090009 +19 mx 00610061FFFFFFFFFFFFFFFFFFFFFFFF +19 sp -------------------------------- +20 a cc% +20 mn 00630063000900090009000900090009 +20 mx 00630063FFFFFFFFFFFFFFFFFFFFFFFF +20 sp -------------------------------- +21 a ch% +21 mn 00630068000900090009000900090009 +21 mx 00630068FFFFFFFFFFFFFFFFFFFFFFFF +21 sp -------------------------------- +22 a aaa +22 mn 006100610061 +22 mx 006100610061 +22 sp -------------------------------- +23 a ccc +23 mn 006300630063 +23 mx 006300630063 +23 sp -------------------------------- +24 a cch +24 mn 006300630068 +24 mx 006300630068 +24 sp -------------------------------- +25 a aaa_ +25 mn 0061006100610009 +25 mx 006100610061FFFF +25 sp -------------------------------- +26 a ccc_ +26 mn 0063006300630009 +26 mx 006300630063FFFF +26 sp -------------------------------- +27 a cch_ +27 mn 0063006300680009 +27 mx 006300630068FFFF +27 sp -------------------------------- +28 a aaa% +28 mn 00610061006100090009000900090009 +28 mx 006100610061FFFFFFFFFFFFFFFFFFFF +28 sp -------------------------------- +29 a ccc% +29 mn 00630063006300090009000900090009 +29 mx 006300630063FFFFFFFFFFFFFFFFFFFF +29 sp -------------------------------- +30 a cch% +30 mn 00630063006800090009000900090009 +30 mx 006300630068FFFFFFFFFFFFFFFFFFFF +30 sp -------------------------------- +31 a aaaaaaaaaaaaaaaaaaaa +31 mn 00610061006100610061006100610061 +31 mx 00610061006100610061006100610061 +31 sp -------------------------------- +32 a caaaaaaaaaaaaaaaaaaa +32 mn 00630061006100610061006100610061 +32 mx 00630061006100610061006100610061 +32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16; SELECT * FROM v1; id name val @@ -2785,6 +3226,153 @@ id name val 36 mn 5F5F 36 mx 5F5F 36 sp -------------------------------- +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_thai_520_w2; +SELECT * FROM v1; +id name val +1 a +1 mn +1 mx +1 sp -------------------------------- +2 a _ +2 mn 0009 +2 mx FFFF +2 sp -------------------------------- +3 a % +3 mn 00090009000900090009000900090009 +3 mx FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3 sp -------------------------------- +4 a \_ +4 mn 005F +4 mx 005F +4 sp -------------------------------- +5 a \% +5 mn 0025 +5 mx 0025 +5 sp -------------------------------- +6 a \ +6 mn 005C +6 mx 005C +6 sp -------------------------------- +7 a a +7 mn 0061 +7 mx 0061 +7 sp -------------------------------- +8 a c +8 mn 0063 +8 mx 0063 +8 sp -------------------------------- +9 a a_ +9 mn 00610009 +9 mx 0061FFFF +9 sp -------------------------------- +10 a c_ +10 mn 00630009 +10 mx 0063FFFF +10 sp -------------------------------- +11 a a% +11 mn 00610009000900090009000900090009 +11 mx 0061FFFFFFFFFFFFFFFFFFFFFFFFFFFF +11 sp -------------------------------- +12 a c% +12 mn 00630009000900090009000900090009 +12 mx 0063FFFFFFFFFFFFFFFFFFFFFFFFFFFF +12 sp -------------------------------- +13 a aa +13 mn 00610061 +13 mx 00610061 +13 sp -------------------------------- +14 a cc +14 mn 00630063 +14 mx 00630063 +14 sp -------------------------------- +15 a ch +15 mn 00630068 +15 mx 00630068 +15 sp -------------------------------- +16 a aa_ +16 mn 006100610009 +16 mx 00610061FFFF +16 sp -------------------------------- +17 a cc_ +17 mn 006300630009 +17 mx 00630063FFFF +17 sp -------------------------------- +18 a ch_ +18 mn 006300680009 +18 mx 00630068FFFF +18 sp -------------------------------- +19 a aa% +19 mn 00610061000900090009000900090009 +19 mx 00610061FFFFFFFFFFFFFFFFFFFFFFFF +19 sp -------------------------------- +20 a cc% +20 mn 00630063000900090009000900090009 +20 mx 00630063FFFFFFFFFFFFFFFFFFFFFFFF +20 sp -------------------------------- +21 a ch% +21 mn 00630068000900090009000900090009 +21 mx 00630068FFFFFFFFFFFFFFFFFFFFFFFF +21 sp -------------------------------- +22 a aaa +22 mn 006100610061 +22 mx 006100610061 +22 sp -------------------------------- +23 a ccc +23 mn 006300630063 +23 mx 006300630063 +23 sp -------------------------------- +24 a cch +24 mn 006300630068 +24 mx 006300630068 +24 sp -------------------------------- +25 a aaa_ +25 mn 0061006100610009 +25 mx 006100610061FFFF +25 sp -------------------------------- +26 a ccc_ +26 mn 0063006300630009 +26 mx 006300630063FFFF +26 sp -------------------------------- +27 a cch_ +27 mn 0063006300680009 +27 mx 006300630068FFFF +27 sp -------------------------------- +28 a aaa% +28 mn 00610061006100090009000900090009 +28 mx 006100610061FFFFFFFFFFFFFFFFFFFF +28 sp -------------------------------- +29 a ccc% +29 mn 00630063006300090009000900090009 +29 mx 006300630063FFFFFFFFFFFFFFFFFFFF +29 sp -------------------------------- +30 a cch% +30 mn 00630063006800090009000900090009 +30 mx 006300630068FFFFFFFFFFFFFFFFFFFF +30 sp -------------------------------- +31 a aaaaaaaaaaaaaaaaaaaa +31 mn 0061006100610061 +31 mx 0061006100610061 +31 sp -------------------------------- +32 a caaaaaaaaaaaaaaaaaaa +32 mn 0063006100610061 +32 mx 0063006100610061 +32 sp -------------------------------- +33 a Х +33 mn 0425 +33 mx 0425 +33 sp -------------------------------- +34 a џ +34 mn 045F +34 mx 045F +34 sp -------------------------------- +35 a ┥ +35 mn 2525 +35 mx 2525 +35 sp -------------------------------- +36 a 彟 +36 mn 5F5F +36 mx 5F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_unicode_520_ci; SELECT * FROM v1; id name val @@ -3520,6 +4108,153 @@ id name val 36 mn 00005F5F 36 mx 00005F5F 36 sp -------------------------------- +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_thai_520_w2; +SELECT * FROM v1; +id name val +1 a +1 mn +1 mx +1 sp -------------------------------- +2 a _ +2 mn 00000009 +2 mx 0000FFFF +2 sp -------------------------------- +3 a % +3 mn 00000009000000090000000900000009 +3 mx 0000FFFF0000FFFF0000FFFF0000FFFF +3 sp -------------------------------- +4 a \_ +4 mn 0000005F +4 mx 0000005F +4 sp -------------------------------- +5 a \% +5 mn 00000025 +5 mx 00000025 +5 sp -------------------------------- +6 a \ +6 mn 0000005C +6 mx 0000005C +6 sp -------------------------------- +7 a a +7 mn 00000061 +7 mx 00000061 +7 sp -------------------------------- +8 a c +8 mn 00000063 +8 mx 00000063 +8 sp -------------------------------- +9 a a_ +9 mn 0000006100000009 +9 mx 000000610000FFFF +9 sp -------------------------------- +10 a c_ +10 mn 0000006300000009 +10 mx 000000630000FFFF +10 sp -------------------------------- +11 a a% +11 mn 00000061000000090000000900000009 +11 mx 000000610000FFFF0000FFFF0000FFFF +11 sp -------------------------------- +12 a c% +12 mn 00000063000000090000000900000009 +12 mx 000000630000FFFF0000FFFF0000FFFF +12 sp -------------------------------- +13 a aa +13 mn 0000006100000061 +13 mx 0000006100000061 +13 sp -------------------------------- +14 a cc +14 mn 0000006300000063 +14 mx 0000006300000063 +14 sp -------------------------------- +15 a ch +15 mn 0000006300000068 +15 mx 0000006300000068 +15 sp -------------------------------- +16 a aa_ +16 mn 000000610000006100000009 +16 mx 00000061000000610000FFFF +16 sp -------------------------------- +17 a cc_ +17 mn 000000630000006300000009 +17 mx 00000063000000630000FFFF +17 sp -------------------------------- +18 a ch_ +18 mn 000000630000006800000009 +18 mx 00000063000000680000FFFF +18 sp -------------------------------- +19 a aa% +19 mn 00000061000000610000000900000009 +19 mx 00000061000000610000FFFF0000FFFF +19 sp -------------------------------- +20 a cc% +20 mn 00000063000000630000000900000009 +20 mx 00000063000000630000FFFF0000FFFF +20 sp -------------------------------- +21 a ch% +21 mn 00000063000000680000000900000009 +21 mx 00000063000000680000FFFF0000FFFF +21 sp -------------------------------- +22 a aaa +22 mn 000000610000006100000061 +22 mx 000000610000006100000061 +22 sp -------------------------------- +23 a ccc +23 mn 000000630000006300000063 +23 mx 000000630000006300000063 +23 sp -------------------------------- +24 a cch +24 mn 000000630000006300000068 +24 mx 000000630000006300000068 +24 sp -------------------------------- +25 a aaa_ +25 mn 00000061000000610000006100000009 +25 mx 0000006100000061000000610000FFFF +25 sp -------------------------------- +26 a ccc_ +26 mn 00000063000000630000006300000009 +26 mx 0000006300000063000000630000FFFF +26 sp -------------------------------- +27 a cch_ +27 mn 00000063000000630000006800000009 +27 mx 0000006300000063000000680000FFFF +27 sp -------------------------------- +28 a aaa% +28 mn 00000061000000610000006100000009 +28 mx 0000006100000061000000610000FFFF +28 sp -------------------------------- +29 a ccc% +29 mn 00000063000000630000006300000009 +29 mx 0000006300000063000000630000FFFF +29 sp -------------------------------- +30 a cch% +30 mn 00000063000000630000006800000009 +30 mx 0000006300000063000000680000FFFF +30 sp -------------------------------- +31 a aaaaaaaaaaaaaaaaaaaa +31 mn 00000061000000610000006100000061 +31 mx 00000061000000610000006100000061 +31 sp -------------------------------- +32 a caaaaaaaaaaaaaaaaaaa +32 mn 00000063000000610000006100000061 +32 mx 00000063000000610000006100000061 +32 sp -------------------------------- +33 a Х +33 mn 00000425 +33 mx 00000425 +33 sp -------------------------------- +34 a џ +34 mn 0000045F +34 mx 0000045F +34 sp -------------------------------- +35 a ┥ +35 mn 00002525 +35 mx 00002525 +35 sp -------------------------------- +36 a 彟 +36 mn 00005F5F +36 mx 00005F5F +36 sp -------------------------------- ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_unicode_520_ci; SELECT * FROM v1; id name val diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 0a3c02ff68a..1609e7fc320 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -14052,12 +14052,16 @@ a HEX(WEIGHT_STRING(a LEVEL 2)) À 00200035 Á 00200032 A 0020 -SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)', -' CHARACTER SET ', @@character_set_connection, -' COLLATE ', @@collation_connection); +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection); PREPARE stmt FROM @stmt; EXECUTE stmt; DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -14215,14 +14219,18 @@ INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', -' CHARACTER SET ', @@character_set_connection, -' COLLATE ', @@collation_connection, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection, ' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' ' , ADD KEY a_id (a, id)'); PREPARE stmt FROM @stmt; EXECUTE stmt; DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -14651,6 +14659,687 @@ DROP TABLE t1; # # End of ctype_thai.inc # +SET NAMES utf8; +SET collation_connection=ucs2_thai_520_w2; +# +# Start of ctype_uca_w2.inc +# +SELECT @@collation_connection; +@@collation_connection +ucs2_thai_520_w2 +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +642 4 ucs2_thai_520_w2 ucs2 +# +# Testing strnxfrm +# +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(3) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +0020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +00200020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +0020 020A020A020A020A0020002000200020 +00200020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +0020 020A020A020A020A +00200020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +0020 0020002000200020 +00200020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +0020 0020002000200020 +00200020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(10) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; +# +# End of ctype_uca_w2.inc +# +# +# Start of ctype_thai.inc +# +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection, +' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(30) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `a_id` (`a`,`id`) +) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 67 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 67 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 67 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 67 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; +# +# End of ctype_thai.inc +# # # End of MariaDB-10.1 tests # diff --git a/mysql-test/r/ctype_utf16_uca.result b/mysql-test/r/ctype_utf16_uca.result index ac2ed9b2c5b..1ee06062fb6 100644 --- a/mysql-test/r/ctype_utf16_uca.result +++ b/mysql-test/r/ctype_utf16_uca.result @@ -6605,3 +6605,690 @@ DROP TABLE t1; # # End of MariaDB-10.0 tests # +# +# Start of 10.1 tests +# +SET NAMES utf8; +SET collation_connection=utf16_thai_520_w2; +# +# Start of ctype_uca_w2.inc +# +SELECT @@collation_connection; +@@collation_connection +utf16_thai_520_w2 +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +674 4 utf16_thai_520_w2 utf16 +# +# Testing strnxfrm +# +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(3) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +0020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +00200020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +0020 020A020A020A020A0020002000200020 +00200020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +0020 020A020A020A020A +00200020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +0020 0020002000200020 +00200020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +0020 0020002000200020 +00200020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(10) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; +# +# End of ctype_uca_w2.inc +# +# +# Start of ctype_thai.inc +# +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection, +' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(30) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `a_id` (`a`,`id`) +) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; +# +# End of ctype_thai.inc +# +# +# End of 10.1 tests +# diff --git a/mysql-test/r/ctype_utf32_uca.result b/mysql-test/r/ctype_utf32_uca.result index 89a9e23bf45..dab23a80a43 100644 --- a/mysql-test/r/ctype_utf32_uca.result +++ b/mysql-test/r/ctype_utf32_uca.result @@ -6625,3 +6625,690 @@ DROP TABLE t1; # # End of MariaDB-10.0 tests # +# +# Start of 10.1 tests +# +SET NAMES utf8; +SET collation_connection=utf32_thai_520_w2; +# +# Start of ctype_uca_w2.inc +# +SELECT @@collation_connection; +@@collation_connection +utf32_thai_520_w2 +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +738 4 utf32_thai_520_w2 utf32 +# +# Testing strnxfrm +# +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(3) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +00000020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +0000002000000020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +00000020 020A020A020A020A0020002000200020 +0000002000000020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +00000020 020A020A020A020A +0000002000000020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +00000020 0020002000200020 +0000002000000020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +00000020 0020002000200020 +0000002000000020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(10) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; +# +# End of ctype_uca_w2.inc +# +# +# Start of ctype_thai.inc +# +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection, +' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(30) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `a_id` (`a`,`id`) +) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; +# +# End of ctype_thai.inc +# +# +# End of 10.1 tests +# diff --git a/mysql-test/r/ctype_utf8mb4_uca.result b/mysql-test/r/ctype_utf8mb4_uca.result index 1057b9743f4..b711dfb65c8 100644 --- a/mysql-test/r/ctype_utf8mb4_uca.result +++ b/mysql-test/r/ctype_utf8mb4_uca.result @@ -5315,3 +5315,690 @@ DROP TABLE t1; # # End of MariaDB-10.0 tests # +# +# Start of 10.1 tests +# +SET NAMES utf8; +SET collation_connection=utf8mb4_thai_520_w2; +# +# Start of ctype_uca_w2.inc +# +SELECT @@collation_connection; +@@collation_connection +utf8mb4_thai_520_w2 +SELECT ID, SORTLEN, COLLATION_NAME, CHARACTER_SET_NAME +FROM INFORMATION_SCHEMA.COLLATIONS +WHERE COLLATION_NAME LIKE @@collation_connection; +ID SORTLEN COLLATION_NAME CHARACTER_SET_NAME +610 4 utf8mb4_thai_520_w2 utf8mb4 +# +# Testing strnxfrm +# +CREATE TABLE t1 AS SELECT SPACE(3) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (SPACE(0)),(SPACE(1)),(SPACE(2)); +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(8))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(8))) + 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +20 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +2020 020A020A020A020A020A020A020A020A00200020002000200020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4))) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4))) + 020A020A020A020A0020002000200020 +20 020A020A020A020A0020002000200020 +2020 020A020A020A020A0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 1)) + 020A020A020A020A +20 020A020A020A020A +2020 020A020A020A020A +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; +HEX(a) HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) + 0020002000200020 +20 0020002000200020 +2020 0020002000200020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a CHAR(10)' COLLATE utf8_bin, +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; +a HEX(WEIGHT_STRING(a LEVEL 2)) +A 0020 +Á 00200032 +À 00200035 + 0020003C +Å 00200043 +Ä 00200047 +à 0020004E +SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a DESC; +a HEX(WEIGHT_STRING(a LEVEL 2)) +à 0020004E +Ä 00200047 +Å 00200043 + 0020003C +À 00200035 +Á 00200032 +A 0020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES ('cota'),('cote'),('cotz'); +INSERT INTO t1 VALUES ('coté'),('côte'),('côté'),('cotë'),('côtë'); +SELECT * FROM t1 ORDER BY a; +a +cota +cote +coté +cotë +côte +côté +côtë +cotz +SELECT * FROM t1 ORDER BY a DESC; +a +cotz +côtë +côté +côte +cotë +coté +cote +cota +DROP TABLE t1; +# +# End of ctype_uca_w2.inc +# +# +# Start of ctype_thai.inc +# +CREATE TABLE t1 (a VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin); +INSERT INTO t1 VALUES ('-กระแย่ง'); +INSERT INTO t1 VALUES ('กก'); +INSERT INTO t1 VALUES ('กราบ'); +INSERT INTO t1 VALUES ('ข่าง'); +INSERT INTO t1 VALUES ('ข้าง'); +INSERT INTO t1 VALUES ('ข้างกระดาน'); +INSERT INTO t1 VALUES ('ข้างขึ้น'); +INSERT INTO t1 VALUES ('ข้างควาย'); +INSERT INTO t1 VALUES ('ข้างเงิน'); +INSERT INTO t1 VALUES ('ข้างแรม'); +INSERT INTO t1 VALUES ('ข้างออก'); +INSERT INTO t1 VALUES ('ข้างๆ'); +INSERT INTO t1 VALUES ('ข้างๆ คูๆ'); +INSERT INTO t1 VALUES ('ขาง'); +INSERT INTO t1 VALUES ('แข็ง'); +INSERT INTO t1 VALUES ('แข่ง'); +INSERT INTO t1 VALUES ('แข่งขัน'); +INSERT INTO t1 VALUES ('แข้ง'); +INSERT INTO t1 VALUES ('แข้งขวา'); +INSERT INTO t1 VALUES ('แข็งขัน'); +INSERT INTO t1 VALUES ('ทูลเกล้า'); +INSERT INTO t1 VALUES ('ทูลเกล้าทูลกระหม่อม'); +INSERT INTO t1 VALUES ('ทูลเกล้าฯ'); +INSERT INTO t1 VALUES ('บุญญา'); +INSERT INTO t1 VALUES ('บุญ-หลง'); +INSERT INTO t1 VALUES ('บุญหลง'); +INSERT INTO t1 VALUES ('ป่า'); +INSERT INTO t1 VALUES ('ป่าน'); +INSERT INTO t1 VALUES ('ป้า'); +INSERT INTO t1 VALUES ('ป้าน'); +INSERT INTO t1 VALUES ('ป๊า'); +INSERT INTO t1 VALUES ('ป๊าน'); +INSERT INTO t1 VALUES ('ป๋า'); +INSERT INTO t1 VALUES ('ป๋าน'); +INSERT INTO t1 VALUES ('ปา'); +INSERT INTO t1 VALUES ('ปาน'); +INSERT INTO t1 VALUES ('แป้ง'); +INSERT INTO t1 VALUES ('พณิชย์'); +INSERT INTO t1 VALUES ('ม้า'); +INSERT INTO t1 VALUES ('ฯพณฯ'); +INSERT INTO t1 VALUES ('A'); +INSERT INTO t1 VALUES ('a'); +INSERT INTO t1 VALUES ('a\''); +INSERT INTO t1 VALUES ('A-'); +INSERT INTO t1 VALUES ('a-'); +INSERT INTO t1 VALUES ('-a'); +INSERT INTO t1 VALUES ('A.'); +INSERT INTO t1 VALUES ('a.'); +INSERT INTO t1 VALUES ('A-1'); +INSERT INTO t1 VALUES ('aa'); +INSERT INTO t1 VALUES ('AA'); +INSERT INTO t1 VALUES ('A.A.'); +INSERT INTO t1 VALUES ('a.a.'); +INSERT INTO t1 VALUES ('AAA'); +INSERT INTO t1 VALUES ('A.A.A.'); +INSERT INTO t1 VALUES ('AAAA'); +INSERT INTO t1 VALUES ('A.A.A.L.'); +INSERT INTO t1 VALUES ('A.A.A.S.'); +INSERT INTO t1 VALUES ('Aachen'); +INSERT INTO t1 VALUES ('A.A.E.'); +INSERT INTO t1 VALUES ('A.Ae.E.'); +INSERT INTO t1 VALUES ('A.A.E.E.'); +INSERT INTO t1 VALUES ('AAES'); +INSERT INTO t1 VALUES ('AAF'); +INSERT INTO t1 VALUES ('A.Agr'); +INSERT INTO t1 VALUES ('aah'); +INSERT INTO t1 VALUES ('@@@@@'); +INSERT INTO t1 VALUES ('0000'); +INSERT INTO t1 VALUES ('9999'); +INSERT INTO t1 VALUES ('Aalborg'); +INSERT INTO t1 VALUES ('aide'); +INSERT INTO t1 VALUES ('air'); +INSERT INTO t1 VALUES ('@@@air'); +INSERT INTO t1 VALUES ('air@@@'); +INSERT INTO t1 VALUES ('C.A.F'); +INSERT INTO t1 VALUES ('Canon'); +INSERT INTO t1 VALUES ('coop'); +INSERT INTO t1 VALUES ('co-op'); +INSERT INTO t1 VALUES ('COOP'); +INSERT INTO t1 VALUES ('CO-OP'); +INSERT INTO t1 VALUES ('Copenhegen'); +INSERT INTO t1 VALUES ('McArthur'); +INSERT INTO t1 VALUES ('Mc Arthur'); +INSERT INTO t1 VALUES ('Mc Mahon'); +INSERT INTO t1 VALUES ('vice-president'); +INSERT INTO t1 VALUES ('vice versa'); +INSERT INTO t1 VALUES ('vice-versa'); +INSERT INTO t1 VALUES ('10 ลิตร'); +INSERT INTO t1 VALUES ('๑๐ ลิตร'); +INSERT INTO t1 VALUES ('10 litre'); +INSERT INTO t1 VALUES ('10 litre (10 ลิตร)'); +INSERT INTO t1 VALUES ('10 ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('10 litre (๑๐ ลิตร)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร (10 litre)'); +INSERT INTO t1 VALUES ('๑๐ ลิตร [10 litre]'); +INSERT INTO t1 VALUES ('๑๐ ลิตร {10 litre}'); +ALTER TABLE t1 ORDER BY a; +SET @backup_character_set_connection=@@character_set_connection; +SET @backup_collation_connection=@@collation_connection; +SET NAMES utf8; +SET @stmt= CONCAT('ALTER TABLE t1 MODIFY a VARCHAR(30)', +' CHARACTER SET ', @backup_character_set_connection, +' COLLATE ', @backup_collation_connection, +' , ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' + ' , ADD KEY a_id (a, id)'); +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET collation_connection=@backup_collation_connection; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `a_id` (`a`,`id`) +) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 +# +# Ascending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a, BINARY a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a, BINARY a; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using filesort +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index; Using filesort +SELECT a FROM t1 ORDER BY a DESC, BINARY a DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +# +# Ascending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a, id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a, id; +a +-a +-กระแย่ง +@@@@@ +@@@air +0000 +10 litre +10 litre (10 ลิตร) +10 litre (๑๐ ลิตร) +10 ลิตร +๑๐ ลิตร +10 ลิตร (10 litre) +๑๐ ลิตร (10 litre) +๑๐ ลิตร [10 litre] +๑๐ ลิตร {10 litre} +9999 +A +a +A- +a- +A-1 +A. +a. +A.A. +a.a. +A.A.A. +A.A.A.L. +A.A.A.S. +A.A.E. +A.A.E.E. +A.Ae.E. +A.Agr +a' +AA +aa +AAA +AAAA +Aachen +AAES +AAF +aah +Aalborg +aide +air +air@@@ +C.A.F +Canon +CO-OP +co-op +COOP +coop +Copenhegen +Mc Arthur +Mc Mahon +McArthur +vice versa +vice-president +vice-versa +กก +กราบ +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างๆ คูๆ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างเงิน +ข้างแรม +ข้างออก +แข็ง +แข่ง +แข้ง +แข้งขวา +แข็งขัน +แข่งขัน +ทูลเกล้า +ทูลเกล้าทูลกระหม่อม +ทูลเกล้าฯ +บุญ-หลง +บุญญา +บุญหลง +ปา +ป่า +ป้า +ป๊า +ป๋า +ปาน +ป่าน +ป้าน +ป๊าน +ป๋าน +แป้ง +พณิชย์ +ม้า +ฯพณฯ +# +# Descending sort, using index +# +EXPLAIN SELECT a FROM t1 ORDER BY a DESC, id DESC; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a_id 127 NULL 96 Using index +SELECT a FROM t1 ORDER BY a DESC, id DESC; +a +ฯพณฯ +ม้า +พณิชย์ +แป้ง +ป๋าน +ป๊าน +ป้าน +ป่าน +ปาน +ป๋า +ป๊า +ป้า +ป่า +ปา +บุญหลง +บุญญา +บุญ-หลง +ทูลเกล้าฯ +ทูลเกล้าทูลกระหม่อม +ทูลเกล้า +แข่งขัน +แข็งขัน +แข้งขวา +แข้ง +แข่ง +แข็ง +ข้างออก +ข้างแรม +ข้างเงิน +ข้างควาย +ข้างขึ้น +ข้างกระดาน +ข้างๆ คูๆ +ข้างๆ +ข้าง +ข่าง +ขาง +กราบ +กก +vice-versa +vice-president +vice versa +McArthur +Mc Mahon +Mc Arthur +Copenhegen +coop +COOP +co-op +CO-OP +Canon +C.A.F +air@@@ +air +aide +Aalborg +aah +AAF +AAES +Aachen +AAAA +AAA +aa +AA +a' +A.Agr +A.Ae.E. +A.A.E.E. +A.A.E. +A.A.A.S. +A.A.A.L. +A.A.A. +a.a. +A.A. +a. +A. +A-1 +a- +A- +a +A +9999 +๑๐ ลิตร {10 litre} +๑๐ ลิตร [10 litre] +๑๐ ลิตร (10 litre) +10 ลิตร (10 litre) +๑๐ ลิตร +10 ลิตร +10 litre (๑๐ ลิตร) +10 litre (10 ลิตร) +10 litre +0000 +@@@air +@@@@@ +-กระแย่ง +-a +DROP TABLE t1; +# +# End of ctype_thai.inc +# +# +# End of 10.1 tests +# diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result index a37a9218aa2..ee127d76bcc 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result @@ -114,6 +114,7 @@ ucs2_vietnamese_ci ucs2 151 # # ucs2_general_mysql500_ci ucs2 159 # # ucs2_croatian_ci ucs2 640 # # ucs2_myanmar_ci ucs2 641 # # +ucs2_thai_520_w2 ucs2 642 # # cp866_general_ci cp866 36 Yes # # cp866_bin cp866 68 # # keybcs2_general_ci keybcs2 37 Yes # # @@ -156,6 +157,7 @@ utf8mb4_unicode_520_ci utf8mb4 246 # # utf8mb4_vietnamese_ci utf8mb4 247 # # utf8mb4_croatian_ci utf8mb4 608 # # utf8mb4_myanmar_ci utf8mb4 609 # # +utf8mb4_thai_520_w2 utf8mb4 610 # # cp1251_bulgarian_ci cp1251 14 # # cp1251_ukrainian_ci cp1251 23 # # cp1251_bin cp1251 50 # # @@ -189,6 +191,7 @@ utf16_unicode_520_ci utf16 123 # # utf16_vietnamese_ci utf16 124 # # utf16_croatian_ci utf16 672 # # utf16_myanmar_ci utf16 673 # # +utf16_thai_520_w2 utf16 674 # # utf16le_general_ci utf16le 56 Yes # # utf16le_bin utf16le 62 # # cp1256_general_ci cp1256 57 Yes # # @@ -224,6 +227,7 @@ utf32_unicode_520_ci utf32 182 # # utf32_vietnamese_ci utf32 183 # # utf32_croatian_ci utf32 736 # # utf32_myanmar_ci utf32 737 # # +utf32_thai_520_w2 utf32 738 # # binary binary 63 Yes # # geostd8_general_ci geostd8 92 Yes # # geostd8_bin geostd8 93 # # diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result index 66b6a63121e..46921fcaa8c 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result @@ -114,6 +114,7 @@ ucs2_vietnamese_ci ucs2 151 # # ucs2_general_mysql500_ci ucs2 159 # # ucs2_croatian_ci ucs2 640 # # ucs2_myanmar_ci ucs2 641 # # +ucs2_thai_520_w2 ucs2 642 # # cp866_general_ci cp866 36 Yes # # cp866_bin cp866 68 # # keybcs2_general_ci keybcs2 37 Yes # # @@ -156,6 +157,7 @@ utf8mb4_unicode_520_ci utf8mb4 246 # # utf8mb4_vietnamese_ci utf8mb4 247 # # utf8mb4_croatian_ci utf8mb4 608 # # utf8mb4_myanmar_ci utf8mb4 609 # # +utf8mb4_thai_520_w2 utf8mb4 610 # # cp1251_bulgarian_ci cp1251 14 # # cp1251_ukrainian_ci cp1251 23 # # cp1251_bin cp1251 50 # # @@ -189,6 +191,7 @@ utf16_unicode_520_ci utf16 123 # # utf16_vietnamese_ci utf16 124 # # utf16_croatian_ci utf16 672 # # utf16_myanmar_ci utf16 673 # # +utf16_thai_520_w2 utf16 674 # # utf16le_general_ci utf16le 56 Yes # # utf16le_bin utf16le 62 # # cp1256_general_ci cp1256 57 Yes # # @@ -224,6 +227,7 @@ utf32_unicode_520_ci utf32 182 # # utf32_vietnamese_ci utf32 183 # # utf32_croatian_ci utf32 736 # # utf32_myanmar_ci utf32 737 # # +utf32_thai_520_w2 utf32 738 # # binary binary 63 Yes # # geostd8_general_ci geostd8 92 Yes # # geostd8_bin geostd8 93 # # diff --git a/mysql-test/t/ctype_like_range.test b/mysql-test/t/ctype_like_range.test index f251dabe989..e9387e46eb4 100644 --- a/mysql-test/t/ctype_like_range.test +++ b/mysql-test/t/ctype_like_range.test @@ -56,6 +56,9 @@ SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_danish_ci; SELECT * FROM v1; +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_thai_520_w2; +SELECT * FROM v1; + ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4; SELECT * FROM v1; @@ -71,6 +74,9 @@ SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_danish_ci; SELECT * FROM v1; +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2; +SELECT * FROM v1; + ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci; SELECT * FROM v1; @@ -86,6 +92,9 @@ SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_danish_ci; SELECT * FROM v1; +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2; +SELECT * FROM v1; + ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16; SELECT * FROM v1; @@ -101,6 +110,9 @@ SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_danish_ci; SELECT * FROM v1; +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_thai_520_w2; +SELECT * FROM v1; + ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf16 COLLATE utf16_unicode_520_ci; SELECT * FROM v1; @@ -116,6 +128,9 @@ SELECT * FROM v1; ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_danish_ci; SELECT * FROM v1; +ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_thai_520_w2; +SELECT * FROM v1; + ALTER TABLE t1 MODIFY a VARCHAR(32) CHARACTER SET utf32 COLLATE utf32_unicode_520_ci; SELECT * FROM v1; diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test index 670c407e611..7406bafc5e6 100644 --- a/mysql-test/t/ctype_uca.test +++ b/mysql-test/t/ctype_uca.test @@ -648,6 +648,11 @@ SET NAMES utf8 COLLATE utf8_thai_520_w2; --source include/ctype_uca_w2.inc --source include/ctype_thai.inc +SET NAMES utf8; +SET collation_connection=ucs2_thai_520_w2; +--source include/ctype_uca_w2.inc +--source include/ctype_thai.inc + --echo # --echo # End of MariaDB-10.1 tests --echo # diff --git a/mysql-test/t/ctype_utf16_uca.test b/mysql-test/t/ctype_utf16_uca.test index 63799054ae8..160d5b19d12 100644 --- a/mysql-test/t/ctype_utf16_uca.test +++ b/mysql-test/t/ctype_utf16_uca.test @@ -208,3 +208,16 @@ SET collation_connection=utf16_myanmar_ci; --echo # --echo # End of MariaDB-10.0 tests --echo # + +--echo # +--echo # Start of 10.1 tests +--echo # + +SET NAMES utf8; +SET collation_connection=utf16_thai_520_w2; +--source include/ctype_uca_w2.inc +--source include/ctype_thai.inc + +--echo # +--echo # End of 10.1 tests +--echo # diff --git a/mysql-test/t/ctype_utf32_uca.test b/mysql-test/t/ctype_utf32_uca.test index 6052ea7b334..fb691221db8 100644 --- a/mysql-test/t/ctype_utf32_uca.test +++ b/mysql-test/t/ctype_utf32_uca.test @@ -229,3 +229,16 @@ SET collation_connection=utf32_myanmar_ci; --echo # --echo # End of MariaDB-10.0 tests --echo # + +--echo # +--echo # Start of 10.1 tests +--echo # + +SET NAMES utf8; +SET collation_connection=utf32_thai_520_w2; +--source include/ctype_uca_w2.inc +--source include/ctype_thai.inc + +--echo # +--echo # End of 10.1 tests +--echo # diff --git a/mysql-test/t/ctype_utf8mb4_uca.test b/mysql-test/t/ctype_utf8mb4_uca.test index a5493e78c47..e56c6d7b884 100644 --- a/mysql-test/t/ctype_utf8mb4_uca.test +++ b/mysql-test/t/ctype_utf8mb4_uca.test @@ -70,3 +70,16 @@ SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci; --echo # --echo # End of MariaDB-10.0 tests --echo # + +--echo # +--echo # Start of 10.1 tests +--echo # + +SET NAMES utf8; +SET collation_connection=utf8mb4_thai_520_w2; +--source include/ctype_uca_w2.inc +--source include/ctype_thai.inc + +--echo # +--echo # End of 10.1 tests +--echo # -- cgit v1.2.1 From e0e374783ad5f265b8cf24e0283ecf67c663ba89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Wed, 1 Jun 2016 13:06:14 +0300 Subject: MDEV-9865: Test encryption.innodb-log-encrypt-crash takes too long on debug build Add big_test and not_debug requirements to avoid timeouts. --- mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test b/mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test index 8bb5f9f2c49..cb9a69d036b 100644 --- a/mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test +++ b/mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test @@ -1,5 +1,8 @@ -- source include/have_innodb.inc -- source include/not_embedded.inc +# test takes very long time on debug build +-- source include/not_debug.inc +-- source include/big_test.inc -- source filekeys_plugin.inc call mtr.add_suppression("InnoDB: New log files created, LSN=.*"); -- cgit v1.2.1 From 5a5a54f7b4cb03d8d8bf6199baa52bdc2b5350b7 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 1 Jun 2016 23:43:11 +0300 Subject: MDEV-8989: ORDER BY optimizer ignores equality propagation Post-fix #2: - Update test results - Make the optimization conditional under @@optimizer_switch flag. - The optimization is now disabled by default, so .result files are changed back to be what they were before the MDEV-8989 patch. --- mysql-test/r/compress.result | 2 +- mysql-test/r/mysqld--help.result | 2 +- mysql-test/r/named_pipe.result | 2 +- mysql-test/r/order_by.result | 4 +++ mysql-test/r/pool_of_threads.result | 2 +- mysql-test/r/select.result | 2 +- mysql-test/r/select_pkeycache.result | 2 +- mysql-test/r/shm.result | 2 +- mysql-test/r/ssl.result | 2 +- mysql-test/r/ssl_compress.result | 2 +- .../suite/sys_vars/r/optimizer_switch_basic.result | 36 +++++++++++----------- .../sys_vars/r/sysvars_server_notembedded.result | 8 ++--- mysql-test/t/order_by.test | 6 ++++ 13 files changed, 41 insertions(+), 31 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/compress.result b/mysql-test/r/compress.result index f61080d8a77..83b50351ba9 100644 --- a/mysql-test/r/compress.result +++ b/mysql-test/r/compress.result @@ -607,7 +607,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/mysqld--help.result b/mysql-test/r/mysqld--help.result index f6e7c54745f..93027e2bba4 100644 --- a/mysql-test/r/mysqld--help.result +++ b/mysql-test/r/mysqld--help.result @@ -580,7 +580,7 @@ The following options may be given as the first argument: semijoin_with_cache, join_cache_incremental, join_cache_hashed, join_cache_bka, optimize_join_buffer_size, table_elimination, - extended_keys, exists_to_in + extended_keys, exists_to_in, orderby_uses_equalities --optimizer-use-condition-selectivity=# Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial diff --git a/mysql-test/r/named_pipe.result b/mysql-test/r/named_pipe.result index ddd48f0ba91..6064a716e8a 100644 --- a/mysql-test/r/named_pipe.result +++ b/mysql-test/r/named_pipe.result @@ -601,7 +601,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 3e4a2ce3643..03e7c48951a 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -2990,6 +2990,8 @@ drop table t1,t2; # # MDEV-8989: ORDER BY optimizer ignores equality propagation # +set @tmp_8989=@@optimizer_switch; +set optimizer_switch='orderby_uses_equalities=on'; create table t0(a int); insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); create table t1(a int); @@ -3128,3 +3130,5 @@ explain select * from t3 where b=a order by b limit 10; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 index NULL a 5 NULL 10 Using where drop table t0,t1,t2,t3; +set @@optimizer_switch=@tmp_8989; +set optimizer_switch='orderby_uses_equalities=on'; diff --git a/mysql-test/r/pool_of_threads.result b/mysql-test/r/pool_of_threads.result index ab2ba2eab35..9611d7ff43b 100644 --- a/mysql-test/r/pool_of_threads.result +++ b/mysql-test/r/pool_of_threads.result @@ -603,7 +603,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 9c4429caaf5..9dbf6e0c46b 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -606,7 +606,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/select_pkeycache.result b/mysql-test/r/select_pkeycache.result index 9c4429caaf5..9dbf6e0c46b 100644 --- a/mysql-test/r/select_pkeycache.result +++ b/mysql-test/r/select_pkeycache.result @@ -606,7 +606,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/shm.result b/mysql-test/r/shm.result index a2c38627e9d..b5faecea87b 100644 --- a/mysql-test/r/shm.result +++ b/mysql-test/r/shm.result @@ -601,7 +601,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/ssl.result b/mysql-test/r/ssl.result index a8c7358dd90..57427a228eb 100644 --- a/mysql-test/r/ssl.result +++ b/mysql-test/r/ssl.result @@ -610,7 +610,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/ssl_compress.result b/mysql-test/r/ssl_compress.result index 10f3ef729cd..31f484ab58c 100644 --- a/mysql-test/r/ssl_compress.result +++ b/mysql-test/r/ssl_compress.result @@ -607,7 +607,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result b/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result index 3160fd7c4fb..97fe3957264 100644 --- a/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result +++ b/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result @@ -1,63 +1,63 @@ SET @start_global_value = @@global.optimizer_switch; SELECT @start_global_value; @start_global_value -index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off select @@global.optimizer_switch; @@global.optimizer_switch -index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off select @@session.optimizer_switch; @@session.optimizer_switch -index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off show global variables like 'optimizer_switch'; Variable_name Value -optimizer_switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +optimizer_switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off show session variables like 'optimizer_switch'; Variable_name Value -optimizer_switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +optimizer_switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off select * from information_schema.global_variables where variable_name='optimizer_switch'; VARIABLE_NAME VARIABLE_VALUE -OPTIMIZER_SWITCH index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +OPTIMIZER_SWITCH index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off select * from information_schema.session_variables where variable_name='optimizer_switch'; VARIABLE_NAME VARIABLE_VALUE -OPTIMIZER_SWITCH index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +OPTIMIZER_SWITCH index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off set global optimizer_switch=10; set session optimizer_switch=5; select @@global.optimizer_switch; @@global.optimizer_switch -index_merge=off,index_merge_union=on,index_merge_sort_union=off,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +index_merge=off,index_merge_union=on,index_merge_sort_union=off,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off select @@session.optimizer_switch; @@session.optimizer_switch -index_merge=on,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +index_merge=on,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off set global optimizer_switch="index_merge_sort_union=on"; set session optimizer_switch="index_merge=off"; select @@global.optimizer_switch; @@global.optimizer_switch -index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off select @@session.optimizer_switch; @@session.optimizer_switch -index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off show global variables like 'optimizer_switch'; Variable_name Value -optimizer_switch index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +optimizer_switch index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off show session variables like 'optimizer_switch'; Variable_name Value -optimizer_switch index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +optimizer_switch index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off select * from information_schema.global_variables where variable_name='optimizer_switch'; VARIABLE_NAME VARIABLE_VALUE -OPTIMIZER_SWITCH index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +OPTIMIZER_SWITCH index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off select * from information_schema.session_variables where variable_name='optimizer_switch'; VARIABLE_NAME VARIABLE_VALUE -OPTIMIZER_SWITCH index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +OPTIMIZER_SWITCH index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off set session optimizer_switch="default"; select @@session.optimizer_switch; @@session.optimizer_switch -index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off +index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=off,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=off,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off set optimizer_switch = replace(@@optimizer_switch, '=off', '=on'); Warnings: Warning 1681 'engine_condition_pushdown=on' is deprecated and will be removed in a future release. select @@optimizer_switch; @@optimizer_switch -index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=on,table_elimination=on,extended_keys=on,exists_to_in=on +index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=on,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on set global optimizer_switch=1.1; ERROR 42000: Incorrect argument type to variable 'optimizer_switch' set global optimizer_switch=1e1; @@ -69,4 +69,4 @@ ERROR 42000: Variable 'optimizer_switch' can't be set to the value of 'foobar' SET @@global.optimizer_switch = @start_global_value; SELECT @@global.optimizer_switch; @@global.optimizer_switch -index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index 81cc32016e2..e33decf0f0d 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -2642,17 +2642,17 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_SWITCH -SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on -GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off +GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off GLOBAL_VALUE_ORIGIN COMPILE-TIME -DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off VARIABLE_SCOPE SESSION VARIABLE_TYPE FLAGSET VARIABLE_COMMENT Fine-tune the optimizer behavior NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,default +ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,orderby_uses_equalities,default READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_USE_CONDITION_SELECTIVITY diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 7f53f994721..13c8db5a481 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -2000,6 +2000,8 @@ drop table t1,t2; --echo # --echo # MDEV-8989: ORDER BY optimizer ignores equality propagation --echo # +set @tmp_8989=@@optimizer_switch; +set optimizer_switch='orderby_uses_equalities=on'; create table t0(a int); insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); @@ -2075,3 +2077,7 @@ explain select * from t3 where b=a order by a limit 10; explain select * from t3 where b=a order by b limit 10; drop table t0,t1,t2,t3; +set @@optimizer_switch=@tmp_8989; + +set optimizer_switch='orderby_uses_equalities=on'; + -- cgit v1.2.1 From 685c63b698fd3a939469ba97ef4f236439447f49 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Thu, 2 Jun 2016 15:19:52 +0300 Subject: Update test results part#2. --- mysql-test/r/named_pipe.result | 2 +- mysql-test/r/shm.result | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/named_pipe.result b/mysql-test/r/named_pipe.result index 6064a716e8a..ddd48f0ba91 100644 --- a/mysql-test/r/named_pipe.result +++ b/mysql-test/r/named_pipe.result @@ -601,7 +601,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/shm.result b/mysql-test/r/shm.result index b5faecea87b..a2c38627e9d 100644 --- a/mysql-test/r/shm.result +++ b/mysql-test/r/shm.result @@ -601,7 +601,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.fld1 1 Using where; Using index explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort +1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using temporary; Using filesort 1 SIMPLE t3 ref period period 4 test.t1.period 4181 explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10; id select_type table type possible_keys key key_len ref rows Extra -- cgit v1.2.1 From 825427fa9f4fa5c56301f392d10d254f9eca8a54 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 3 Jun 2016 10:58:32 +0300 Subject: Update test results --- mysql-test/suite/sys_vars/r/sysvars_server_embedded.result | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result index b5676810987..8b373d7d77f 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result @@ -2446,17 +2446,17 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_SWITCH -SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on -GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +SESSION_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off +GLOBAL_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off GLOBAL_VALUE_ORIGIN COMPILE-TIME -DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on +DEFAULT_VALUE index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off VARIABLE_SCOPE SESSION VARIABLE_TYPE FLAGSET VARIABLE_COMMENT Fine-tune the optimizer behavior NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,default +ENUM_VALUE_LIST index_merge,index_merge_union,index_merge_sort_union,index_merge_intersection,index_merge_sort_intersection,engine_condition_pushdown,index_condition_pushdown,derived_merge,derived_with_keys,firstmatch,loosescan,materialization,in_to_exists,semijoin,partial_match_rowid_merge,partial_match_table_scan,subquery_cache,mrr,mrr_cost_based,mrr_sort_keys,outer_join_with_cache,semijoin_with_cache,join_cache_incremental,join_cache_hashed,join_cache_bka,optimize_join_buffer_size,table_elimination,extended_keys,exists_to_in,orderby_uses_equalities,default READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_USE_CONDITION_SELECTIVITY -- cgit v1.2.1 From 9ff93656ae072cb95ad7e9404819f2cfbfbda0bc Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Fri, 3 Jun 2016 19:22:47 +0000 Subject: Fix sporadic failure of set_statement mtr test. On Windows with low precision (10-16 ms) timer used for timing queries, the statement "set @@long_query_time=0.01" can log itself a slow if it spawn more single timer tick. The fix is to filter this query out from "SELECT FROM mysql.slow_log" results --- mysql-test/r/set_statement.result | 14 +++++++------- mysql-test/t/set_statement.test | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/set_statement.result b/mysql-test/r/set_statement.result index ad6f3b7bf2e..adb50afde99 100644 --- a/mysql-test/r/set_statement.result +++ b/mysql-test/r/set_statement.result @@ -1056,7 +1056,7 @@ set statement slow_query_log=default for select @@slow_query_log; truncate table mysql.slow_log; set slow_query_log= 1; set global log_output='TABLE'; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text set @@long_query_time=0.01; #should be written @@ -1064,7 +1064,7 @@ select sleep(0.1); sleep(0.1) 0 set @@long_query_time=@save_long_query_time; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) #--- @@ -1072,7 +1072,7 @@ select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1); sleep(0.1) 0 -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1) @@ -1083,7 +1083,7 @@ set statement slow_query_log=0 for select sleep(0.1); sleep(0.1) 0 set @@long_query_time=@save_long_query_time; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1) @@ -1092,7 +1092,7 @@ set statement long_query_time=0.01 for select sleep(0.1) set statement long_query_time=0.01,log_slow_filter='full_scan' for select sleep(0.1); sleep(0.1) 0 -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1) @@ -1101,7 +1101,7 @@ set statement long_query_time=0.01 for select sleep(0.1) set statement long_query_time=0.01,log_slow_rate_limit=9999 for select sleep(0.1); sleep(0.1) 0 -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1) @@ -1110,7 +1110,7 @@ set statement long_query_time=0.01 for select sleep(0.1) set statement long_query_time=0.01,min_examined_row_limit=50 for select sleep(0.1); sleep(0.1) 0 -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; sql_text select sleep(0.1) set statement long_query_time=0.01 for select sleep(0.1) diff --git a/mysql-test/t/set_statement.test b/mysql-test/t/set_statement.test index 5d6206335fb..a91c53c8dee 100644 --- a/mysql-test/t/set_statement.test +++ b/mysql-test/t/set_statement.test @@ -1003,34 +1003,34 @@ truncate table mysql.slow_log; set slow_query_log= 1; set global log_output='TABLE'; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; set @@long_query_time=0.01; --echo #should be written select sleep(0.1); set @@long_query_time=@save_long_query_time; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- --echo #should be written set statement long_query_time=0.01 for select sleep(0.1); -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- set @@long_query_time=0.01; --echo #should NOT be written set statement slow_query_log=0 for select sleep(0.1); set @@long_query_time=@save_long_query_time; -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- --echo #should NOT be written set statement long_query_time=0.01,log_slow_filter='full_scan' for select sleep(0.1); -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- --echo #should NOT be written set statement long_query_time=0.01,log_slow_rate_limit=9999 for select sleep(0.1); -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- --echo #should NOT be written set statement long_query_time=0.01,min_examined_row_limit=50 for select sleep(0.1); -select sql_text from mysql.slow_log; +select sql_text from mysql.slow_log where sql_text not like 'set @@long_query_time%'; --echo #--- # # log_slow_verbosity is impossible to check because results are not written -- cgit v1.2.1 From 0f252702b15dfb5d90446fd49c9e28aa93424eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Wed, 8 Jun 2016 08:40:10 +0300 Subject: MDEV-7139: Sporadic failure in innodb.innodb_corrupt_bit on P8 Use direct persistent index corruption set on InnoDB dictionary for this test. Do not allow creating new indexes if one of the existing indexes is already marked as corrupted. --- .../suite/innodb/r/innodb_corrupt_bit.result | 90 +++++++--------------- mysql-test/suite/innodb/t/innodb_corrupt_bit.test | 84 +++++++------------- 2 files changed, 56 insertions(+), 118 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb_corrupt_bit.result b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result index 2ba79ced75f..bc4334bd219 100644 --- a/mysql-test/suite/innodb/r/innodb_corrupt_bit.result +++ b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result @@ -1,83 +1,49 @@ -set names utf8; -CREATE TABLE corrupt_bit_test_ā( -a INT AUTO_INCREMENT PRIMARY KEY, -b CHAR(100), -c INT, -z INT, -INDEX(b)) -ENGINE=InnoDB; -INSERT INTO corrupt_bit_test_ā VALUES(0,'x',1, 1); -CREATE UNIQUE INDEX idxā ON corrupt_bit_test_ā(c, b); -CREATE UNIQUE INDEX idxē ON corrupt_bit_test_ā(z, b); -SELECT * FROM corrupt_bit_test_ā; a b c z 1 x 1 1 -select @@unique_checks; -@@unique_checks -0 -select @@innodb_change_buffering_debug; -@@innodb_change_buffering_debug -1 -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+1,z+1 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+10,z+10 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+20,z+20 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+50,z+50 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+100,z+100 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+200,z+200 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+400,z+400 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+800,z+800 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+1600,z+1600 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+4000,z+4000 FROM corrupt_bit_test_ā; -select count(*) from corrupt_bit_test_ā; count(*) -1024 -CREATE INDEX idx3 ON corrupt_bit_test_ā(b, c); -INSERT INTO corrupt_bit_test_ā VALUES(13000,'x',1,1); -CREATE INDEX idx4 ON corrupt_bit_test_ā(b, z); -check table corrupt_bit_test_ā; +2 Table Op Msg_type Msg_text -test.corrupt_bit_test_ā check Warning InnoDB: The B-tree of index "idxā" is corrupted. -test.corrupt_bit_test_ā check Warning InnoDB: The B-tree of index "idxē" is corrupted. +test.corrupt_bit_test_ā check Warning InnoDB: Index "idx" is marked as corrupted +test.corrupt_bit_test_ā check Warning InnoDB: Index "idxā" is marked as corrupted +test.corrupt_bit_test_ā check Warning InnoDB: Index "idxē" is marked as corrupted test.corrupt_bit_test_ā check error Corrupt -select c from corrupt_bit_test_ā; ERROR HY000: Index corrupt_bit_test_ā is corrupted -select z from corrupt_bit_test_ā; ERROR HY000: Index corrupt_bit_test_ā is corrupted -show warnings; +ERROR HY000: Index corrupt_bit_test_ā is corrupted +ERROR HY000: Index corrupt_bit_test_ā is corrupted Level Code Message Warning 179 InnoDB: Index "idxē" for table "test"."corrupt_bit_test_ā" is marked as corrupted Warning 179 Got error 179 when reading table `test`.`corrupt_bit_test_ā` Error 1712 Index corrupt_bit_test_ā is corrupted -insert into corrupt_bit_test_ā values (10001, "a", 20001, 20001); -select * from corrupt_bit_test_ā use index(primary) where a = 10001; a b c z 10001 a 20001 20001 -begin; -insert into corrupt_bit_test_ā values (10002, "a", 20002, 20002); -delete from corrupt_bit_test_ā where a = 10001; -insert into corrupt_bit_test_ā values (10001, "a", 20001, 20001); -rollback; -drop index idxā on corrupt_bit_test_ā; -check table corrupt_bit_test_ā; Table Op Msg_type Msg_text +test.corrupt_bit_test_ā check Warning InnoDB: Index "idx" is marked as corrupted test.corrupt_bit_test_ā check Warning InnoDB: Index "idxē" is marked as corrupted test.corrupt_bit_test_ā check error Corrupt -set names utf8; -select z from corrupt_bit_test_ā; ERROR HY000: Index corrupt_bit_test_ā is corrupted -drop index idxē on corrupt_bit_test_ā; -select z from corrupt_bit_test_ā limit 10; +Table Create Table +corrupt_bit_test_ā CREATE TABLE `corrupt_bit_test_ā` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` char(100) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + `z` int(11) DEFAULT NULL, + PRIMARY KEY (`a`), + UNIQUE KEY `idxē` (`z`,`b`), + KEY `idx` (`b`) +) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=latin1 +ERROR HY000: Index corrupt_bit_test_ā is corrupted +ERROR HY000: Index corrupt_bit_test_ā is corrupted +Table Create Table +corrupt_bit_test_ā CREATE TABLE `corrupt_bit_test_ā` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` char(100) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + `z` int(11) DEFAULT NULL, + PRIMARY KEY (`a`), + KEY `idx` (`b`) +) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=latin1 z 20001 1 -1 2 -11 -12 -21 -22 -31 -32 -drop table corrupt_bit_test_ā; -DROP DATABASE pad; -SET GLOBAL innodb_change_buffering_debug = 0; diff --git a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test index 88da919bfaa..f67e2e7e047 100644 --- a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test +++ b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test @@ -2,45 +2,23 @@ # Test for persistent corrupt bit for corrupted index and table # -- source include/have_innodb.inc - -# Issues with innodb_change_buffering_debug on Windows, so the test scenario -# cannot be created on windows ---source include/not_windows.inc - +-- source include/not_embedded.inc # This test needs debug server ---source include/have_debug.inc +-- source include/have_debug.inc -- disable_query_log call mtr.add_suppression("Flagged corruption of idx.*in CHECK TABLE"); -# This test setup is extracted from bug56680.test: -# The flag innodb_change_buffering_debug is only available in debug builds. -# It instructs InnoDB to try to evict pages from the buffer pool when -# change buffering is possible, so that the change buffer will be used -# whenever possible. -SET @innodb_change_buffering_debug_orig = @@innodb_change_buffering_debug; -SET GLOBAL innodb_change_buffering_debug = 1; - -# Turn off Unique Check to create corrupted index with dup key -SET UNIQUE_CHECKS=0; - -CREATE DATABASE pad; -let $i=338; -while ($i) -{ ---eval CREATE TABLE pad.t$i(a INT PRIMARY KEY)ENGINE=InnoDB; - dec $i; -} - --- enable_query_log set names utf8; +SET UNIQUE_CHECKS=0; + CREATE TABLE corrupt_bit_test_ā( a INT AUTO_INCREMENT PRIMARY KEY, b CHAR(100), c INT, z INT, - INDEX(b)) + INDEX idx(b)) ENGINE=InnoDB; INSERT INTO corrupt_bit_test_ā VALUES(0,'x',1, 1); @@ -53,38 +31,21 @@ CREATE UNIQUE INDEX idxē ON corrupt_bit_test_ā(z, b); SELECT * FROM corrupt_bit_test_ā; -select @@unique_checks; -select @@innodb_change_buffering_debug; - -# Create enough rows for the table, so that the insert buffer will be -# used for modifying the secondary index page. There must be multiple -# index pages, because changes to the root page are never buffered. - INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+1,z+1 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+10,z+10 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+20,z+20 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+50,z+50 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+100,z+100 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+200,z+200 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+400,z+400 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+800,z+800 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+1600,z+1600 FROM corrupt_bit_test_ā; -INSERT INTO corrupt_bit_test_ā SELECT 0,b,c+4000,z+4000 FROM corrupt_bit_test_ā; select count(*) from corrupt_bit_test_ā; -CREATE INDEX idx3 ON corrupt_bit_test_ā(b, c); - -# Create a dup key error on index "idxē" and "idxā" by inserting a dup value -INSERT INTO corrupt_bit_test_ā VALUES(13000,'x',1,1); +# This will flag all secondary indexes corrupted +SET SESSION debug_dbug="+d,dict_set_index_corrupted"; +check table corrupt_bit_test_ā; +SET SESSION debug_dbug="-d,dict_set_index_corrupted"; -# creating an index should succeed even if other secondary indexes are corrupted +# Cannot create new indexes while corrupted indexes exist +--error ER_INDEX_CORRUPT +CREATE INDEX idx3 ON corrupt_bit_test_ā(b, c); +--error ER_INDEX_CORRUPT CREATE INDEX idx4 ON corrupt_bit_test_ā(b, z); -# Check table will find the unique indexes corrupted -# with dup key -check table corrupt_bit_test_ā; - # This selection intend to use the corrupted index. Expect to fail -- error ER_INDEX_CORRUPT select c from corrupt_bit_test_ā; @@ -108,7 +69,6 @@ delete from corrupt_bit_test_ā where a = 10001; insert into corrupt_bit_test_ā values (10001, "a", 20001, 20001); rollback; -# Drop one corrupted index before reboot drop index idxā on corrupt_bit_test_ā; check table corrupt_bit_test_ā; @@ -118,14 +78,26 @@ set names utf8; -- error ER_INDEX_CORRUPT select z from corrupt_bit_test_ā; +show create table corrupt_bit_test_ā; + # Drop the corrupted index drop index idxē on corrupt_bit_test_ā; +# Cannot create new indexes while a corrupt index exists. +--error ER_INDEX_CORRUPT +CREATE INDEX idx3 ON corrupt_bit_test_ā(b, c); +--error ER_INDEX_CORRUPT +CREATE INDEX idx4 ON corrupt_bit_test_ā(b, z); + +show create table corrupt_bit_test_ā; +drop index idx on corrupt_bit_test_ā; + +# Now that there exist no corrupted indexes, we can create new indexes. +CREATE INDEX idx3 ON corrupt_bit_test_ā(b, c); +CREATE INDEX idx4 ON corrupt_bit_test_ā(b, z); + # Now select back to normal select z from corrupt_bit_test_ā limit 10; # Drop table drop table corrupt_bit_test_ā; -DROP DATABASE pad; - -SET GLOBAL innodb_change_buffering_debug = 0; -- cgit v1.2.1 From a4848e975d2fe359ff354e767427c01dbe908037 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 8 Jun 2016 19:04:12 +0400 Subject: MDEV-9972 Least function retuns date in date time format --- mysql-test/r/type_date.result | 7 ++++--- mysql-test/t/type_date.test | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/type_date.result b/mysql-test/r/type_date.result index 7678f038862..ecbda1d13e6 100644 --- a/mysql-test/r/type_date.result +++ b/mysql-test/r/type_date.result @@ -442,6 +442,7 @@ select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; drop table t1; # # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null +# MDEV-9972 Least function retuns date in date time format # CREATE TABLE t1 ( id BIGINT NOT NULL, @@ -465,9 +466,9 @@ LEAST(IFNULL(t2.date_fin, IFNULL(t1.date_fin, NULL)), IFNULL(t1.date_fin, IFNULL(t2.date_fin, NULL))) AS date_fin FROM t1 LEFT JOIN t2 ON (t1.id=t2.id); id date_debut date_fin -1 2016-01-01 2016-01-31 00:00:00 -2 2016-02-01 2016-01-28 00:00:00 -3 2016-03-01 2016-03-31 00:00:00 +1 2016-01-01 2016-01-31 +2 2016-02-01 2016-01-28 +3 2016-03-01 2016-03-31 4 2016-04-01 NULL DROP TABLE t1,t2; SELECT diff --git a/mysql-test/t/type_date.test b/mysql-test/t/type_date.test index 4b058171ad2..8b0c5dcf330 100644 --- a/mysql-test/t/type_date.test +++ b/mysql-test/t/type_date.test @@ -388,6 +388,7 @@ drop table t1; --echo # --echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null +--echo # MDEV-9972 Least function retuns date in date time format --echo # CREATE TABLE t1 ( id BIGINT NOT NULL, -- cgit v1.2.1 From df1448801ceba4d8d8a02db83ba022fea9e6755d Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 10 Jun 2016 15:50:19 +0400 Subject: MDEV-10181 Illegal mix of collation for a field and an ASCII string as a view field --- mysql-test/r/ctype_recoding.result | 33 ++++++++++++++++++++++++++++++++- mysql-test/t/ctype_recoding.test | 28 +++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result index c84da0d7496..2555749fa8c 100644 --- a/mysql-test/r/ctype_recoding.result +++ b/mysql-test/r/ctype_recoding.result @@ -277,9 +277,40 @@ CREATE TABLE t1 ( a VARCHAR(1) ); INSERT INTO t1 VALUES ('m'),('n'); CREATE VIEW v1 AS SELECT 'w' ; SELECT * FROM t1 WHERE a < ALL ( SELECT * FROM v1 ); -ERROR HY000: Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '<=' +a +m +n drop view v1; drop table t1; SET character_set_connection = default; SET optimizer_switch= default; #End of 5.3 tests +# +# Start of 5.5 tests +# +# +# MDEV-10181 Illegal mix of collation for a field and an ASCII string as a view field +# +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1); +INSERT INTO t1 VALUES ('A'),('a'),('B'),('b'); +CREATE VIEW v1 AS SELECT 'a'; +SELECT * FROM v1,t1 where t1.a=v1.a; +a a +a A +a a +DROP VIEW v1; +DROP TABLE t1; +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1); +INSERT INTO t1 VALUES ('a'),('b'),('c'); +CREATE VIEW v1 AS SELECT 'a' AS a UNION SELECT 'b'; +SELECT * FROM v1,t1 WHERE t1.a=v1.a; +a a +a a +b b +DROP VIEW v1; +DROP TABLE t1; +# +# End of 5.5 tests +# diff --git a/mysql-test/t/ctype_recoding.test b/mysql-test/t/ctype_recoding.test index ee07ef24def..81c04fc9c30 100644 --- a/mysql-test/t/ctype_recoding.test +++ b/mysql-test/t/ctype_recoding.test @@ -220,7 +220,6 @@ SET character_set_connection = utf8; CREATE TABLE t1 ( a VARCHAR(1) ); INSERT INTO t1 VALUES ('m'),('n'); CREATE VIEW v1 AS SELECT 'w' ; ---error ER_CANT_AGGREGATE_2COLLATIONS SELECT * FROM t1 WHERE a < ALL ( SELECT * FROM v1 ); drop view v1; drop table t1; @@ -228,3 +227,30 @@ SET character_set_connection = default; SET optimizer_switch= default; --echo #End of 5.3 tests + +--echo # +--echo # Start of 5.5 tests +--echo # + +--echo # +--echo # MDEV-10181 Illegal mix of collation for a field and an ASCII string as a view field +--echo # +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1); +INSERT INTO t1 VALUES ('A'),('a'),('B'),('b'); +CREATE VIEW v1 AS SELECT 'a'; +SELECT * FROM v1,t1 where t1.a=v1.a; +DROP VIEW v1; +DROP TABLE t1; + +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1); +INSERT INTO t1 VALUES ('a'),('b'),('c'); +CREATE VIEW v1 AS SELECT 'a' AS a UNION SELECT 'b'; +SELECT * FROM v1,t1 WHERE t1.a=v1.a; +DROP VIEW v1; +DROP TABLE t1; + +--echo # +--echo # End of 5.5 tests +--echo # -- cgit v1.2.1 From 4155d0937b98e57a93adbe5b5dc20d06ceda59e7 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 10 Jun 2016 17:06:38 +0400 Subject: MDEV-8402 Bug #77473 Truncated data with subquery & UTF8 --- mysql-test/r/ctype_utf8.result | 39 +++++++++++++++++++++++++++++++++++++++ mysql-test/r/ctype_utf8mb4.result | 34 ++++++++++++++++++++++++++++++++++ mysql-test/t/ctype_utf8.test | 23 +++++++++++++++++++++++ mysql-test/t/ctype_utf8mb4.test | 20 ++++++++++++++++++++ 4 files changed, 116 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 217d3ca26d8..121168c2a2a 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -5830,5 +5830,44 @@ OCTET_LENGTH(a) a 255 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA DROP TABLE t1; # +# MDEV-8402 Bug#77473 Bug#21317406 TRUNCATED DATA WITH SUBQUERY & UTF8 +# +# +SET NAMES utf8; +SELECT length(rpad(_utf8 0xD0B1, 65536, _utf8 0xD0B2)) AS data; +data +131072 +SELECT length(data) AS len FROM ( +SELECT rpad(_utf8 0xD0B1, 65536, _utf8 0xD0B2) AS data +) AS sub; +len +131072 +SELECT length(rpad(_utf8 0xD0B1, 65535, _utf8 0xD0B2)) AS data; +data +131070 +SELECT length(data) AS len FROM ( +SELECT rpad(_utf8 0xD0B1, 65535, _utf8 0xD0B2) AS data +) AS sub; +len +131070 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36766) AS data) AS sub; +len +73532 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36767) AS data) AS sub; +len +73534 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36778) AS data) AS sub; +len +73556 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65535) AS data) AS sub; +len +131070 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65536) AS data) AS sub; +len +131072 +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65537) AS data) AS sub; +len +131074 +# # End of 5.5 tests # diff --git a/mysql-test/r/ctype_utf8mb4.result b/mysql-test/r/ctype_utf8mb4.result index 448645ebbae..17a1a2f787e 100644 --- a/mysql-test/r/ctype_utf8mb4.result +++ b/mysql-test/r/ctype_utf8mb4.result @@ -2622,6 +2622,40 @@ OCTET_LENGTH(a) a 252 😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎😎 DROP TABLE t1; # +# MDEV-8402 Bug#77473 Bug#21317406 TRUNCATED DATA WITH SUBQUERY & UTF8 +# +# +SET NAMES utf8mb4; +SELECT length(repeat(_utf8mb4 0xE29883, 21844)) AS data; +data +65532 +SELECT length(data) AS len +FROM ( SELECT repeat(_utf8mb4 0xE29883, 21844) AS data ) AS sub; +len +65532 +SELECT length(repeat(_utf8mb4 0xE29883, 21846)) AS data; +data +65538 +SELECT length(data) AS len +FROM ( SELECT repeat(_utf8mb4 0xE29883, 21846) AS data ) AS sub; +len +65538 +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21844) AS data ) AS sub; +len +65532 +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21845) AS data ) AS sub; +len +65535 +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21846) AS data ) AS sub; +len +65538 +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 65535) AS data ) AS sub; +len +196605 +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 65536) AS data ) AS sub; +len +196608 +# # End of 5.5 tests # # diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index a9b5cee11ce..d6fdc6c6a2c 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -1658,6 +1658,29 @@ ALTER TABLE t1 MODIFY a TINYTEXT CHARACTER SET utf8; SELECT OCTET_LENGTH(a),a FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-8402 Bug#77473 Bug#21317406 TRUNCATED DATA WITH SUBQUERY & UTF8 +--echo # +--echo # + +SET NAMES utf8; +SELECT length(rpad(_utf8 0xD0B1, 65536, _utf8 0xD0B2)) AS data; +SELECT length(data) AS len FROM ( + SELECT rpad(_utf8 0xD0B1, 65536, _utf8 0xD0B2) AS data +) AS sub; + +SELECT length(rpad(_utf8 0xD0B1, 65535, _utf8 0xD0B2)) AS data; +SELECT length(data) AS len FROM ( + SELECT rpad(_utf8 0xD0B1, 65535, _utf8 0xD0B2) AS data +) AS sub; + +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36766) AS data) AS sub; +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36767) AS data) AS sub; +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 36778) AS data) AS sub; +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65535) AS data) AS sub; +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65536) AS data) AS sub; +SELECT length(data) AS len FROM (SELECT REPEAT('ä', 65537) AS data) AS sub; + --echo # --echo # End of 5.5 tests --echo # diff --git a/mysql-test/t/ctype_utf8mb4.test b/mysql-test/t/ctype_utf8mb4.test index 66f5a3ba5ac..c240f261af4 100644 --- a/mysql-test/t/ctype_utf8mb4.test +++ b/mysql-test/t/ctype_utf8mb4.test @@ -1838,6 +1838,26 @@ SELECT OCTET_LENGTH(a),a FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-8402 Bug#77473 Bug#21317406 TRUNCATED DATA WITH SUBQUERY & UTF8 +--echo # +--echo # + +SET NAMES utf8mb4; +SELECT length(repeat(_utf8mb4 0xE29883, 21844)) AS data; +SELECT length(data) AS len +FROM ( SELECT repeat(_utf8mb4 0xE29883, 21844) AS data ) AS sub; + +SELECT length(repeat(_utf8mb4 0xE29883, 21846)) AS data; +SELECT length(data) AS len +FROM ( SELECT repeat(_utf8mb4 0xE29883, 21846) AS data ) AS sub; + +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21844) AS data ) AS sub; +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21845) AS data ) AS sub; +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 21846) AS data ) AS sub; +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 65535) AS data ) AS sub; +SELECT LENGTH(data) AS len FROM (SELECT REPEAT('☃', 65536) AS data ) AS sub; + --echo # --echo # End of 5.5 tests --echo # -- cgit v1.2.1 From 87007dc2f71634cc460271eb277ad851ec69c04b Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Wed, 8 Jun 2016 15:03:18 +0400 Subject: MDEV-9994 - Aria service threads are not "joined" Aria service threads are created "joinable", but they're not "joined" on completion. This causes memory leaks around thread local storage. Fixed by joining service thread. Simplified relevant code and cleaned up relevant valgrind suppressions. --- mysql-test/valgrind.supp | 70 ------------------------------------------------ 1 file changed, 70 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 29897e4bd6c..16b59b8a06f 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -19,36 +19,6 @@ # Suppress some common (not fatal) errors in system libraries found by valgrind # -# -# Pthread doesn't free all thread specific memory before program exists -# -{ - pthread allocate_tls memory loss - Memcheck:Leak - fun:calloc - fun:_dl_allocate_tls - fun:allocate_stack - fun:pthread_create* -} - -{ - pthread allocate_tls memory loss - Memcheck:Leak - fun:calloc - fun:_dl_allocate_tls - fun:pthread_create* - -} - -{ - pthread allocate_tls memory loss - Memcheck:Leak - fun:calloc - obj:/lib*/ld*.so - fun:_dl_allocate_tls - fun:pthread_create* -} - { pthead_exit memory loss 1 Memcheck:Leak @@ -89,34 +59,6 @@ fun:_dl_map_object_from_fd } -{ - pthread allocate_dtv memory loss - Memcheck:Leak - fun:calloc - fun:allocate_dtv - fun:_dl_allocate_tls_storage - fun:__GI__dl_allocate_tls - fun:pthread_create -} - -{ - pthread allocate_dtv memory loss second - Memcheck:Leak - fun:calloc - fun:allocate_dtv - fun:_dl_allocate_tls - fun:pthread_create* -} - -{ - pthread memalign memory loss - Memcheck:Leak - fun:memalign - fun:_dl_allocate_tls_storage - fun:__GI__dl_allocate_tls - fun:pthread_create -} - { pthread pthread_key_create Memcheck:Leak @@ -972,18 +914,6 @@ fun:nptl_pthread_exit_hack_handler } -# -# Pthread doesn't free all thread specific memory before program exists -# -{ - pthread allocate_tls memory loss in 2.6.1. - Memcheck:Leak - fun:calloc - obj:*/ld-*.so - fun:_dl_allocate_tls - fun:pthread_create* -} - { memory "leak" in backtrace() of glibc 2.9 (not present in 2.13) Memcheck:Leak -- cgit v1.2.1 From 67b4a6f576db102d652b401c3d0150556826f641 Mon Sep 17 00:00:00 2001 From: Elena Stepanova Date: Sun, 12 Jun 2016 20:14:51 +0300 Subject: MDEV-8859 rpl.rpl_mdev382 sporadically fails to finish due to disappeared expect file The combination of --remove_file and --write_file on .expect file creates a race condition which can be hit by MTR which reads the file in a loop. Instead, .expect file should be changed with --append_file. It was fixed in 10.x, but in 5.5 the sporadic failure still affected buildbot. Fixed 3 test files which use the problematic combination --- mysql-test/suite/binlog/t/binlog_mdev342.test | 3 +-- mysql-test/suite/rpl/t/rpl_mdev382.test | 3 +-- mysql-test/suite/storage_engine/alter_tablespace.test | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/binlog/t/binlog_mdev342.test b/mysql-test/suite/binlog/t/binlog_mdev342.test index 02310b87a76..024fa884f91 100644 --- a/mysql-test/suite/binlog/t/binlog_mdev342.test +++ b/mysql-test/suite/binlog/t/binlog_mdev342.test @@ -44,8 +44,7 @@ connection con1; --error 2006,2013 reap; ---remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart-binlog_mdev342.test EOF diff --git a/mysql-test/suite/rpl/t/rpl_mdev382.test b/mysql-test/suite/rpl/t/rpl_mdev382.test index 21925e0e130..784617bd198 100644 --- a/mysql-test/suite/rpl/t/rpl_mdev382.test +++ b/mysql-test/suite/rpl/t/rpl_mdev382.test @@ -209,8 +209,7 @@ EOF --shutdown_server 30 ---remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart-rpl_mdev382.test EOF diff --git a/mysql-test/suite/storage_engine/alter_tablespace.test b/mysql-test/suite/storage_engine/alter_tablespace.test index dec16e5a3ac..6318b410e6e 100644 --- a/mysql-test/suite/storage_engine/alter_tablespace.test +++ b/mysql-test/suite/storage_engine/alter_tablespace.test @@ -53,8 +53,7 @@ EOF --replace_result $datadir --copy_file $datadir/test/t1.ibd $datadir/test/t1.ibd.save - --remove_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - --write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + --append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect restart EOF -- cgit v1.2.1 From 868c2ceb013e06c29ba37d4634f2d543b96539aa Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Sun, 12 Jun 2016 19:28:56 -0400 Subject: MDEV-9083: Slave IO thread does not handle autoreconnect to restarting Galera Cluster node Chery-picked commits from codership/mysql-wsrep. MW-284: Slave I/O retry on ER_COM_UNKNOWN_ERROR Slave would treat ER_COM_UNKNOWN_ERROR as fatal error and stop. The fix here is to treat it as a network error and rely on the built-in mechanism to retry. MW-284: Add an MTR test --- mysql-test/suite/galera/r/MW-284.result | 13 ++++++++ mysql-test/suite/galera/t/MW-284.cnf | 1 + mysql-test/suite/galera/t/MW-284.test | 57 +++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 mysql-test/suite/galera/r/MW-284.result create mode 100644 mysql-test/suite/galera/t/MW-284.cnf create mode 100644 mysql-test/suite/galera/t/MW-284.test (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/r/MW-284.result b/mysql-test/suite/galera/r/MW-284.result new file mode 100644 index 00000000000..8b5119663ce --- /dev/null +++ b/mysql-test/suite/galera/r/MW-284.result @@ -0,0 +1,13 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +SET SESSION wsrep_on = OFF; +SET SESSION wsrep_on = ON; +START SLAVE; +include/wait_for_slave_param.inc [Slave_IO_Running] +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; +include/wait_for_slave_to_start.inc +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; +CALL mtr.add_suppression('failed registering on master'); diff --git a/mysql-test/suite/galera/t/MW-284.cnf b/mysql-test/suite/galera/t/MW-284.cnf new file mode 100644 index 00000000000..52fd3093931 --- /dev/null +++ b/mysql-test/suite/galera/t/MW-284.cnf @@ -0,0 +1 @@ +!include ../galera_2nodes_as_master.cnf diff --git a/mysql-test/suite/galera/t/MW-284.test b/mysql-test/suite/galera/t/MW-284.test new file mode 100644 index 00000000000..5998e22ed1e --- /dev/null +++ b/mysql-test/suite/galera/t/MW-284.test @@ -0,0 +1,57 @@ +# +# MW-284 Slave I/O retry on ER_COM_UNKNOWN_ERROR +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$NODE_MYPORT_1, MASTER_USER='root', MASTER_CONNECT_RETRY=1; +--enable_query_log + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +SET SESSION wsrep_on = OFF; +--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status' +--source include/wait_condition.inc +SET SESSION wsrep_on = ON; + +--connection node_3 +START SLAVE; +--sleep 1 +--let $slave_param= Slave_IO_Running +--let $slave_param_value= Connecting +--source include/wait_for_slave_param.inc + +--connection node_1 +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; + +# We expect the slave to reconnect and resume replication + +--connection node_3 +--source include/wait_for_slave_to_start.inc + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1' +--source include/wait_condition.inc +--let $wait_condition = SELECT COUNT(*) > 0 FROM t1 +--source include/wait_condition.inc + +# Cleanup + +--connection node_1 +DROP TABLE t1; + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1' +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; + +CALL mtr.add_suppression('failed registering on master'); -- cgit v1.2.1 From d6a1bae57f369d6d1781b94696b87e81e39be4ca Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Mon, 13 Jun 2016 17:10:31 +0400 Subject: MDEV-10218 - rpl.rpl_binlog_errors fails in buildbot with valgrind warnings - bytes are possibly lost Restored suppressions removed by MDEV-9994: they're needed for detached threads. --- mysql-test/valgrind.supp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 16b59b8a06f..b86cbd23408 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -1047,3 +1047,22 @@ fun:_nss_dns_gethostbyaddr_r fun:gethostbyaddr_r } + + +# +# Detached threads may not complete deiniitialization by the time shutdown +# thread calls exit. This is unfortunate property of detached threads, which +# we currently can only ignore. Unfortunately there is no way to distinguish +# between false positives generated by detached threads and real memory leaks +# generated by not joined joinable threads. So we hide both cases. +# +# To avoid enumeration of the whole variety of possible traces we ignore all +# "possibly lost" blocks allocated by pthread_create (and it's callees). +# +{ + Detached threads memory loss + Memcheck:Leak + match-leak-kinds:possible + ... + fun:pthread_create* +} -- cgit v1.2.1 From 1b50d599606244677215fbe7b05be1a891fecf18 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Tue, 14 Jun 2016 14:44:09 +0400 Subject: MDEV-9945 - main.kill_processlist-6619 fails sporadically SHOW PROCESSLIST output can be affected by not completed concurrent KILL QUERY. Filter out more column values to make output stable. --- mysql-test/r/kill_processlist-6619.result | 4 ++-- mysql-test/t/kill_processlist-6619.test | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/kill_processlist-6619.result b/mysql-test/r/kill_processlist-6619.result index a3d971e2115..f14727f1696 100644 --- a/mysql-test/r/kill_processlist-6619.result +++ b/mysql-test/r/kill_processlist-6619.result @@ -6,5 +6,5 @@ SHOW PROCESSLIST; ERROR 70100: Query execution was interrupted SHOW PROCESSLIST; Id User Host db Command Time State Info Progress -# root # test Sleep # # NULL 0.000 -# root # test Query # # SHOW PROCESSLIST 0.000 +# root # test # # # # 0.000 +# root # test # # # # 0.000 diff --git a/mysql-test/t/kill_processlist-6619.test b/mysql-test/t/kill_processlist-6619.test index d73859ce8cd..28f98bcbb24 100644 --- a/mysql-test/t/kill_processlist-6619.test +++ b/mysql-test/t/kill_processlist-6619.test @@ -11,5 +11,5 @@ eval KILL QUERY $con_id; --connection con1 --error ER_QUERY_INTERRUPTED SHOW PROCESSLIST; ---replace_column 1 # 3 # 6 # 7 # +--replace_column 1 # 3 # 5 # 6 # 7 # 8 # SHOW PROCESSLIST; -- cgit v1.2.1 From 90eb30266bd88f9b101054ceb67d30ed4eee76e6 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 14 Jun 2016 13:57:49 +0200 Subject: fix main.ssl_ca from mysql-5.5.50 1. to work for OpenSSL 2. to work when $HOME can match in the middle of $MYSQL_TEST_DIR --- mysql-test/t/ssl_ca.test | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/t/ssl_ca.test b/mysql-test/t/ssl_ca.test index 92695de4b0d..e0a5fa9ad07 100644 --- a/mysql-test/t/ssl_ca.test +++ b/mysql-test/t/ssl_ca.test @@ -10,6 +10,7 @@ --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/wrong-cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 --echo # try to connect with correct '--ssl-ca' path : should connect +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # @@ -17,19 +18,19 @@ --echo # PATH SUBSTITUTION --echo # ---let $mysql_test_dir_path= `SELECT REPLACE('$MYSQL_TEST_DIR', '$HOME', '~')` +--let $mysql_test_dir_path= `SELECT REPLACE('=$MYSQL_TEST_DIR', '=$HOME', '=~')` --echo # try to connect with '--ssl-ca' option using tilde home directoy --echo # path substitution : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ---exec $MYSQL --ssl-ca=$mysql_test_dir_path/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--exec $MYSQL --ssl-ca$mysql_test_dir_path/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # try to connect with '--ssl-key' option using tilde home directoy --echo # path substitution : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ---exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$mysql_test_dir_path/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key$mysql_test_dir_path/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # try to connect with '--ssl-cert' option using tilde home directoy --echo # path substitution : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ---exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$mysql_test_dir_path/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" +--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA +--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert$mysql_test_dir_path/std_data/client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" -- cgit v1.2.1 From c73b987e73343d49c0b98666552d7aeb1a9799da Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 14 Jun 2016 13:18:05 +0200 Subject: MDEV-8328 Evaluation of two "!" operators depends on space in beetween fix the lexer to backtrack when parsing "<=", "<>", "!=", ">=", "<<", ">>", "<=>". --- mysql-test/r/parser.result | 20 ++++++++++++++++++++ mysql-test/suite/plugins/r/server_audit.result | 2 +- .../suite/plugins/r/thread_pool_server_audit.result | 2 +- mysql-test/t/parser.test | 12 ++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result index 915ace0c1b4..25143f97d9a 100644 --- a/mysql-test/r/parser.result +++ b/mysql-test/r/parser.result @@ -643,3 +643,23 @@ CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW SET default_storage_engine = NEW.INNODB; ERROR 42S22: Unknown column 'INNODB' in 'NEW' DROP TABLE t1; +select 0==0; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=0' at line 1 +select 1=!0, 1 = ! 0; +1=!0 1 = ! 0 +1 1 +select !!0, ! ! 0; +!!0 ! ! 0 +0 0 +select 2>!0, 2 > ! 0; +2>!0 2 > ! 0 +1 1 +select 0<=!0, 0 <= !0; +0<=!0 0 <= !0 +1 1 +select 1<; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=' at line 1 +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 CREATE USER u3 IDENTIFIED BY ''; drop user u1, u2, u3; select 2; diff --git a/mysql-test/suite/plugins/r/thread_pool_server_audit.result b/mysql-test/suite/plugins/r/thread_pool_server_audit.result index 67338506001..2dcfa107103 100644 --- a/mysql-test/suite/plugins/r/thread_pool_server_audit.result +++ b/mysql-test/suite/plugins/r/thread_pool_server_audit.result @@ -165,7 +165,7 @@ CREATE USER u1 IDENTIFIED BY 'pwd-123'; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; SET PASSWORD FOR u1 = PASSWORD('pwd 098'); SET PASSWORD FOR u1=; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=' at line 1 +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 CREATE USER u3 IDENTIFIED BY ''; drop user u1, u2, u3; select 2; diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test index 6899e2876a6..c6aa8927848 100644 --- a/mysql-test/t/parser.test +++ b/mysql-test/t/parser.test @@ -758,3 +758,15 @@ CREATE TABLE t1 (s VARCHAR(100)); CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW SET default_storage_engine = NEW.INNODB; DROP TABLE t1; + +# +# MDEV-8328 Evaluation of two "!" operators depends on space in beetween +# +--error ER_PARSE_ERROR +select 0==0; +select 1=!0, 1 = ! 0; +select !!0, ! ! 0; +select 2>!0, 2 > ! 0; +select 0<=!0, 0 <= !0; +select 1< Date: Tue, 14 Jun 2016 14:52:43 +0200 Subject: main.openssl_1 failure don't test a cipher that was removed from recent openssl versions --- mysql-test/r/openssl_1.result | 2 -- mysql-test/t/openssl_1.test | 1 - 2 files changed, 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index 44ea5795a95..a49a12c230d 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -198,8 +198,6 @@ Ssl_cipher DHE-RSA-AES256-SHA Variable_name Value Ssl_cipher EDH-RSA-DES-CBC3-SHA Variable_name Value -Ssl_cipher EDH-RSA-DES-CBC-SHA -Variable_name Value Ssl_cipher RC4-SHA select 'is still running; no cipher request crashed the server' as result from dual; result diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 1b28c40c0bf..62b5c9c10e0 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -222,7 +222,6 @@ DROP TABLE t1; # Common ciphers to openssl and yassl --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=DHE-RSA-AES256-SHA --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=EDH-RSA-DES-CBC3-SHA ---exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=EDH-RSA-DES-CBC-SHA --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=RC4-SHA --disable_query_log --disable_result_log -- cgit v1.2.1 From 05bb3b9f85d68cc0e99a7b43c8b40cc07d272d76 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 14 Jun 2016 16:28:07 +0200 Subject: fix main.ssl_ca test for windows where $HOME is the empty string --- mysql-test/t/ssl_ca.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/t/ssl_ca.test b/mysql-test/t/ssl_ca.test index e0a5fa9ad07..3652040dd0b 100644 --- a/mysql-test/t/ssl_ca.test +++ b/mysql-test/t/ssl_ca.test @@ -18,7 +18,7 @@ --echo # PATH SUBSTITUTION --echo # ---let $mysql_test_dir_path= `SELECT REPLACE('=$MYSQL_TEST_DIR', '=$HOME', '=~')` +--let $mysql_test_dir_path= `SELECT IF(LENGTH('$HOME'), REPLACE('=$MYSQL_TEST_DIR', '=$HOME', '=~'), '=$MYSQL_TEST_DIR')` --echo # try to connect with '--ssl-ca' option using tilde home directoy --echo # path substitution : should connect -- cgit v1.2.1 From cf721d23cc90e7848b0611180b9777d080a1faf6 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 10 Dec 2015 17:00:14 +1100 Subject: MDEV-9257: Increase limit on parallel workers in mysql-test-run Signed-off-by: Daniel Black --- mysql-test/mysql-test-run.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 26b31d34d3c..63b18c6bebd 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1801,9 +1801,12 @@ sub set_build_thread_ports($) { if ( lc($opt_build_thread) eq 'auto' ) { my $found_free = 0; $build_thread = 300; # Start attempts from here + my $build_thread_upper = $build_thread + ($opt_parallel > 1500 + ? 3000 + : 2 * $opt_parallel); while (! $found_free) { - $build_thread= mtr_get_unique_id($build_thread, 349); + $build_thread= mtr_get_unique_id($build_thread, $build_thread_upper); if ( !defined $build_thread ) { mtr_error("Could not get a unique build thread id"); } -- cgit v1.2.1 From 0e50b924820d365bcc1659eec2cad606f6887597 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Thu, 16 Jun 2016 12:35:14 +0400 Subject: MDEV-9969 mysql_install_db error processing ignore_db_dirs. Check for same directories in the list added. --- mysql-test/r/mysqld_option_err.result | 1 + mysql-test/t/mysqld_option_err.test | 8 ++++++++ 2 files changed, 9 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/mysqld_option_err.result b/mysql-test/r/mysqld_option_err.result index 4afcc5e0cb1..1870ea85270 100644 --- a/mysql-test/r/mysqld_option_err.result +++ b/mysql-test/r/mysqld_option_err.result @@ -5,4 +5,5 @@ Test non-numeric value passed to number option. Test that bad value for plugin enum option is rejected correctly. Test that --help --verbose works Test that --not-known-option --help --verbose gives error +Test that specifying same directory several times handled properly. Done. diff --git a/mysql-test/t/mysqld_option_err.test b/mysql-test/t/mysqld_option_err.test index 0c38eba7ca9..6f1e089fbe4 100644 --- a/mysql-test/t/mysqld_option_err.test +++ b/mysql-test/t/mysqld_option_err.test @@ -56,4 +56,12 @@ mkdir $MYSQLTEST_VARDIR/tmp/mysqld_option_err; --error 2 --exec $MYSQLD_BOOTSTRAP_CMD --not-known-option --help --verbose >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1 +# +# MDEV-9969 mysql_install_db error processing ignore_db_dirs. +# + +--echo Test that specifying same directory several times handled properly. + +--exec echo "" | $MYSQLD_BOOTSTRAP_CMD --skip-networking --datadir=$MYSQLTEST_VARDIR/tmp/mysqld_option_err --skip-grant-tables --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1 + --echo Done. -- cgit v1.2.1 From 0a50e43e9df2f1e005591e22388e6d20f82edf72 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 16 Jun 2016 14:57:32 +0400 Subject: MDEV-9374 having '2015-01-01 01:00:00.000001' > coalesce(NULL) returns true The problem was earlier fixed by the patch for MDEV-9521. Adding tests only. --- mysql-test/r/type_datetime.result | 8 ++++++++ mysql-test/t/type_datetime.test | 8 ++++++++ 2 files changed, 16 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result index 82b64d30d96..e033fe48607 100644 --- a/mysql-test/r/type_datetime.result +++ b/mysql-test/r/type_datetime.result @@ -834,5 +834,13 @@ a b a b DEALLOCATE PREPARE stmt1; DROP TABLE t1,t2; # +# MDEV-9374 having '2015-01-01 01:00:00.000001' > coalesce(NULL) returns true +# +CREATE TABLE t1 (c1 DATETIME(0)); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 HAVING '2015-01-01 01:00:00.000001' > COALESCE(c1); +c1 +DROP TABLE t1; +# # End of 5.5 tests # diff --git a/mysql-test/t/type_datetime.test b/mysql-test/t/type_datetime.test index e44b190def0..3f96673c43f 100644 --- a/mysql-test/t/type_datetime.test +++ b/mysql-test/t/type_datetime.test @@ -610,6 +610,14 @@ EXECUTE stmt1; DEALLOCATE PREPARE stmt1; DROP TABLE t1,t2; +--echo # +--echo # MDEV-9374 having '2015-01-01 01:00:00.000001' > coalesce(NULL) returns true +--echo # +CREATE TABLE t1 (c1 DATETIME(0)); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 HAVING '2015-01-01 01:00:00.000001' > COALESCE(c1); +DROP TABLE t1; + --echo # --echo # End of 5.5 tests --echo # -- cgit v1.2.1 From c7eef029533d71d1c83c231dde065184589930f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicen=C8=9Biu=20Ciorbaru?= Date: Thu, 16 Jun 2016 22:00:16 +0300 Subject: Increase the number of default build thread ids possibilities When running mysql-test-run without a parallel parameter, it might be impossible to find a free port. --- mysql-test/mysql-test-run.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 63b18c6bebd..a85bed88395 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1803,7 +1803,7 @@ sub set_build_thread_ports($) { $build_thread = 300; # Start attempts from here my $build_thread_upper = $build_thread + ($opt_parallel > 1500 ? 3000 - : 2 * $opt_parallel); + : 2 * $opt_parallel) + 300; while (! $found_free) { $build_thread= mtr_get_unique_id($build_thread, $build_thread_upper); -- cgit v1.2.1 From e24a1833701d358b98d294716c2c1d24850bf982 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Sat, 18 Jun 2016 10:46:55 +0400 Subject: MDEV-9969 mysql_install_db error processing ignore_db_dirs. test failed on Windows so fixed by testing slightly differently. --- mysql-test/r/mysqld_option_err.result | 1 - mysql-test/t/bootstrap.test | 10 ++++++++++ mysql-test/t/mysqld_option_err.test | 8 -------- 3 files changed, 10 insertions(+), 9 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/mysqld_option_err.result b/mysql-test/r/mysqld_option_err.result index 1870ea85270..4afcc5e0cb1 100644 --- a/mysql-test/r/mysqld_option_err.result +++ b/mysql-test/r/mysqld_option_err.result @@ -5,5 +5,4 @@ Test non-numeric value passed to number option. Test that bad value for plugin enum option is rejected correctly. Test that --help --verbose works Test that --not-known-option --help --verbose gives error -Test that specifying same directory several times handled properly. Done. diff --git a/mysql-test/t/bootstrap.test b/mysql-test/t/bootstrap.test index e2d21c0d990..f92b7c5b148 100644 --- a/mysql-test/t/bootstrap.test +++ b/mysql-test/t/bootstrap.test @@ -89,3 +89,13 @@ drop table t1; --replace_result .dll .so select * from mysql.plugin; truncate table mysql.plugin; + + +# +# MDEV-9969 mysql_install_db error processing ignore_db_dirs. +# +--write_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql +use test; +EOF +--exec $MYSQLD_BOOTSTRAP_CMD --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' < $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 +--remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_9969.sql diff --git a/mysql-test/t/mysqld_option_err.test b/mysql-test/t/mysqld_option_err.test index 6f1e089fbe4..0c38eba7ca9 100644 --- a/mysql-test/t/mysqld_option_err.test +++ b/mysql-test/t/mysqld_option_err.test @@ -56,12 +56,4 @@ mkdir $MYSQLTEST_VARDIR/tmp/mysqld_option_err; --error 2 --exec $MYSQLD_BOOTSTRAP_CMD --not-known-option --help --verbose >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1 -# -# MDEV-9969 mysql_install_db error processing ignore_db_dirs. -# - ---echo Test that specifying same directory several times handled properly. - ---exec echo "" | $MYSQLD_BOOTSTRAP_CMD --skip-networking --datadir=$MYSQLTEST_VARDIR/tmp/mysqld_option_err --skip-grant-tables --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1 - --echo Done. -- cgit v1.2.1 From 61492ea5ddd14efd2ede257700ac4d8fba2a04e6 Mon Sep 17 00:00:00 2001 From: Monty Date: Sun, 19 Jun 2016 15:03:13 +0300 Subject: Reset user status after unix_socket.test Fixed mysql-test-run failures for roles.acl_statistics --- mysql-test/suite/plugins/r/unix_socket.result | 1 + mysql-test/suite/plugins/t/unix_socket.test | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/plugins/r/unix_socket.result b/mysql-test/suite/plugins/r/unix_socket.result index 45bf608cc93..0e08794fbe6 100644 --- a/mysql-test/suite/plugins/r/unix_socket.result +++ b/mysql-test/suite/plugins/r/unix_socket.result @@ -27,4 +27,5 @@ USER@localhost @% test # name does not match = failure # delete from mysql.user where user=''; +FLUSH PRIVILEGES; uninstall plugin unix_socket; diff --git a/mysql-test/suite/plugins/t/unix_socket.test b/mysql-test/suite/plugins/t/unix_socket.test index 1522c9b7cbe..bd0323c0274 100644 --- a/mysql-test/suite/plugins/t/unix_socket.test +++ b/mysql-test/suite/plugins/t/unix_socket.test @@ -55,6 +55,6 @@ grant SELECT ON test.* TO '' identified via unix_socket; # restoring mysql.user to the original state. delete from mysql.user where user=''; +FLUSH PRIVILEGES; uninstall plugin unix_socket; --remove_file $MYSQLTEST_VARDIR/tmp/peercred_test.txt - -- cgit v1.2.1 From 70ad689b11bfbd8a30a777f4893a5384628c00e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Mon, 20 Jun 2016 09:58:31 +0300 Subject: MDEV-8633: information_schema.index_statistics doesn't delete item when drop table indexes or drop table; Problem was that table and index statistics is removed from persistent tables but not from memory cache. Added functions to remove table and index statistics from memory cache. --- mysql-test/r/information_schema_stats.result | 70 ++++++++++++++++++++++++++++ mysql-test/r/status_user.result | 4 -- mysql-test/t/information_schema_stats.test | 44 +++++++++++++++++ 3 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 mysql-test/r/information_schema_stats.result create mode 100644 mysql-test/t/information_schema_stats.test (limited to 'mysql-test') diff --git a/mysql-test/r/information_schema_stats.result b/mysql-test/r/information_schema_stats.result new file mode 100644 index 00000000000..cd73636879c --- /dev/null +++ b/mysql-test/r/information_schema_stats.result @@ -0,0 +1,70 @@ +set global userstat=1; +create table just_a_test(id int,first_name varchar(10),last_name varchar(10),address varchar(100),phone bigint,email varchar(30), state varchar(30)); +insert into just_a_test values(1,'fa','la','china_a',11111111,'fa_la@163.com','California'), +(2,'fb','lb','china_b',22222222,'fb_lb@163.com','Arizona'), +(3,'fc','lc','china_c',33333333,'fc_lc@163.com','California'), +(4,'fd','ld','china_d',44444444,'fd_ld@163.com','Utah'), +(5,'fe','le','china_e',55555555,'fe_le@163.com','Arizona'); +alter table just_a_test add primary key (id); +alter table just_a_test add key IND_just_a_test_first_name_last_name(first_name,last_name); +alter table just_a_test add key IND_just_a_test_state(state); +select count(*) from just_a_test where first_name='fc' and last_name='lc'; +count(*) +1 +select count(*) from just_a_test where state = 'California'; +count(*) +2 +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +test just_a_test IND_just_a_test_state 2 +test just_a_test IND_just_a_test_first_name_last_name 1 +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +test just_a_test 18 5 5 +alter table just_a_test drop key IND_just_a_test_first_name_last_name; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +test just_a_test IND_just_a_test_state 2 +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +test just_a_test 23 5 5 +alter table just_a_test drop column state; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +test just_a_test 28 5 5 +drop table just_a_test; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +create table just_a_test(id int not null primary key,first_name varchar(10),last_name varchar(10),address varchar(100),phone bigint,email varchar(30), state varchar(30),key(first_name,last_name),key(state)); +insert into just_a_test values(1,'fa','la','china_a',11111111,'fa_la@163.com','California'), +(2,'fb','lb','china_b',22222222,'fb_lb@163.com','Arizona'), +(3,'fc','lc','china_c',33333333,'fc_lc@163.com','California'), +(4,'fd','ld','china_d',44444444,'fd_ld@163.com','Utah'), +(5,'fe','le','china_e',55555555,'fe_le@163.com','Arizona'); +select count(*) from just_a_test where first_name='fc' and last_name='lc'; +count(*) +1 +select count(*) from just_a_test where state = 'California'; +count(*) +2 +select count(*) from just_a_test where id between 2 and 4; +count(*) +3 +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +test just_a_test first_name 1 +test just_a_test state 2 +test just_a_test PRIMARY 5 +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +test just_a_test 8 5 15 +drop table just_a_test; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES +set global userstat=0; diff --git a/mysql-test/r/status_user.result b/mysql-test/r/status_user.result index 829c8abb634..c6248a85d3a 100644 --- a/mysql-test/r/status_user.result +++ b/mysql-test/r/status_user.result @@ -128,16 +128,12 @@ handler_read_key set @@global.userstat=0; select * from information_schema.index_statistics; TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ -test t1 PRIMARY 2 select * from information_schema.table_statistics; TABLE_SCHEMA TABLE_NAME ROWS_READ ROWS_CHANGED ROWS_CHANGED_X_INDEXES -test t1 6 13 13 show table_statistics; Table_schema Table_name Rows_read Rows_changed Rows_changed_x_#indexes -test t1 6 13 13 show index_statistics; Table_schema Table_name Index_name Rows_read -test t1 PRIMARY 2 select TOTAL_CONNECTIONS, CONCURRENT_CONNECTIONS, ROWS_READ, ROWS_SENT, ROWS_DELETED, ROWS_INSERTED, ROWS_UPDATED, SELECT_COMMANDS, UPDATE_COMMANDS, OTHER_COMMANDS, COMMIT_TRANSACTIONS, ROLLBACK_TRANSACTIONS, DENIED_CONNECTIONS, LOST_CONNECTIONS, ACCESS_DENIED, EMPTY_QUERIES from information_schema.client_statistics;; TOTAL_CONNECTIONS 1 CONCURRENT_CONNECTIONS 0 diff --git a/mysql-test/t/information_schema_stats.test b/mysql-test/t/information_schema_stats.test new file mode 100644 index 00000000000..38248063d68 --- /dev/null +++ b/mysql-test/t/information_schema_stats.test @@ -0,0 +1,44 @@ +# +# MDEV-8633: information_schema.index_statistics doesn't delete item when drop table indexes or drop table; +# +set global userstat=1; +create table just_a_test(id int,first_name varchar(10),last_name varchar(10),address varchar(100),phone bigint,email varchar(30), state varchar(30)); +insert into just_a_test values(1,'fa','la','china_a',11111111,'fa_la@163.com','California'), +(2,'fb','lb','china_b',22222222,'fb_lb@163.com','Arizona'), +(3,'fc','lc','china_c',33333333,'fc_lc@163.com','California'), +(4,'fd','ld','china_d',44444444,'fd_ld@163.com','Utah'), +(5,'fe','le','china_e',55555555,'fe_le@163.com','Arizona'); +alter table just_a_test add primary key (id); +alter table just_a_test add key IND_just_a_test_first_name_last_name(first_name,last_name); +alter table just_a_test add key IND_just_a_test_state(state); +select count(*) from just_a_test where first_name='fc' and last_name='lc'; +select count(*) from just_a_test where state = 'California'; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +alter table just_a_test drop key IND_just_a_test_first_name_last_name; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +alter table just_a_test drop column state; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +drop table just_a_test; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +# +# Test direct drop table +# +create table just_a_test(id int not null primary key,first_name varchar(10),last_name varchar(10),address varchar(100),phone bigint,email varchar(30), state varchar(30),key(first_name,last_name),key(state)); +insert into just_a_test values(1,'fa','la','china_a',11111111,'fa_la@163.com','California'), +(2,'fb','lb','china_b',22222222,'fb_lb@163.com','Arizona'), +(3,'fc','lc','china_c',33333333,'fc_lc@163.com','California'), +(4,'fd','ld','china_d',44444444,'fd_ld@163.com','Utah'), +(5,'fe','le','china_e',55555555,'fe_le@163.com','Arizona'); +select count(*) from just_a_test where first_name='fc' and last_name='lc'; +select count(*) from just_a_test where state = 'California'; +select count(*) from just_a_test where id between 2 and 4; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +drop table just_a_test; +select * from information_schema.index_statistics where table_schema='test' and table_name='just_a_test'; +select * from information_schema.table_statistics where table_schema='test' and table_name='just_a_test'; +set global userstat=0; -- cgit v1.2.1 From a80dbe068ca650ef1f4daee2263f0bc6e7aeb0e1 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 20 Jun 2016 14:11:01 +0400 Subject: MDEV-10020 InnoDB NOT IN Query Crash When One Item Is NULL The problem was that the loop in get_func_mm_tree() accessed improperly initialized instances of String, which resided in the bzero'ed part of the in_vector::base array. Strings in in_vector::base are originally initialized in Item_func_in::fix_length_and_dec(), in in_vector::in_vector() using sql_calloc, rather than using a String constructor, so their str_charset members are originally equal to NULL. Strings in in_vector::base are later initialized to good values in Item_func_in::fix_length_and_dec(), using array->set(), in this code: uint j=0; for (uint i=1 ; i < arg_count ; i++) { array->set(j,args[i]); if (!args[i]->null_value) // Skip NULL values j++; else have_null= 1; } if ((array->used_count= j)) array->sort(); NULLs are not taken into account, so at the end array->used_count can be smaller than array->count. This patch fixes the loop in opt_range.cc, in get_func_mm_tree(), to access only properly initialized elements in in_vector::base, preventing access to its bzero'ed non-initialized tail. --- mysql-test/r/func_in.result | 19 +++++++++++++++++++ mysql-test/t/func_in.test | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result index fc56660ac62..210b0a9ef91 100644 --- a/mysql-test/r/func_in.result +++ b/mysql-test/r/func_in.result @@ -812,3 +812,22 @@ EXECUTE s; 1 DROP TABLE t1; # End of 5.3 tests +# +# Start of 10.0 tests +# +# +# MDEV-10020 InnoDB NOT IN Query Crash When One Item Is NULL +# +CREATE TABLE t1 +( +a INT(11), +b VARCHAR(10), +KEY (b) +); +INSERT INTO t1 VALUES (1,'x'),(2,'y'),(3,'z'); +SELECT * FROM t1 WHERE b NOT IN (NULL, '', 'A'); +a b +DROP TABLE t1; +# +# End of 10.0 tests +# diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test index 1e695142d90..17736ac40c6 100644 --- a/mysql-test/t/func_in.test +++ b/mysql-test/t/func_in.test @@ -606,3 +606,24 @@ EXECUTE s; DROP TABLE t1; --echo # End of 5.3 tests + +--echo # +--echo # Start of 10.0 tests +--echo # + +--echo # +--echo # MDEV-10020 InnoDB NOT IN Query Crash When One Item Is NULL +--echo # +CREATE TABLE t1 +( + a INT(11), + b VARCHAR(10), + KEY (b) +); +INSERT INTO t1 VALUES (1,'x'),(2,'y'),(3,'z'); +SELECT * FROM t1 WHERE b NOT IN (NULL, '', 'A'); +DROP TABLE t1; + +--echo # +--echo # End of 10.0 tests +--echo # -- cgit v1.2.1 From a482e76e65a4fee70479e877929381c86b1ec62f Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 20 Jun 2016 16:12:54 +0200 Subject: fix a mysql-5.5.50 merge: mysqlcheck quote identifiers correctly --- mysql-test/r/mysqlcheck.result | 5 +++++ mysql-test/t/mysqlcheck.test | 5 +++++ 2 files changed, 10 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result index c5ba3e7dc79..d2f4745c5f1 100644 --- a/mysql-test/r/mysqlcheck.result +++ b/mysql-test/r/mysqlcheck.result @@ -339,3 +339,8 @@ Repairing views test.v1 OK drop view v1; drop table t1; +create table `#mysql50#t1``1` (a int) engine=myisam; +show tables; +Tables_in_test +t1`1 +drop table `t1``1`; diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test index ac42e1e184d..7da14e3742a 100644 --- a/mysql-test/t/mysqlcheck.test +++ b/mysql-test/t/mysqlcheck.test @@ -350,3 +350,8 @@ create table t1(a int); --exec $MYSQL_CHECK --process-views --check-upgrade --auto-repair test drop view v1; drop table t1; + +create table `#mysql50#t1``1` (a int) engine=myisam; +--exec $MYSQL_CHECK --fix-table-names --databases test +show tables; +drop table `t1``1`; -- cgit v1.2.1 From 82a96926a77b38a36a031e34b2c4ff3e36406f3d Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Wed, 15 Jun 2016 13:57:44 +0400 Subject: MDEV-9728 - Hard crash in metadata_lock_info metadata_lock_info plugin called MDL_context::find_ticket() to obtain lock duration, which in turn iterates foreign thread private lists. These lists can be updated by owner thread without protection. Fixed by iterating threads (instead of MDL locks and tickets) and obtaining data through APC. Also fixed mdl_iterate_lock() to initialize iterator under prlock protection. --- mysql-test/r/create_or_replace.result | 12 ++++++------ mysql-test/t/create_or_replace.test | 10 ++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/create_or_replace.result b/mysql-test/r/create_or_replace.result index ff8170b7309..a8348b8a5d0 100644 --- a/mysql-test/r/create_or_replace.result +++ b/mysql-test/r/create_or_replace.result @@ -265,10 +265,10 @@ lock table test.t1 write, mysqltest2.t2 write; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test # MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 create or replace table test.t1; ERROR 42000: A table must have at least 1 column show tables; @@ -292,10 +292,10 @@ lock table test.t1 write, mysqltest2.t2 write; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test # MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 create or replace table test.t1 (a int) select 1 as 'a', 2 as 'a'; ERROR 42S21: Duplicate column name 'a' show tables; @@ -401,29 +401,29 @@ lock table t1 write, t2 read; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 create or replace table t1 (i int); select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 create or replace table t1 like t2; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 create or replace table t1 select 1 as f1; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 # MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 drop table t1; unlock tables; diff --git a/mysql-test/t/create_or_replace.test b/mysql-test/t/create_or_replace.test index 9e37950dbef..7bba2b341c0 100644 --- a/mysql-test/t/create_or_replace.test +++ b/mysql-test/t/create_or_replace.test @@ -216,15 +216,18 @@ create table test.t1 (i int); create table mysqltest2.t2 like test.t1; lock table test.t1 write, mysqltest2.t2 write; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; --error ER_TABLE_MUST_HAVE_COLUMNS create or replace table test.t1; show tables; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; --error ER_TABLE_MUST_HAVE_COLUMNS create or replace table mysqltest2.t2; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; create table t1 (i int); drop table t1; @@ -233,15 +236,18 @@ create table test.t1 (i int); create table mysqltest2.t2 like test.t1; lock table test.t1 write, mysqltest2.t2 write; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; --error ER_DUP_FIELDNAME create or replace table test.t1 (a int) select 1 as 'a', 2 as 'a'; show tables; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; --error ER_DUP_FIELDNAME create or replace table mysqltest2.t2 (a int) select 1 as 'a', 2 as 'a'; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; create table t1 (i int); drop table t1; @@ -319,15 +325,19 @@ drop view t1; create table t1 (a int); lock table t1 write, t2 read; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; create or replace table t1 (i int); --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; create or replace table t1 like t2; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; create or replace table t1 select 1 as f1; --replace_column 1 # +--sorted_result select * from information_schema.metadata_lock_info; drop table t1; unlock tables; -- cgit v1.2.1 From 911af69d1e13e5dff43b550da19d3d4a0ae07e96 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Mon, 20 Jun 2016 14:35:58 +0200 Subject: MDEV-5973: MySQL Bug#11757486:49539: NON-DESCRIPTIVE ERR (ERROR 0 FROM STORAGE ENGINE) WITH MULTI-TABLE UPDATE Condition in processing IGNORE clause for UPDATE & multi-table UPDATE made the same. --- mysql-test/r/multi_update.result | 32 ++++++++++++++++++++++++++++++++ mysql-test/t/multi_update.test | 24 ++++++++++++++++++++++++ 2 files changed, 56 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/multi_update.result b/mysql-test/r/multi_update.result index 688184f2f83..3b75cef2cf0 100644 --- a/mysql-test/r/multi_update.result +++ b/mysql-test/r/multi_update.result @@ -1039,4 +1039,36 @@ f1 f2 1 97 DROP TABLE t1, t2; DROP VIEW v1; +# +# MDEV-5973: MySQL Bug#11757486:49539: NON-DESCRIPTIVE ERR (ERROR 0 +# FROM STORAGE ENGINE) WITH MULTI-TABLE UPDATE +# +CREATE TABLE table_11757486 (field1 tinyint) ENGINE=INNODB; +INSERT INTO table_11757486 VALUES (0),(0); +SET SESSION SQL_MODE='STRICT_ALL_TABLES'; +UPDATE IGNORE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +Warnings: +Warning 1264 Out of range value for column 'field1' at row 1 +Warning 1264 Out of range value for column 'field1' at row 2 +UPDATE IGNORE table_11757486 SET field1=128; +Warnings: +Warning 1264 Out of range value for column 'field1' at row 1 +Warning 1264 Out of range value for column 'field1' at row 2 +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave. +UPDATE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +ERROR 22003: Out of range value for column 'field1' at row 1 +UPDATE table_11757486 SET field1=128; +ERROR 22003: Out of range value for column 'field1' at row 1 +SET SESSION SQL_MODE=''; +UPDATE IGNORE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +Warnings: +Warning 1264 Out of range value for column 'field1' at row 1 +Warning 1264 Out of range value for column 'field1' at row 2 +UPDATE IGNORE table_11757486 SET field1=128; +Warnings: +Warning 1264 Out of range value for column 'field1' at row 1 +Warning 1264 Out of range value for column 'field1' at row 2 +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave. +DROP TABLE table_11757486; +SET SESSION SQL_MODE=default; end of 10.0 tests diff --git a/mysql-test/t/multi_update.test b/mysql-test/t/multi_update.test index c013938416e..04611fef7dc 100644 --- a/mysql-test/t/multi_update.test +++ b/mysql-test/t/multi_update.test @@ -1082,4 +1082,28 @@ SELECT * FROM v1; DROP TABLE t1, t2; DROP VIEW v1; +--echo # +--echo # MDEV-5973: MySQL Bug#11757486:49539: NON-DESCRIPTIVE ERR (ERROR 0 +--echo # FROM STORAGE ENGINE) WITH MULTI-TABLE UPDATE +--echo # + +CREATE TABLE table_11757486 (field1 tinyint) ENGINE=INNODB; +INSERT INTO table_11757486 VALUES (0),(0); +SET SESSION SQL_MODE='STRICT_ALL_TABLES'; +UPDATE IGNORE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +UPDATE IGNORE table_11757486 SET field1=128; + +--error ER_WARN_DATA_OUT_OF_RANGE +UPDATE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +--error ER_WARN_DATA_OUT_OF_RANGE +UPDATE table_11757486 SET field1=128; + +SET SESSION SQL_MODE=''; +UPDATE IGNORE (SELECT 128 as col1) x, table_11757486 SET field1=x.col1; +UPDATE IGNORE table_11757486 SET field1=128; + +DROP TABLE table_11757486; + +SET SESSION SQL_MODE=default; + --echo end of 10.0 tests -- cgit v1.2.1 From 21479a6bb3cc37ffa1fb4f53a0ab71d22c7ad445 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 21 Jun 2016 21:26:31 +0400 Subject: MDEV-9524 Cannot load from mysql.event when sql_mode is set to PAD_CHAR_TO_FULL_LENGTH The patch fixes the problem with loading information from system tables (e.g. event and help related tables) when PAD_CHAR_TO_FULL_LENGTH is enabled, as well as includes some additional minor improvements: - refactoring in get_field() to return an error rather than success if strmake_root() failed - removing of duplicate code in similar functions: char *get_field(MEM_ROOT *mem, Field *field) bool get_field(MEM_ROOT *mem, Field *field, String *res) --- mysql-test/r/events_1.result | 20 ++++++++++++++++++++ mysql-test/r/help.result | 15 +++++++++++++++ mysql-test/t/events_1.test | 19 +++++++++++++++++++ mysql-test/t/help.test | 6 ++++++ 4 files changed, 60 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/events_1.result b/mysql-test/r/events_1.result index e03ccf51d8b..4e7ff526eca 100644 --- a/mysql-test/r/events_1.result +++ b/mysql-test/r/events_1.result @@ -469,6 +469,26 @@ DROP EVENT ev1; SHOW EVENTS; Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +# +# MDEV-9524 Cannot load from mysql.event when sql_mode is set to PAD_CHAR_TO_FULL_LENGTH +# +CREATE TABLE t1 (a INT); +CREATE EVENT ev1 ON SCHEDULE EVERY 5 SECOND DO DELETE FROM t1; +SHOW EVENTS; +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +events_test ev1 root@localhost SYSTEM RECURRING NULL 5 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci +SET sql_mode=PAD_CHAR_TO_FULL_LENGTH; +SHOW EVENTS; +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +events_test ev1 root@localhost SYSTEM RECURRING NULL 5 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci +DROP EVENT ev1; +CREATE EVENT ev1 ON SCHEDULE EVERY 5 SECOND DO DELETE FROM t1; +SHOW EVENTS; +Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation +events_test ev1 root@localhost SYSTEM RECURRING NULL 5 # # NULL ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci +DROP EVENT ev1; +DROP TABLE t1; +SET sql_mode=DEFAULT; # # End of tests diff --git a/mysql-test/r/help.result b/mysql-test/r/help.result index 16719cc8193..319a1ba3e85 100644 --- a/mysql-test/r/help.result +++ b/mysql-test/r/help.result @@ -148,6 +148,21 @@ help 'impossible_category_1'; source_category_name name is_it_category impossible_category_1 impossible_function_1 N impossible_category_1 impossible_function_2 N +# MDEV-9524 Cannot load from mysql.event when sql_mode is set to PAD_CHAR_TO_FULL_LENGTH +help 'impossible_function_1'; +name description example +impossible_function_1 description of + impossible_function1 + example of + impossible_function1 +SET sql_mode=PAD_CHAR_TO_FULL_LENGTH; +help 'impossible_function_1'; +name description example +impossible_function_1 description of + impossible_function1 + example of + impossible_function1 +SET sql_mode=DEFAULT; alter table mysql.help_relation engine=innodb; alter table mysql.help_keyword engine=innodb; alter table mysql.help_topic engine=innodb; diff --git a/mysql-test/t/events_1.test b/mysql-test/t/events_1.test index bf5a356cee3..250b0d004dc 100644 --- a/mysql-test/t/events_1.test +++ b/mysql-test/t/events_1.test @@ -459,6 +459,25 @@ DROP EVENT ev1; SHOW EVENTS; +--echo # +--echo # MDEV-9524 Cannot load from mysql.event when sql_mode is set to PAD_CHAR_TO_FULL_LENGTH +--echo # +CREATE TABLE t1 (a INT); +CREATE EVENT ev1 ON SCHEDULE EVERY 5 SECOND DO DELETE FROM t1; +--replace_column 8 # 9 # +SHOW EVENTS; +SET sql_mode=PAD_CHAR_TO_FULL_LENGTH; +--replace_column 8 # 9 # +SHOW EVENTS; +DROP EVENT ev1; +CREATE EVENT ev1 ON SCHEDULE EVERY 5 SECOND DO DELETE FROM t1; +--replace_column 8 # 9 # +SHOW EVENTS; +DROP EVENT ev1; +DROP TABLE t1; +SET sql_mode=DEFAULT; + + --echo --echo # --echo # End of tests diff --git a/mysql-test/t/help.test b/mysql-test/t/help.test index 71821e46771..881299a216c 100644 --- a/mysql-test/t/help.test +++ b/mysql-test/t/help.test @@ -61,6 +61,12 @@ help '%function_7'; help '%category_2'; help 'impossible_function_1'; help 'impossible_category_1'; + +--echo # MDEV-9524 Cannot load from mysql.event when sql_mode is set to PAD_CHAR_TO_FULL_LENGTH +help 'impossible_function_1'; +SET sql_mode=PAD_CHAR_TO_FULL_LENGTH; +help 'impossible_function_1'; +SET sql_mode=DEFAULT; ############## --disable_warnings -- cgit v1.2.1 From 63120090f994cc78876944e9f7a76f53337fa46e Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 21 Jun 2016 21:36:23 +0400 Subject: MDEV-10262 ucs2_thai_520_w2: wrong implicit weights on the secondary level --- mysql-test/include/ctype_uca_w2.inc | 7 +++++++ mysql-test/r/ctype_uca.result | 26 ++++++++++++++++++++++++++ mysql-test/r/ctype_utf16_uca.result | 13 +++++++++++++ mysql-test/r/ctype_utf32_uca.result | 13 +++++++++++++ mysql-test/r/ctype_utf8mb4_uca.result | 13 +++++++++++++ 5 files changed, 72 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/include/ctype_uca_w2.inc b/mysql-test/include/ctype_uca_w2.inc index 86ed7ddd134..b59f73b8a63 100644 --- a/mysql-test/include/ctype_uca_w2.inc +++ b/mysql-test/include/ctype_uca_w2.inc @@ -22,6 +22,13 @@ SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 2)) FROM t1; SELECT HEX(a), HEX(WEIGHT_STRING(a AS CHAR(4) LEVEL 3)) FROM t1; DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +DROP TABLE t1; + CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; SHOW CREATE TABLE t1; INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 1609e7fc320..d9cba536814 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -14033,6 +14033,19 @@ Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +ucs2 HEX(a) HEX(WEIGHT_STRING(a)) +3400 E39080 FB80B4000020 +F001 EF8081 FBC1F0010020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; a HEX(WEIGHT_STRING(a LEVEL 2)) @@ -14714,6 +14727,19 @@ Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +ucs2 HEX(a) HEX(WEIGHT_STRING(a)) +3400 3400 FB80B4000020 +F001 F001 FBC1F0010020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; a HEX(WEIGHT_STRING(a LEVEL 2)) diff --git a/mysql-test/r/ctype_utf16_uca.result b/mysql-test/r/ctype_utf16_uca.result index 1ee06062fb6..1e4c77ea83d 100644 --- a/mysql-test/r/ctype_utf16_uca.result +++ b/mysql-test/r/ctype_utf16_uca.result @@ -6663,6 +6663,19 @@ Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +ucs2 HEX(a) HEX(WEIGHT_STRING(a)) +3400 3400 FB80B4000020 +F001 F001 FBC1F0010020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf16 COLLATE utf16_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; a HEX(WEIGHT_STRING(a LEVEL 2)) diff --git a/mysql-test/r/ctype_utf32_uca.result b/mysql-test/r/ctype_utf32_uca.result index dab23a80a43..234a01bb108 100644 --- a/mysql-test/r/ctype_utf32_uca.result +++ b/mysql-test/r/ctype_utf32_uca.result @@ -6683,6 +6683,19 @@ Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +ucs2 HEX(a) HEX(WEIGHT_STRING(a)) +3400 00003400 FB80B4000020 +F001 0000F001 FBC1F0010020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf32 COLLATE utf32_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; a HEX(WEIGHT_STRING(a LEVEL 2)) diff --git a/mysql-test/r/ctype_utf8mb4_uca.result b/mysql-test/r/ctype_utf8mb4_uca.result index b711dfb65c8..4792d746709 100644 --- a/mysql-test/r/ctype_utf8mb4_uca.result +++ b/mysql-test/r/ctype_utf8mb4_uca.result @@ -5373,6 +5373,19 @@ Table Create Table t1 CREATE TABLE `t1` ( `a` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (_ucs2 0x3400); +INSERT INTO t1 VALUES (_ucs2 0xF001); +SELECT HEX(CONVERT(a USING ucs2)) AS ucs2, HEX(a), HEX(WEIGHT_STRING(a)) FROM t1; +ucs2 HEX(a) HEX(WEIGHT_STRING(a)) +3400 E39080 FB80B4000020 +F001 EF8081 FBC1F0010020 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT SPACE(10) AS a LIMIT 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 INSERT INTO t1 VALUES ('A'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å'); SELECT a, HEX(WEIGHT_STRING(a LEVEL 2)) FROM t1 ORDER BY a; a HEX(WEIGHT_STRING(a LEVEL 2)) -- cgit v1.2.1 From a10fd659aacd3a23386e5ff61a8c0ef9165690a3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 22 Jun 2016 00:24:42 +0200 Subject: Fixed for failures in buildbot: Replication 1. remove unnecessary rpl-tokudb combination file. 2. fix rpl_ignore_table to cleanup properly (not leave test grants in memory) 3. check_temp_dir() is supposed to set the error in stmt_da - do it even when called multiple times, this fixes a crash when rpl.rpl_slave_load_tmpdir_not_exist is run twice. --- mysql-test/suite/rpl/r/rpl_ignore_table.result | 1 + mysql-test/suite/rpl/t/rpl_ignore_table.test | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/rpl/r/rpl_ignore_table.result b/mysql-test/suite/rpl/r/rpl_ignore_table.result index 8e7166fa278..6d7c4e3686c 100644 --- a/mysql-test/suite/rpl/r/rpl_ignore_table.result +++ b/mysql-test/suite/rpl/r/rpl_ignore_table.result @@ -142,4 +142,5 @@ HEX(word) SELECT * FROM tmptbl504451f4258$1; ERROR 42S02: Table 'test.tmptbl504451f4258$1' doesn't exist DROP TABLE t5; +flush privileges; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_ignore_table.test b/mysql-test/suite/rpl/t/rpl_ignore_table.test index b0019b70dc8..f4c2c32a805 100644 --- a/mysql-test/suite/rpl/t/rpl_ignore_table.test +++ b/mysql-test/suite/rpl/t/rpl_ignore_table.test @@ -1,6 +1,6 @@ -source include/master-slave.inc; let collation=utf8_unicode_ci; ---source include/have_collation.inc +source include/have_collation.inc; +source include/master-slave.inc; call mtr.add_suppression("Can't find record in 't.'"); call mtr.add_suppression("Can't find record in 'user'"); @@ -180,6 +180,7 @@ SELECT HEX(word) FROM t5; SELECT * FROM tmptbl504451f4258$1; connection master; DROP TABLE t5; +flush privileges; sync_slave_with_master; --source include/rpl_end.inc -- cgit v1.2.1 From 5fd80875909c88e624a79a528eaaf9418089a211 Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Mon, 30 May 2016 21:42:36 +0300 Subject: [MDEV-9614] Roles and Users longer than 6 characters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bug is apparent when the username is longer than the rolename. It is caused by a simple typo that caused a memcmp call to compare a different number of bytes than necessary. The fix was proposed by Igor Pashev. I have reviewed it and it is the correct approach. Test case introduced by me, using the details provided in the MDEV. Signed-off-by: Vicențiu Ciorbaru --- mysql-test/suite/roles/set_role-9614.result | 99 +++++++++++++++++++++++++++++ mysql-test/suite/roles/set_role-9614.test | 79 +++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 mysql-test/suite/roles/set_role-9614.result create mode 100644 mysql-test/suite/roles/set_role-9614.test (limited to 'mysql-test') diff --git a/mysql-test/suite/roles/set_role-9614.result b/mysql-test/suite/roles/set_role-9614.result new file mode 100644 index 00000000000..37f6db070c0 --- /dev/null +++ b/mysql-test/suite/roles/set_role-9614.result @@ -0,0 +1,99 @@ +# +# MDEV-9614 Roles and Users Longer than 6 characters +# +# This test case checks the edge case presented in the MDEV. The +# real issue is actually apparent when the username is longer than the +# rolename. +# +# We need a separate database not including test or test_% names. Due to +# default privileges given on these databases. +# +DROP DATABASE IF EXISTS `bug_db`; +Warnings: +Note 1008 Can't drop database 'bug_db'; database doesn't exist +# +# The first user did not show the bug as john's length is smaller +# than client. The bug is apparent most of the time for usertestjohn. +# +CREATE USER `john`@`%`; +CREATE USER `usertestjohn`@`%`; +CREATE ROLE `client`; +# +# Setup the required tables. +# +CREATE DATABASE `bug_db`; +CREATE TABLE `bug_db`.`t0`(`c0` INT); +# +# Setup select privileges only on the role. Setting the role should give +# select access to bug_db.t0. +# +GRANT SELECT ON `bug_db`.`t0` TO `client`; +GRANT `client` TO `john`@`%`; +GRANT `client` TO `usertestjohn`@`%`; +# +# Check to see grants are set. +# +SHOW GRANTS FOR `john`@`%`; +Grants for john@% +GRANT client TO 'john'@'%' +GRANT USAGE ON *.* TO 'john'@'%' +SHOW GRANTS FOR `usertestjohn`@`%`; +Grants for usertestjohn@% +GRANT client TO 'usertestjohn'@'%' +GRANT USAGE ON *.* TO 'usertestjohn'@'%' +SHOW GRANTS FOR `client`; +Grants for client +GRANT USAGE ON *.* TO 'client' +GRANT SELECT ON `bug_db`.`t0` TO 'client' +show databases; +Database +bug_db +information_schema +mtr +mysql +performance_schema +test +# +# Try using the database as john. +# +connect john, localhost, john,,information_schema; +show databases; +Database +information_schema +test +set role client; +show databases; +Database +bug_db +information_schema +test +use bug_db; +# +# Try using the database as usertestjohn. +# +connect usertestjohn, localhost, usertestjohn,,information_schema; +show databases; +Database +information_schema +test +set role client; +show databases; +Database +bug_db +information_schema +test +show grants; +Grants for usertestjohn@% +GRANT client TO 'usertestjohn'@'%' +GRANT USAGE ON *.* TO 'usertestjohn'@'%' +GRANT USAGE ON *.* TO 'client' +GRANT SELECT ON `bug_db`.`t0` TO 'client' +use bug_db; +# +# Cleanup +# +connection default; +drop user john; +drop user usertestjohn; +drop role client; +drop database bug_db; diff --git a/mysql-test/suite/roles/set_role-9614.test b/mysql-test/suite/roles/set_role-9614.test new file mode 100644 index 00000000000..5e9f7dacf19 --- /dev/null +++ b/mysql-test/suite/roles/set_role-9614.test @@ -0,0 +1,79 @@ +--source include/not_embedded.inc + +--echo # +--echo # MDEV-9614 Roles and Users Longer than 6 characters +--echo # +--echo # This test case checks the edge case presented in the MDEV. The +--echo # real issue is actually apparent when the username is longer than the +--echo # rolename. + +--enable_connect_log +--echo # +--echo # We need a separate database not including test or test_% names. Due to +--echo # default privileges given on these databases. +--echo # +DROP DATABASE IF EXISTS `bug_db`; + +--echo # +--echo # The first user did not show the bug as john's length is smaller +--echo # than client. The bug is apparent most of the time for usertestjohn. +--echo # +CREATE USER `john`@`%`; +CREATE USER `usertestjohn`@`%`; +CREATE ROLE `client`; + +--echo # +--echo # Setup the required tables. +--echo # +CREATE DATABASE `bug_db`; +CREATE TABLE `bug_db`.`t0`(`c0` INT); + +--echo # +--echo # Setup select privileges only on the role. Setting the role should give +--echo # select access to bug_db.t0. +--echo # +GRANT SELECT ON `bug_db`.`t0` TO `client`; +GRANT `client` TO `john`@`%`; +GRANT `client` TO `usertestjohn`@`%`; + +--echo # +--echo # Check to see grants are set. +--echo # +SHOW GRANTS FOR `john`@`%`; +SHOW GRANTS FOR `usertestjohn`@`%`; +SHOW GRANTS FOR `client`; + +show databases; + +--echo # +--echo # Try using the database as john. +--echo # +connect (john, localhost, john,,information_schema); + +show databases; +set role client; +show databases; +use bug_db; + +--echo # +--echo # Try using the database as usertestjohn. +--echo # +connect (usertestjohn, localhost, usertestjohn,,information_schema); + +show databases; +set role client; +show databases; + +show grants; +use bug_db; + + +--echo # +--echo # Cleanup +--echo # +connection default; +drop user john; +drop user usertestjohn; +drop role client; +drop database bug_db; +--disable_connect_log -- cgit v1.2.1 From b449612907bd09bebf8d1280d80839cd16784fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicen=C8=9Biu=20Ciorbaru?= Date: Mon, 20 Jun 2016 23:43:01 +0300 Subject: MDEV-8638: REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_ROLE breaks replication Fix the replication failure caused by incorect initialization of THD::invoker_host && THD::invoker_user. Breakdown of the failure is this: Query_log_event::host and Query_log_event::user can have their LEX_STRING's set to length 0, but the actual str member points to garbage. Code afterwards copies Query_log_event::host and user to THD::invoker_host and THD::invoker_user. Calling code for these members expects both members to be initialized. Eg. the str member be a NULL terminated string and length have appropriate size. --- .../roles/rpl_grant_revoke_current_role-8638.result | 21 +++++++++++++++++++++ .../roles/rpl_grant_revoke_current_role-8638.test | 12 ++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.result create mode 100644 mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test (limited to 'mysql-test') diff --git a/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.result b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.result new file mode 100644 index 00000000000..67af4a068d6 --- /dev/null +++ b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.result @@ -0,0 +1,21 @@ +include/master-slave.inc +[connection master] +create role r1; +set role r1; +grant select on db.* to current_role; +revoke all privileges, grant option from current_role; +drop role r1; +include/rpl_end.inc +connection server_2; +connection server_2; +connection server_2; +connection server_2; +connection server_1; +connection server_1; +connection server_1; +connection server_2; +connection server_1; +connection server_2; +connection server_2; +connection server_1; +connection server_1; diff --git a/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test new file mode 100644 index 00000000000..6a6c4f2a756 --- /dev/null +++ b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test @@ -0,0 +1,12 @@ +--source include/master-slave.inc +--source include/have_binlog_format_mixed.inc + +--enable_connect_log + +create role r1; +set role r1; +grant select on db.* to current_role; +revoke all privileges, grant option from current_role; +drop role r1; + +--source include/rpl_end.inc -- cgit v1.2.1 From 3e03b89b0a683dd3b14d6ea24d2ca93accdfd61f Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 22 Jun 2016 23:20:41 +0300 Subject: MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in Make tree_or set correct SEL_TREE::keys_map for the result. --- mysql-test/r/range.result | 11 +++++++++++ mysql-test/r/range_mrr_icp.result | 11 +++++++++++ mysql-test/t/range.test | 9 +++++++++ 3 files changed, 31 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index a0e44f91d44..268bd184c58 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -2288,5 +2288,16 @@ Warnings: Warning 1366 Incorrect string value: '\xF0\x9F\x98\x8E' for column 'a' at row 1 DROP TABLE t1; # +# MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in +# sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*) +# +CREATE TABLE t1 (pk INT PRIMARY KEY); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5; +pk +1 +2 +DROP TABLE t1; +# # End of 10.1 tests # diff --git a/mysql-test/r/range_mrr_icp.result b/mysql-test/r/range_mrr_icp.result index c16d3b4adae..5c6930f4323 100644 --- a/mysql-test/r/range_mrr_icp.result +++ b/mysql-test/r/range_mrr_icp.result @@ -2290,6 +2290,17 @@ Warnings: Warning 1366 Incorrect string value: '\xF0\x9F\x98\x8E' for column 'a' at row 1 DROP TABLE t1; # +# MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in +# sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*) +# +CREATE TABLE t1 (pk INT PRIMARY KEY); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5; +pk +1 +2 +DROP TABLE t1; +# # End of 10.1 tests # set optimizer_switch=@mrr_icp_extra_tmp; diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index ba4928faffb..7f0e063124e 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -1816,6 +1816,15 @@ INSERT INTO t1 VALUES ('a'),('b'),('c'),('d'),('e'); EXPLAIN SELECT * FROM t1 WHERE a<=>'😎'; DROP TABLE t1; +--echo # +--echo # MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in +--echo # sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*) +--echo # +CREATE TABLE t1 (pk INT PRIMARY KEY); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5; +DROP TABLE t1; + --echo # --echo # End of 10.1 tests --echo # -- cgit v1.2.1 From 26de9061e8c4462152b4bcff2b9cbb80cde12de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Thu, 23 Jun 2016 07:42:40 +0300 Subject: Merge following commit from 5.5: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit ef92aaf9ece92c873ae0f3448ab2274c958ba3fe Author: Jan Lindström Date: Wed Jun 22 22:37:28 2016 +0300 MDEV-10083: Orphan ibd file when playing with foreign keys Analysis: row_drop_table_for_mysql did not allow dropping referenced table even in case when actual creating of the referenced table was not successfull if foreign_key_checks=1. Fix: Allow dropping referenced table even if foreign_key_checks=1 if actual table create returned error. --- mysql-test/suite/innodb/r/innodb-fkcheck.result | 89 ++++++++++++++++++ mysql-test/suite/innodb/t/innodb-fkcheck.test | 115 ++++++++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 mysql-test/suite/innodb/r/innodb-fkcheck.result create mode 100644 mysql-test/suite/innodb/t/innodb-fkcheck.test (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb-fkcheck.result b/mysql-test/suite/innodb/r/innodb-fkcheck.result new file mode 100644 index 00000000000..c6beabb0f50 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-fkcheck.result @@ -0,0 +1,89 @@ +set global innodb_file_per_table = 1; +drop table if exists b; +drop database if exists bug_fk; +create database bug_fk; +use bug_fk; +CREATE TABLE b ( +b int unsigned NOT NULL, +d1 datetime NOT NULL, +PRIMARY KEY (b,d1) +) ENGINE=InnoDB; +CREATE TABLE c ( +b int unsigned NOT NULL, +d1 datetime NOT NULL, +d2 datetime NOT NULL, +PRIMARY KEY (b,d1), +CONSTRAINT b_fk FOREIGN KEY (b) REFERENCES b (b) +) ENGINE=InnoDB; +show warnings; +Level Code Message +set foreign_key_checks = 0; +DROP TABLE IF EXISTS b; +show create table c; +Table Create Table +c CREATE TABLE `c` ( + `b` int(10) unsigned NOT NULL, + `d1` datetime NOT NULL, + `d2` datetime NOT NULL, + PRIMARY KEY (`b`,`d1`), + CONSTRAINT `b_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE b ( +b bigint unsigned NOT NULL, +d1 date NOT NULL, +PRIMARY KEY (b,d1) +) ENGINE=InnoDB; +ERROR HY000: Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") +show warnings; +Level Code Message +Error 1005 Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") +Warning 1215 Cannot add foreign key constraint +DROP TABLE IF EXISTS d; +Warnings: +Note 1051 Unknown table 'bug_fk.d' +CREATE TABLE d ( +b bigint unsigned NOT NULL, +d1 date NOT NULL, +PRIMARY KEY (b,d1), +CONSTRAINT bd_fk FOREIGN KEY (b) REFERENCES b (b) +) ENGINE=InnoDB; +show warnings; +Level Code Message +set foreign_key_checks = 1; +show create table c; +Table Create Table +c CREATE TABLE `c` ( + `b` int(10) unsigned NOT NULL, + `d1` datetime NOT NULL, + `d2` datetime NOT NULL, + PRIMARY KEY (`b`,`d1`), + CONSTRAINT `b_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +show create table d; +Table Create Table +d CREATE TABLE `d` ( + `b` bigint(20) unsigned NOT NULL, + `d1` date NOT NULL, + PRIMARY KEY (`b`,`d1`), + CONSTRAINT `bd_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE b ( +b bigint unsigned NOT NULL, +d1 date NOT NULL, +PRIMARY KEY (b,d1) +) ENGINE=InnoDB; +ERROR HY000: Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") +show warnings; +Level Code Message +Error 1005 Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") +Warning 1215 Cannot add foreign key constraint +set foreign_key_checks=0; +drop table c; +drop table d; +create table b(id int) engine=innodb; +show warnings; +Level Code Message +b.frm +b.ibd +drop table if exists b; +drop database if exists bug_fk; diff --git a/mysql-test/suite/innodb/t/innodb-fkcheck.test b/mysql-test/suite/innodb/t/innodb-fkcheck.test new file mode 100644 index 00000000000..51e36ae6984 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-fkcheck.test @@ -0,0 +1,115 @@ +--source include/have_innodb.inc + +# +# MDEV-10083: Orphan ibd file when playing with foreign keys +# +--disable_query_log +SET @start_global_fpt = @@global.innodb_file_per_table; +SET @start_global_fkc = @@global.foreign_key_checks; +--enable_query_log + +set global innodb_file_per_table = 1; + +--disable_warnings +drop table if exists b; +drop database if exists bug_fk; +--enable_warnings + +let $MYSQLD_DATADIR = `select @@datadir`; + +create database bug_fk; +use bug_fk; + +CREATE TABLE b ( + b int unsigned NOT NULL, + d1 datetime NOT NULL, + PRIMARY KEY (b,d1) +) ENGINE=InnoDB; + +CREATE TABLE c ( + b int unsigned NOT NULL, + d1 datetime NOT NULL, + d2 datetime NOT NULL, + PRIMARY KEY (b,d1), + CONSTRAINT b_fk FOREIGN KEY (b) REFERENCES b (b) +) ENGINE=InnoDB; + +show warnings; + +set foreign_key_checks = 0; + +DROP TABLE IF EXISTS b; + +show create table c; + +# +# Note that column b has different type in parent table +# +--error 1005 +CREATE TABLE b ( + b bigint unsigned NOT NULL, + d1 date NOT NULL, + PRIMARY KEY (b,d1) +) ENGINE=InnoDB; + +show warnings; + +DROP TABLE IF EXISTS d; + +CREATE TABLE d ( + b bigint unsigned NOT NULL, + d1 date NOT NULL, + PRIMARY KEY (b,d1), + CONSTRAINT bd_fk FOREIGN KEY (b) REFERENCES b (b) +) ENGINE=InnoDB; + +show warnings; + +set foreign_key_checks = 1; + +show create table c; +show create table d; + +# +# Table c column b used on foreign key has different type +# compared referenced column b in table b, but this +# create still produced b.ibd file. This is because +# we row_drop_table_for_mysql was called and referenced +# table is not allowed to be dropped even in case +# when actual create is not successfull. +# +--error 1005 +CREATE TABLE b ( + b bigint unsigned NOT NULL, + d1 date NOT NULL, + PRIMARY KEY (b,d1) +) ENGINE=InnoDB; + +show warnings; + +--list_files $MYSQLD_DATADIR/bug_fk b* + +set foreign_key_checks=0; + +drop table c; +drop table d; + +--list_files $MYSQLD_DATADIR/bug_fk b* + +create table b(id int) engine=innodb; +show warnings; + +--list_files $MYSQLD_DATADIR/bug_fk b* + +# +# Cleanup +# +--disable_query_log +SET @@global.innodb_file_per_table = @start_global_fpt; +SET @@global.foreign_key_checks = @start_global_fkc; +--enable_query_log + +--disable_warnings +drop table if exists b; +drop database if exists bug_fk; +--enable_warnings -- cgit v1.2.1 From f289f3ee9c330bfa47f20c1016541cdd9dc8e354 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Thu, 23 Jun 2016 12:16:20 +0400 Subject: MDEV-9728 - Hard crash in metadata_lock_info Disable output of MDL lock duration since there is no facility to retreive it properly. --- mysql-test/r/create_or_replace.result | 68 +++++++++++++++++------------------ 1 file changed, 34 insertions(+), 34 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/create_or_replace.result b/mysql-test/r/create_or_replace.result index a8348b8a5d0..3a894e9fcb1 100644 --- a/mysql-test/r/create_or_replace.result +++ b/mysql-test/r/create_or_replace.result @@ -264,11 +264,11 @@ create table mysqltest2.t2 like test.t1; lock table test.t1 write, mysqltest2.t2 write; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock mysqltest2 +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock mysqltest2 t2 +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 create or replace table test.t1; ERROR 42000: A table must have at least 1 column show tables; @@ -276,10 +276,10 @@ Tables_in_test t2 select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock mysqltest2 +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock mysqltest2 t2 create or replace table mysqltest2.t2; ERROR 42000: A table must have at least 1 column select * from information_schema.metadata_lock_info; @@ -291,11 +291,11 @@ create table mysqltest2.t2 like test.t1; lock table test.t1 write, mysqltest2.t2 write; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock mysqltest2 +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock mysqltest2 t2 +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 create or replace table test.t1 (a int) select 1 as 'a', 2 as 'a'; ERROR 42S21: Duplicate column name 'a' show tables; @@ -303,10 +303,10 @@ Tables_in_test t2 select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock mysqltest2 +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock mysqltest2 t2 create or replace table mysqltest2.t2 (a int) select 1 as 'a', 2 as 'a'; ERROR 42S21: Duplicate column name 'a' select * from information_schema.metadata_lock_info; @@ -400,31 +400,31 @@ create table t1 (a int); lock table t1 write, t2 read; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 -# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 +# MDL_SHARED_READ NULL Table metadata lock test t2 create or replace table t1 (i int); select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 -# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 +# MDL_SHARED_READ NULL Table metadata lock test t2 create or replace table t1 like t2; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 -# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 +# MDL_SHARED_READ NULL Table metadata lock test t2 create or replace table t1 select 1 as f1; select * from information_schema.metadata_lock_info; THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock -# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test -# MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 -# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2 +# MDL_INTENTION_EXCLUSIVE NULL Global read lock +# MDL_INTENTION_EXCLUSIVE NULL Schema metadata lock test +# MDL_SHARED_NO_READ_WRITE NULL Table metadata lock test t1 +# MDL_SHARED_READ NULL Table metadata lock test t2 drop table t1; unlock tables; # -- cgit v1.2.1 From 25e68c5e46ced7e626853cdf5491c2b5430fd51b Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 23 Jun 2016 14:25:48 +0400 Subject: MDEV-8686 A user defined collation utf8_confusables doesn't work The collation customization code for the UCA (Unicode Collation Alrorithm) based collations now allows to reset to and shift of characters with implicit weights. Previously reset/shift worked only for the characters with explicit DUCET weights. An attempt to use reset/shift with character with implicit weights made the server crash. --- mysql-test/r/ctype_ldml.result | 23 +++++++++++++++++++++++ mysql-test/std_data/Index.xml | 10 ++++++++++ mysql-test/t/ctype_ldml.test | 12 ++++++++++++ 3 files changed, 45 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/ctype_ldml.result b/mysql-test/r/ctype_ldml.result index acb92a8363b..d333c03143b 100644 --- a/mysql-test/r/ctype_ldml.result +++ b/mysql-test/r/ctype_ldml.result @@ -460,6 +460,7 @@ utf8mb4_test_400_ci utf8mb4 328 8 latin1_test2 latin1 332 1 utf8_bengali_standard_ci utf8 336 8 utf8_bengali_traditional_ci utf8 337 8 +utf8_implicit_weights_ci utf8 338 8 utf8_phone_ci utf8 352 8 utf8_test_ci utf8 353 8 utf8_5624_1 utf8 354 8 @@ -1156,3 +1157,25 @@ Warning 1273 Expansion too long: 'a\u002Daaaaaa10' # # Search for occurrences of [ERROR] Syntax error at '[strength tertiary]' Occurances : 2 +# +# MDEV-8686 A user defined collation utf8_confusables doesn't work +# +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_implicit_weights_ci); +INSERT INTO t1 VALUES ('a'),('b'),('c'); +INSERT INTO t1 VALUES (_ucs2 0x1500),(_ucs2 0x1501); +INSERT INTO t1 VALUES (_ucs2 0x3400),(_ucs2 0x3560),(_ucs2 0x3561),(_ucs2 0x3600); +INSERT INTO t1 VALUES (_ucs2 0x3700),(_ucs2 0x3701); +SELECT HEX(CONVERT(a USING ucs2)) AS ch, HEX(WEIGHT_STRING(a)) AS w, HEX(WEIGHT_STRING(a COLLATE utf8_unicode_ci)) AS ducet FROM t1 ORDER BY a,ch; +ch w ducet +0061 0E33 0E33 +3561 0E33 FB80B561 +0063 0E60 0E60 +1500 0E60 1BAD +0062 FB80B400 0E4A +3400 FB80B400 FB80B400 +3560 FB80B560 FB80B560 +1501 FB80B600 1BAE +3600 FB80B600 FB80B600 +3700 FB80B700 FB80B700 +3701 FB80B700 FB80B701 +DROP TABLE t1; diff --git a/mysql-test/std_data/Index.xml b/mysql-test/std_data/Index.xml index 5139db0554a..b66fdfee55c 100644 --- a/mysql-test/std_data/Index.xml +++ b/mysql-test/std_data/Index.xml @@ -1117,6 +1117,16 @@ + + + \u3400b + a\u3561 + c\u1500 + \u3600\u1501 + \u3700\u3701 + + + diff --git a/mysql-test/t/ctype_ldml.test b/mysql-test/t/ctype_ldml.test index 1b9d7c9d4ad..1ea8002a2eb 100644 --- a/mysql-test/t/ctype_ldml.test +++ b/mysql-test/t/ctype_ldml.test @@ -397,3 +397,15 @@ perl; print "Occurances : $count_error\n"; close(FILE); EOF + + +--echo # +--echo # MDEV-8686 A user defined collation utf8_confusables doesn't work +--echo # +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_implicit_weights_ci); +INSERT INTO t1 VALUES ('a'),('b'),('c'); +INSERT INTO t1 VALUES (_ucs2 0x1500),(_ucs2 0x1501); +INSERT INTO t1 VALUES (_ucs2 0x3400),(_ucs2 0x3560),(_ucs2 0x3561),(_ucs2 0x3600); +INSERT INTO t1 VALUES (_ucs2 0x3700),(_ucs2 0x3701); +SELECT HEX(CONVERT(a USING ucs2)) AS ch, HEX(WEIGHT_STRING(a)) AS w, HEX(WEIGHT_STRING(a COLLATE utf8_unicode_ci)) AS ducet FROM t1 ORDER BY a,ch; +DROP TABLE t1; -- cgit v1.2.1 From 6f6692008617d789b581971541dd9a1377c8dc5c Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 23 Jun 2016 21:57:15 +0400 Subject: Recording innodb_ctype_ldml.result forgotten in the patch for: MDEV-8686 A user defined collation utf8_confusables doesn't work 25e68c5e46ced7e626853cdf5491c2b5430fd51b --- mysql-test/suite/innodb/r/innodb_ctype_ldml.result | 1 + 1 file changed, 1 insertion(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result index 0008de141dc..fefadb2ecb0 100644 --- a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result +++ b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result @@ -396,6 +396,7 @@ utf8mb4_test_400_ci utf8mb4 328 8 latin1_test2 latin1 332 1 utf8_bengali_standard_ci utf8 336 8 utf8_bengali_traditional_ci utf8 337 8 +utf8_implicit_weights_ci utf8 338 8 utf8_phone_ci utf8 352 8 utf8_test_ci utf8 353 8 utf8_5624_1 utf8 354 8 -- cgit v1.2.1 From 94a61838fe0ed2bd7a26b1b53d49d179d3013c45 Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Sun, 26 Jun 2016 21:15:36 -0400 Subject: Fix galera,wsrep tests. --- mysql-test/suite/galera/r/mysql-wsrep#237.result | 1 + mysql-test/suite/galera/suite.pm | 1 + mysql-test/suite/galera/t/mysql-wsrep#237.test | 5 +++++ mysql-test/suite/wsrep/suite.pm | 2 ++ 4 files changed, 9 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/r/mysql-wsrep#237.result b/mysql-test/suite/galera/r/mysql-wsrep#237.result index 3fd9aed1480..1889a8feca0 100644 --- a/mysql-test/suite/galera/r/mysql-wsrep#237.result +++ b/mysql-test/suite/galera/r/mysql-wsrep#237.result @@ -8,3 +8,4 @@ SLEEP(1) 0 SET DEBUG_SYNC= 'now SIGNAL continue'; DROP TABLE t; +SET DEBUG_SYNC= 'RESET'; diff --git a/mysql-test/suite/galera/suite.pm b/mysql-test/suite/galera/suite.pm index d6cd4273014..8a25434f2e9 100644 --- a/mysql-test/suite/galera/suite.pm +++ b/mysql-test/suite/galera/suite.pm @@ -68,6 +68,7 @@ push @::global_suppressions, qr|WSREP: gcs_caused\(\) returned .*|, qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(SYNCED\). Message ignored.|, qr(WSREP: Action message in non-primary configuration from member [0-9]*), + qr(InnoDB: Some resources were not cleaned up in shutdown.*), ); diff --git a/mysql-test/suite/galera/t/mysql-wsrep#237.test b/mysql-test/suite/galera/t/mysql-wsrep#237.test index 7a65cb52ae9..4a539e1ba15 100644 --- a/mysql-test/suite/galera/t/mysql-wsrep#237.test +++ b/mysql-test/suite/galera/t/mysql-wsrep#237.test @@ -28,4 +28,9 @@ SET DEBUG_SYNC= 'now SIGNAL continue'; --connection node_1 --reap +# Cleanup DROP TABLE t; + +--connection node_1a +SET DEBUG_SYNC= 'RESET'; + diff --git a/mysql-test/suite/wsrep/suite.pm b/mysql-test/suite/wsrep/suite.pm index ec7a3e374f5..a1b5fddc628 100644 --- a/mysql-test/suite/wsrep/suite.pm +++ b/mysql-test/suite/wsrep/suite.pm @@ -25,9 +25,11 @@ return "No my_print_defaults" unless $epath; push @::global_suppressions, ( qr(WSREP: Could not open saved state file for reading: ), + qr(WSREP: Could not open state file for reading: .*), qr(WSREP: option --wsrep-causal-reads is deprecated), qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0), qr|WSREP: access file\(.*gvwstate.dat\) failed\(No such file or directory\)|, + qr(InnoDB: Some resources were not cleaned up in shutdown.*), ); $ENV{PATH}="$epath:$ENV{PATH}"; -- cgit v1.2.1 From 652e799a387f63a582254a68363e720e47db97e4 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 27 Jun 2016 15:14:07 +0400 Subject: MDEV-8502 DECIMAL accepts out of range DEFAULT values MDEV-10277 Redundant NOTE when inserting '0.00001 ' into a DECIMAL(2,1) column --- .../extra/rpl_tests/rpl_extra_col_master.test | 4 +- mysql-test/r/type_newdecimal.result | 90 ++++++++++++++++++++++ .../suite/rpl/r/rpl_extra_col_master_innodb.result | 11 +-- .../suite/rpl/r/rpl_extra_col_master_myisam.result | 11 +-- mysql-test/t/type_newdecimal.test | 51 ++++++++++++ 5 files changed, 147 insertions(+), 20 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/extra/rpl_tests/rpl_extra_col_master.test b/mysql-test/extra/rpl_tests/rpl_extra_col_master.test index 18b6c0532f2..aa360c9c803 100644 --- a/mysql-test/extra/rpl_tests/rpl_extra_col_master.test +++ b/mysql-test/extra/rpl_tests/rpl_extra_col_master.test @@ -155,7 +155,7 @@ connection master; f6 ENUM('a', 'b', 'c') default 'a', f7 DECIMAL(17,9) default '1000.00', f8 MEDIUMBLOB, - f9 NUMERIC(6,4) default '2000.00', + f9 NUMERIC(6,2) default '2000.00', f10 VARCHAR(1024), f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f12 SET('a', 'b', 'c') default 'b') @@ -178,7 +178,7 @@ connection master; f5 DOUBLE DEFAULT '2.00', f6 DECIMAL(17,9) default '1000.00', f7 MEDIUMBLOB, - f8 NUMERIC(6,4) default '2000.00', + f8 NUMERIC(6,2) default '2000.00', f9 VARCHAR(1024), f10 BINARY(20) not null default '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f11 CHAR(255)) diff --git a/mysql-test/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result index 1942d07c9ab..2f6a3ea2a61 100644 --- a/mysql-test/r/type_newdecimal.result +++ b/mysql-test/r/type_newdecimal.result @@ -2151,5 +2151,95 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref a a 6 const 1 Using where; Using index; Using filesort DROP TABLE t1; # +# MDEV-8502 DECIMAL accepts out of range DEFAULT values +# +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000.0); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000e0); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '10000.0'); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '10000.1'); +ERROR 42000: Invalid default value for 'a' +# +# MDEV-10277 Redundant NOTE when inserting '0.00001 ' into a DECIMAL(2,1) column +# +CREATE TABLE t1 (a DECIMAL(2,1)); +INSERT INTO t1 VALUES ('0.00001 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +INSERT INTO t1 VALUES ('1e-10000 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +INSERT INTO t1 VALUES ('0.1 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +INSERT INTO t1 VALUES ('0.111 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SELECT * FROM t1; +a +0.0 +0.0 +0.1 +0.1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '1e-10000'); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.0' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.1 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.1' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.10001 '); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.1' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.10001'); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.1' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 0.10001); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.1' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 0.10001e0); +Warnings: +Note 1265 Data truncated for column 'a' at row 1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(2,1) DEFAULT '0.1' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +# # End of 10.1 tests # diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result b/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result index e5e690bdf52..1e0ac5ab940 100644 --- a/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result @@ -96,13 +96,11 @@ f5 DOUBLE DEFAULT '2.00', f6 ENUM('a', 'b', 'c') default 'a', f7 DECIMAL(17,9) default '1000.00', f8 MEDIUMBLOB, -f9 NUMERIC(6,4) default '2000.00', +f9 NUMERIC(6,2) default '2000.00', f10 VARCHAR(1024), f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f12 SET('a', 'b', 'c') default 'b') ENGINE='InnoDB'; -Warnings: -Warning 1264 Out of range value for column 'f9' at row 1 CREATE TABLE t3 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), /* extra */ @@ -119,13 +117,11 @@ CREATE TABLE t4 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), f5 DOUBLE DEFAULT '2.00', f6 DECIMAL(17,9) default '1000.00', f7 MEDIUMBLOB, -f8 NUMERIC(6,4) default '2000.00', +f8 NUMERIC(6,2) default '2000.00', f9 VARCHAR(1024), f10 BINARY(20) not null default '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f11 CHAR(255)) ENGINE='InnoDB'; -Warnings: -Warning 1264 Out of range value for column 'f8' at row 1 CREATE TABLE t31 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), /* extra */ @@ -184,9 +180,6 @@ INSERT into t2 values (2, 2, 2, 'second', (3, 3, 3, 'third', 3.0, 'b', 3000.0003, 'f8: medium size blob', 3000, 'f10: some var char', '01234567', 'c'); -Warnings: -Warning 1264 Out of range value for column 'f9' at row 1 -Warning 1264 Out of range value for column 'f9' at row 2 INSERT into t3 set f1=1, f2=1, f3=1, f4='first', f10='f10: some var char'; INSERT into t4 set f1=1, f2=1, f3=1, f4='first', f7='f7: medium size blob', f10='f10: binary data'; diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result b/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result index 9247ceb1030..38ef9dbff80 100644 --- a/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result +++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result @@ -96,13 +96,11 @@ f5 DOUBLE DEFAULT '2.00', f6 ENUM('a', 'b', 'c') default 'a', f7 DECIMAL(17,9) default '1000.00', f8 MEDIUMBLOB, -f9 NUMERIC(6,4) default '2000.00', +f9 NUMERIC(6,2) default '2000.00', f10 VARCHAR(1024), f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f12 SET('a', 'b', 'c') default 'b') ENGINE='MyISAM'; -Warnings: -Warning 1264 Out of range value for column 'f9' at row 1 CREATE TABLE t3 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), /* extra */ @@ -119,13 +117,11 @@ CREATE TABLE t4 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), f5 DOUBLE DEFAULT '2.00', f6 DECIMAL(17,9) default '1000.00', f7 MEDIUMBLOB, -f8 NUMERIC(6,4) default '2000.00', +f8 NUMERIC(6,2) default '2000.00', f9 VARCHAR(1024), f10 BINARY(20) not null default '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0', f11 CHAR(255)) ENGINE='MyISAM'; -Warnings: -Warning 1264 Out of range value for column 'f8' at row 1 CREATE TABLE t31 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20), /* extra */ @@ -184,9 +180,6 @@ INSERT into t2 values (2, 2, 2, 'second', (3, 3, 3, 'third', 3.0, 'b', 3000.0003, 'f8: medium size blob', 3000, 'f10: some var char', '01234567', 'c'); -Warnings: -Warning 1264 Out of range value for column 'f9' at row 1 -Warning 1264 Out of range value for column 'f9' at row 2 INSERT into t3 set f1=1, f2=1, f3=1, f4='first', f10='f10: some var char'; INSERT into t4 set f1=1, f2=1, f3=1, f4='first', f7='f7: medium size blob', f10='f10: binary data'; diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test index 86066309acc..b84d01e93be 100644 --- a/mysql-test/t/type_newdecimal.test +++ b/mysql-test/t/type_newdecimal.test @@ -1684,6 +1684,57 @@ INSERT INTO t1 VALUES (1),(2),(3),(4),(5); EXPLAIN SELECT * FROM t1 WHERE a='ax' ORDER BY a; DROP TABLE t1; + +--echo # +--echo # MDEV-8502 DECIMAL accepts out of range DEFAULT values +--echo # + +--error ER_INVALID_DEFAULT +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000); +--error ER_INVALID_DEFAULT +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000.0); +--error ER_INVALID_DEFAULT +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 10000e0); +--error ER_INVALID_DEFAULT +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '10000.0'); +--error ER_INVALID_DEFAULT +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '10000.1'); + +--echo # +--echo # MDEV-10277 Redundant NOTE when inserting '0.00001 ' into a DECIMAL(2,1) column +--echo # +CREATE TABLE t1 (a DECIMAL(2,1)); +INSERT INTO t1 VALUES ('0.00001 '); +INSERT INTO t1 VALUES ('1e-10000 '); +INSERT INTO t1 VALUES ('0.1 '); +INSERT INTO t1 VALUES ('0.111 '); +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '1e-10000'); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.1 '); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.10001 '); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT '0.10001'); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 0.10001); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DECIMAL(2,1) DEFAULT 0.10001e0); +SHOW CREATE TABLE t1; +DROP TABLE t1; + --echo # --echo # End of 10.1 tests --echo # -- cgit v1.2.1 From f629f5354850728d85d6b915d2a3fe7192f00cd5 Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 14:44:07 -0400 Subject: Fix memory leak in XtraDB. --- mysql-test/suite/galera/suite.pm | 1 - mysql-test/suite/wsrep/suite.pm | 1 - 2 files changed, 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/suite.pm b/mysql-test/suite/galera/suite.pm index 8a25434f2e9..d6cd4273014 100644 --- a/mysql-test/suite/galera/suite.pm +++ b/mysql-test/suite/galera/suite.pm @@ -68,7 +68,6 @@ push @::global_suppressions, qr|WSREP: gcs_caused\(\) returned .*|, qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(SYNCED\). Message ignored.|, qr(WSREP: Action message in non-primary configuration from member [0-9]*), - qr(InnoDB: Some resources were not cleaned up in shutdown.*), ); diff --git a/mysql-test/suite/wsrep/suite.pm b/mysql-test/suite/wsrep/suite.pm index a1b5fddc628..31d9faeb0dd 100644 --- a/mysql-test/suite/wsrep/suite.pm +++ b/mysql-test/suite/wsrep/suite.pm @@ -29,7 +29,6 @@ push @::global_suppressions, qr(WSREP: option --wsrep-causal-reads is deprecated), qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0), qr|WSREP: access file\(.*gvwstate.dat\) failed\(No such file or directory\)|, - qr(InnoDB: Some resources were not cleaned up in shutdown.*), ); $ENV{PATH}="$epath:$ENV{PATH}"; -- cgit v1.2.1 From b57232d3cb3dbf43551bf7aea42b6f439e0e49eb Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 17:56:59 -0400 Subject: MDEV-6699 : wsrep_node_name not automatically set to hostname Fixed by using hostname (glob_hostname) as default value for wsrep_node_name system variable. Added a test case. --- .../suite/sys_vars/r/wsrep_node_name_basic.result | 39 ++++++++++++++-------- .../suite/sys_vars/t/wsrep_node_name_basic.test | 20 ++++++++--- 2 files changed, 41 insertions(+), 18 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/wsrep_node_name_basic.result b/mysql-test/suite/sys_vars/r/wsrep_node_name_basic.result index 9657e6bf428..763d0612a1b 100644 --- a/mysql-test/suite/sys_vars/r/wsrep_node_name_basic.result +++ b/mysql-test/suite/sys_vars/r/wsrep_node_name_basic.result @@ -4,10 +4,10 @@ call mtr.add_suppression("WSREP: Failed to get provider options"); # save the initial value SET @wsrep_node_name_global_saved = @@global.wsrep_node_name; -# default -SELECT @@global.wsrep_node_name; -@@global.wsrep_node_name - +# default (expect 1) +SELECT COUNT(@@global.wsrep_node_name); +COUNT(@@global.wsrep_node_name) +1 # scope SELECT @@session.wsrep_node_name; @@ -27,21 +27,34 @@ SELECT @@global.wsrep_node_name; @@global.wsrep_node_name hyphenated-node-name SET @@global.wsrep_node_name=default; -SELECT @@global.wsrep_node_name; -@@global.wsrep_node_name - +# default (expect 1) +SELECT COUNT(@@global.wsrep_node_name); +COUNT(@@global.wsrep_node_name) +1 # invalid values SET @@global.wsrep_node_name=NULL; ERROR 42000: Variable 'wsrep_node_name' can't be set to the value of 'NULL' -SELECT @@global.wsrep_node_name; -@@global.wsrep_node_name - +SELECT COUNT(@@global.wsrep_node_name); +COUNT(@@global.wsrep_node_name) +1 SET @@global.wsrep_node_name=1; ERROR 42000: Incorrect argument type to variable 'wsrep_node_name' -SELECT @@global.wsrep_node_name; -@@global.wsrep_node_name - +SELECT COUNT(@@global.wsrep_node_name); +COUNT(@@global.wsrep_node_name) +1 +# +# MDEV-6699 : wsrep_node_name not automaticly set to hostname +# +SET @@global.wsrep_node_name=default; +SELECT @@GLOBAL.wsrep_node_name = VARIABLE_VALUE FROM +INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='hostname'; +@@GLOBAL.wsrep_node_name = VARIABLE_VALUE +1 +SELECT @@GLOBAL.wsrep_node_name = VARIABLE_VALUE FROM +INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='wsrep_node_name'; +@@GLOBAL.wsrep_node_name = VARIABLE_VALUE +1 # restore the initial value SET @@global.wsrep_node_name = @wsrep_node_name_global_saved; diff --git a/mysql-test/suite/sys_vars/t/wsrep_node_name_basic.test b/mysql-test/suite/sys_vars/t/wsrep_node_name_basic.test index 1f3ccc0de2c..7bc9bec8b95 100644 --- a/mysql-test/suite/sys_vars/t/wsrep_node_name_basic.test +++ b/mysql-test/suite/sys_vars/t/wsrep_node_name_basic.test @@ -9,8 +9,8 @@ call mtr.add_suppression("WSREP: Failed to get provider options"); --echo # save the initial value SET @wsrep_node_name_global_saved = @@global.wsrep_node_name; ---echo # default -SELECT @@global.wsrep_node_name; +--echo # default (expect 1) +SELECT COUNT(@@global.wsrep_node_name); --echo --echo # scope @@ -26,16 +26,26 @@ SELECT @@global.wsrep_node_name; SET @@global.wsrep_node_name='hyphenated-node-name'; SELECT @@global.wsrep_node_name; SET @@global.wsrep_node_name=default; -SELECT @@global.wsrep_node_name; +--echo # default (expect 1) +SELECT COUNT(@@global.wsrep_node_name); --echo --echo # invalid values --error ER_WRONG_VALUE_FOR_VAR SET @@global.wsrep_node_name=NULL; -SELECT @@global.wsrep_node_name; +SELECT COUNT(@@global.wsrep_node_name); --error ER_WRONG_TYPE_FOR_VAR SET @@global.wsrep_node_name=1; -SELECT @@global.wsrep_node_name; +SELECT COUNT(@@global.wsrep_node_name); + +--echo # +--echo # MDEV-6699 : wsrep_node_name not automaticly set to hostname +--echo # +SET @@global.wsrep_node_name=default; +SELECT @@GLOBAL.wsrep_node_name = VARIABLE_VALUE FROM +INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='hostname'; +SELECT @@GLOBAL.wsrep_node_name = VARIABLE_VALUE FROM +INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='wsrep_node_name'; --echo --echo # restore the initial value -- cgit v1.2.1 From 47e4e5dfd95b8a50034bd4c92efaf4f71debae5d Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 18:06:18 -0400 Subject: MDEV-6699: wsrep_node_name not automatically set to hostname Update sys_vars.sysvars_wsrep test. --- mysql-test/suite/sys_vars/r/sysvars_wsrep.result | 4 ++-- mysql-test/suite/sys_vars/t/sysvars_wsrep.test | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result index 4d7b03690af..f1745a1ad34 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result +++ b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result @@ -311,9 +311,9 @@ READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME WSREP_NODE_NAME SESSION_VALUE NULL -GLOBAL_VALUE +GLOBAL_VALUE HOSTNAME GLOBAL_VALUE_ORIGIN COMPILE-TIME -DEFAULT_VALUE +DEFAULT_VALUE HOSTNAME VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR VARIABLE_COMMENT Node name diff --git a/mysql-test/suite/sys_vars/t/sysvars_wsrep.test b/mysql-test/suite/sys_vars/t/sysvars_wsrep.test index 32af7d3a5ca..25454191e2e 100644 --- a/mysql-test/suite/sys_vars/t/sysvars_wsrep.test +++ b/mysql-test/suite/sys_vars/t/sysvars_wsrep.test @@ -1,8 +1,9 @@ --source include/have_wsrep.inc --source include/word_size.inc --let $datadir = `SELECT @@datadir` +--let $hostname = `SELECT @@hostname` ---replace_result $datadir DATADIR +--replace_result $datadir DATADIR $hostname HOSTNAME --vertical_results select * from information_schema.system_variables where variable_name like 'wsrep%' -- cgit v1.2.1 From 48a0a66ffa3241c91324606911f7964e956bc99f Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 18:15:47 -0400 Subject: MDEV-10186: mysqld crash when runtime setting wsrep_cluster_address without wsrep_on=ON On wsrep_cluster_address update, node restarts the replication and attempts to connect to the new address. In this process it makes a call to wsrep provider's connect API, which could lead to segfault if wsrep provider is not loaded (wsrep_on=OFF). Fixed by making sure that it proceeds only if a provider is loaded. --- mysql-test/suite/wsrep/r/mdev_10186.result | 11 +++++++++++ mysql-test/suite/wsrep/t/mdev_10186.opt | 1 + mysql-test/suite/wsrep/t/mdev_10186.test | 12 ++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 mysql-test/suite/wsrep/r/mdev_10186.result create mode 100644 mysql-test/suite/wsrep/t/mdev_10186.opt create mode 100644 mysql-test/suite/wsrep/t/mdev_10186.test (limited to 'mysql-test') diff --git a/mysql-test/suite/wsrep/r/mdev_10186.result b/mysql-test/suite/wsrep/r/mdev_10186.result new file mode 100644 index 00000000000..f966c443569 --- /dev/null +++ b/mysql-test/suite/wsrep/r/mdev_10186.result @@ -0,0 +1,11 @@ +# +# MDEV-10186: mysqld crash when runtime setting +# wsrep_cluster_address without wsrep_on=ON +# +SELECT @@wsrep_on; +@@wsrep_on +0 +SELECT @@GLOBAL.wsrep_provider; +@@GLOBAL.wsrep_provider +/usr/lib/galera/libgalera_smm.so +SET @@GLOBAL.wsrep_cluster_address='gcomm://'; diff --git a/mysql-test/suite/wsrep/t/mdev_10186.opt b/mysql-test/suite/wsrep/t/mdev_10186.opt new file mode 100644 index 00000000000..e2655959c62 --- /dev/null +++ b/mysql-test/suite/wsrep/t/mdev_10186.opt @@ -0,0 +1 @@ +--wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep-on=0 diff --git a/mysql-test/suite/wsrep/t/mdev_10186.test b/mysql-test/suite/wsrep/t/mdev_10186.test new file mode 100644 index 00000000000..ec5e9462821 --- /dev/null +++ b/mysql-test/suite/wsrep/t/mdev_10186.test @@ -0,0 +1,12 @@ +--source include/have_wsrep_provider.inc +--source include/have_binlog_format_row.inc + +--echo # +--echo # MDEV-10186: mysqld crash when runtime setting +--echo # wsrep_cluster_address without wsrep_on=ON +--echo # + +SELECT @@wsrep_on; +SELECT @@GLOBAL.wsrep_provider; +SET @@GLOBAL.wsrep_cluster_address='gcomm://'; + -- cgit v1.2.1 From ad3584bf728ad3ee48d99b81d8d14905524df4b8 Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 18:17:03 -0400 Subject: Test cleanup: Remove unnecessary global suppressions --- mysql-test/suite/wsrep/suite.pm | 2 -- 1 file changed, 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/wsrep/suite.pm b/mysql-test/suite/wsrep/suite.pm index a7939c2e333..b6c5bf15ca1 100644 --- a/mysql-test/suite/wsrep/suite.pm +++ b/mysql-test/suite/wsrep/suite.pm @@ -26,8 +26,6 @@ push @::global_suppressions, ( qr(WSREP: Could not open saved state file for reading: .*), qr(WSREP: Could not open state file for reading: .*), - qr(WSREP: option --wsrep-causal-reads is deprecated), - qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0), qr|WSREP: access file\(.*gvwstate.dat\) failed\(No such file or directory\)|, ); -- cgit v1.2.1 From 90f222ea7dea4bebdb3ad93c4c1439e3ab08bbba Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 18:21:00 -0400 Subject: MDEV-10235: Deadlock in CREATE TABLE .. AS SELECT .. if result set is empty in Galera In CTAS, handlers get registered under statement transaction (st_transactions::stmt), while ha_fake_trx_id(), used by CTAS, looked under standard transaction (st_transactions::all) for registered handlers, and thus it failed to grab a fake transaction ID. As a result, with no valid transaction ID, wsrep commit failed with an error. ha_fake_trx_id() now looks for handlers registered under 'stmt' in case 'all' is empty. Also modified the logic to print warning only once if none of the registered handlers have fake_trx_id. --- mysql-test/suite/galera/r/create.result | 13 +++++++++++++ mysql-test/suite/galera/suite.pm | 1 - mysql-test/suite/galera/t/create.test | 16 ++++++++++++++++ mysql-test/suite/wsrep/r/binlog_format.result | 2 +- mysql-test/suite/wsrep/t/binlog_format.test | 2 +- 5 files changed, 31 insertions(+), 3 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/r/create.result b/mysql-test/suite/galera/r/create.result index d23fb186f5e..99b8022393d 100644 --- a/mysql-test/suite/galera/r/create.result +++ b/mysql-test/suite/galera/r/create.result @@ -68,4 +68,17 @@ CREATE TABLE `t2` (`c1` INT) ENGINE=INNODB SELECT * FROM t1; COMMIT; SET autocommit=1; DROP TABLE t1, t2; +# +# MDEV-10235: Deadlock in CREATE TABLE ... AS SELECT .. if result set +# is empty in Galera +# +CREATE TABLE t1(c1 INT) ENGINE=INNODB; +INSERT INTO t1 VALUES(1); +CREATE TABLE t2 AS SELECT * FROM t1 WHERE c1=2; +SELECT * FROM t1; +c1 +1 +SELECT * FROM t2; +c1 +DROP TABLE t1, t2; # End of tests diff --git a/mysql-test/suite/galera/suite.pm b/mysql-test/suite/galera/suite.pm index b3795b91666..2da2b3ad503 100644 --- a/mysql-test/suite/galera/suite.pm +++ b/mysql-test/suite/galera/suite.pm @@ -67,7 +67,6 @@ push @::global_suppressions, qr|WSREP: gcs_caused\(\) returned .*|, qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(SYNCED\). Message ignored.|, qr(WSREP: Action message in non-primary configuration from member [0-9]*), - qr(WSREP: cannot get fake InnoDB transaction ID), ); diff --git a/mysql-test/suite/galera/t/create.test b/mysql-test/suite/galera/t/create.test index 9d0ab215cbb..96a6640c21f 100644 --- a/mysql-test/suite/galera/t/create.test +++ b/mysql-test/suite/galera/t/create.test @@ -68,6 +68,22 @@ SET autocommit=1; # Cleanup DROP TABLE t1, t2; + +--echo # +--echo # MDEV-10235: Deadlock in CREATE TABLE ... AS SELECT .. if result set +--echo # is empty in Galera +--echo # +--connection node_1 +CREATE TABLE t1(c1 INT) ENGINE=INNODB; +INSERT INTO t1 VALUES(1); +CREATE TABLE t2 AS SELECT * FROM t1 WHERE c1=2; + +--connection node_2 +SELECT * FROM t1; +SELECT * FROM t2; +# Cleanup +DROP TABLE t1, t2; + --source include/galera_end.inc --echo # End of tests diff --git a/mysql-test/suite/wsrep/r/binlog_format.result b/mysql-test/suite/wsrep/r/binlog_format.result index d996371c056..1ca90bd626d 100644 --- a/mysql-test/suite/wsrep/r/binlog_format.result +++ b/mysql-test/suite/wsrep/r/binlog_format.result @@ -1,5 +1,5 @@ call mtr.add_suppression("WSREP: MariaDB Galera does not support binlog format.*"); -call mtr.add_suppression("WSREP: cannot get fake InnoDB transaction ID"); +call mtr.add_suppression("WSREP: Cannot get fake transaction ID from storage engine."); # # MDEV-4227: Galera server should stop crashing on setting binlog_format STATEMENT # diff --git a/mysql-test/suite/wsrep/t/binlog_format.test b/mysql-test/suite/wsrep/t/binlog_format.test index a2dc8542322..85864256862 100644 --- a/mysql-test/suite/wsrep/t/binlog_format.test +++ b/mysql-test/suite/wsrep/t/binlog_format.test @@ -2,7 +2,7 @@ --source include/have_binlog_format_row.inc call mtr.add_suppression("WSREP: MariaDB Galera does not support binlog format.*"); -call mtr.add_suppression("WSREP: cannot get fake InnoDB transaction ID"); +call mtr.add_suppression("WSREP: Cannot get fake transaction ID from storage engine."); --echo # --echo # MDEV-4227: Galera server should stop crashing on setting binlog_format STATEMENT -- cgit v1.2.1 From 7ff44b1a832b005264994cbdfc52f93f69b92cdc Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 27 Jun 2016 18:30:07 -0400 Subject: MDEV-10161: wsrep_sync_wait not enabled when set to 1 in config file Since wsrep_sync_wait & wsrep_causal_reads variables are related, they are always kept in sync whenever one of them changes. Same is tried on server start, where wsrep_sync_wait get updated based on wsrep_causal_reads' value. But, since wsrep_causal_reads is OFF by default, wsrep_sync_wait's value gets modified and loses its WSREP_SYNC_WAIT_BEFORE_READ bit. Fixed by syncing wsrep_sync_wait & wsrep_causal_reads values individually on server start in mysqld_get_one_option() based on command line arguments used. --- mysql-test/suite/galera/galera_2nodes.cnf | 1 - mysql-test/suite/galera/r/galera_var_sync_wait.result | 9 +++++++++ mysql-test/suite/galera/t/galera_var_sync_wait.test | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/galera/galera_2nodes.cnf b/mysql-test/suite/galera/galera_2nodes.cnf index 1dbaad4f699..b8c61bc814d 100644 --- a/mysql-test/suite/galera/galera_2nodes.cnf +++ b/mysql-test/suite/galera/galera_2nodes.cnf @@ -9,7 +9,6 @@ default-storage-engine=innodb wsrep-provider=@ENV.WSREP_PROVIDER wsrep_node_address=127.0.0.1 # enforce read-committed characteristics across the cluster -wsrep-causal-reads=ON wsrep-sync-wait=7 [mysqld.1] diff --git a/mysql-test/suite/galera/r/galera_var_sync_wait.result b/mysql-test/suite/galera/r/galera_var_sync_wait.result index f6136a4ddc4..df9cdfbd159 100644 --- a/mysql-test/suite/galera/r/galera_var_sync_wait.result +++ b/mysql-test/suite/galera/r/galera_var_sync_wait.result @@ -1,3 +1,12 @@ +# +# MDEV-10161: wsrep_sync_wait not enabled when set to 1 in config file +# +SELECT @@global.wsrep_sync_wait; +@@global.wsrep_sync_wait +7 +SELECT @@global.wsrep_causal_reads; +@@global.wsrep_causal_reads +1 CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; SET GLOBAL wsrep_sync_wait = 1; SHOW TABLES LIKE '%t1'; diff --git a/mysql-test/suite/galera/t/galera_var_sync_wait.test b/mysql-test/suite/galera/t/galera_var_sync_wait.test index 935c271a4d6..288ad62226f 100644 --- a/mysql-test/suite/galera/t/galera_var_sync_wait.test +++ b/mysql-test/suite/galera/t/galera_var_sync_wait.test @@ -5,6 +5,13 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--echo # +--echo # MDEV-10161: wsrep_sync_wait not enabled when set to 1 in config file +--echo # +# galera_2nodes.cnf sets wsrep_sync_wait to 7 +SELECT @@global.wsrep_sync_wait; +SELECT @@global.wsrep_causal_reads; + --let $wsrep_sync_wait_orig = `SELECT @@wsrep_sync_wait` --connection node_1 -- cgit v1.2.1 From 56a34960678874fad2ec99cc94c37f4e82dfccaa Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 28 Jun 2016 13:11:04 +0400 Subject: MDEV-10236 Where expression with NOT function gives incorrect result Item_cache::is_null() erroneously returned null_value in a non-cached state. Now Item_cache::is_null() uses has_value(), which caches the value if not cached yet, similar to what other value methods do (e.g. val_int, val_real, etc). --- mysql-test/r/null.result | 17 +++++++++++++++++ mysql-test/t/null.test | 11 +++++++++++ 2 files changed, 28 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result index 0d012e283b5..fcaaeb2192f 100644 --- a/mysql-test/r/null.result +++ b/mysql-test/r/null.result @@ -1572,5 +1572,22 @@ SELECT * FROM t1 WHERE NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(N i DROP TABLE t1; # +# MDEV-10236 Where expression with NOT function gives incorrect result +# +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1),(2),(3); +EXPLAIN EXTENDED +SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where +Warnings: +Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (((`test`.`t1`.`c1` is not null) >= ((not(1)))) is not null) +SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL; +c1 +1 +2 +3 +DROP TABLE t1; +# # End of 10.1 tests # diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test index a5db4442183..84b3f069683 100644 --- a/mysql-test/t/null.test +++ b/mysql-test/t/null.test @@ -1007,6 +1007,17 @@ SELECT * FROM t1 WHERE NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(N DROP TABLE t1; +--echo # +--echo # MDEV-10236 Where expression with NOT function gives incorrect result +--echo # +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1),(2),(3); +EXPLAIN EXTENDED +SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL; +SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL; +DROP TABLE t1; + + --echo # --echo # End of 10.1 tests --echo # -- cgit v1.2.1 From 6ce20fb2b9fe57330c797694b9dbea4028f40d7c Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 28 Jun 2016 10:10:49 +0200 Subject: MDEV-9428 NO_AUTO_VALUE_ON_ZERO is ignored when a trigger before insert is defined fix the *other* fill_record() too, arrgh! --- mysql-test/r/trigger_null-8605.result | 5 ++--- mysql-test/t/trigger_null-8605.test | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/r/trigger_null-8605.result b/mysql-test/r/trigger_null-8605.result index e024bc6b7d2..b187fc19554 100644 --- a/mysql-test/r/trigger_null-8605.result +++ b/mysql-test/r/trigger_null-8605.result @@ -318,9 +318,8 @@ id delete from t1; create trigger t1_bi before insert on t1 for each row begin end; insert t1 values (0); -select * from t1; -id -0 +insert t1 (id) values (0); +ERROR 23000: Duplicate entry '0' for key 'PRIMARY' drop table t1; create table t1 (a int not null, b int); create trigger trgi before update on t1 for each row do 1; diff --git a/mysql-test/t/trigger_null-8605.test b/mysql-test/t/trigger_null-8605.test index 4b51ccd5606..748768a1849 100644 --- a/mysql-test/t/trigger_null-8605.test +++ b/mysql-test/t/trigger_null-8605.test @@ -336,7 +336,8 @@ select * from t1; delete from t1; create trigger t1_bi before insert on t1 for each row begin end; insert t1 values (0); -select * from t1; +--error ER_DUP_ENTRY +insert t1 (id) values (0); drop table t1; # -- cgit v1.2.1 From 341e5f4411f6b958d139c634cce7b95773ef510e Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 28 Jun 2016 15:38:41 +0200 Subject: MDEV-10054 Secure login fails when CIPHER is required SSL: do not require client certificate to exist, if GRANT didn't require that --- mysql-test/r/ssl.result | 5 +++++ mysql-test/t/ssl.test | 5 +++++ 2 files changed, 10 insertions(+) (limited to 'mysql-test') diff --git a/mysql-test/r/ssl.result b/mysql-test/r/ssl.result index 57427a228eb..a20e97b8284 100644 --- a/mysql-test/r/ssl.result +++ b/mysql-test/r/ssl.result @@ -2172,3 +2172,8 @@ NULL select 'still connected?'; still connected? still connected? +create user mysqltest_1@localhost; +grant usage on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; +Variable_name Value +Ssl_cipher EDH-RSA-DES-CBC3-SHA +drop user mysqltest_1@localhost; diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test index 21733f7e594..88766e7cf39 100644 --- a/mysql-test/t/ssl.test +++ b/mysql-test/t/ssl.test @@ -34,5 +34,10 @@ select 'still connected?'; connection default; disconnect ssl_con; +create user mysqltest_1@localhost; +grant usage on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; +--exec $MYSQL -umysqltest_1 --ssl-cipher=EDH-RSA-DES-CBC3-SHA -e "show status like 'ssl_cipher'" 2>&1 +drop user mysqltest_1@localhost; + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc -- cgit v1.2.1 From f10b7db1e278fd366da288e5a8a05ec0a5dae7f8 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 29 Jun 2016 11:16:26 +0200 Subject: valgrind.supp: fix a typo --- mysql-test/valgrind.supp | 1 + 1 file changed, 1 insertion(+) (limited to 'mysql-test') diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 44ce392d3ae..c3e7d1c65ec 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -59,6 +59,7 @@ fun:_dl_map_object_from_fd } +{ pthread pthread_key_create Memcheck:Leak fun:malloc -- cgit v1.2.1 From 33492ec8d4e2077cf8e07d0628a959d8729bd1f9 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 29 Jun 2016 21:51:15 +0200 Subject: update tests for 32bit --- mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mysql-test') diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff index c04f4fe3e2d..4d507126872 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff @@ -1227,8 +1227,8 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL --GLOBAL_VALUE 5.6.30 -+GLOBAL_VALUE 5.6.29-76.2 +-GLOBAL_VALUE 5.6.31 ++GLOBAL_VALUE 5.6.30-76.3 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL -- cgit v1.2.1