summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-06-30 16:38:05 +0200
committerSergei Golubchik <serg@mariadb.org>2016-06-30 16:38:05 +0200
commit932646b1ff6a8f5815a961340a9e1ee4702f5b44 (patch)
tree5bc42ace8ae1f7e4d00baffd468bdb7564e851f1 /mysql-test
parent0bb30f3603b519780eaf3fe0527b1c6af285229a (diff)
parent33492ec8d4e2077cf8e07d0628a959d8729bd1f9 (diff)
downloadmariadb-git-932646b1ff6a8f5815a961340a9e1ee4702f5b44.tar.gz
Merge branch '10.1' into 10.2
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/extra/rpl_tests/rpl_extra_col_master.test4
-rw-r--r--mysql-test/include/ctype_numconv.inc6
-rw-r--r--mysql-test/include/ctype_thai.inc156
-rw-r--r--mysql-test/include/ctype_uca_w2.inc65
-rw-r--r--mysql-test/include/have_crypt.inc9
-rw-r--r--mysql-test/include/have_des.inc6
-rwxr-xr-xmysql-test/mysql-test-run.pl7
-rw-r--r--mysql-test/r/alter_table_online.result13
-rw-r--r--mysql-test/r/bigint.result6
-rw-r--r--mysql-test/r/cache_temporal_4265.result13
-rw-r--r--mysql-test/r/case.result13
-rw-r--r--mysql-test/r/contributors.result2
-rw-r--r--mysql-test/r/create_or_replace.result68
-rw-r--r--mysql-test/r/ctype_binary.result9
-rw-r--r--mysql-test/r/ctype_cp1251.result9
-rw-r--r--mysql-test/r/ctype_cp850.result14
-rw-r--r--mysql-test/r/ctype_latin1.result9
-rw-r--r--mysql-test/r/ctype_ldml.result23
-rw-r--r--mysql-test/r/ctype_like_range.result1106
-rw-r--r--mysql-test/r/ctype_recoding.result33
-rw-r--r--mysql-test/r/ctype_uca.result1641
-rw-r--r--mysql-test/r/ctype_uca_partitions.result86
-rw-r--r--mysql-test/r/ctype_ucs.result9
-rw-r--r--mysql-test/r/ctype_utf16_uca.result700
-rw-r--r--mysql-test/r/ctype_utf32_uca.result700
-rw-r--r--mysql-test/r/ctype_utf8.result48
-rw-r--r--mysql-test/r/ctype_utf8mb4.result34
-rw-r--r--mysql-test/r/ctype_utf8mb4_uca.result700
-rw-r--r--mysql-test/r/derived_view.result6
-rw-r--r--mysql-test/r/events_1.result20
-rw-r--r--mysql-test/r/fulltext3.result12
-rw-r--r--mysql-test/r/func_in.result19
-rw-r--r--mysql-test/r/func_math.result9
-rw-r--r--mysql-test/r/grant5.result16
-rw-r--r--mysql-test/r/have_crypt.require2
-rw-r--r--mysql-test/r/help.result15
-rw-r--r--mysql-test/r/information_schema_stats.result70
-rw-r--r--mysql-test/r/insert_innodb.result45
-rw-r--r--mysql-test/r/join_outer.result63
-rw-r--r--mysql-test/r/join_outer_jcl6.result63
-rw-r--r--mysql-test/r/locale.result39
-rw-r--r--mysql-test/r/mdev6830.result3
-rw-r--r--mysql-test/r/multi_update.result32
-rw-r--r--mysql-test/r/mysqlcheck.result5
-rw-r--r--mysql-test/r/mysqld--help,win.rdiff2
-rw-r--r--mysql-test/r/mysqld--help.result8
-rw-r--r--mysql-test/r/null.result19
-rw-r--r--mysql-test/r/openssl_1.result9
-rw-r--r--mysql-test/r/order_by.result145
-rw-r--r--mysql-test/r/parser.result20
-rw-r--r--mysql-test/r/range.result11
-rw-r--r--mysql-test/r/range_mrr_icp.result11
-rw-r--r--mysql-test/r/select_debug.result2
-rw-r--r--mysql-test/r/set_password_plugin-9835.result160
-rw-r--r--mysql-test/r/set_statement.result14
-rw-r--r--mysql-test/r/sp-threads.result9
-rw-r--r--mysql-test/r/ssl.result5
-rw-r--r--mysql-test/r/ssl_ca.result24
-rw-r--r--mysql-test/r/ssl_timeout-9836.result7
-rw-r--r--mysql-test/r/subselect.result12
-rw-r--r--mysql-test/r/subselect_no_exists_to_in.result12
-rw-r--r--mysql-test/r/subselect_no_mat.result12
-rw-r--r--mysql-test/r/subselect_no_opts.result12
-rw-r--r--mysql-test/r/subselect_no_scache.result12
-rw-r--r--mysql-test/r/subselect_no_semijoin.result12
-rw-r--r--mysql-test/r/trigger_null-8605.result5
-rw-r--r--mysql-test/r/type_date.result36
-rw-r--r--mysql-test/r/type_datetime.result8
-rw-r--r--mysql-test/r/type_newdecimal.result90
-rw-r--r--mysql-test/r/type_timestamp.result9
-rw-r--r--mysql-test/r/type_year.result1
-rw-r--r--mysql-test/r/userstat.result4
-rw-r--r--mysql-test/r/wait_timeout_not_windows.result4
-rw-r--r--mysql-test/std_data/Index.xml10
-rw-r--r--mysql-test/suite/binlog/r/binlog_mdev717.result40
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_binlog.result2
-rw-r--r--mysql-test/suite/binlog/t/binlog_mdev717.test46
-rw-r--r--mysql-test/suite/encryption/t/innodb-log-encrypt-crash.test3
-rw-r--r--mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result5
-rw-r--r--mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result5
-rw-r--r--mysql-test/suite/galera/galera_2nodes.cnf1
-rw-r--r--mysql-test/suite/galera/r/MW-284.result13
-rw-r--r--mysql-test/suite/galera/r/create.result23
-rw-r--r--mysql-test/suite/galera/r/galera_var_sync_wait.result9
-rw-r--r--mysql-test/suite/galera/t/MW-284.cnf1
-rw-r--r--mysql-test/suite/galera/t/MW-284.test57
-rw-r--r--mysql-test/suite/galera/t/create.test31
-rw-r--r--mysql-test/suite/galera/t/galera_var_sync_wait.test7
-rw-r--r--mysql-test/suite/galera/t/mysql-wsrep#237.test1
-rw-r--r--mysql-test/suite/handler/innodb.result1
-rw-r--r--mysql-test/suite/innodb/r/create_isl_with_direct.result10
-rw-r--r--mysql-test/suite/innodb/r/defrag_mdl-9155.result15
-rw-r--r--mysql-test/suite/innodb/r/innodb-corrupted-table.result49
-rw-r--r--mysql-test/suite/innodb/r/innodb-fk.result44
-rw-r--r--mysql-test/suite/innodb/r/innodb-fkcheck.result89
-rw-r--r--mysql-test/suite/innodb/r/innodb_corrupt_bit.result90
-rw-r--r--mysql-test/suite/innodb/r/innodb_ctype_ldml.result1
-rw-r--r--mysql-test/suite/innodb/r/innodb_uninstall.result4
-rw-r--r--mysql-test/suite/innodb/t/create_isl_with_direct.opt1
-rw-r--r--mysql-test/suite/innodb/t/create_isl_with_direct.test28
-rw-r--r--mysql-test/suite/innodb/t/defrag_mdl-9155.test22
-rw-r--r--mysql-test/suite/innodb/t/innodb-corrupted-table.test46
-rw-r--r--mysql-test/suite/innodb/t/innodb-fk.test41
-rw-r--r--mysql-test/suite/innodb/t/innodb-fkcheck.test115
-rw-r--r--mysql-test/suite/innodb/t/innodb_corrupt_bit.test88
-rw-r--r--mysql-test/suite/innodb/t/innodb_uninstall.test8
-rw-r--r--mysql-test/suite/perfschema/r/sizing_low.result1
-rw-r--r--mysql-test/suite/perfschema/r/table_name.result156
-rw-r--r--mysql-test/suite/perfschema/t/sizing_low.test1
-rw-r--r--mysql-test/suite/perfschema/t/table_name.test165
-rw-r--r--mysql-test/suite/plugins/r/cracklib_password_check.result6
-rw-r--r--mysql-test/suite/plugins/r/server_audit.result2
-rw-r--r--mysql-test/suite/plugins/r/simple_password_check.result4
-rw-r--r--mysql-test/suite/plugins/r/thread_pool_server_audit.result2
-rw-r--r--mysql-test/suite/plugins/r/unix_socket.result1
-rw-r--r--mysql-test/suite/plugins/t/cracklib_password_check.test8
-rw-r--r--mysql-test/suite/plugins/t/simple_password_check.test10
-rw-r--r--mysql-test/suite/plugins/t/unix_socket.test2
-rw-r--r--mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.result21
-rw-r--r--mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test12
-rw-r--r--mysql-test/suite/roles/set_role-9614.result99
-rw-r--r--mysql-test/suite/roles/set_role-9614.test79
-rw-r--r--mysql-test/suite/roles/set_role-simple.result9
-rw-r--r--mysql-test/suite/roles/set_role-simple.test15
-rw-r--r--mysql-test/suite/rpl/r/create_or_replace_mix.result2
-rw-r--r--mysql-test/suite/rpl/r/create_or_replace_row.result6
-rw-r--r--mysql-test/suite/rpl/r/create_or_replace_statement.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result11
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result11
-rw-r--r--mysql-test/suite/rpl/r/rpl_ignore_table.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_killed_ddl.result19
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_create_table.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_merge_engine.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result13
-rw-r--r--mysql-test/suite/rpl/t/rpl_ignore_table.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_killed_ddl.test40
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_merge_engine.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL_innodb.test55
-rw-r--r--mysql-test/suite/sys_vars/inc/collation_basic.inc2
-rw-r--r--mysql-test/suite/sys_vars/r/collation_connection_basic.result8
-rw-r--r--mysql-test/suite/sys_vars/r/collation_database_basic.result8
-rw-r--r--mysql-test/suite/sys_vars/r/collation_server_basic.result8
-rw-r--r--mysql-test/suite/sys_vars/r/optimizer_switch_basic.result36
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff49
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff39
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb.result2
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded.result8
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result8
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_wsrep.result4
-rw-r--r--mysql-test/suite/sys_vars/r/wsrep_node_name_basic.result39
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test18
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_empty_free_list_algorithm_basic.opt1
-rw-r--r--mysql-test/suite/sys_vars/t/sysvars_wsrep.test3
-rw-r--r--mysql-test/suite/sys_vars/t/wsrep_node_name_basic.test20
-rw-r--r--mysql-test/suite/wsrep/r/binlog_format.result2
-rw-r--r--mysql-test/suite/wsrep/r/mdev_10186.result11
-rw-r--r--mysql-test/suite/wsrep/suite.pm2
-rw-r--r--mysql-test/suite/wsrep/t/binlog_format.test2
-rw-r--r--mysql-test/suite/wsrep/t/mdev_10186.opt1
-rw-r--r--mysql-test/suite/wsrep/t/mdev_10186.test12
-rw-r--r--mysql-test/t/alter_table_online.test26
-rw-r--r--mysql-test/t/bigint.test5
-rw-r--r--mysql-test/t/bootstrap.test12
-rw-r--r--mysql-test/t/cache_temporal_4265.test11
-rw-r--r--mysql-test/t/case.test10
-rw-r--r--mysql-test/t/create_or_replace.test10
-rw-r--r--mysql-test/t/ctype_cp850.test16
-rw-r--r--mysql-test/t/ctype_ldml.test12
-rw-r--r--mysql-test/t/ctype_like_range.test19
-rw-r--r--mysql-test/t/ctype_recoding.test28
-rw-r--r--mysql-test/t/ctype_uca.test10
-rw-r--r--mysql-test/t/ctype_uca_partitions.test38
-rw-r--r--mysql-test/t/ctype_utf16_uca.test13
-rw-r--r--mysql-test/t/ctype_utf32_uca.test13
-rw-r--r--mysql-test/t/ctype_utf8.test23
-rw-r--r--mysql-test/t/ctype_utf8mb4.test20
-rw-r--r--mysql-test/t/ctype_utf8mb4_uca.test13
-rw-r--r--mysql-test/t/events_1.test19
-rw-r--r--mysql-test/t/events_2.test4
-rw-r--r--mysql-test/t/fulltext3.test15
-rw-r--r--mysql-test/t/func_des_encrypt.test2
-rw-r--r--mysql-test/t/func_encrypt.test2
-rw-r--r--mysql-test/t/func_encrypt_ucs2.test2
-rw-r--r--mysql-test/t/func_in.test22
-rw-r--r--mysql-test/t/func_math.test8
-rw-r--r--mysql-test/t/grant5.test18
-rw-r--r--mysql-test/t/help.test6
-rw-r--r--mysql-test/t/information_schema_stats.test44
-rw-r--r--mysql-test/t/insert_innodb.test64
-rw-r--r--mysql-test/t/join_outer.test58
-rw-r--r--mysql-test/t/kill_processlist-6619.test7
-rw-r--r--mysql-test/t/locale.test27
-rw-r--r--mysql-test/t/mdev6830-master.opt1
-rw-r--r--mysql-test/t/mdev6830.test10
-rw-r--r--mysql-test/t/multi_update.test24
-rw-r--r--mysql-test/t/mysqlcheck.test5
-rw-r--r--mysql-test/t/mysqld--help.test2
-rw-r--r--mysql-test/t/null.test11
-rw-r--r--mysql-test/t/openssl_1.test11
-rw-r--r--mysql-test/t/openssl_6975.test1
-rw-r--r--mysql-test/t/order_by.test84
-rw-r--r--mysql-test/t/parser.test16
-rw-r--r--mysql-test/t/partition_innodb_plugin.test6
-rw-r--r--mysql-test/t/range.test9
-rw-r--r--mysql-test/t/select_debug.test2
-rw-r--r--mysql-test/t/set_password_plugin-9835.test131
-rw-r--r--mysql-test/t/set_statement.test14
-rw-r--r--mysql-test/t/sp-threads.test9
-rw-r--r--mysql-test/t/ssl.test9
-rw-r--r--mysql-test/t/ssl_ca.test36
-rw-r--r--mysql-test/t/ssl_compress.test4
-rw-r--r--mysql-test/t/ssl_timeout-9836.opt1
-rw-r--r--mysql-test/t/ssl_timeout-9836.test11
-rw-r--r--mysql-test/t/ssl_timeout.test2
-rw-r--r--mysql-test/t/subselect.test11
-rw-r--r--mysql-test/t/trigger_null-8605.test3
-rw-r--r--mysql-test/t/type_date.test31
-rw-r--r--mysql-test/t/type_datetime.test8
-rw-r--r--mysql-test/t/type_newdecimal.test51
-rw-r--r--mysql-test/t/type_timestamp.test8
-rw-r--r--mysql-test/t/wait_timeout_not_windows.test16
-rw-r--r--mysql-test/valgrind.supp113
222 files changed, 9261 insertions, 501 deletions
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 5b2cfc1ea2e..b438ebd24f9 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/include/ctype_numconv.inc b/mysql-test/include/ctype_numconv.inc
index 1d675a5db6f..6bda2205c0e 100644
--- a/mysql-test/include/ctype_numconv.inc
+++ b/mysql-test/include/ctype_numconv.inc
@@ -1819,6 +1819,12 @@ 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 #
CREATE TABLE t1 (d DATE);
diff --git a/mysql-test/include/ctype_thai.inc b/mysql-test/include/ctype_thai.inc
new file mode 100644
index 00000000000..f72de9e93b6
--- /dev/null
+++ b/mysql-test/include/ctype_thai.inc
@@ -0,0 +1,156 @@
+--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 @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;
+
+--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/include/ctype_uca_w2.inc b/mysql-test/include/ctype_uca_w2.inc
new file mode 100644
index 00000000000..b59f73b8a63
--- /dev/null
+++ b/mysql-test/include/ctype_uca_w2.inc
@@ -0,0 +1,65 @@
+--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 (_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'),('À'),('Á'),('Â'),('Ã'),('Ä'),('Å');
+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 @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;
+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/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/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/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index c4604418ab7..0cddff81960 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -1783,9 +1783,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) + 300;
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");
}
@@ -3228,7 +3231,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/alter_table_online.result b/mysql-test/r/alter_table_online.result
index 05d03aeae11..e3f285437a7 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,6 +61,18 @@ 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;
+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;
#
# MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
#
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result
index fd613525aa1..2c8b0b484ae 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/r/cache_temporal_4265.result b/mysql-test/r/cache_temporal_4265.result
index b8f13e465de..980bb957e19 100644
--- a/mysql-test/r/cache_temporal_4265.result
+++ b/mysql-test/r/cache_temporal_4265.result
@@ -8,4 +8,17 @@ a
Warnings:
Note 1003 2000-01-01
Note 1003 2000-01-06
+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/r/case.result b/mysql-test/r/case.result
index b1e928c5e30..9ceb7efde64 100644
--- a/mysql-test/r/case.result
+++ b/mysql-test/r/case.result
@@ -232,6 +232,19 @@ case t1.f1 when '00:00:00' then 1 end
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;
+#
# Start of 10.1 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
diff --git a/mysql-test/r/create_or_replace.result b/mysql-test/r/create_or_replace.result
index dc3d00aacc8..3f768535bdf 100644
--- a/mysql-test/r/create_or_replace.result
+++ b/mysql-test/r/create_or_replace.result
@@ -262,11 +262,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_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_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;
@@ -274,10 +274,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;
@@ -289,11 +289,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_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_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;
@@ -301,10 +301,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;
@@ -398,31 +398,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_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1
-# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2
-# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test
+# 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_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1
-# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2
-# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test
+# 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_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1
-# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2
-# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test
+# 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_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1
-# MDL_SHARED_READ MDL_EXPLICIT Table metadata lock test t2
-# MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test
+# 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;
#
diff --git a/mysql-test/r/ctype_binary.result b/mysql-test/r/ctype_binary.result
index bf3969a20fe..e7c40b5ed91 100644
--- a/mysql-test/r/ctype_binary.result
+++ b/mysql-test/r/ctype_binary.result
@@ -2887,6 +2887,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 c16847477ce..36dc23f33be 100644
--- a/mysql-test/r/ctype_cp1251.result
+++ b/mysql-test/r/ctype_cp1251.result
@@ -3296,6 +3296,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_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/r/ctype_latin1.result b/mysql-test/r/ctype_latin1.result
index a5593bf040b..b0bcc5d7bd2 100644
--- a/mysql-test/r/ctype_latin1.result
+++ b/mysql-test/r/ctype_latin1.result
@@ -3593,6 +3593,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_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/r/ctype_like_range.result b/mysql-test/r/ctype_like_range.result
index 033dc214335..176cfe3acf0 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,169 @@ 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_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
@@ -938,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_unicode_ci;
SELECT * FROM v1;
id name val
@@ -1069,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_czech_ci;
SELECT * FROM v1;
id name val
@@ -1200,6 +1446,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 +1593,169 @@ 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_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
@@ -1462,6 +1887,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 +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_unicode_ci;
SELECT * FROM v1;
id name val
@@ -1724,6 +2181,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 +2328,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 +2475,169 @@ 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 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
@@ -2117,6 +2769,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 +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 utf16 COLLATE utf16_czech_ci;
SELECT * FROM v1;
id name val
@@ -2379,6 +3063,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 +3210,169 @@ 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_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
@@ -2641,6 +3504,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 +3651,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 +3798,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 +3945,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 +4092,169 @@ 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_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
@@ -3296,6 +4386,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 --------------------------------
DROP VIEW v1;
DROP TABLE t1;
#
diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result
index 1b3f9f76817..93f1639e88d 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/r/ctype_uca.result b/mysql-test/r/ctype_uca.result
index 08d87fa292d..cade3e4cd75 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
+Ź,ź
+Ž,ž
+Ż,ż
+Ƶ,ƶ
+Ǯ,ǯ
+Ƹ,ƹ
+Þ,þ
+ƿ,Ƿ
+Ƨ,ƨ
+Ƽ,ƽ
+Ƅ,ƅ
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)
@@ -13724,7 +13979,1393 @@ SELECT * FROM t1 WHERE a='a' AND a=_utf8'a';
a
a
DROP TABLE t1;
+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 (_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))
+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 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
+#
+#
+# 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 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
+#
+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 (_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))
+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_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_ucs.result b/mysql-test/r/ctype_ucs.result
index fe5c76af000..4a6d5fa1b41 100644
--- a/mysql-test/r/ctype_ucs.result
+++ b/mysql-test/r/ctype_ucs.result
@@ -4496,6 +4496,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_utf16_uca.result b/mysql-test/r/ctype_utf16_uca.result
index ac2ed9b2c5b..1e4c77ea83d 100644
--- a/mysql-test/r/ctype_utf16_uca.result
+++ b/mysql-test/r/ctype_utf16_uca.result
@@ -6605,3 +6605,703 @@ 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 (_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))
+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..234a01bb108 100644
--- a/mysql-test/r/ctype_utf32_uca.result
+++ b/mysql-test/r/ctype_utf32_uca.result
@@ -6625,3 +6625,703 @@ 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 (_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))
+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_utf8.result b/mysql-test/r/ctype_utf8.result
index f2f425c8107..bd40b82fa6e 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -5338,6 +5338,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);
@@ -6200,6 +6209,45 @@ 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 4ba8a8a39a1..32fa9bd74c0 100644
--- a/mysql-test/r/ctype_utf8mb4.result
+++ b/mysql-test/r/ctype_utf8mb4.result
@@ -2825,6 +2825,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/r/ctype_utf8mb4_uca.result b/mysql-test/r/ctype_utf8mb4_uca.result
index 1057b9743f4..4792d746709 100644
--- a/mysql-test/r/ctype_utf8mb4_uca.result
+++ b/mysql-test/r/ctype_utf8mb4_uca.result
@@ -5315,3 +5315,703 @@ 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 (_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))
+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/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(<expr_cache><6,5>(<in_optimizer>((6,5),<exists>(select 7,5 having (trigcond(((<cache>(6) = 7) or isnull(7))) and trigcond(((<cache>(5) = 5) or isnull(5))) and trigcond(<is_not_null_test>(7)) and trigcond(<is_not_null_test>(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(<expr_cache><6,5>(<in_optimizer>((6,5),<exists>(select 7,5 having (trigcond(((<cache>(6) = 7) or isnull(7))) and trigcond(((<cache>(5) = 5) or isnull(5))) and trigcond(<is_not_null_test>(7)) and trigcond(<is_not_null_test>(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(<expr_cache><6,5>(<in_optimizer>((6,5),<exists>(select 7,5 having (trigcond(((<cache>(6) = 7) or isnull(7))) and trigcond(((<cache>(5) = 5) or isnull(5))) and trigcond(<is_not_null_test>(7)) and trigcond(<is_not_null_test>(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/events_1.result b/mysql-test/r/events_1.result
index 70443604f41..fc8d02e5e93 100644
--- a/mysql-test/r/events_1.result
+++ b/mysql-test/r/events_1.result
@@ -475,6 +475,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/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/r/func_in.result b/mysql-test/r/func_in.result
index 33a997c8004..1855fa72523 100644
--- a/mysql-test/r/func_in.result
+++ b/mysql-test/r/func_in.result
@@ -813,6 +813,25 @@ EXECUTE s;
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;
+#
+# Start of 10.1 tests
+#
+#
# MDEV-8755 Equal field propagation is not performed any longer for the IN list when multiple comparison types
#
CREATE TABLE t1 (a INT);
diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result
index 2a646cbcb8d..f7ca1aa3d03 100644
--- a/mysql-test/r/func_math.result
+++ b/mysql-test/r/func_math.result
@@ -667,9 +667,14 @@ 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`)'
+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/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/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
diff --git a/mysql-test/r/help.result b/mysql-test/r/help.result
index 3a266567175..aefe6f8381e 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;
set sql_mode="";
alter table mysql.help_relation engine=innodb;
alter table mysql.help_keyword engine=innodb;
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/insert_innodb.result b/mysql-test/r/insert_innodb.result
new file mode 100644
index 00000000000..e5e2b4b8623
--- /dev/null
+++ b/mysql-test/r/insert_innodb.result
@@ -0,0 +1,45 @@
+#
+# 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 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 IGNORE t2 SET fld2=20 WHERE fld2=0;
+UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0;
+# Test for multi update.
+UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3;
+UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3;
+# 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;
+#
+# 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 Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `fk` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
+DROP TABLE t2, t1;
diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result
index 24dcdeacf60..2602181f234 100644
--- a/mysql-test/r/join_outer.result
+++ b/mysql-test/r/join_outer.result
@@ -2271,4 +2271,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/r/join_outer_jcl6.result b/mysql-test/r/join_outer_jcl6.result
index e20914c6e13..51f43f1404e 100644
--- a/mysql-test/r/join_outer_jcl6.result
+++ b/mysql-test/r/join_outer_jcl6.result
@@ -2282,6 +2282,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';
diff --git a/mysql-test/r/locale.result b/mysql-test/r/locale.result
index 1335f1ec9d5..95c1f51fd87 100644
--- a/mysql-test/r/locale.result
+++ b/mysql-test/r/locale.result
@@ -90,6 +90,45 @@ 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
+#
+# 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;
#
# Start of 5.6 tests
#
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/multi_update.result b/mysql-test/r/multi_update.result
index 204596bf20b..b9c12be8d0d 100644
--- a/mysql-test/r/multi_update.result
+++ b/mysql-test/r/multi_update.result
@@ -1061,4 +1061,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/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result
index 033b4086985..e0d93b02ecd 100644
--- a/mysql-test/r/mysqlcheck.result
+++ b/mysql-test/r/mysqlcheck.result
@@ -376,6 +376,11 @@ 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`;
#
#MDEV-7384 [PATCH] add PERSISENT FOR ALL option to mysqlanalyze/mysqlcheck
#
diff --git a/mysql-test/r/mysqld--help,win.rdiff b/mysql-test/r/mysqld--help,win.rdiff
index a3bf5c55ee8..ecbe1843877 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 151
-thread-pool-idle-timeout 60
thread-pool-max-threads 1000
diff --git a/mysql-test/r/mysqld--help.result b/mysql-test/r/mysqld--help.result
index cc432652db8..be47bb55f42 100644
--- a/mysql-test/r/mysqld--help.result
+++ b/mysql-test/r/mysqld--help.result
@@ -577,7 +577,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
@@ -1065,7 +1065,7 @@ The following options may be given as the first argument:
--table-open-cache=#
The number of cached open tables
--tc-heuristic-recover=name
- Decision to use in heuristic recover process. One of:
+ Decision to use in heuristic recover process. One of: OFF,
COMMIT, ROLLBACK
--thread-cache-size=#
How many threads we should keep in a cache for reuse.
@@ -1156,10 +1156,8 @@ bulk-insert-buffer-size 8388608
changed-page-bitmaps ON
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
@@ -1426,7 +1424,7 @@ sysdate-is-now FALSE
table-cache 431
table-definition-cache 400
table-open-cache 431
-tc-heuristic-recover COMMIT
+tc-heuristic-recover OFF
thread-cache-size 151
thread-pool-idle-timeout 60
thread-pool-max-threads 1000
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index d98b7f5e091..222ccc809b1 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -1559,7 +1559,7 @@ set names utf8;
create table t1 (f1 varchar(10));
insert into t1 values ('2015-12-31');
select power( timestamp( nullif( '2002-09-08', f1 ) ), 24 ) from t1;
-ERROR 22003: DOUBLE value is out of range in 'pow(cast((case when '2002-09-08' = '2015-12-31' then NULL else '2002-09-08' end) as datetime(6)),24)'
+ERROR 22003: DOUBLE value is out of range in 'pow(cast((case when '2002-09-08' = `test`.`t1`.`f1` then NULL else '2002-09-08' end) as datetime(6)),24)'
drop table t1;
CREATE TABLE t1 (f1 INT);
INSERT INTO t1 VALUES (1),(2);
@@ -1575,5 +1575,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) >= <cache>((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/r/openssl_1.result b/mysql-test/r/openssl_1.result
index 0aa4acb431c..12c91721381 100644
--- a/mysql-test/r/openssl_1.result
+++ b/mysql-test/r/openssl_1.result
@@ -228,3 +228,12 @@ connection default;
DROP USER bug42158@localhost;
set global sql_mode=default;
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/r/order_by.result b/mysql-test/r/order_by.result
index 697ebe26ad2..3897184f3b1 100644
--- a/mysql-test/r/order_by.result
+++ b/mysql-test/r/order_by.result
@@ -2983,3 +2983,148 @@ 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
+#
+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);
+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;
+set @@optimizer_switch=@tmp_8989;
+set optimizer_switch='orderby_uses_equalities=on';
diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result
index a35109dbec3..499f37e6dfb 100644
--- a/mysql-test/r/parser.result
+++ b/mysql-test/r/parser.result
@@ -643,6 +643,26 @@ 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<<!0, 1 << !0;
+1<<!0 1 << !0
+2 2
+select 0<!0, 0 < ! 0;
+0<!0 0 < ! 0
+1 1
#
# MDEV-7792 - SQL Parsing Error - UNION AND ORDER BY WITH JOIN
#
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/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/r/set_password_plugin-9835.result b/mysql-test/r/set_password_plugin-9835.result
new file mode 100644
index 00000000000..3cc723957d8
--- /dev/null
+++ b/mysql-test/r/set_password_plugin-9835.result
@@ -0,0 +1,160 @@
+set global secure_auth=0;
+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 *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
+newpass localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
+newpassnat localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
+oldauth localhost 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;
+set global secure_auth=default;
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/r/sp-threads.result b/mysql-test/r/sp-threads.result
index eb1c0beff65..886cbd812f2 100644
--- a/mysql-test/r/sp-threads.result
+++ b/mysql-test/r/sp-threads.result
@@ -43,12 +43,9 @@ lock tables t2 write;
connection con1root;
call bug9486();
connection con2root;
-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 # init 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;
connection con1root;
drop procedure bug9486;
diff --git a/mysql-test/r/ssl.result b/mysql-test/r/ssl.result
index c36b5c666cb..7cd18fbf539 100644
--- a/mysql-test/r/ssl.result
+++ b/mysql-test/r/ssl.result
@@ -2175,3 +2175,8 @@ still connected?
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";
+Variable_name Value
+Ssl_cipher EDH-RSA-DES-CBC3-SHA
+drop user mysqltest_1@localhost;
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/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/r/subselect.result b/mysql-test/r/subselect.result
index 149db6c98fd..f6b3fc7cf25 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -7151,3 +7151,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 ac49a41ee23..961b23f1028 100644
--- a/mysql-test/r/subselect_no_exists_to_in.result
+++ b/mysql-test/r/subselect_no_exists_to_in.result
@@ -7151,6 +7151,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 4f537ddb875..a7170a9dc45 100644
--- a/mysql-test/r/subselect_no_mat.result
+++ b/mysql-test/r/subselect_no_mat.result
@@ -7144,6 +7144,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 b5a5e447921..1e9749c2eb5 100644
--- a/mysql-test/r/subselect_no_opts.result
+++ b/mysql-test/r/subselect_no_opts.result
@@ -7142,4 +7142,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 78308c4a70f..23a093b2669 100644
--- a/mysql-test/r/subselect_no_scache.result
+++ b/mysql-test/r/subselect_no_scache.result
@@ -7157,6 +7157,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 62dc507dee5..dd1810e47f1 100644
--- a/mysql-test/r/subselect_no_semijoin.result
+++ b/mysql-test/r/subselect_no_semijoin.result
@@ -7142,5 +7142,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/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/r/type_date.result b/mysql-test/r/type_date.result
index 54f2aa91f2c..a1eeda063e4 100644
--- a/mysql-test/r/type_date.result
+++ b/mysql-test/r/type_date.result
@@ -439,6 +439,42 @@ 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
+# MDEV-9972 Least function retuns date in date time format
+#
+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
+2 2016-02-01 2016-01-28
+3 2016-03-01 2016-03-31
+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
+#
# MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str
#
CREATE TABLE t1 (f1 DATE, f2 VARCHAR(1));
diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result
index bf3b6a6b7da..41696aa2d7d 100644
--- a/mysql-test/r/type_datetime.result
+++ b/mysql-test/r/type_datetime.result
@@ -834,6 +834,14 @@ 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/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result
index 4b09b269d2f..55dde117e80 100644
--- a/mysql-test/r/type_newdecimal.result
+++ b/mysql-test/r/type_newdecimal.result
@@ -2149,6 +2149,96 @@ 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/r/type_timestamp.result b/mysql-test/r/type_timestamp.result
index a579f6930a0..69c9f68811d 100644
--- a/mysql-test/r/type_timestamp.result
+++ b/mysql-test/r/type_timestamp.result
@@ -644,6 +644,15 @@ 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
#
# MDEV-7254: Assigned expression is evaluated twice when updating column TIMESTAMP NOT NULL
diff --git a/mysql-test/r/type_year.result b/mysql-test/r/type_year.result
index 4d28a7b8d25..5d4aa24c9c6 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/r/userstat.result b/mysql-test/r/userstat.result
index 351f69f3031..a56ff5771f6 100644
--- a/mysql-test/r/userstat.result
+++ b/mysql-test/r/userstat.result
@@ -138,16 +138,12 @@ disconnect ssl_con;
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, TOTAL_SSL_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 2
TOTAL_SSL_CONNECTIONS 1
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..867787a8ed3
--- /dev/null
+++ b/mysql-test/r/wait_timeout_not_windows.result
@@ -0,0 +1,4 @@
+set global log_warnings=2;
+set @@wait_timeout=1;
+FOUND /Aborted.*Got timeout reading communication packets/ in mysqld.1.err
+set global log_warnings=@@log_warnings;
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 @@
</rules>
</collation>
+ <collation name="utf8_implicit_weights_ci" id="338">
+ <rules>
+ <reset>\u3400</reset><i>b</i>
+ <reset>a</reset><i>\u3561</i>
+ <reset>c</reset><i>\u1500</i>
+ <reset>\u3600</reset><i>\u1501</i>
+ <reset>\u3700</reset><i>\u3701</i>
+ </rules>
+ </collation>
+
</charset>
</charsets>
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/r/binlog_row_binlog.result b/mysql-test/suite/binlog/r/binlog_row_binlog.result
index 710c95546fd..25b6e7351a2 100644
--- a/mysql-test/suite/binlog/r/binlog_row_binlog.result
+++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result
@@ -681,7 +681,7 @@ master-bin.000001 # Query # # COMMIT
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
`a` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Table_map # # table_id: # (mysql.user)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
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..61d3aa715d2
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_mdev717.test
@@ -0,0 +1,46 @@
+# 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;
+
+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
+
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=.*");
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..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
@@ -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 # #
@@ -113,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 # #
@@ -155,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 # #
@@ -188,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 # #
@@ -223,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 501bd95cf55..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
@@ -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 # #
@@ -113,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 # #
@@ -155,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 # #
@@ -188,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 # #
@@ -223,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/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/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/r/create.result b/mysql-test/suite/galera/r/create.result
index 20bc9a3958e..b93cd7b9496 100644
--- a/mysql-test/suite/galera/r/create.result
+++ b/mysql-test/suite/galera/r/create.result
@@ -62,4 +62,27 @@ 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;
+#
+# 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/r/galera_var_sync_wait.result b/mysql-test/suite/galera/r/galera_var_sync_wait.result
index 40a6290374f..7f3afa77ecd 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
connection node_1;
CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB;
connection node_2;
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');
diff --git a/mysql-test/suite/galera/t/create.test b/mysql-test/suite/galera/t/create.test
index fb9b0935288..96a6640c21f 100644
--- a/mysql-test/suite/galera/t/create.test
+++ b/mysql-test/suite/galera/t/create.test
@@ -54,5 +54,36 @@ 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;
+
+
+--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/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
diff --git a/mysql-test/suite/galera/t/mysql-wsrep#237.test b/mysql-test/suite/galera/t/mysql-wsrep#237.test
index f2dd6bce711..cba8dfeb275 100644
--- a/mysql-test/suite/galera/t/mysql-wsrep#237.test
+++ b/mysql-test/suite/galera/t/mysql-wsrep#237.test
@@ -28,6 +28,7 @@ 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/handler/innodb.result b/mysql-test/suite/handler/innodb.result
index f3c0f798902..102237617fd 100644
--- a/mysql-test/suite/handler/innodb.result
+++ b/mysql-test/suite/handler/innodb.result
@@ -545,7 +545,6 @@ optimize table t1;
connection default;
handler t1 read next;
c1
-1
handler t1 close;
connection con2;
Table Op Msg_type Msg_text
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/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/r/innodb-corrupted-table.result b/mysql-test/suite/innodb/r/innodb-corrupted-table.result
new file mode 100644
index 00000000000..94203a794f8
--- /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,
+ `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/r/innodb-fk.result b/mysql-test/suite/innodb/r/innodb-fk.result
index c916d665bf0..2eb19764769 100644
--- a/mysql-test/suite/innodb/r/innodb-fk.result
+++ b/mysql-test/suite/innodb/r/innodb-fk.result
@@ -70,6 +70,50 @@ Error 1005 Can't create table `test`.`#sql-temporary` (errno: 150 "Foreign key c
Warning 1215 Cannot add foreign key constraint
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 "Foreign key constraint is incorrectly formed")
+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;
CREATE TABLE `#departaments` (
`id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id_depart`)
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/r/innodb_corrupt_bit.result b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result
index 353303825e5..0ef6f65d0ff 100644
--- a/mysql-test/suite/innodb/r/innodb_corrupt_bit.result
+++ b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result
@@ -1,82 +1,48 @@
-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 "idx" is corrupted
+ERROR HY000: Index "idx" is corrupted
ERROR HY000: Index corrupt_bit_test_ā is corrupted
-select z from corrupt_bit_test_ā;
ERROR HY000: Index corrupt_bit_test_ā is corrupted
-show warnings;
Level Code Message
Warning 180 InnoDB: Index "idxē" for table "test"."corrupt_bit_test_ā" is marked as corrupted
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 "idx" is corrupted
+ERROR HY000: Index "idx" 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/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
diff --git a/mysql-test/suite/innodb/r/innodb_uninstall.result b/mysql-test/suite/innodb/r/innodb_uninstall.result
index f3b166c5736..40c76b4131c 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;
connect con1, localhost, root;
connection con1;
@@ -20,8 +18,6 @@ Warning 1620 Plugin is busy and will be uninstalled on shutdown
connect con1, localhost, root;
connection con1;
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/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
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;
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;
diff --git a/mysql-test/suite/innodb/t/innodb-fk.test b/mysql-test/suite/innodb/t/innodb-fk.test
index f7bcbe238dd..17e926e8647 100644
--- a/mysql-test/suite/innodb/t/innodb-fk.test
+++ b/mysql-test/suite/innodb/t/innodb-fk.test
@@ -126,6 +126,47 @@ 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;
+
+#
# MDEV-7627: Some symbols in table name can cause to Error Code: 1050 when created 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
diff --git a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test
index d6d77076b83..ee04e8d66fc 100644
--- a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test
+++ b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test
@@ -2,46 +2,24 @@
# Test for persistent corrupt bit for corrupted index and table
#
-- source include/have_innodb.inc
--- source include/have_innodb_16k.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/have_innodb_16k.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
+call mtr.add_suppression("Flagged corruption of idx.*in");
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);
@@ -54,38 +32,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="";
-# 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_ā;
@@ -109,7 +70,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_ā;
@@ -119,14 +79,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;
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;
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..a8179f2d1f8
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/table_name.test
@@ -0,0 +1,165 @@
+#
+# 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/have_innodb.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";
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/server_audit.result b/mysql-test/suite/plugins/r/server_audit.result
index 26a7d1b872c..9c7dc1490b1 100644
--- a/mysql-test/suite/plugins/r/server_audit.result
+++ b/mysql-test/suite/plugins/r/server_audit.result
@@ -174,7 +174,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=<secret>;
-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 '=<secret>' 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 '<secret>' at line 1
CREATE USER u3 IDENTIFIED BY '';
drop user u1, u2, u3;
select 2;
diff --git a/mysql-test/suite/plugins/r/simple_password_check.result b/mysql-test/suite/plugins/r/simple_password_check.result
index a0b43a94137..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!';
@@ -147,6 +149,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/r/thread_pool_server_audit.result b/mysql-test/suite/plugins/r/thread_pool_server_audit.result
index 26a7d1b872c..9c7dc1490b1 100644
--- a/mysql-test/suite/plugins/r/thread_pool_server_audit.result
+++ b/mysql-test/suite/plugins/r/thread_pool_server_audit.result
@@ -174,7 +174,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=<secret>;
-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 '=<secret>' 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 '<secret>' at line 1
CREATE USER u3 IDENTIFIED BY '';
drop user u1, u2, u3;
select 2;
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/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 9854f93efe8..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';
@@ -103,6 +107,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';
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
-
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
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
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;
+
diff --git a/mysql-test/suite/rpl/r/create_or_replace_mix.result b/mysql-test/suite/rpl/r/create_or_replace_mix.result
index e90021f78fc..9029156c625 100644
--- a/mysql-test/suite/rpl/r/create_or_replace_mix.result
+++ b/mysql-test/suite/rpl/r/create_or_replace_mix.result
@@ -163,7 +163,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
diff --git a/mysql-test/suite/rpl/r/create_or_replace_row.result b/mysql-test/suite/rpl/r/create_or_replace_row.result
index 2f29b1c125b..78477ca4c73 100644
--- a/mysql-test/suite/rpl/r/create_or_replace_row.result
+++ b/mysql-test/suite/rpl/r/create_or_replace_row.result
@@ -41,7 +41,7 @@ master-bin.000001 # Query # # use `test`; CREATE OR REPLACE table t1 like t2
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` (
`a_in_temporary` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
connection server_2;
@@ -75,7 +75,7 @@ slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE table t1 like t2
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` (
`a_in_temporary` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
connection server_1;
@@ -185,7 +185,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
diff --git a/mysql-test/suite/rpl/r/create_or_replace_statement.result b/mysql-test/suite/rpl/r/create_or_replace_statement.result
index 3b4525f82b6..69206cc861f 100644
--- a/mysql-test/suite/rpl/r/create_or_replace_statement.result
+++ b/mysql-test/suite/rpl/r/create_or_replace_statement.result
@@ -166,7 +166,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL
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 3102c06352f..15370dff39a 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
@@ -101,13 +101,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 */
@@ -124,13 +122,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 */
@@ -191,9 +187,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 cfec03b45d0..d04d91be6d1 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
@@ -101,13 +101,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 */
@@ -124,13 +122,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 */
@@ -191,9 +187,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_ignore_table.result b/mysql-test/suite/rpl/r/rpl_ignore_table.result
index 732d1746dbd..4eeb333d10c 100644
--- a/mysql-test/suite/rpl/r/rpl_ignore_table.result
+++ b/mysql-test/suite/rpl/r/rpl_ignore_table.result
@@ -157,5 +157,6 @@ SELECT * FROM tmptbl504451f4258$1;
ERROR 42S02: Table 'test.tmptbl504451f4258$1' doesn't exist
connection master;
DROP TABLE t5;
+flush privileges;
connection slave;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_killed_ddl.result b/mysql-test/suite/rpl/r/rpl_killed_ddl.result
index b5b302bc3eb..bb264a12af3 100644
--- a/mysql-test/suite/rpl/r/rpl_killed_ddl.result
+++ b/mysql-test/suite/rpl/r/rpl_killed_ddl.result
@@ -61,6 +61,13 @@ connection master;
include/rpl_diff.inc
connection master;
connection master1;
+ALTER DATABASE d1
+DEFAULT CHARACTER SET = 'utf8';
+source include/kill_query.inc;
+connection master;
+include/rpl_diff.inc
+connection master;
+connection master1;
DROP DATABASE d1;
source include/kill_query.inc;
connection master;
@@ -112,6 +119,12 @@ connection master;
include/rpl_diff.inc
connection master;
connection master1;
+DROP FUNCTION IF EXISTS f2;
+source include/kill_query.inc;
+connection master;
+include/rpl_diff.inc
+connection master;
+connection master1;
CREATE PROCEDURE p2 (OUT rows INT)
BEGIN
SELECT COUNT(*) INTO rows FROM t2;
@@ -134,6 +147,12 @@ connection master;
include/rpl_diff.inc
connection master;
connection master1;
+DROP PROCEDURE IF EXISTS p2;
+source include/kill_query.inc;
+connection master;
+include/rpl_diff.inc
+connection master;
+connection master1;
CREATE TABLE t2 (b int);
source include/kill_query.inc;
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_row_create_table.result b/mysql-test/suite/rpl/r/rpl_row_create_table.result
index 22ddf2e58f8..9ba89b2fc15 100644
--- a/mysql-test/suite/rpl/r/rpl_row_create_table.result
+++ b/mysql-test/suite/rpl/r/rpl_row_create_table.result
@@ -201,7 +201,7 @@ master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
-)
+) ENGINE=MyISAM
connection slave;
SHOW CREATE TABLE t8;
Table t8
@@ -214,7 +214,7 @@ Table t9
Create Table CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
-) ENGINE=MEMORY DEFAULT CHARSET=latin1
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
connection master;
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
connection slave;
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 8039527b099..ecc0e6d6d18 100644
--- a/mysql-test/suite/rpl/r/rpl_row_merge_engine.result
+++ b/mysql-test/suite/rpl/r/rpl_row_merge_engine.result
@@ -5,8 +5,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;
connection slave;
include/diff_tables.inc [master:test.t1, slave:test.t1]
include/diff_tables.inc [master:test.t2, slave:test.t2]
diff --git a/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result b/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result
new file mode 100644
index 00000000000..4a5bc3b76e5
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result
@@ -0,0 +1,13 @@
+include/master-slave.inc
+[connection master]
+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_ignore_table.test b/mysql-test/suite/rpl/t/rpl_ignore_table.test
index a5f7b608174..3360b789475 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'");
@@ -179,6 +179,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
diff --git a/mysql-test/suite/rpl/t/rpl_killed_ddl.test b/mysql-test/suite/rpl/t/rpl_killed_ddl.test
index dcd3ec3625b..593051700a7 100644
--- a/mysql-test/suite/rpl/t/rpl_killed_ddl.test
+++ b/mysql-test/suite/rpl/t/rpl_killed_ddl.test
@@ -26,10 +26,8 @@
#
# 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
+# - Bug#22587377
# Temporarily disabled on Windows due to bug #47638
--source include/not_windows.inc
@@ -146,11 +144,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;
@@ -169,8 +165,8 @@ 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
+# 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;
@@ -199,16 +195,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 ########
@@ -229,9 +217,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 ########
@@ -259,9 +246,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
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_innodb.test b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL_innodb.test
new file mode 100644
index 00000000000..1a09b685249
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL_innodb.test
@@ -0,0 +1,55 @@
+source include/have_innodb.inc;
+source include/have_binlog_format_row.inc;
+source include/master-slave.inc;
+#
+# BUG#20574550
+# CREATE TABLE LIKE <TEMP_TABLE> 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
+
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/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_innodb,32bit,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff
index cad46e36f42..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
@@ -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,12 +1223,12 @@
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
--GLOBAL_VALUE 5.6.29
-+GLOBAL_VALUE 5.6.28-76.1
+-GLOBAL_VALUE 5.6.31
++GLOBAL_VALUE 5.6.30-76.3
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
@@ -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
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
index a9e975313db..6d95a517b33 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
@@ -183,7 +183,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
@@ -571,21 +571,14 @@
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
-@@ -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
@@ -604,10 +597,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
-@@ -2294,7 +2742,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
+@@ -2294,7 +2756,7 @@
DEFAULT_VALUE OFF
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
@@ -616,7 +615,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
@@ -637,7 +636,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
@@ -658,12 +657,12 @@
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
--GLOBAL_VALUE 5.6.29
-+GLOBAL_VALUE 5.6.28-76.1
+-GLOBAL_VALUE 5.6.31
++GLOBAL_VALUE 5.6.30-76.3
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
index 0ddc401e618..9f92ea99437 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
@@ -2359,7 +2359,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.29
+GLOBAL_VALUE 5.6.31
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
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 7d7c10cf82a..5e9cefde669 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -2460,17 +2460,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/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
index d8c38e216ea..ebee8cd22e4 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
@@ -2656,17 +2656,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/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/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/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;
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
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%'
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
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/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/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\)|,
);
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
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://';
+
diff --git a/mysql-test/t/alter_table_online.test b/mysql-test/t/alter_table_online.test
index 6386a1551e1..22ebadd64f9 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
#
@@ -102,6 +100,28 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge
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;
+
+#
+# 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;
+
--echo #
--echo # MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
--echo #
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;
diff --git a/mysql-test/t/bootstrap.test b/mysql-test/t/bootstrap.test
index 840b9a12cee..a7e0ff17494 100644
--- a/mysql-test/t/bootstrap.test
+++ b/mysql-test/t/bootstrap.test
@@ -80,7 +80,7 @@ EOF
--write_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql
SET SQL_MODE="";
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
@@ -90,3 +90,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/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;
diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test
index 957c4ac5c9d..7cc74c52b28 100644
--- a/mysql-test/t/case.test
+++ b/mysql-test/t/case.test
@@ -194,6 +194,16 @@ 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;
+
+--echo #
--echo # Start of 10.1 test
--echo #
diff --git a/mysql-test/t/create_or_replace.test b/mysql-test/t/create_or_replace.test
index 3e37910380c..6d744679d67 100644
--- a/mysql-test/t/create_or_replace.test
+++ b/mysql-test/t/create_or_replace.test
@@ -214,15 +214,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;
@@ -231,15 +234,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;
@@ -317,15 +323,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;
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 #
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;
diff --git a/mysql-test/t/ctype_like_range.test b/mysql-test/t/ctype_like_range.test
index c663584ccf0..e8784990d36 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;
@@ -52,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;
@@ -67,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;
@@ -82,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;
@@ -97,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;
@@ -112,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_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 #
diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test
index 9ef4c8e2ae8..15a945fde6d 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;
@@ -641,7 +642,16 @@ 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 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
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_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_utf8.test b/mysql-test/t/ctype_utf8.test
index 1ad6f02f607..c4d94166493 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -1679,6 +1679,29 @@ 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 74e39a80e5b..7c7c532b045 100644
--- a/mysql-test/t/ctype_utf8mb4.test
+++ b/mysql-test/t/ctype_utf8mb4.test
@@ -1822,6 +1822,26 @@ 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 #
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 #
diff --git a/mysql-test/t/events_1.test b/mysql-test/t/events_1.test
index 88120b0cd4f..9768127f458 100644
--- a/mysql-test/t/events_1.test
+++ b/mysql-test/t/events_1.test
@@ -461,6 +461,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/events_2.test b/mysql-test/t/events_2.test
index 7d9ac7c5858..20f17966b29 100644
--- a/mysql-test/t/events_2.test
+++ b/mysql-test/t/events_2.test
@@ -69,10 +69,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
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;
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 22cf878c966..e27a2bd46d3 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;
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 #
diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test
index fab39b04484..9e848aa1847 100644
--- a/mysql-test/t/func_in.test
+++ b/mysql-test/t/func_in.test
@@ -607,6 +607,28 @@ 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 # Start of 10.1 tests
+--echo #
+
--echo #
--echo # MDEV-8755 Equal field propagation is not performed any longer for the IN list when multiple comparison types
--echo #
diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test
index 058c6f3b7ca..fdda9c844ea 100644
--- a/mysql-test/t/func_math.test
+++ b/mysql-test/t/func_math.test
@@ -486,6 +486,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
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 <current_user> 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;
+
diff --git a/mysql-test/t/help.test b/mysql-test/t/help.test
index 43e61136e05..dc5dc1cee5f 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;
##############
set sql_mode="";
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;
diff --git a/mysql-test/t/insert_innodb.test b/mysql-test/t/insert_innodb.test
new file mode 100644
index 00000000000..68b6ca4e315
--- /dev/null
+++ b/mysql-test/t/insert_innodb.test
@@ -0,0 +1,64 @@
+--source include/have_innodb.inc
+
+#
+# MDEV-8979 IGNORE does not ignore the error 1452
+#
+
+--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.
+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;
+
+--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;
+
+--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;
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;
diff --git a/mysql-test/t/kill_processlist-6619.test b/mysql-test/t/kill_processlist-6619.test
index df5f410208b..d984924f9db 100644
--- a/mysql-test/t/kill_processlist-6619.test
+++ b/mysql-test/t/kill_processlist-6619.test
@@ -22,5 +22,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/locale.test b/mysql-test/t/locale.test
index 93e347b722d..b1fbc40f0c8 100644
--- a/mysql-test/t/locale.test
+++ b/mysql-test/t/locale.test
@@ -55,6 +55,33 @@ 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');
+
+--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;
--echo #
--echo # Start of 5.6 tests
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/multi_update.test b/mysql-test/t/multi_update.test
index d54c2ab7c55..0297280340d 100644
--- a/mysql-test/t/multi_update.test
+++ b/mysql-test/t/multi_update.test
@@ -1083,4 +1083,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
diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test
index 88f0d034bf0..e479a2232f0 100644
--- a/mysql-test/t/mysqlcheck.test
+++ b/mysql-test/t/mysqlcheck.test
@@ -350,6 +350,11 @@ create table t1(a int);
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`;
+
--echo #
--echo #MDEV-7384 [PATCH] add PERSISENT FOR ALL option to mysqlanalyze/mysqlcheck
--echo #
diff --git a/mysql-test/t/mysqld--help.test b/mysql-test/t/mysqld--help.test
index 12fd968b212..e6499957cd2 100644
--- a/mysql-test/t/mysqld--help.test
+++ b/mysql-test/t/mysqld--help.test
@@ -22,7 +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
- log-tc-size version.*/;
+ collation-server character-set-server log-tc-size version.*/;
# Plugins which may or may not be there:
@plugins=qw/innodb archive blackhole federated partition
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index f2c445f14ad..8f130cc9b8e 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -1009,5 +1009,16 @@ 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 #
diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test
index 8c81bdc9bbb..837206e2717 100644
--- a/mysql-test/t/openssl_1.test
+++ b/mysql-test/t/openssl_1.test
@@ -134,7 +134,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
@@ -259,7 +259,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;
@@ -268,5 +268,12 @@ DROP USER bug42158@localhost;
set global sql_mode=default;
--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
diff --git a/mysql-test/t/openssl_6975.test b/mysql-test/t/openssl_6975.test
index 88fe17d0621..6e8e03a0a89 100644
--- a/mysql-test/t/openssl_6975.test
+++ b/mysql-test/t/openssl_6975.test
@@ -17,6 +17,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/order_by.test b/mysql-test/t/order_by.test
index bdd6f3b825f..13c8db5a481 100644
--- a/mysql-test/t/order_by.test
+++ b/mysql-test/t/order_by.test
@@ -1997,3 +1997,87 @@ 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 #
+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);
+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;
+
+set @@optimizer_switch=@tmp_8989;
+
+set optimizer_switch='orderby_uses_equalities=on';
+
diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test
index c9f54e94073..90b0fb11648 100644
--- a/mysql-test/t/parser.test
+++ b/mysql-test/t/parser.test
@@ -759,6 +759,22 @@ 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<<!0, 1 << !0;
+select 0<!0, 0 < ! 0;
+
+#
+# start of 10.1 tests
+#
+
--echo #
--echo # MDEV-7792 - SQL Parsing Error - UNION AND ORDER BY WITH JOIN
--echo #
diff --git a/mysql-test/t/partition_innodb_plugin.test b/mysql-test/t/partition_innodb_plugin.test
index eb3f999641d..3a3ae257beb 100644
--- a/mysql-test/t/partition_innodb_plugin.test
+++ b/mysql-test/t/partition_innodb_plugin.test
@@ -118,12 +118,8 @@ let $id_1= `SELECT CONNECTION_ID()`;
SEND;
UPDATE `t``\""e` SET a = 12 WHERE a = 0;
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;
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
@@ -1817,5 +1817,14 @@ 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 #
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;
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..6afccd74f9d
--- /dev/null
+++ b/mysql-test/t/set_password_plugin-9835.test
@@ -0,0 +1,131 @@
+#
+# 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
+
+set global secure_auth=0;
+
+# 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;
+set global secure_auth=default;
+
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
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;
diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test
index 0d14ad82692..88766e7cf39 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';
#
@@ -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
diff --git a/mysql-test/t/ssl_ca.test b/mysql-test/t/ssl_ca.test
new file mode 100644
index 00000000000..8e81f44e61c
--- /dev/null
+++ b/mysql-test/t/ssl_ca.test
@@ -0,0 +1,36 @@
+--source include/have_ssl_communication.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
+--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 #
+--echo # Bug#21920678: SSL-CA DOES NOT ACCEPT ~USER TILDE HOME DIRECTORY
+--echo # PATH SUBSTITUTION
+--echo #
+
+--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
+--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 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 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'"
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-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;
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/t/subselect.test b/mysql-test/t/subselect.test
index c19613da493..67af426f5fe 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;
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;
#
diff --git a/mysql-test/t/type_date.test b/mysql-test/t/type_date.test
index 52ca2c85b15..71b1e76ac47 100644
--- a/mysql-test/t/type_date.test
+++ b/mysql-test/t/type_date.test
@@ -386,6 +386,37 @@ 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 # MDEV-9972 Least function retuns date in date time format
+--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;
+
+--echo #
--echo # MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str
--echo #
CREATE TABLE t1 (f1 DATE, f2 VARCHAR(1));
diff --git a/mysql-test/t/type_datetime.test b/mysql-test/t/type_datetime.test
index 7c9d56a0780..b16d426ab70 100644
--- a/mysql-test/t/type_datetime.test
+++ b/mysql-test/t/type_datetime.test
@@ -611,6 +611,14 @@ 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 #
diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test
index 80687fc4461..152c3ade487 100644
--- a/mysql-test/t/type_newdecimal.test
+++ b/mysql-test/t/type_newdecimal.test
@@ -1686,6 +1686,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 #
diff --git a/mysql-test/t/type_timestamp.test b/mysql-test/t/type_timestamp.test
index 6188ed6b4d6..460769f8961 100644
--- a/mysql-test/t/type_timestamp.test
+++ b/mysql-test/t/type_timestamp.test
@@ -445,6 +445,14 @@ 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
--echo #
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..de4904fada2
--- /dev/null
+++ b/mysql-test/t/wait_timeout_not_windows.test
@@ -0,0 +1,16 @@
+source include/not_embedded.inc;
+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;
diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp
index b5c9b62049b..c3e7d1c65ec 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
@@ -90,52 +60,6 @@
}
{
- 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 memalign memory loss2
- Memcheck:Leak
- fun:memalign
- fun:tls_get_addr_tail
- ...
- fun:*ha_initialize_handlerton*
-}
-
-{
- pthread memalign memory loss3
- Memcheck:Leak
- fun:memalign
- fun:tls_get_addr_tail
- ...
- fun:*ha_finalize_handlerton*
-}
-
-{
pthread pthread_key_create
Memcheck:Leak
fun:malloc
@@ -1006,18 +930,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
@@ -1152,6 +1064,13 @@
fun:SSL_library_init
}
+{
+ libcrypto 2.2.1 leak
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:ERR_get_state
+}
{
Problem with udf and libresolve
@@ -1163,6 +1082,23 @@
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*
+}
{
ConnectSE: unixODBC SQLAllocEnv leaves some "still reachable" pointers
@@ -1625,4 +1561,3 @@ g codership/mysql-wsrep/issues#176
fun:start_thread
fun:clone
}
-