diff options
Diffstat (limited to 'mysql-test/include')
-rw-r--r-- | mysql-test/include/ctype_utf8_ilseq.inc | 114 | ||||
-rw-r--r-- | mysql-test/include/default_mysqld.cnf | 1 | ||||
-rw-r--r-- | mysql-test/include/have_ipv6.inc | 20 | ||||
-rw-r--r-- | mysql-test/include/mtr_warnings.sql | 6 | ||||
-rw-r--r-- | mysql-test/include/no_protocol.inc | 8 | ||||
-rw-r--r-- | mysql-test/include/show_slave_status.inc | 52 | ||||
-rw-r--r-- | mysql-test/include/shutdown_mysqld.inc | 18 | ||||
-rw-r--r-- | mysql-test/include/start_mysqld.inc | 14 |
8 files changed, 206 insertions, 27 deletions
diff --git a/mysql-test/include/ctype_utf8_ilseq.inc b/mysql-test/include/ctype_utf8_ilseq.inc new file mode 100644 index 00000000000..c400731c07f --- /dev/null +++ b/mysql-test/include/ctype_utf8_ilseq.inc @@ -0,0 +1,114 @@ +# +# Compare a field to an utf8 string literal with illegal byte sequences +# + +--echo # +--echo # Start of ctype_utf8_ilseq.inc +--echo # + +--eval CREATE TABLE t1 ENGINE=$ENGINE AS SELECT REPEAT(' ', 60) AS ch LIMIT 0; +ALTER TABLE t1 + ADD id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ADD KEY(ch); +SHOW CREATE TABLE t1; + +INSERT INTO t1 (ch) VALUES ('admin'),('admin1'); +SELECT ch FROM t1 WHERE ch='admin๐'; +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch='admin๐'; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch='admin๐'; +DELETE FROM t1; +INSERT INTO t1 (ch) VALUES ('a'), ('a?'), ('a??'), ('a???'), ('a????'); +INSERT INTO t1 (ch) VALUES ('ab'),('a?b'),('a??b'),('a???b'),('a????b'); +INSERT INTO t1 (ch) VALUES ('az'),('a?z'),('a??z'),('a???z'),('a????z'); +INSERT INTO t1 (ch) VALUES ('z'); +# LATIN SMALL LETTER A + LATIN CAPITAL LETTER E WITH GRAVE +INSERT INTO t1 (ch) VALUES (_utf8 0x61D080); +# LATIN SMALL LETTER A + ARMENIAN SMALL LETTER REH +INSERT INTO t1 (ch) VALUES (_utf8 0x61D680); + +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch='a๐' ORDER BY ch; +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch='a๐b' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch='a๐' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch='a๐b' ORDER BY ch; + +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch<'a๐' ORDER BY ch; +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch<'a๐b' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch<'a๐' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch<'a๐b' ORDER BY ch; + +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch>'a๐' ORDER BY ch; +SELECT ch FROM t1 IGNORE KEY (ch) WHERE ch>'a๐b' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch>'a๐' ORDER BY ch; +SELECT ch FROM t1 FORCE KEY (ch) WHERE ch>'a๐b' ORDER BY ch; + +ALTER TABLE t1 DROP KEY ch; + +--echo # 0xD18F would be a good 2-byte character, 0xD1 is an incomplete sequence +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0xD1,''''); +PREPARE stmt FROM @query; +EXECUTE stmt; +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0xD1,'b'''); +PREPARE stmt FROM @query; +EXECUTE stmt; + +# +# Non-equality comparison currently work differently depending on collation: +# +# - utf8_general_ci falls back to memcmp() on bad byte +# - utf8_unicode_ci treats bad bytes greater than any valid character +# +# For example, these two characters: +# _utf8 0xD080 (U+00C8 LATIN CAPITAL LETTER E WITH GRAVE) +# _utf8 0xD680 (U+0580 ARMENIAN SMALL LETTER REH) +# +# will give different results (depending on collation) when compared +# to an incomplete byte sequence 0xD1 (mb2head not followed by mb2tail). +# +# For utf8_general_ci the result depends on the valid side: +# - 0xD080 is smaller than 0xD1, because 0xD0 < 0xD1 +# - 0xD680 is greater than 0xD1, because 0xD6 > 0xD1 +# +# For utf8_unicode_ci the result does not depend on the valid side: +# - 0xD080 is smaller than 0xD1, because 0xD1 is greater than any valid character +# - 0xD680 is smaller than 0xD1, because 0xD1 is greater than any valid character +# +# utf8_general_ci should be eventually fixed to treat bad bytes greater +# than any valid character, similar to utf8_unicode_ci. +# + +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch<''a', 0xD1,''' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch>''a', 0xD1,''' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; + +--echo # 0xEA9A96 would be a good 3-byte character, 0xEA9A is an incomplete sequence +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0xEA9A,''' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0xEA9A,'b'' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; + +--echo # 0x8F is a bad byte sequence (an mb2tail without mb2head) +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0x8F,''' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0x8F,'b'' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; + +--echo # 0x8F8F is a bad byte sequence (an mb2tail without mb2head, two times) +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0x8F8F,''' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; +SET @query=CONCAT('SELECT ch FROM t1 WHERE ch=''a', 0x8F8F,'b'' ORDER BY ch'); +PREPARE stmt FROM @query; +EXECUTE stmt; + +DROP TABLE t1; + +--echo # +--echo # End of ctype_utf8_ilseq.inc +--echo # diff --git a/mysql-test/include/default_mysqld.cnf b/mysql-test/include/default_mysqld.cnf index 33881666b57..04321475691 100644 --- a/mysql-test/include/default_mysqld.cnf +++ b/mysql-test/include/default_mysqld.cnf @@ -31,6 +31,7 @@ debug-no-sync # Retry bind as this may fail on busy server port-open-timeout=10 +bind-address=127.0.0.1 log-bin-trust-function-creators=1 key_buffer_size= 1M diff --git a/mysql-test/include/have_ipv6.inc b/mysql-test/include/have_ipv6.inc deleted file mode 100644 index 752dd0db53e..00000000000 --- a/mysql-test/include/have_ipv6.inc +++ /dev/null @@ -1,20 +0,0 @@ -# Check if ipv6 is available. -# ---disable_query_log ---disable_result_log ---disable_abort_on_error -connect (checkcon123456789,::1,root,,test); -if($mysql_errno) -{ - skip No IPv6 support; -} -connection default; -if(!$mysql_errno) -{ - disconnect checkcon123456789; -} ---enable_abort_on_error ---enable_result_log ---enable_query_log -# end check - diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index 9d97d23897c..345968cd3f0 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -227,6 +227,12 @@ INSERT INTO global_suppressions VALUES ("Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error.*"), ("Slave I/O: Setting master-side filtering of @@skip_replication failed with error:.*"), ("Slave I/O: Setting @mariadb_slave_capability failed with error:.*"), + ("Slave I/O: Get master @@GLOBAL.gtid_domain_id failed with error.*"), + ("Slave I/O: Setting @slave_connect_state failed with error.*"), + ("Slave I/O: Setting @slave_gtid_strict_mode failed with error.*"), + ("Slave I/O: Setting @slave_gtid_ignore_duplicates failed with error.*"), + ("Slave I/O: Setting @slave_until_gtid failed with error.*"), + ("Slave I/O: Get master GTID position failed with error.*"), ("THE_LAST_SUPPRESSION")|| diff --git a/mysql-test/include/no_protocol.inc b/mysql-test/include/no_protocol.inc new file mode 100644 index 00000000000..8ffd3509afc --- /dev/null +++ b/mysql-test/include/no_protocol.inc @@ -0,0 +1,8 @@ +# The file with expected results fits only to a run without +# ps-protocol/sp-protocol/cursor-protocol/view-protocol. +if (`SELECT $PS_PROTOCOL + $SP_PROTOCOL + $CURSOR_PROTOCOL + + $VIEW_PROTOCOL > 0`) +{ + --skip Test requires: ps-protocol/sp-protocol/cursor-protocol/view-protocol disabled +} + diff --git a/mysql-test/include/show_slave_status.inc b/mysql-test/include/show_slave_status.inc index 55eb83c25e5..ba2e1b0c48a 100644 --- a/mysql-test/include/show_slave_status.inc +++ b/mysql-test/include/show_slave_status.inc @@ -67,7 +67,21 @@ # # --let $slave_sql_mode= NO_BACKSLASH_ESCAPES # - +# $all_slaves_status +# If set, use SHOW ALL SLAVES STATUS instead of SHOW SLAVE STATUS +# and get the column values from all rows. Example: +# +# --let $all_slaves_status= 1 +# +# $slave_name +# If set, use SHOW SLAVE '<slave_name>' STATUS instead of SHOW SLAVE STATUS. +# The name must be quoted (can be a quoted empty string). +# Example: +# +# --let $slave_name= 'm1' +# +# Note: $all_slaves_status and $slave_name are mutually exclusive. +# --let $_show_slave_status_items=$status_items if (!$status_items) @@ -75,6 +89,21 @@ if (!$status_items) --die Bug in test case: The mysqltest variable $status_items is not set. } +--let $_show_query=SHOW SLAVE STATUS + +if ($all_slaves_status) +{ + if ($slave_name) + { + --die Bug in test case: Both $all_slaves_status and $slave_name are set. + } + --let $_show_query=SHOW ALL SLAVES STATUS +} +if ($slave_name) +{ + --let $_show_query=SHOW SLAVE $slave_name STATUS +} + --let $_slave_sql_mode= NO_BACKSLASH_ESCAPES if ($slave_sql_mode) @@ -86,18 +115,27 @@ if ($slave_sql_mode) eval SET sql_mode= '$_slave_sql_mode'; --enable_query_log +--let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace while ($_show_slave_status_items) { --let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)` --let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))` - --replace_regex /\.[\\\/]master/master/ - --let $_show_slave_status_value= query_get_value(SHOW SLAVE STATUS, $_show_slave_status_name, 1) - --let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace - --replace_regex $_slave_field_result_replace - --let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')` - --echo $_show_slave_status_name = '$_show_slave_status_value' + --let $num= 1 + --let $_show_slave_status_value= + while ($_show_slave_status_value != 'No such row') + { + --replace_regex /\.[\\\/]master/master/ + --let $_show_slave_status_value= query_get_value($_show_query, $_show_slave_status_name, $num) + if ($_show_slave_status_value != 'No such row') + { + --replace_regex $_slave_field_result_replace + --let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')` + --echo $_show_slave_status_name = '$_show_slave_status_value' + --inc $num + } + } } diff --git a/mysql-test/include/shutdown_mysqld.inc b/mysql-test/include/shutdown_mysqld.inc new file mode 100644 index 00000000000..54bba1318e7 --- /dev/null +++ b/mysql-test/include/shutdown_mysqld.inc @@ -0,0 +1,18 @@ +# This is the first half of include/restart_mysqld.inc. +if ($rpl_inited) +{ + if (!$allow_rpl_inited) + { + --die ERROR IN TEST: When using the replication test framework (master-slave.inc, rpl_init.inc etc), use rpl_restart_server.inc instead of restart_mysqld.inc. If you know what you are doing and you really have to use restart_mysqld.inc, set allow_rpl_inited=1 before you source restart_mysqld.inc + } +} + +# Write file to make mysql-test-run.pl expect the "crash", but don't start it +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect +--exec echo "wait" > $_expect_file_name + +# Send shutdown to the connected server +--shutdown_server +--source include/wait_until_disconnected.inc + diff --git a/mysql-test/include/start_mysqld.inc b/mysql-test/include/start_mysqld.inc new file mode 100644 index 00000000000..983c566821e --- /dev/null +++ b/mysql-test/include/start_mysqld.inc @@ -0,0 +1,14 @@ +# Include this script only after using shutdown_mysqld.inc +# where $_expect_file_name was initialized. +# Write file to make mysql-test-run.pl start up the server again +--exec echo "restart" > $_expect_file_name + +# Turn on reconnect +--enable_reconnect + +# Call script that will poll the server waiting for it to be back online again +--source include/wait_until_connected_again.inc + +# Turn off reconnect again +--disable_reconnect + |