diff options
author | Alexander Nozdrin <alik@sun.com> | 2010-02-15 14:16:49 +0300 |
---|---|---|
committer | Alexander Nozdrin <alik@sun.com> | 2010-02-15 14:16:49 +0300 |
commit | 6c32fa735717e91a1de369bc8fe7d73ef9ff224a (patch) | |
tree | 2c79edc43ff38be4c2de71e4fee4285523f5c08c | |
parent | 0ec868ca0e2d3ea60835d7c8fa7b951182b497b1 (diff) | |
parent | 2fa7509bf07761e041c5702f3b833b7fefb3ec61 (diff) | |
download | mariadb-git-6c32fa735717e91a1de369bc8fe7d73ef9ff224a.tar.gz |
Manual merge from mysql-next-mr.
Conflicts:
- sql/log_event.cc
- sql/sql_class.h
212 files changed, 6012 insertions, 2389 deletions
diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h index a9277cd18bd..51446fa83a5 100644 --- a/include/mysql/psi/psi.h +++ b/include/mysql/psi/psi.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2009 Sun Microsystems, Inc +/* Copyright (C) 2008-2010 Sun Microsystems, Inc This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -614,6 +614,9 @@ typedef void (*set_thread_v1_t)(struct PSI_thread *thread); /** Delete the current thread instrumentation. */ typedef void (*delete_current_thread_v1_t)(void); +/** Delete a thread instrumentation. */ +typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); + /** Get a mutex instrumentation locker. @param mutex the instrumented mutex to lock @@ -890,6 +893,8 @@ struct PSI_v1 set_thread_v1_t set_thread; /** @sa delete_current_thread_v1_t. */ delete_current_thread_v1_t delete_current_thread; + /** @sa delete_thread_v1_t. */ + delete_thread_v1_t delete_thread; /** @sa get_thread_mutex_locker_v1_t. */ get_thread_mutex_locker_v1_t get_thread_mutex_locker; /** @sa get_thread_rwlock_locker_v1_t. */ diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp index aedf28ba694..6ecd0f3098d 100644 --- a/include/mysql/psi/psi_abi_v1.h.pp +++ b/include/mysql/psi/psi_abi_v1.h.pp @@ -127,6 +127,7 @@ typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, typedef struct PSI_thread* (*get_thread_v1_t)(void); typedef void (*set_thread_v1_t)(struct PSI_thread *thread); typedef void (*delete_current_thread_v1_t)(void); +typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); typedef struct PSI_mutex_locker* (*get_thread_mutex_locker_v1_t) (struct PSI_mutex *mutex, enum PSI_mutex_operation op); typedef struct PSI_rwlock_locker* (*get_thread_rwlock_locker_v1_t) @@ -204,6 +205,7 @@ struct PSI_v1 get_thread_v1_t get_thread; set_thread_v1_t set_thread; delete_current_thread_v1_t delete_current_thread; + delete_thread_v1_t delete_thread; get_thread_mutex_locker_v1_t get_thread_mutex_locker; get_thread_rwlock_locker_v1_t get_thread_rwlock_locker; get_thread_cond_locker_v1_t get_thread_cond_locker; diff --git a/mysql-test/collections/default.experimental b/mysql-test/collections/default.experimental index e62c88db5cb..8ff56658853 100644 --- a/mysql-test/collections/default.experimental +++ b/mysql-test/collections/default.experimental @@ -16,9 +16,6 @@ main.plugin # Bug#47146 Linking problem with exampl main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun -perfschema.tampered_perfschema_table1 @windows # Bug#50478 2010-01-20 alik perfschema.tampered_perfschema_table1 fails sporadically on Windows and Solaris -perfschema.tampered_perfschema_table1 @solaris # Bug#50478 2010-01-20 alik perfschema.tampered_perfschema_table1 fails sporadically on Windows and Solaris - rpl.rpl_heartbeat_basic # BUG#43828 2009-10-22 luis fails sporadically rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically rpl.rpl_innodb_bug28430* # Bug#46029 @@ -26,12 +23,9 @@ rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_inn rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows rpl.rpl_plugin_load* @solaris # Bug#47146 rpl.rpl_row_sp011* @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun -rpl.rpl_slave_load_remove_tmpfile* @windows # Bug#50474 2010-01-20 alik rpl_slave_load_remove_tmpfile failed on windows debug enabled binary -rpl.rpl_sync* @windows # Bug#50473 2010-01-20 alik rpl_sync fails on windows debug enabled binaries rpl.rpl_timezone* # Bug#47017 2009-10-27 alik rpl_timezone fails on PB-2 with mismatch error sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun -sys_vars.delayed_insert_limit_func # Bug#50435 2010-01-25 alik sys_vars.delayed_insert_limit_func fails on Ubuntu x86_64 in debug mode # Declare all NDB-tests in ndb and rpl_ndb test suites experimental. # Usually the test cases from ndb and rpl_ndb test suites are not run in PB, diff --git a/mysql-test/include/have_ipv4_mapped.inc b/mysql-test/include/have_ipv4_mapped.inc new file mode 100644 index 00000000000..d85580405cd --- /dev/null +++ b/mysql-test/include/have_ipv4_mapped.inc @@ -0,0 +1,14 @@ +# Check if ipv4 mapped to ipv6 is available. +--disable_query_log +--disable_abort_on_error +connect (checkcon123456789,::FFFF:127.0.0.1,root,,test); +if($mysql_errno) +{ +skip wrong IP; +} +connection default; +disconnect checkcon123456789; +--enable_abort_on_error +--enable_query_log +# end check + diff --git a/mysql-test/include/ipv6.inc b/mysql-test/include/ipv6.inc index 378733dd03a..3d8fdcfbc3c 100644 --- a/mysql-test/include/ipv6.inc +++ b/mysql-test/include/ipv6.inc @@ -6,7 +6,9 @@ eval SET @nip= inet_aton('$IPv6'); SELECT @nip; SELECT inet_ntoa(@nip); # delivers a wrong value, see bug#34037 +--replace_result ::1 localhost SELECT USER(); +--replace_result ::1 localhost SELECT current_user(); --disable_result_log SHOW PROCESSLIST; @@ -17,6 +19,7 @@ disconnect con1; eval REVOKE ALL ON test.* FROM testuser@'$IPv6'; eval RENAME USER testuser@'$IPv6' to testuser1@'$IPv6'; eval SET PASSWORD FOR testuser1@'$IPv6' = PASSWORD ('9876'); +--replace_result ::1 localhost SELECT USER(); eval DROP USER testuser1@'$IPv6'; diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index db80e9d2eea..7e14c3a9b23 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -1354,3 +1354,15 @@ DROP i, ADD i INT UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 1; DROP TABLE t1; +CREATE TABLE t1 (a CHAR(1), PRIMARY KEY (a(255))); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +CREATE TABLE t1 (a CHAR(1)); +ALTER TABLE t1 ADD PRIMARY KEY (a(20)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +ALTER TABLE t1 ADD KEY (a(20)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +CREATE UNIQUE INDEX i1 ON t1 (a(20)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +CREATE INDEX i2 ON t1 (a(20)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +DROP TABLE t1; diff --git a/mysql-test/r/constraints.result b/mysql-test/r/constraints.result index 116efe429d5..46a718e4c42 100644 --- a/mysql-test/r/constraints.result +++ b/mysql-test/r/constraints.result @@ -3,7 +3,7 @@ create table t1 (a int check (a>0)); insert into t1 values (1); insert into t1 values (0); drop table t1; -create table t1 (a int ,b int, check a>b); +create table t1 (a int, b int, check (a>b)); insert into t1 values (1,0); insert into t1 values (0,1); drop table t1; @@ -27,3 +27,19 @@ t1 CREATE TABLE `t1` ( UNIQUE KEY `key_2` (`a`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; +drop table if exists t_illegal; +create table t_illegal (a int, b int, check a>b); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a>b)' at line 1 +create table t_illegal (a int, b int, constraint abc check a>b); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a>b)' at line 1 +create table t_illegal (a int, b int, constraint abc); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 +drop table if exists t_11714; +create table t_11714(a int, b int); +alter table t_11714 add constraint cons1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 +drop table t_11714; +CREATE TABLE t_illegal (col_1 INT CHECK something (whatever)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'something (whatever))' at line 1 +CREATE TABLE t_illegal (col_1 INT CHECK something); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'something)' at line 1 diff --git a/mysql-test/r/foreign_key.result b/mysql-test/r/foreign_key.result index ece53db2e9a..a6577dd376b 100644 --- a/mysql-test/r/foreign_key.result +++ b/mysql-test/r/foreign_key.result @@ -13,3 +13,45 @@ foreign key (a,b) references t3 (c,d) on update set null); create index a on t1 (a); create unique index b on t1 (a,b); drop table t1; +drop table if exists t_34455; +create table t_34455 ( +a int not null, +foreign key (a) references t3 (a) match full match partial); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match partial)' at line 3 +create table t_34455 ( +a int not null, +foreign key (a) references t3 (a) on delete set default match full); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match full)' at line 3 +create table t_34455 ( +a int not null, +foreign key (a) references t3 (a) on update set default match full); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match full)' at line 3 +create table t_34455 ( +a int not null, +foreign key (a) references t3 (a) +on delete set default on delete set default); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete set default)' at line 4 +create table t_34455 ( +a int not null, +foreign key (a) references t3 (a) +on update set default on update set default); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update set default)' at line 4 +create table t_34455 (a int not null); +alter table t_34455 +add foreign key (a) references t3 (a) match full match partial); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match partial)' at line 2 +alter table t_34455 +add foreign key (a) references t3 (a) on delete set default match full); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match full)' at line 2 +alter table t_34455 +add foreign key (a) references t3 (a) on update set default match full); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match full)' at line 2 +alter table t_34455 +add foreign key (a) references t3 (a) +on delete set default on delete set default); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete set default)' at line 3 +alter table t_34455 +add foreign key (a) references t3 (a) +on update set default on update set default); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update set default)' at line 3 +drop table t_34455; diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index 60e24819fa5..717dd33231e 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -1058,3 +1058,33 @@ SELECT Polygon(12345123,''); Polygon(12345123,'') NULL End of 5.1 tests +CREATE TABLE t1( +col0 BINARY NOT NULL, +col2 TIMESTAMP, +SPATIAL INDEX i1 (col0) +) ENGINE=MyISAM; +ERROR 42000: A SPATIAL index may only contain a geometrical type column +CREATE TABLE t1 ( +col0 BINARY NOT NULL, +col2 TIMESTAMP +) ENGINE=MyISAM; +CREATE SPATIAL INDEX idx0 ON t1(col0); +ERROR 42000: A SPATIAL index may only contain a geometrical type column +ALTER TABLE t1 ADD SPATIAL INDEX i1 (col0); +ERROR 42000: A SPATIAL index may only contain a geometrical type column +CREATE TABLE t2 ( +col0 INTEGER NOT NULL, +col1 POINT, +col2 POINT +); +CREATE SPATIAL INDEX idx0 ON t2 (col1, col2); +ERROR HY000: Incorrect arguments to SPATIAL INDEX +CREATE TABLE t3 ( +col0 INTEGER NOT NULL, +col1 POINT, +col2 LINESTRING, +SPATIAL INDEX i1 (col1, col2) +); +ERROR HY000: Incorrect arguments to SPATIAL INDEX +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result index ba1c2a79ad9..94069d0559c 100644 --- a/mysql-test/r/group_min_max.result +++ b/mysql-test/r/group_min_max.result @@ -2686,7 +2686,7 @@ a c COUNT(DISTINCT c, a, b) 1 1 1 1 1 1 1 1 1 -2 1 1 +1 1 1 2 1 1 2 1 1 2 1 1 @@ -2714,7 +2714,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 range NULL a 10 NULL 9 Using index for group-by SELECT a, COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a; a COUNT(DISTINCT b) SUM(DISTINCT b) -2 8 36 +1 8 36 2 8 36 EXPLAIN SELECT COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a; id select_type table type possible_keys key key_len ref rows Extra @@ -2761,7 +2761,7 @@ SELECT 42 * (a + c + COUNT(DISTINCT c, a, b)) FROM t2 GROUP BY a, b, c; 126 126 126 -168 +126 168 168 168 @@ -2779,3 +2779,24 @@ SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a; 10 DROP TABLE t1,t2; # end of WL#3220 tests +# +# Bug#50539: Wrong result when loose index scan is used for an aggregate +# function with distinct +# +CREATE TABLE t1 ( +f1 int(11) NOT NULL DEFAULT '0', +f2 char(1) NOT NULL DEFAULT '', +PRIMARY KEY (f1,f2) +) ; +insert into t1 values(1,'A'),(1 , 'B'), (1, 'C'), (2, 'A'), +(3, 'A'), (3, 'B'), (3, 'C'), (3, 'D'); +SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1; +f1 COUNT(DISTINCT f2) +1 3 +2 1 +3 4 +explain SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range NULL PRIMARY 5 NULL 9 Using index for group-by (scanning) +drop table t1; +# End of test#50539. diff --git a/mysql-test/r/ipv4_as_ipv6_win.result b/mysql-test/r/ipv4_as_ipv6_win.result deleted file mode 100644 index 45e23d4d7e6..00000000000 --- a/mysql-test/r/ipv4_as_ipv6_win.result +++ /dev/null @@ -1,32 +0,0 @@ -=============Test of '127.0.0.1' (IPv4) =========================== -mysqld is alive -CREATE USER testuser@'127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'127.0.0.1'; -SHOW GRANTS FOR testuser@'127.0.0.1'; -Grants for testuser@127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'127.0.0.1' -SET @nip= inet_aton('127.0.0.1'); -SELECT @nip; -@nip -2130706433 -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -127.0.0.1 -SELECT USER(); -USER() -root@127.0.0.1 -SELECT current_user(); -current_user() -root@127.0.0.1 -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'127.0.0.1'; -RENAME USER testuser@'127.0.0.1' to testuser1@'127.0.0.1'; -SET PASSWORD FOR testuser1@'127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@127.0.0.1 -DROP USER testuser1@'127.0.0.1'; -=============Test of '::1' ======================== -connect (con1, ::1, root, , test, MASTER_MYPORT); -Got one of the listed errors diff --git a/mysql-test/r/ipv6.result b/mysql-test/r/ipv6.result index 566938296a9..1ff51fcc831 100644 --- a/mysql-test/r/ipv6.result +++ b/mysql-test/r/ipv6.result @@ -86,179 +86,3 @@ SELECT USER(); USER() root@localhost DROP USER testuser1@'0:0:0:0:0:0:0:1'; -=============Test of '127.0.0.1' (IPv4) =========================== -mysqld is alive -CREATE USER testuser@'127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'127.0.0.1'; -SHOW GRANTS FOR testuser@'127.0.0.1'; -Grants for testuser@127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'127.0.0.1' -SET @nip= inet_aton('127.0.0.1'); -SELECT @nip; -@nip -2130706433 -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -127.0.0.1 -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'127.0.0.1'; -RENAME USER testuser@'127.0.0.1' to testuser1@'127.0.0.1'; -SET PASSWORD FOR testuser1@'127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'127.0.0.1'; -=============Test of '0:0:0:0:0:FFFF:127.0.0.1' =================== -mysqld is alive -CREATE USER testuser@'0:0:0:0:0:FFFF:127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0:0:0:0:0:FFFF:127.0.0.1'; -SHOW GRANTS FOR testuser@'0:0:0:0:0:FFFF:127.0.0.1'; -Grants for testuser@0:0:0:0:0:FFFF:127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'0:0:0:0:0:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0:0:0:0:FFFF:127.0.0.1' -SET @nip= inet_aton('0:0:0:0:0:FFFF:127.0.0.1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0:0:0:0:0:FFFF:127.0.0.1'; -RENAME USER testuser@'0:0:0:0:0:FFFF:127.0.0.1' to testuser1@'0:0:0:0:0:FFFF:127.0.0.1'; -SET PASSWORD FOR testuser1@'0:0:0:0:0:FFFF:127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'0:0:0:0:0:FFFF:127.0.0.1'; -=============Test of '0000:0000:0000:0000:0000:FFFF:127.0.0.1' ==== -mysqld is alive -CREATE USER testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -SHOW GRANTS FOR testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -Grants for testuser@0000:0000:0000:0000:0000:FFFF:127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' -SET @nip= inet_aton('0000:0000:0000:0000:0000:FFFF:127.0.0.1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -RENAME USER testuser@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' to testuser1@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -SET PASSWORD FOR testuser1@'0000:0000:0000:0000:0000:FFFF:127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -=============Test of '0:0000:0000:0:0000:FFFF:127.0.0.1' ==== -mysqld is alive -CREATE USER testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1'; -SHOW GRANTS FOR testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1'; -Grants for testuser@0:0000:0000:0:0000:FFFF:127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'0:0000:0000:0:0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0000:0000:0:0000:FFFF:127.0.0.1' -SET @nip= inet_aton('0:0000:0000:0:0000:FFFF:127.0.0.1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1'; -RENAME USER testuser@'0:0000:0000:0:0000:FFFF:127.0.0.1' to testuser1@'0:0000:0000:0:0000:FFFF:127.0.0.1'; -SET PASSWORD FOR testuser1@'0:0000:0000:0:0000:FFFF:127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'0:0000:0000:0:0000:FFFF:127.0.0.1'; -=============Test of '0::0000:FFFF:127.0.0.1' ==== -mysqld is alive -CREATE USER testuser@'0::0000:FFFF:127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0::0000:FFFF:127.0.0.1'; -SHOW GRANTS FOR testuser@'0::0000:FFFF:127.0.0.1'; -Grants for testuser@0::0000:FFFF:127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'0::0000:FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0::0000:FFFF:127.0.0.1' -SET @nip= inet_aton('0::0000:FFFF:127.0.0.1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0::0000:FFFF:127.0.0.1'; -RENAME USER testuser@'0::0000:FFFF:127.0.0.1' to testuser1@'0::0000:FFFF:127.0.0.1'; -SET PASSWORD FOR testuser1@'0::0000:FFFF:127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'0::0000:FFFF:127.0.0.1'; -=============Test of '0:0:0:0:0:FFFF:127.0.0.1/96' ================ -=============Test of '::FFFF:127.0.0.1' =========================== -mysqld is alive -CREATE USER testuser@'::FFFF:127.0.0.1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'::FFFF:127.0.0.1'; -SHOW GRANTS FOR testuser@'::FFFF:127.0.0.1'; -Grants for testuser@::FFFF:127.0.0.1 -GRANT USAGE ON *.* TO 'testuser'@'::FFFF:127.0.0.1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'::FFFF:127.0.0.1' -SET @nip= inet_aton('::FFFF:127.0.0.1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@localhost -SELECT current_user(); -current_user() -root@localhost -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'::FFFF:127.0.0.1'; -RENAME USER testuser@'::FFFF:127.0.0.1' to testuser1@'::FFFF:127.0.0.1'; -SET PASSWORD FOR testuser1@'::FFFF:127.0.0.1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@localhost -DROP USER testuser1@'::FFFF:127.0.0.1'; -=============Test of '::FFFF:127.0.0.1/96' ======================== diff --git a/mysql-test/r/ipv6_win.result b/mysql-test/r/ipv6_win.result deleted file mode 100644 index 8082e8aa25e..00000000000 --- a/mysql-test/r/ipv6_win.result +++ /dev/null @@ -1,88 +0,0 @@ -=============Test of '::1' ======================================== -mysqld is alive -CREATE USER testuser@'::1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'::1'; -SHOW GRANTS FOR testuser@'::1'; -Grants for testuser@::1 -GRANT USAGE ON *.* TO 'testuser'@'::1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'::1' -SET @nip= inet_aton('::1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@::1 -SELECT current_user(); -current_user() -root@::1 -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'::1'; -RENAME USER testuser@'::1' to testuser1@'::1'; -SET PASSWORD FOR testuser1@'::1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@::1 -DROP USER testuser1@'::1'; -=============Test of '::1/128' ==================================== -=============Test of '0000:0000:0000:0000:0000:0000:0000:0001' ==== -mysqld is alive -CREATE USER testuser@'0000:0000:0000:0000:0000:0000:0000:0001' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0000:0000:0000:0000:0000:0000:0000:0001'; -SHOW GRANTS FOR testuser@'0000:0000:0000:0000:0000:0000:0000:0001'; -Grants for testuser@0000:0000:0000:0000:0000:0000:0000:0001 -GRANT USAGE ON *.* TO 'testuser'@'0000:0000:0000:0000:0000:0000:0000:0001' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0000:0000:0000:0000:0000:0000:0000:0001' -SET @nip= inet_aton('0000:0000:0000:0000:0000:0000:0000:0001'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@::1 -SELECT current_user(); -current_user() -root@::1 -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0000:0000:0000:0000:0000:0000:0000:0001'; -RENAME USER testuser@'0000:0000:0000:0000:0000:0000:0000:0001' to testuser1@'0000:0000:0000:0000:0000:0000:0000:0001'; -SET PASSWORD FOR testuser1@'0000:0000:0000:0000:0000:0000:0000:0001' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@::1 -DROP USER testuser1@'0000:0000:0000:0000:0000:0000:0000:0001'; -=============Test of '0:0:0:0:0:0:0:1' ============================ -mysqld is alive -CREATE USER testuser@'0:0:0:0:0:0:0:1' identified by '1234'; -GRANT ALL ON test.* TO testuser@'0:0:0:0:0:0:0:1'; -SHOW GRANTS FOR testuser@'0:0:0:0:0:0:0:1'; -Grants for testuser@0:0:0:0:0:0:0:1 -GRANT USAGE ON *.* TO 'testuser'@'0:0:0:0:0:0:0:1' IDENTIFIED BY PASSWORD '*A4B6157319038724E3560894F7F932C8886EBFCF' -GRANT ALL PRIVILEGES ON `test`.* TO 'testuser'@'0:0:0:0:0:0:0:1' -SET @nip= inet_aton('0:0:0:0:0:0:0:1'); -SELECT @nip; -@nip -NULL -SELECT inet_ntoa(@nip); -inet_ntoa(@nip) -NULL -SELECT USER(); -USER() -root@::1 -SELECT current_user(); -current_user() -root@::1 -SHOW PROCESSLIST; -REVOKE ALL ON test.* FROM testuser@'0:0:0:0:0:0:0:1'; -RENAME USER testuser@'0:0:0:0:0:0:0:1' to testuser1@'0:0:0:0:0:0:0:1'; -SET PASSWORD FOR testuser1@'0:0:0:0:0:0:0:1' = PASSWORD ('9876'); -SELECT USER(); -USER() -root@::1 -DROP USER testuser1@'0:0:0:0:0:0:0:1'; diff --git a/mysql-test/r/show_profile.result b/mysql-test/r/show_profile.result new file mode 100644 index 00000000000..67a07f6cfc9 --- /dev/null +++ b/mysql-test/r/show_profile.result @@ -0,0 +1,10 @@ +SET profiling = 1; +SELECT 1; +1 +1 +SHOW PROFILES; +Query_ID Duration Query +1 # SELECT 1 +SHOW PROFILE FOR QUERY 1; +SHOW PROFILE CPU FOR QUERY 1; +SET profiling = 0; diff --git a/mysql-test/suite/binlog/r/binlog_format_switch_in_tmp_table.result b/mysql-test/suite/binlog/r/binlog_format_switch_in_tmp_table.result new file mode 100644 index 00000000000..f886ccb134d --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_format_switch_in_tmp_table.result @@ -0,0 +1,78 @@ +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +CREATE TABLE t1 (a VARCHAR(100)); +CREATE TEMPORARY TABLE t2 (a VARCHAR(100)); +# Test allow switching @@SESSION.binlog_format from MIXED to STATEMENT +# when there are open temp tables and we are logging in statement based format. +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +STATEMENT +# Test allow switching @@SESSION.binlog_format from STATEMENT to +# STATEMENT when there are open temp tables. +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +STATEMENT +INSERT INTO t1 VALUES ('statement based'); +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +STATEMENT +# Test allow switching @@SESSION.binlog_format from STATEMENT to +# MIXED when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +# Test allow switching @@SESSION.binlog_format from MIXED to MIXED +# when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +INSERT INTO t2 VALUES (UUID()); +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +# Test forbit switching @@SESSION.binlog_format from MIXED to STATEMENT +# when there are open temp tables and we are logging in row based format. +SET SESSION binlog_format = STATEMENT; +ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +ROW +INSERT INTO t1 VALUES ('row based'); +# Test allow switching @@SESSION.binlog_format from ROW to MIXED +# when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +MIXED +INSERT INTO t1 VALUES ('row based'); +# Test allow switching @@SESSION.binlog_format from MIXED to ROW +# when there are open temp tables. +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +ROW +# Test allow switching @@SESSION.binlog_format from ROW to ROW +# when there are open temp tables. +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +ROW +INSERT INTO t1 VALUES ('row based'); +# Test forbit switching @@SESSION.binlog_format from ROW to STATEMENT +# when there are open temp tables. +SET SESSION binlog_format = STATEMENT; +ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables +SELECT @@SESSION.binlog_format; +@@SESSION.binlog_format +ROW +DROP TEMPORARY TABLE t2; +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result index b01c4b49ee2..a4db4d65b07 100644 --- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result @@ -745,8 +745,9 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=3 -master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2)) +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 3 */; count(*) @@ -762,8 +763,9 @@ count(*) show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=4 -master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3) +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 5 */; count(*) @@ -785,6 +787,10 @@ insert into t2 values (bug27417(1)); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 1 */; count(*) 1 @@ -796,6 +802,10 @@ insert into t2 select bug27417(1) union select bug27417(2); ERROR 23000: Duplicate entry '2' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 2 */; count(*) 2 @@ -807,8 +817,11 @@ ERROR 23000: Duplicate entry '4' for key 'b' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=4 -master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1) +master-bin.000001 # Table_map # # table_id: # (test.t3) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Update_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 2 */; count(*) @@ -822,6 +835,10 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */; ERROR 23000: Duplicate entry '2' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 4 */; count(*) 4 @@ -835,7 +852,7 @@ UPDATE t3,t4 SET t3.a=t4.a + bug27417(1); ERROR 23000: Duplicate entry '2' for key 'PRIMARY' select count(*) from t1 /* must be 1 */; count(*) -1 +2 drop table t4; delete from t1; delete from t2; @@ -849,6 +866,11 @@ delete from t2; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t3) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 1 */; count(*) 1 @@ -865,6 +887,10 @@ delete t2.* from t2,t5 where t2.a=t5.a + 1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 1 */; count(*) 1 @@ -882,6 +908,10 @@ count(*) 2 show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT drop trigger trg_del_t2; drop table t1,t2,t3,t4,t5; drop function bug27417; diff --git a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result index 3d71a778caf..fab65bfb973 100644 --- a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result +++ b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result @@ -520,10 +520,10 @@ end| reset master; insert into t2 values (bug27417(1)); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. insert into t2 select bug27417(2); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. reset master; insert into t2 values (bug27417(2)); ERROR 23000: Duplicate entry '2' for key 'PRIMARY' @@ -543,7 +543,7 @@ count(*) 2 delete from t2 where a=bug27417(3); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. select count(*) from t2 /* nothing got deleted */; count(*) 2 @@ -560,7 +560,7 @@ count(*) delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */; affected rows: 0 Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. select count(*) from t1 /* must be 7 */; count(*) 7 @@ -784,10 +784,10 @@ end| reset master; insert into t2 values (bug27417(1)); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. insert into t2 select bug27417(2); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. reset master; insert into t2 values (bug27417(2)); ERROR 23000: Duplicate entry '2' for key 'PRIMARY' @@ -806,7 +806,7 @@ count(*) 2 delete from t2 where a=bug27417(3); Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. select count(*) from t2 /* nothing got deleted */; count(*) 2 @@ -822,7 +822,7 @@ count(*) delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */; affected rows: 0 Warnings: -Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave. +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. select count(*) from t1 /* must be 7 */; count(*) 7 diff --git a/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result b/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result index c2445aa1d1a..e8fd7b82bc4 100644 --- a/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result +++ b/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result @@ -1,5 +1,6 @@ call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. .*"); call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave. .*"); +call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column"); ### NOT filtered database => assertion: warnings ARE shown DROP TABLE IF EXISTS t1; CREATE TABLE t1 (a int, b int, primary key (a)); @@ -50,3 +51,29 @@ SET GLOBAL log_warnings = @old_log_warnings; # Count the number of times the "Unsafe" message was printed # to the error log. Occurrences: 1 +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (a int); +CREATE TABLE t2 (a int auto_increment primary key, b int); +CREATE TRIGGER tr_bug50192 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 (b) VALUES (1); +CREATE FUNCTION sf_bug50192() RETURNS INTEGER +BEGIN +INSERT INTO t2(b) VALUES(2); +RETURN 1; +END | +INSERT INTO t1 VALUES (0); +Warnings: +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. +SHOW WARNINGS; +Level Code Message +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. +SELECT sf_bug50192(); +sf_bug50192() +1 +Warnings: +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. +SHOW WARNINGS; +Level Code Message +Note 1592 Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically. +DROP FUNCTION sf_bug50192; +DROP TRIGGER tr_bug50192; +DROP TABLE t1, t2; diff --git a/mysql-test/suite/binlog/r/binlog_stm_user_variables.result b/mysql-test/suite/binlog/r/binlog_stm_user_variables.result new file mode 100644 index 00000000000..92a74f63ad9 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_stm_user_variables.result @@ -0,0 +1,157 @@ +RESET MASTER; +SET @positive= 18446744073709551615; +SET @negative= -9223372036854775808; +CREATE TABLE t1 (`tinyint` TINYINT, +`smallint` SMALLINT, +`mediumint` MEDIUMINT, +`integer` INTEGER, +`bigint` BIGINT, +`utinyint` TINYINT UNSIGNED, +`usmallint` SMALLINT UNSIGNED, +`umediumint` MEDIUMINT UNSIGNED, +`uinteger` INTEGER UNSIGNED, +`ubigint` BIGINT UNSIGNED, +`double` DOUBLE, +`float` FLOAT, +`real` REAL(30,2), +`decimal` DECIMAL(30,2)) ENGINE = MyISAM; +### insert max unsigned +### a) declarative +INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615);; +TRUNCATE t1; +### b) user var +INSERT INTO t1 VALUES (@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive); +## assertion: checks that User_var_log_event::pack_info +## correctly displays the binlog content by taking into +## account the unsigned_flag +show binlog events from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (`tinyint` TINYINT, +`smallint` SMALLINT, +`mediumint` MEDIUMINT, +`integer` INTEGER, +`bigint` BIGINT, +`utinyint` TINYINT UNSIGNED, +`usmallint` SMALLINT UNSIGNED, +`umediumint` MEDIUMINT UNSIGNED, +`uinteger` INTEGER UNSIGNED, +`ubigint` BIGINT UNSIGNED, +`double` DOUBLE, +`float` FLOAT, +`real` REAL(30,2), +`decimal` DECIMAL(30,2)) ENGINE = MyISAM +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; TRUNCATE t1 +master-bin.000001 # Query # # BEGIN +master-bin.000001 # User var # # @`positive`=18446744073709551615 +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive) +master-bin.000001 # Query # # COMMIT +### insert min signed +### a) declarative +INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808);; +TRUNCATE t1; +### b) user var +INSERT INTO t1 VALUES (@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative); +## assertion: checks that User_var_log_event::pack_info +## correctly displays the binlog content by taking into +## account the unsigned_flag +show binlog events from <binlog_start>; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (`tinyint` TINYINT, +`smallint` SMALLINT, +`mediumint` MEDIUMINT, +`integer` INTEGER, +`bigint` BIGINT, +`utinyint` TINYINT UNSIGNED, +`usmallint` SMALLINT UNSIGNED, +`umediumint` MEDIUMINT UNSIGNED, +`uinteger` INTEGER UNSIGNED, +`ubigint` BIGINT UNSIGNED, +`double` DOUBLE, +`float` FLOAT, +`real` REAL(30,2), +`decimal` DECIMAL(30,2)) ENGINE = MyISAM +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; TRUNCATE t1 +master-bin.000001 # Query # # BEGIN +master-bin.000001 # User var # # @`positive`=18446744073709551615 +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; TRUNCATE t1 +master-bin.000001 # Query # # BEGIN +master-bin.000001 # User var # # @`negative`=-9223372036854775808 +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative) +master-bin.000001 # Query # # COMMIT +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_format_switch_in_tmp_table.test b/mysql-test/suite/binlog/t/binlog_format_switch_in_tmp_table.test new file mode 100644 index 00000000000..6868506008c --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_format_switch_in_tmp_table.test @@ -0,0 +1,76 @@ +# +# Bug #45855 row events in binlog after switch from binlog_fmt=mix to stmt with open tmp tbl +# Bug #45856 can't switch from binlog_format=row to mix with open tmp tbl +# This test verfies if the program will generate ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR +# error and forbid switching @@SESSION.binlog_format from MIXED or ROW to +# STATEMENT when there are open temp tables and we are logging in row format. +# There is no error in any other case. +# + +source include/have_binlog_format_mixed.inc; + +SELECT @@SESSION.binlog_format; +CREATE TABLE t1 (a VARCHAR(100)); +CREATE TEMPORARY TABLE t2 (a VARCHAR(100)); + +--echo # Test allow switching @@SESSION.binlog_format from MIXED to STATEMENT +--echo # when there are open temp tables and we are logging in statement based format. +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; + +--echo # Test allow switching @@SESSION.binlog_format from STATEMENT to +--echo # STATEMENT when there are open temp tables. +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; + +INSERT INTO t1 VALUES ('statement based'); +SELECT @@SESSION.binlog_format; +--echo # Test allow switching @@SESSION.binlog_format from STATEMENT to +--echo # MIXED when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; + +--echo # Test allow switching @@SESSION.binlog_format from MIXED to MIXED +--echo # when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; + +INSERT INTO t2 VALUES (UUID()); +SELECT @@SESSION.binlog_format; + +--echo # Test forbit switching @@SESSION.binlog_format from MIXED to STATEMENT +--echo # when there are open temp tables and we are logging in row based format. +--ERROR ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; + +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; + +INSERT INTO t1 VALUES ('row based'); +--echo # Test allow switching @@SESSION.binlog_format from ROW to MIXED +--echo # when there are open temp tables. +SET SESSION binlog_format = MIXED; +SELECT @@SESSION.binlog_format; + +INSERT INTO t1 VALUES ('row based'); +--echo # Test allow switching @@SESSION.binlog_format from MIXED to ROW +--echo # when there are open temp tables. +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; + +--echo # Test allow switching @@SESSION.binlog_format from ROW to ROW +--echo # when there are open temp tables. +SET SESSION binlog_format = ROW; +SELECT @@SESSION.binlog_format; + +INSERT INTO t1 VALUES ('row based'); +--echo # Test forbit switching @@SESSION.binlog_format from ROW to STATEMENT +--echo # when there are open temp tables. +--ERROR ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR +SET SESSION binlog_format = STATEMENT; +SELECT @@SESSION.binlog_format; + +DROP TEMPORARY TABLE t2; +DROP TABLE t1; + diff --git a/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test b/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test index 35235ce951a..874bb015a07 100644 --- a/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test +++ b/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test @@ -27,6 +27,7 @@ -- source include/have_binlog_format_statement.inc call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. .*"); call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement uses a system function whose value may differ on slave. .*"); +call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT. Reason for unsafeness: Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column"); -- echo ### NOT filtered database => assertion: warnings ARE shown @@ -117,3 +118,34 @@ perl; print "Occurrences: $count\n"; close(FILE); EOF + +# bug#50192: diplaying the unsafe warning comes out to the user warning stack + +-- disable_warnings +DROP TABLE IF EXISTS t1, t2; +-- enable_warnings + +CREATE TABLE t1 (a int); +CREATE TABLE t2 (a int auto_increment primary key, b int); +CREATE TRIGGER tr_bug50192 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 (b) VALUES (1); + +DELIMITER |; + +CREATE FUNCTION sf_bug50192() RETURNS INTEGER +BEGIN + INSERT INTO t2(b) VALUES(2); + RETURN 1; +END | + +DELIMITER ;| + +INSERT INTO t1 VALUES (0); +SHOW WARNINGS; +SELECT sf_bug50192(); +SHOW WARNINGS; + +# cleanup + +DROP FUNCTION sf_bug50192; +DROP TRIGGER tr_bug50192; +DROP TABLE t1, t2; diff --git a/mysql-test/suite/binlog/t/binlog_stm_user_variables.test b/mysql-test/suite/binlog/t/binlog_stm_user_variables.test new file mode 100644 index 00000000000..4bed6db6269 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_stm_user_variables.test @@ -0,0 +1,87 @@ +-- source include/have_binlog_format_statement.inc +RESET MASTER; +# +# BUG#49562: SBR out of sync when using numeric data types + user variable +# + +-- let $max_unsigned_long= 18446744073709551615 +-- let $min_signed_long= -9223372036854775808 +-- eval SET @positive= $max_unsigned_long +-- eval SET @negative= $min_signed_long + +CREATE TABLE t1 (`tinyint` TINYINT, + `smallint` SMALLINT, + `mediumint` MEDIUMINT, + `integer` INTEGER, + `bigint` BIGINT, + `utinyint` TINYINT UNSIGNED, + `usmallint` SMALLINT UNSIGNED, + `umediumint` MEDIUMINT UNSIGNED, + `uinteger` INTEGER UNSIGNED, + `ubigint` BIGINT UNSIGNED, + `double` DOUBLE, + `float` FLOAT, + `real` REAL(30,2), + `decimal` DECIMAL(30,2)) ENGINE = MyISAM; + +-- echo ### insert max unsigned +-- echo ### a) declarative +-- disable_warnings +-- eval INSERT INTO t1 VALUES ($max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long,$max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long); +-- enable_warnings +TRUNCATE t1; + +-- echo ### b) user var +-- disable_warnings +INSERT INTO t1 VALUES (@positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive); +-- enable_warnings + +-- echo ## assertion: checks that User_var_log_event::pack_info +-- echo ## correctly displays the binlog content by taking into +-- echo ## account the unsigned_flag +-- source include/show_binlog_events.inc + +-- echo ### insert min signed +-- echo ### a) declarative +-- disable_warnings +-- eval INSERT INTO t1 VALUES ($min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long,$min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long); +-- enable_warnings +TRUNCATE t1; + +-- echo ### b) user var +-- disable_warnings +INSERT INTO t1 VALUES (@negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative); +-- enable_warnings + +-- echo ## assertion: checks that User_var_log_event::pack_info +-- echo ## correctly displays the binlog content by taking into +-- echo ## account the unsigned_flag +-- source include/show_binlog_events.inc + +DROP TABLE t1; diff --git a/mysql-test/suite/parts/r/partition_innodb_status_file.result b/mysql-test/suite/parts/r/partition_innodb_status_file.result new file mode 100644 index 00000000000..29b5a3b3766 --- /dev/null +++ b/mysql-test/suite/parts/r/partition_innodb_status_file.result @@ -0,0 +1,14 @@ +CREATE TABLE t1 (a INT) ENGINE = InnoDB PARTITION BY HASH(a); +INSERT INTO t1 VALUES (0), (1), (2); +START TRANSACTION; +UPDATE t1 SET a = 5 WHERE a = 1; +# Connection con1 +# InnoDB lock timeout and monitor thread runs every 15 seconds +SET innodb_lock_wait_timeout = 20; +START TRANSACTION; +UPDATE t1 SET a = 3 WHERE a = 1; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +COMMIT; +# Connection default +COMMIT; +DROP TABLE t1; diff --git a/mysql-test/suite/parts/t/partition_innodb_status_file-master.opt b/mysql-test/suite/parts/t/partition_innodb_status_file-master.opt new file mode 100644 index 00000000000..779962e8fca --- /dev/null +++ b/mysql-test/suite/parts/t/partition_innodb_status_file-master.opt @@ -0,0 +1 @@ +--innodb-status-file=1 diff --git a/mysql-test/suite/parts/t/partition_innodb_status_file.test b/mysql-test/suite/parts/t/partition_innodb_status_file.test new file mode 100644 index 00000000000..f066ce5d485 --- /dev/null +++ b/mysql-test/suite/parts/t/partition_innodb_status_file.test @@ -0,0 +1,20 @@ +--source include/have_innodb.inc +--source include/have_partition.inc + +CREATE TABLE t1 (a INT) ENGINE = InnoDB PARTITION BY HASH(a); +INSERT INTO t1 VALUES (0), (1), (2); +START TRANSACTION; +UPDATE t1 SET a = 5 WHERE a = 1; +connect (con1, localhost, root,,); +--echo # Connection con1 +--echo # InnoDB lock timeout and monitor thread runs every 15 seconds +SET innodb_lock_wait_timeout = 20; +START TRANSACTION; +--error ER_LOCK_WAIT_TIMEOUT +UPDATE t1 SET a = 3 WHERE a = 1; +COMMIT; +disconnect con1; +connection default; +--echo # Connection default +COMMIT; +DROP TABLE t1; diff --git a/mysql-test/suite/perfschema/r/aggregate.result b/mysql-test/suite/perfschema/r/aggregate.result index 598f9297cc5..197378ca38f 100644 --- a/mysql-test/suite/perfschema/r/aggregate.result +++ b/mysql-test/suite/perfschema/r/aggregate.result @@ -16,6 +16,7 @@ b CHAR(100) DEFAULT 'initial value') ENGINE=MyISAM; insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8); update performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'; +update performance_schema.SETUP_CONSUMERS set enabled = 'NO'; set @dump_all=FALSE; "Verifying file aggregate consistency" SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ) @@ -51,14 +52,14 @@ SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT <> SUM(i.SUM_TIMER_WAIT)) +HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT)) OR @dump_all; EVENT_NAME SUM_TIMER_WAIT SUM(i.SUM_TIMER_WAIT) SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT <> MIN(i.MIN_TIMER_WAIT)) +HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT)) AND (MIN(i.MIN_TIMER_WAIT) != 0) OR @dump_all; EVENT_NAME MIN_TIMER_WAIT MIN(i.MIN_TIMER_WAIT) @@ -66,7 +67,7 @@ SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT <> MAX(i.MAX_TIMER_WAIT)) +HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT)) OR @dump_all; EVENT_NAME MAX_TIMER_WAIT MAX(i.MAX_TIMER_WAIT) "Verifying waits aggregate consistency (thread)" @@ -75,7 +76,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT <> SUM(t.SUM_TIMER_WAIT)) +HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT)) OR @dump_all; EVENT_NAME SUM_TIMER_WAIT SUM(t.SUM_TIMER_WAIT) SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT) @@ -83,7 +84,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT <> MIN(t.MIN_TIMER_WAIT)) +HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT)) AND (MIN(t.MIN_TIMER_WAIT) != 0) OR @dump_all; EVENT_NAME MIN_TIMER_WAIT MIN(t.MIN_TIMER_WAIT) @@ -92,7 +93,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT <> MAX(t.MAX_TIMER_WAIT)) +HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT)) OR @dump_all; EVENT_NAME MAX_TIMER_WAIT MAX(t.MAX_TIMER_WAIT) update performance_schema.SETUP_CONSUMERS set enabled = 'YES'; diff --git a/mysql-test/suite/perfschema/r/dml_mutex_instances.result b/mysql-test/suite/perfschema/r/dml_mutex_instances.result index 655ca811c06..862123b3450 100644 --- a/mysql-test/suite/perfschema/r/dml_mutex_instances.result +++ b/mysql-test/suite/perfschema/r/dml_mutex_instances.result @@ -1,6 +1,6 @@ select * from performance_schema.MUTEX_INSTANCES limit 1; NAME OBJECT_INSTANCE_BEGIN LOCKED_BY_THREAD_ID -# # NULL +# # # select * from performance_schema.MUTEX_INSTANCES where name='FOO'; NAME OBJECT_INSTANCE_BEGIN LOCKED_BY_THREAD_ID diff --git a/mysql-test/suite/perfschema/r/dml_rwlock_instances.result b/mysql-test/suite/perfschema/r/dml_rwlock_instances.result index 62b5fbeaa8a..686007e58e9 100644 --- a/mysql-test/suite/perfschema/r/dml_rwlock_instances.result +++ b/mysql-test/suite/perfschema/r/dml_rwlock_instances.result @@ -1,6 +1,6 @@ select * from performance_schema.RWLOCK_INSTANCES limit 1; NAME OBJECT_INSTANCE_BEGIN WRITE_LOCKED_BY_THREAD_ID READ_LOCKED_BY_COUNT -# # NULL 0 +# # # # select * from performance_schema.RWLOCK_INSTANCES where name='FOO'; NAME OBJECT_INSTANCE_BEGIN WRITE_LOCKED_BY_THREAD_ID READ_LOCKED_BY_COUNT diff --git a/mysql-test/suite/perfschema/r/dml_setup_instruments.result b/mysql-test/suite/perfschema/r/dml_setup_instruments.result index 6d6651a5e1f..be7d8825364 100644 --- a/mysql-test/suite/perfschema/r/dml_setup_instruments.result +++ b/mysql-test/suite/perfschema/r/dml_setup_instruments.result @@ -16,7 +16,8 @@ wait/synch/mutex/sql/LOCK_delayed_create YES YES wait/synch/mutex/sql/LOCK_delayed_insert YES YES select * from performance_schema.SETUP_INSTRUMENTS where name like 'Wait/Synch/Rwlock/sql/%' - order by name limit 10; + and name not in ('wait/synch/rwlock/sql/CRYPTO_dynlock_value::lock') +order by name limit 10; NAME ENABLED TIMED wait/synch/rwlock/sql/LOCK_dboptions YES YES wait/synch/rwlock/sql/LOCK_grant YES YES diff --git a/mysql-test/suite/perfschema/t/aggregate.test b/mysql-test/suite/perfschema/t/aggregate.test index 7c01bdd0a4b..0fa4651ecda 100644 --- a/mysql-test/suite/perfschema/t/aggregate.test +++ b/mysql-test/suite/perfschema/t/aggregate.test @@ -1,4 +1,4 @@ -# Copyright (C) 2009 Sun Microsystems, Inc +# Copyright (C) 2009-2010 Sun Microsystems, Inc # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -50,6 +50,8 @@ insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8); # Stop recording data, so the select below don't add noise. update performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'; +# Disable all consumers, for long standing waits +update performance_schema.SETUP_CONSUMERS set enabled = 'NO'; # Helper to debug set @dump_all=FALSE; @@ -132,14 +134,14 @@ SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT <> SUM(i.SUM_TIMER_WAIT)) +HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT)) OR @dump_all; SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT <> MIN(i.MIN_TIMER_WAIT)) +HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT)) AND (MIN(i.MIN_TIMER_WAIT) != 0) OR @dump_all; @@ -147,7 +149,7 @@ SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT) FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT <> MAX(i.MAX_TIMER_WAIT)) +HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT)) OR @dump_all; --echo "Verifying waits aggregate consistency (thread)" @@ -157,7 +159,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.SUM_TIMER_WAIT <> SUM(t.SUM_TIMER_WAIT)) +HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT)) OR @dump_all; SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT) @@ -165,7 +167,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MIN_TIMER_WAIT <> MIN(t.MIN_TIMER_WAIT)) +HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT)) AND (MIN(t.MIN_TIMER_WAIT) != 0) OR @dump_all; @@ -174,7 +176,7 @@ FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t USING (EVENT_NAME) GROUP BY EVENT_NAME -HAVING (e.MAX_TIMER_WAIT <> MAX(t.MAX_TIMER_WAIT)) +HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT)) OR @dump_all; diff --git a/mysql-test/suite/perfschema/t/dml_mutex_instances.test b/mysql-test/suite/perfschema/t/dml_mutex_instances.test index e3062c7b34c..0971c664eb8 100644 --- a/mysql-test/suite/perfschema/t/dml_mutex_instances.test +++ b/mysql-test/suite/perfschema/t/dml_mutex_instances.test @@ -18,7 +18,7 @@ --source include/not_embedded.inc --source include/have_perfschema.inc ---replace_column 1 # 2 # +--replace_column 1 # 2 # 3 # select * from performance_schema.MUTEX_INSTANCES limit 1; select * from performance_schema.MUTEX_INSTANCES diff --git a/mysql-test/suite/perfschema/t/dml_rwlock_instances.test b/mysql-test/suite/perfschema/t/dml_rwlock_instances.test index 251168237eb..33a42450681 100644 --- a/mysql-test/suite/perfschema/t/dml_rwlock_instances.test +++ b/mysql-test/suite/perfschema/t/dml_rwlock_instances.test @@ -18,7 +18,7 @@ --source include/not_embedded.inc --source include/have_perfschema.inc ---replace_column 1 # 2 # +--replace_column 1 # 2 # 3 # 4 # select * from performance_schema.RWLOCK_INSTANCES limit 1; select * from performance_schema.RWLOCK_INSTANCES diff --git a/mysql-test/suite/perfschema/t/dml_setup_instruments.test b/mysql-test/suite/perfschema/t/dml_setup_instruments.test index f737160cebd..b82cde15fb5 100644 --- a/mysql-test/suite/perfschema/t/dml_setup_instruments.test +++ b/mysql-test/suite/perfschema/t/dml_setup_instruments.test @@ -36,8 +36,11 @@ select * from performance_schema.SETUP_INSTRUMENTS and name not in ('wait/synch/mutex/sql/DEBUG_SYNC::mutex') order by name limit 10; +# CRYPTO_dynlock_value::lock is dependent on the build (SSL) + select * from performance_schema.SETUP_INSTRUMENTS where name like 'Wait/Synch/Rwlock/sql/%' + and name not in ('wait/synch/rwlock/sql/CRYPTO_dynlock_value::lock') order by name limit 10; # COND_handler_count is dependent on the build (Windows only) diff --git a/mysql-test/suite/rpl/r/rpl_do_grant.result b/mysql-test/suite/rpl/r/rpl_do_grant.result index 65c60acc651..9eecc1bab3f 100644 --- a/mysql-test/suite/rpl/r/rpl_do_grant.result +++ b/mysql-test/suite/rpl/r/rpl_do_grant.result @@ -89,6 +89,7 @@ show grants for rpl_do_grant2@localhost; ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost' show grants for rpl_do_grant2@localhost; ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost' +call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); DROP DATABASE IF EXISTS bug42217_db; CREATE DATABASE bug42217_db; GRANT CREATE ROUTINE ON bug42217_db.* TO 'create_rout_db'@'localhost' @@ -166,9 +167,12 @@ DROP FUNCTION upgrade_del_func; DROP FUNCTION upgrade_alter_func; DROP DATABASE bug42217_db; DROP USER 'create_rout_db'@'localhost'; -call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); -USE mtr; -call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; ######## BUG#49119 ####### ### i) test case from the 'how to repeat section' stop slave; diff --git a/mysql-test/suite/rpl/r/rpl_ip_mix.result b/mysql-test/suite/rpl/r/rpl_ip_mix.result index 11aa5a46cfa..ddd7a008a97 100644 --- a/mysql-test/suite/rpl/r/rpl_ip_mix.result +++ b/mysql-test/suite/rpl/r/rpl_ip_mix.result @@ -46,102 +46,6 @@ Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; disconnect master; connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:0:0:1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:FFFF:127.0.0.1 ########################### -connect (master,0:0:0:0:0:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:FFFF:127.0.0.1'; -Master-Host: 0:0:0:0:0:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 ########################### -connect (master,0000:0000:0000:0000:0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:FFFF:127.0.0.1 -change master to master_host='0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -Master-Host: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0000:0000:0:0000:FFFF:127.0.0.1 ########################### -connect (master,0:0000:0000:0:0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 -change master to master_host='0:0000:0000:0:0000:FFFF:127.0.0.1'; -Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0::0000:FFFF:127.0.0.1 ########################### -connect (master,0::0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 -change master to master_host='0::0000:FFFF:127.0.0.1'; -Master-Host: 0::0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::FFFF:127.0.0.1 ########################### -connect (master,::FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0::0000:FFFF:127.0.0.1 -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; #################### IP: ::1 mix ####################### connect (master,::1,root,,test,MASTER_MYPORT); connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); @@ -152,11 +56,11 @@ File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> connection slave; reset slave; -Master-Host: ::FFFF:127.0.0.1 +Master-Host: 0:0:0:0:0:0:0:1 change master to master_host='::1'; Master-Host: ::1 -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 +change master to master_host='127.0.0.1'; +Master-Host: 127.0.0.1 change master to master_host='0:0:0:0:0:0:0:1'; Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; diff --git a/mysql-test/suite/rpl/r/rpl_ip_mix2.result b/mysql-test/suite/rpl/r/rpl_ip_mix2.result index e5cc3e1621d..e1011bf85ee 100644 --- a/mysql-test/suite/rpl/r/rpl_ip_mix2.result +++ b/mysql-test/suite/rpl/r/rpl_ip_mix2.result @@ -14,22 +14,6 @@ Master-Host: ::1 disconnect slave; disconnect master; connection default; -#################### IP: ::1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,::1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: ::1 -change master to master_host='::1'; -Master-Host: ::1 -disconnect slave; -disconnect master; -connection default; #################### IP: 0000:0000:0000:0000:0000:0000:0000:0001 ########################### connect (master,127.0.0.1,root,,test,MASTER_MYPORT); connect (slave,0000:0000:0000:0000:0000:0000:0000:0001,root,,test,SLAVE_MYPORT); @@ -62,102 +46,6 @@ Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; disconnect master; connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:0:0:1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:FFFF:127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0:0:0:0:0:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:FFFF:127.0.0.1'; -Master-Host: 0:0:0:0:0:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0000:0000:0000:0000:0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:FFFF:127.0.0.1 -change master to master_host='0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -Master-Host: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0000:0000:0:0000:FFFF:127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0:0000:0000:0:0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 -change master to master_host='0:0000:0000:0:0000:FFFF:127.0.0.1'; -Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0::0000:FFFF:127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0::0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 -change master to master_host='0::0000:FFFF:127.0.0.1'; -Master-Host: 0::0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::FFFF:127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,::FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0::0000:FFFF:127.0.0.1 -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; #################### IP: ::1 mix ####################### connect (master,127.0.0.1,root,,test,MASTER_MYPORT); connect (slave,::1,root,,test,SLAVE_MYPORT); @@ -168,11 +56,11 @@ File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> connection slave; reset slave; -Master-Host: ::FFFF:127.0.0.1 +Master-Host: 0:0:0:0:0:0:0:1 change master to master_host='::1'; Master-Host: ::1 -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 +change master to master_host='127.0.0.1'; +Master-Host: 127.0.0.1 change master to master_host='0:0:0:0:0:0:0:1'; Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; diff --git a/mysql-test/suite/rpl/r/rpl_ip_mix2_win.result b/mysql-test/suite/rpl/r/rpl_ip_mix2_win.result deleted file mode 100644 index c7cec70ed6c..00000000000 --- a/mysql-test/suite/rpl/r/rpl_ip_mix2_win.result +++ /dev/null @@ -1,84 +0,0 @@ -#################### IP: ::1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,::1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: No such row -change master to master_host='::1'; -Master-Host: ::1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:0000:0000:0001 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0000:0000:0000:0000:0000:0000:0000:0001,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: ::1 -change master to master_host='0000:0000:0000:0000:0000:0000:0000:0001'; -Master-Host: 0000:0000:0000:0000:0000:0000:0000:0001 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:0:0:1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0:0:0:0:0:0:0:1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0000:0000:0000:0000:0000:0000:0000:0001 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:0:0:1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::1 mix ####################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,::1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='::1'; -Master-Host: ::1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; diff --git a/mysql-test/suite/rpl/r/rpl_ip_mix_win.result b/mysql-test/suite/rpl/r/rpl_ip_mix_win.result deleted file mode 100644 index a1d11e109e5..00000000000 --- a/mysql-test/suite/rpl/r/rpl_ip_mix_win.result +++ /dev/null @@ -1,84 +0,0 @@ -#################### IP: ::1 ########################### -connect (master,::1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: No such row -change master to master_host='::1'; -Master-Host: ::1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:0000:0000:0001 ########################### -connect (master,0000:0000:0000:0000:0000:0000:0000:0001,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: ::1 -change master to master_host='0000:0000:0000:0000:0000:0000:0000:0001'; -Master-Host: 0000:0000:0000:0000:0000:0000:0000:0001 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:0:0:1 ########################### -connect (master,0:0:0:0:0:0:0:1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0000:0000:0000:0000:0000:0000:0000:0001 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 0:0:0:0:0:0:0:1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::1 mix ####################### -connect (master,::1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='::1'; -Master-Host: ::1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; diff --git a/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6.result b/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6.result index 4168cff1e97..0393cfa483c 100644 --- a/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6.result +++ b/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6.result @@ -88,7 +88,7 @@ Master-Host: ::FFFF:127.0.0.1 disconnect slave; disconnect master; connection default; -#################### IP: ::1 ########################### +#################### IP: ::FFFF:127.0.0.1 ########################### connect (master,127.0.0.1,root,,test,MASTER_MYPORT); connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); connection master; @@ -99,12 +99,12 @@ master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> connection slave; reset slave; Master-Host: ::FFFF:127.0.0.1 -change master to master_host='::1'; -Master-Host: ::1 change master to master_host='::FFFF:127.0.0.1'; Master-Host: ::FFFF:127.0.0.1 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 +change master to master_host='127.0.0.1'; +Master-Host: 127.0.0.1 +change master to master_host='0:0000:0000:0:0000:FFFF:127.0.0.1'; +Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 disconnect slave; disconnect master; connection default; diff --git a/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6_win.result b/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6_win.result deleted file mode 100644 index a1e48ea6610..00000000000 --- a/mysql-test/suite/rpl/r/rpl_ipv4_as_ipv6_win.result +++ /dev/null @@ -1,35 +0,0 @@ -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='::1'; -Master-Host: ::1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; diff --git a/mysql-test/suite/rpl/r/rpl_ipv6.result b/mysql-test/suite/rpl/r/rpl_ipv6.result index f46e60548a6..6ae946d197b 100644 --- a/mysql-test/suite/rpl/r/rpl_ipv6.result +++ b/mysql-test/suite/rpl/r/rpl_ipv6.result @@ -43,96 +43,6 @@ Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; disconnect master; connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:FFFF:127.0.0.1 ########################### -connect (master,0:0:0:0:0:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0:0:0:0:0:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0:0:0:0:0:FFFF:127.0.0.1'; -Master-Host: 0:0:0:0:0:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 ########################### -connect (master,0000:0000:0000:0000:0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0000:0000:0000:0000:0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0000:0000:0000:0000:0000:FFFF:127.0.0.1'; -Master-Host: 0000:0000:0000:0000:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0000:0000:0:0000:FFFF:127.0.0.1 ########################### -connect (master,0:0000:0000:0:0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0:0000:0000:0:0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0:0000:0000:0:0000:FFFF:127.0.0.1'; -Master-Host: 0:0000:0000:0:0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0::0000:FFFF:127.0.0.1 ########################### -connect (master,0::0000:FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,0::0000:FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0::0000:FFFF:127.0.0.1'; -Master-Host: 0::0000:FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::FFFF:127.0.0.1 ########################### -connect (master,::FFFF:127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,::FFFF:127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 -disconnect slave; -disconnect master; -connection default; #################### IP: ::1 mix ####################### connect (master,127.0.0.1,root,,test,MASTER_MYPORT); connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); @@ -143,11 +53,11 @@ File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> connection slave; reset slave; -Master-Host: ::FFFF:127.0.0.1 +Master-Host: 0:0:0:0:0:0:0:1 change master to master_host='::1'; Master-Host: ::1 -change master to master_host='::FFFF:127.0.0.1'; -Master-Host: ::FFFF:127.0.0.1 +change master to master_host='127.0.0.1'; +Master-Host: 127.0.0.1 change master to master_host='0:0:0:0:0:0:0:1'; Master-Host: 0:0:0:0:0:0:0:1 disconnect slave; diff --git a/mysql-test/suite/rpl/r/rpl_ipv6_win.result b/mysql-test/suite/rpl/r/rpl_ipv6_win.result deleted file mode 100644 index 79dc8422161..00000000000 --- a/mysql-test/suite/rpl/r/rpl_ipv6_win.result +++ /dev/null @@ -1,80 +0,0 @@ -#################### IP: ::1 ########################### -connect (master,::1,root,,test,MASTER_MYPORT); -connect (slave,::1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='::1'; -Master-Host: ::1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0000:0000:0000:0000:0000:0000:0000:0001 ########################### -connect (master,0000:0000:0000:0000:0000:0000:0000:0001,root,,test,MASTER_MYPORT); -connect (slave,0000:0000:0000:0000:0000:0000:0000:0001,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0000:0000:0000:0000:0000:0000:0000:0001'; -Master-Host: 0000:0000:0000:0000:0000:0000:0000:0001 -disconnect slave; -disconnect master; -connection default; -#################### IP: 0:0:0:0:0:0:0:1 ########################### -connect (master,0:0:0:0:0:0:0:1,root,,test,MASTER_MYPORT); -connect (slave,0:0:0:0:0:0:0:1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; -#################### IP: 127.0.0.1 ########################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -disconnect slave; -disconnect master; -connection default; -#################### IP: ::1 mix ####################### -connect (master,127.0.0.1,root,,test,MASTER_MYPORT); -connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT); -connection master; -reset master; -show master status; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB> -connection slave; -reset slave; -Master-Host: 127.0.0.1 -change master to master_host='::1'; -Master-Host: ::1 -change master to master_host='127.0.0.1'; -Master-Host: 127.0.0.1 -change master to master_host='0:0:0:0:0:0:0:1'; -Master-Host: 0:0:0:0:0:0:0:1 -disconnect slave; -disconnect master; -connection default; diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync.result b/mysql-test/suite/rpl/r/rpl_semi_sync.result index 1e220b28d78..74eb14d33e0 100644 --- a/mysql-test/suite/rpl/r/rpl_semi_sync.result +++ b/mysql-test/suite/rpl/r/rpl_semi_sync.result @@ -120,8 +120,27 @@ min(a) select max(a) from t1; max(a) 300 + +# BUG#50157 +# semi-sync replication crashes when replicating a transaction which +# include 'CREATE TEMPORARY TABLE `MyISAM_t` SELECT * FROM `Innodb_t` ; +[ on master ] +SET SESSION AUTOCOMMIT= 0; +CREATE TABLE t2(c1 INT) ENGINE=innodb; +BEGIN; + +# Even though it is in a transaction, this statement is binlogged into binlog +# file immediately. +CREATE TEMPORARY TABLE t3 SELECT c1 FROM t2 where 1=1; + +# These statements will not be binlogged until the transaction is committed +INSERT INTO t2 VALUES(11); +INSERT INTO t2 VALUES(22); +COMMIT; +DROP TABLE t2, t3; +SET SESSION AUTOCOMMIT= 1; # -# Test semi-sync master will switch OFF after one transacton +# Test semi-sync master will switch OFF after one transaction # timeout waiting for slave reply. # include/stop_slave.inc @@ -135,7 +154,7 @@ Variable_name Value Rpl_semi_sync_master_no_tx 0 show status like 'Rpl_semi_sync_master_yes_tx'; Variable_name Value -Rpl_semi_sync_master_yes_tx 301 +Rpl_semi_sync_master_yes_tx 304 show status like 'Rpl_semi_sync_master_clients'; Variable_name Value Rpl_semi_sync_master_clients 1 @@ -150,7 +169,7 @@ Variable_name Value Rpl_semi_sync_master_no_tx 1 show status like 'Rpl_semi_sync_master_yes_tx'; Variable_name Value -Rpl_semi_sync_master_yes_tx 301 +Rpl_semi_sync_master_yes_tx 304 insert into t1 values (100); [ master status should be OFF ] show status like 'Rpl_semi_sync_master_status'; @@ -161,7 +180,7 @@ Variable_name Value Rpl_semi_sync_master_no_tx 302 show status like 'Rpl_semi_sync_master_yes_tx'; Variable_name Value -Rpl_semi_sync_master_yes_tx 301 +Rpl_semi_sync_master_yes_tx 304 # # Test semi-sync status on master will be ON again when slave catches up # @@ -194,7 +213,7 @@ Variable_name Value Rpl_semi_sync_master_no_tx 302 show status like 'Rpl_semi_sync_master_yes_tx'; Variable_name Value -Rpl_semi_sync_master_yes_tx 301 +Rpl_semi_sync_master_yes_tx 304 show status like 'Rpl_semi_sync_master_clients'; Variable_name Value Rpl_semi_sync_master_clients 1 @@ -213,7 +232,7 @@ Variable_name Value Rpl_semi_sync_master_no_tx 302 SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx'; Variable_name Value -Rpl_semi_sync_master_yes_tx 302 +Rpl_semi_sync_master_yes_tx 305 FLUSH NO_WRITE_TO_BINLOG STATUS; [ Semi-sync master status variables after FLUSH STATUS ] SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx'; diff --git a/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result b/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result index 880fc9e8569..85fbcb69760 100644 --- a/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result +++ b/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result @@ -10,47 +10,7 @@ insert into t1(b) values (1); insert into t1(b) values (2); load data infile '../../std_data/rpl_loaddata.dat' into table t1; commit; -show slave status; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User root -Master_Port MASTER_MYPORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running Yes -Slave_SQL_Running No -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 9 -Last_Error Error in Begin_load_query event: write to '../../tmp/SQL_LOAD.data' failed -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master # -Master_SSL_Verify_Server_Cert No -Last_IO_Errno # -Last_IO_Error # -Last_SQL_Errno 9 -Last_SQL_Error Error in Begin_load_query event: write to '../../tmp/SQL_LOAD.data' failed -Replicate_Ignore_Server_Ids -Master_Server_Id 1 drop table t1; drop table t1; -call mtr.add_suppression("Slave: Error writing file 'UNKNOWN' .Errcode: 9. Error_code: 3"); +call mtr.add_suppression("Slave: Can't get stat of .*"); +call mtr.add_suppression("Slave: File.* not found.*"); diff --git a/mysql-test/suite/rpl/r/rpl_slave_skip.result b/mysql-test/suite/rpl/r/rpl_slave_skip.result index 963b4d471dd..24000df40d2 100644 --- a/mysql-test/suite/rpl/r/rpl_slave_skip.result +++ b/mysql-test/suite/rpl/r/rpl_slave_skip.result @@ -118,7 +118,7 @@ Master_User root Master_Port MASTER_PORT Connect_Retry 1 Master_Log_File master-bin.000001 -Read_Master_Log_Pos 386 +Read_Master_Log_Pos 387 Relay_Log_File # Relay_Log_Pos # Relay_Master_Log_File master-bin.000001 @@ -133,7 +133,7 @@ Replicate_Wild_Ignore_Table Last_Errno 0 Last_Error Skip_Counter 0 -Exec_Master_Log_Pos 386 +Exec_Master_Log_Pos 387 Relay_Log_Space # Until_Condition None Until_Log_File diff --git a/mysql-test/suite/rpl/r/rpl_stm_user_variables.result b/mysql-test/suite/rpl/r/rpl_stm_user_variables.result new file mode 100644 index 00000000000..5e758fc02f3 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_stm_user_variables.result @@ -0,0 +1,208 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +SET @positive= 18446744073709551615; +SET @negative= -9223372036854775808; +CREATE TABLE t1 (`tinyint` TINYINT, +`smallint` SMALLINT, +`mediumint` MEDIUMINT, +`integer` INTEGER, +`bigint` BIGINT, +`utinyint` TINYINT UNSIGNED, +`usmallint` SMALLINT UNSIGNED, +`umediumint` MEDIUMINT UNSIGNED, +`uinteger` INTEGER UNSIGNED, +`ubigint` BIGINT UNSIGNED, +`double` DOUBLE, +`float` FLOAT, +`real` REAL(30,2), +`decimal` DECIMAL(30,2)) ENGINE = MyISAM; +### insert max unsigned +### a) declarative +INSERT INTO t1 VALUES (18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615,18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615, 18446744073709551615);; +######################################### +#### [ on master ] +SELECT * FROM t1; +tinyint 127 +smallint 32767 +mediumint 8388607 +integer 2147483647 +bigint 9223372036854775807 +utinyint 255 +usmallint 65535 +umediumint 16777215 +uinteger 4294967295 +ubigint 18446744073709551615 +double 1.8446744073709552e19 +float 1.84467e19 +real 18446744073709552000.00 +decimal 18446744073709551615.00 +#### [ on slave ] +SELECT * FROM t1; +tinyint 127 +smallint 32767 +mediumint 8388607 +integer 2147483647 +bigint 9223372036854775807 +utinyint 255 +usmallint 65535 +umediumint 16777215 +uinteger 4294967295 +ubigint 18446744073709551615 +double 1.8446744073709552e19 +float 1.84467e19 +real 18446744073709552000.00 +decimal 18446744073709551615.00 +######################################### +## assertion: master and slave tables are in sync +Comparing tables master:test.t1 and slave:test.t1 +TRUNCATE t1; +### b) user var +INSERT INTO t1 VALUES (@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive, +@positive); +######################################### +#### [ on master ] +SELECT * FROM t1; +tinyint 127 +smallint 32767 +mediumint 8388607 +integer 2147483647 +bigint 9223372036854775807 +utinyint 255 +usmallint 65535 +umediumint 16777215 +uinteger 4294967295 +ubigint 18446744073709551615 +double 1.8446744073709552e19 +float 1.84467e19 +real 18446744073709552000.00 +decimal 18446744073709551615.00 +#### [ on slave ] +SELECT * FROM t1; +tinyint 127 +smallint 32767 +mediumint 8388607 +integer 2147483647 +bigint 9223372036854775807 +utinyint 255 +usmallint 65535 +umediumint 16777215 +uinteger 4294967295 +ubigint 18446744073709551615 +double 1.8446744073709552e19 +float 1.84467e19 +real 18446744073709552000.00 +decimal 18446744073709551615.00 +######################################### +## assertion: master and slave tables are in sync +Comparing tables master:test.t1 and slave:test.t1 +TRUNCATE t1; +### insert min signed +### a) declarative +INSERT INTO t1 VALUES (-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808,-9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808, -9223372036854775808);; +######################################### +#### [ on master ] +SELECT * FROM t1; +tinyint -128 +smallint -32768 +mediumint -8388608 +integer -2147483648 +bigint -9223372036854775808 +utinyint 0 +usmallint 0 +umediumint 0 +uinteger 0 +ubigint 0 +double -9.223372036854776e18 +float -9.22337e18 +real -9223372036854776000.00 +decimal -9223372036854775808.00 +#### [ on slave ] +SELECT * FROM t1; +tinyint -128 +smallint -32768 +mediumint -8388608 +integer -2147483648 +bigint -9223372036854775808 +utinyint 0 +usmallint 0 +umediumint 0 +uinteger 0 +ubigint 0 +double -9.223372036854776e18 +float -9.22337e18 +real -9223372036854776000.00 +decimal -9223372036854775808.00 +######################################### +## assertion: master and slave tables are in sync +Comparing tables master:test.t1 and slave:test.t1 +TRUNCATE t1; +### b) user var +INSERT INTO t1 VALUES (@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative, +@negative); +######################################### +#### [ on master ] +SELECT * FROM t1; +tinyint -128 +smallint -32768 +mediumint -8388608 +integer -2147483648 +bigint -9223372036854775808 +utinyint 0 +usmallint 0 +umediumint 0 +uinteger 0 +ubigint 0 +double -9.223372036854776e18 +float -9.22337e18 +real -9223372036854776000.00 +decimal -9223372036854775808.00 +#### [ on slave ] +SELECT * FROM t1; +tinyint -128 +smallint -32768 +mediumint -8388608 +integer -2147483648 +bigint -9223372036854775808 +utinyint 0 +usmallint 0 +umediumint 0 +uinteger 0 +ubigint 0 +double -9.223372036854776e18 +float -9.22337e18 +real -9223372036854776000.00 +decimal -9223372036854775808.00 +######################################### +## assertion: master and slave tables are in sync +Comparing tables master:test.t1 and slave:test.t1 +TRUNCATE t1; +## check: contents of both tables master's and slave's +DROP TABLE t1; diff --git a/mysql-test/suite/rpl/t/rpl_do_grant.test b/mysql-test/suite/rpl/t/rpl_do_grant.test index f43ac3cf340..e3d7784429e 100644 --- a/mysql-test/suite/rpl/t/rpl_do_grant.test +++ b/mysql-test/suite/rpl/t/rpl_do_grant.test @@ -112,6 +112,9 @@ show grants for rpl_do_grant2@localhost; # BUG42217 mysql.procs_priv does not get replicated ##################################################### connection master; +call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); +sync_slave_with_master; +connection master; --disable_warnings DROP DATABASE IF EXISTS bug42217_db; @@ -201,12 +204,19 @@ USE bug42217_db; DROP FUNCTION upgrade_del_func; DROP FUNCTION upgrade_alter_func; DROP DATABASE bug42217_db; +-- sync_slave_with_master +-- connection master + +# user was already dropped in the slave before +# so no need to wait for the slave to replicate +# this statement (if it did and we later synced +# the slave it would end up in an error anyway) DROP USER 'create_rout_db'@'localhost'; -call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); -connection slave; -USE mtr; -call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396"); +# finish entire clean up (remove binlogs) +# so that we leave a pristine environment for the +# following tests +-- source include/master-slave-reset.inc # BUG#49119: Master crashes when executing 'REVOKE ... ON # {PROCEDURE|FUNCTION} FROM ...' diff --git a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test index fca8646dd05..838938388db 100644 --- a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test +++ b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test @@ -382,7 +382,7 @@ let $slave_param_comparison= =; let $rcvd_heartbeats_before= query_get_value(SHOW STATUS LIKE 'slave_received_heartbeats', Value, 1); # Flush logs every 0.1 second during 5 sec --disable_query_log -let $i=50; +let $i=100; while ($i) { FLUSH LOGS; dec $i; diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix.test b/mysql-test/suite/rpl/t/rpl_ip_mix.test index 68aa2fc87a9..0852b3f4ff7 100644 --- a/mysql-test/suite/rpl/t/rpl_ip_mix.test +++ b/mysql-test/suite/rpl/t/rpl_ip_mix.test @@ -7,8 +7,6 @@ # (see corresponding cnf file) # --source include/check_ipv6.inc -# Can't be tested with windows due to mixed format like 0::0000:FFFF:127.0.0.1 ---source include/not_windows.inc --source include/have_log_bin.inc let $IPv6= ::1; @@ -27,38 +25,6 @@ let $IPv6= 0:0:0:0:0:0:0:1; --echo #################### IP: $IPv6 ########################### --source include/rpl_ip_mix.inc -let $IPv6= 127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -let $IPv6= 0000:0000:0000:0000:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -let $IPv6= 0:0000:0000:0:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -let $IPv6= 0::0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -#let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ip_mix.inc - -let $IPv6= ::FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix.inc - -#let $IPv6= ::FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ip_mix.inc - let $IPv6= ::1; --echo #################### IP: $IPv6 mix ####################### --echo connect (master,$IPv6,root,,test,MASTER_MYPORT); @@ -78,7 +44,7 @@ let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); eval change master to master_host='$IPv6'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host -eval change master to master_host='::FFFF:127.0.0.1'; +eval change master to master_host='127.0.0.1'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host eval change master to master_host='0:0:0:0:0:0:0:1'; diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix2.test b/mysql-test/suite/rpl/t/rpl_ip_mix2.test index d6435d710c1..11c648dece5 100644 --- a/mysql-test/suite/rpl/t/rpl_ip_mix2.test +++ b/mysql-test/suite/rpl/t/rpl_ip_mix2.test @@ -19,17 +19,11 @@ disconnect checkcon123456789; --enable_abort_on_error --enable_query_log # end check - -# Can't be tested with windows due to mixed format like 0::0000:FFFF:127.0.0.1 ---source include/not_windows.inc --source include/have_log_bin.inc let $IPv6= ::1; --echo #################### IP: $IPv6 ########################### --source include/rpl_ip_mix2.inc -let $IPv6= ::1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc let $IPv6= ::1/128; #--echo #################### IP: $IPv6 ########################### @@ -43,38 +37,6 @@ let $IPv6= 0:0:0:0:0:0:0:1; --echo #################### IP: $IPv6 ########################### --source include/rpl_ip_mix2.inc -let $IPv6= 127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -let $IPv6= 0000:0000:0000:0000:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -let $IPv6= 0:0000:0000:0:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -let $IPv6= 0::0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -#let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ip_mix2.inc - -let $IPv6= ::FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ip_mix2.inc - -#let $IPv6= ::FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ip_mix2.inc - let $IPv6= ::1; --echo #################### IP: $IPv6 mix ####################### --echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT); @@ -94,7 +56,7 @@ let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); eval change master to master_host='$IPv6'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host -eval change master to master_host='::FFFF:127.0.0.1'; +eval change master to master_host='127.0.0.1'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host eval change master to master_host='0:0:0:0:0:0:0:1'; diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix2_win.cnf b/mysql-test/suite/rpl/t/rpl_ip_mix2_win.cnf deleted file mode 100644 index 306df437bcc..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ip_mix2_win.cnf +++ /dev/null @@ -1,56 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf -!include include/default_client.cnf - -[mysqld.1] - -# Run the master.sh script before starting this process -#!run-master-sh - -log-bin= master-bin - -loose-innodb - -skip-name-resolve -bind-address= 0.0.0.0 - - -[mysqld.2] -# Run the slave.sh script before starting this process -#!run-slave-sh - -# Append <testname>-slave.opt file to the list of argument used when -# starting the mysqld -#!use-slave-opt - -log-bin= slave-bin -relay-log= slave-relay-bin - -init-rpl-role= slave -log-slave-updates -master-retry-count= 10 - -# Values reported by slave when it connect to master -# and shows up in SHOW SLAVE STATUS; -report-host= localhost -report-port= @mysqld.2.port -report-user= root - -skip-slave-start -skip-name-resolve -bind-address= :: - -# Directory where slaves find the dumps generated by "load data" -# on the server. The path need to have constant length otherwise -# test results will vary, thus a relative path is used. -slave-load-tmpdir= ../../tmp - -loose-innodb - -[ENV] -MASTER_MYPORT= @mysqld.1.port -MASTER_MYSOCK= @mysqld.1.socket - -SLAVE_MYPORT= @mysqld.2.port -SLAVE_MYSOCK= @mysqld.2.socket - diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix2_win.test b/mysql-test/suite/rpl/t/rpl_ip_mix2_win.test deleted file mode 100644 index f9a2022ddd4..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ip_mix2_win.test +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems
-# All rights reserved. Use is subject to license terms.
-# Author: Horst Hunger
-# Nov. 19, 2009
-# Test of ipv6 format, especially "change master host=..."
-# Options: --skip-name-resolve, master: --bind-address=0.0.0.0, slave: --bind-address=::
-# (see corresponding cnf file)
-#
-# Check if ipv6 is available. If not, server is crashing (see BUG#48915).
---disable_query_log
---disable_abort_on_error
-connect (checkcon123456789,::1,root,,test,$SLAVE_MYPORT);
-if($mysql_errno)
-{
-skip wrong IP for slave;
-}
-connection default;
-disconnect checkcon123456789;
---enable_abort_on_error
---enable_query_log
-# end check
-
-# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1
---source include/windows.inc
---source include/have_log_bin.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix2.inc
-
-let $IPv6= ::1/128;
-#--echo #################### IP: $IPv6 ###########################
-#--source include/rpl_ip_mix2.inc
-
-let $IPv6= 0000:0000:0000:0000:0000:0000:0000:0001;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix2.inc
-
-let $IPv6= 0:0:0:0:0:0:0:1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix2.inc
-
-let $IPv6= 127.0.0.1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix2.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 mix #######################
---echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT);
-connect (master,127.0.0.1,root,,test,$MASTER_MYPORT);
---echo connect (slave,$IPv6,root,,test,SLAVE_MYPORT);
-connect (slave,$IPv6,root,,test,$SLAVE_MYPORT);
---echo connection master;
-connection master;
-reset master;
-source include/show_master_status.inc;
-save_master_pos;
---echo connection slave;
-connection slave;
-reset slave;
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='$IPv6';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='127.0.0.1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='0:0:0:0:0:0:0:1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
---echo disconnect slave;
-disconnect slave;
---echo disconnect master;
-disconnect master;
---echo connection default;
-connection default;
---exit
diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix_win.cnf b/mysql-test/suite/rpl/t/rpl_ip_mix_win.cnf deleted file mode 100644 index 00e2637d822..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ip_mix_win.cnf +++ /dev/null @@ -1,56 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf -!include include/default_client.cnf - -[mysqld.1] - -# Run the master.sh script before starting this process -#!run-master-sh - -log-bin= master-bin - -loose-innodb - -skip-name-resolve -bind-address= :: - - -[mysqld.2] -# Run the slave.sh script before starting this process -#!run-slave-sh - -# Append <testname>-slave.opt file to the list of argument used when -# starting the mysqld -#!use-slave-opt - -log-bin= slave-bin -relay-log= slave-relay-bin - -init-rpl-role= slave -log-slave-updates -master-retry-count= 10 - -# Values reported by slave when it connect to master -# and shows up in SHOW SLAVE STATUS; -report-host= localhost -report-port= @mysqld.2.port -report-user= root - -skip-slave-start -skip-name-resolve -bind-address= 0.0.0.0 - -# Directory where slaves find the dumps generated by "load data" -# on the server. The path need to have constant length otherwise -# test results will vary, thus a relative path is used. -slave-load-tmpdir= ../../tmp - -loose-innodb - -[ENV] -MASTER_MYPORT= @mysqld.1.port -MASTER_MYSOCK= @mysqld.1.socket - -SLAVE_MYPORT= @mysqld.2.port -SLAVE_MYSOCK= @mysqld.2.socket - diff --git a/mysql-test/suite/rpl/t/rpl_ip_mix_win.test b/mysql-test/suite/rpl/t/rpl_ip_mix_win.test deleted file mode 100644 index 7d78f71bd1b..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ip_mix_win.test +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems
-# All rights reserved. Use is subject to license terms.
-# Author: Horst Hunger
-# Nov. 19, 2009
-# Test of ipv6 format, especially "change master host=..."
-# Options: --skip-name-resolve, master: --bind-address=::, slave: --bind-address=0.0.0.0
-# (see corresponding cnf file)
-#
---source include/check_ipv6.inc
-# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1
---source include/windows.inc
---source include/have_log_bin.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix.inc
-
-let $IPv6= ::1/128;
-#--echo #################### IP: $IPv6 ###########################
-#--source include/rpl_ip_mix.inc
-
-let $IPv6= 0000:0000:0000:0000:0000:0000:0000:0001;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix.inc
-
-let $IPv6= 0:0:0:0:0:0:0:1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix.inc
-
-let $IPv6= 127.0.0.1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ip_mix.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 mix #######################
---echo connect (master,$IPv6,root,,test,MASTER_MYPORT);
-connect (master,$IPv6,root,,test,$MASTER_MYPORT);
---echo connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT);
-connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT);
---echo connection master;
-connection master;
-reset master;
-source include/show_master_status.inc;
-save_master_pos;
---echo connection slave;
-connection slave;
-reset slave;
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='$IPv6';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='127.0.0.1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='0:0:0:0:0:0:0:1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
---echo disconnect slave;
-disconnect slave;
---echo disconnect master;
-disconnect master;
---echo connection default;
-connection default;
---exit
diff --git a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6.test b/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6.test index f4e5ad6af7b..ecd5a754fdc 100644 --- a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6.test +++ b/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6.test @@ -6,22 +6,7 @@ # Options: --skip-name-resolve, --bind-address=0.0.0.0 (see corresponding cnf file) # for master and slave # -# Check if ipv4 is available. ---disable_query_log ---disable_abort_on_error -connect (checkcon123456789,127.0.0.1,root,,test); -if($mysql_errno) -{ -skip wrong IP; -} -connection default; -disconnect checkcon123456789; ---enable_abort_on_error ---enable_query_log -# end check - -# Can't be tested with windows due to mixed format like 0::0000:FFFF:127.0.0.1 ---source include/not_windows.inc +--source include/have_ipv4_mapped.inc --source include/have_log_bin.inc let $IPv6= 127.0.0.1; @@ -56,7 +41,7 @@ let $IPv6= ::FFFF:127.0.0.1; #--echo #################### IP: $IPv6 ########################### #--source include/rpl_ipv6.inc -let $IPv6= ::1; +let $IPv6= ::FFFF:127.0.0.1; --echo #################### IP: $IPv6 ########################### --echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT); connect (master,127.0.0.1,root,,test,$MASTER_MYPORT); @@ -75,10 +60,10 @@ let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); eval change master to master_host='$IPv6'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host -eval change master to master_host='::FFFF:127.0.0.1'; +eval change master to master_host='127.0.0.1'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host -eval change master to master_host='0:0:0:0:0:0:0:1'; +eval change master to master_host='0:0000:0000:0:0000:FFFF:127.0.0.1'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host --echo disconnect slave; diff --git a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.cnf b/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.cnf deleted file mode 100644 index b646a4088ff..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.cnf +++ /dev/null @@ -1,56 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf -!include include/default_client.cnf - -[mysqld.1] - -# Run the master.sh script before starting this process -#!run-master-sh - -log-bin= master-bin - -loose-innodb - -skip-name-resolve -bind-address= 0.0.0.0 - - -[mysqld.2] -# Run the slave.sh script before starting this process -#!run-slave-sh - -# Append <testname>-slave.opt file to the list of argument used when -# starting the mysqld -#!use-slave-opt - -log-bin= slave-bin -relay-log= slave-relay-bin - -init-rpl-role= slave -log-slave-updates -master-retry-count= 10 - -# Values reported by slave when it connect to master -# and shows up in SHOW SLAVE STATUS; -report-host= localhost -report-port= @mysqld.2.port -report-user= root - -skip-slave-start -skip-name-resolve -bind-address= 0.0.0.0 - -# Directory where slaves find the dumps generated by "load data" -# on the server. The path need to have constant length otherwise -# test results will vary, thus a relative path is used. -slave-load-tmpdir= ../../tmp - -loose-innodb - -[ENV] -MASTER_MYPORT= @mysqld.1.port -MASTER_MYSOCK= @mysqld.1.socket - -SLAVE_MYPORT= @mysqld.2.port -SLAVE_MYSOCK= @mysqld.2.socket - diff --git a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.test b/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.test deleted file mode 100644 index db786536c2d..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ipv4_as_ipv6_win.test +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems
-# All rights reserved. Use is subject to license terms.
-# Author: Horst Hunger
-# Nov. 19, 2009
-# Test of ipv4 (127.0.0.1) in ipv6 format, especially "change master host=..."
-# Options: --skip-name-resolve, --bind-address=0.0.0.0 (see corresponding cnf file)
-# for master and slave
-#
-# Check if ipv4 is available.
---disable_query_log
---disable_abort_on_error
-connect (checkcon123456789,127.0.0.1,root,,test);
-if($mysql_errno)
-{
-skip wrong IP;
-}
-connection default;
-disconnect checkcon123456789;
---enable_abort_on_error
---enable_query_log
-# end check
-
-# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1
---source include/windows.inc
---source include/have_log_bin.inc
-
-let $IPv6= 127.0.0.1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ipv6.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 ###########################
---echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT);
-connect (master,127.0.0.1,root,,test,$MASTER_MYPORT);
---echo connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT);
-connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT);
---echo connection master;
-connection master;
-reset master;
-source include/show_master_status.inc;
-save_master_pos;
---echo connection slave;
-connection slave;
-reset slave;
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='$IPv6';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='127.0.0.1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='0:0:0:0:0:0:0:1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
---echo disconnect slave;
-disconnect slave;
---echo disconnect master;
-disconnect master;
---echo connection default;
-connection default;
---exit
-
diff --git a/mysql-test/suite/rpl/t/rpl_ipv6.test b/mysql-test/suite/rpl/t/rpl_ipv6.test index 71fedcb4208..3eceedfd7a4 100644 --- a/mysql-test/suite/rpl/t/rpl_ipv6.test +++ b/mysql-test/suite/rpl/t/rpl_ipv6.test @@ -27,38 +27,6 @@ let $IPv6= 0:0:0:0:0:0:0:1; --echo #################### IP: $IPv6 ########################### --source include/rpl_ipv6.inc -let $IPv6= 127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -let $IPv6= 0000:0000:0000:0000:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -let $IPv6= 0:0000:0000:0:0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -let $IPv6= 0::0000:FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -#let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ipv6.inc - -let $IPv6= ::FFFF:127.0.0.1; ---echo #################### IP: $IPv6 ########################### ---source include/rpl_ipv6.inc - -#let $IPv6= ::FFFF:127.0.0.1/96; -#--echo #################### IP: $IPv6 ########################### -#--source include/rpl_ipv6.inc - let $IPv6= ::1; --echo #################### IP: $IPv6 mix ####################### --echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT); @@ -78,7 +46,7 @@ let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); eval change master to master_host='$IPv6'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host -eval change master to master_host='::FFFF:127.0.0.1'; +eval change master to master_host='127.0.0.1'; let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1); --echo Master-Host: $master_host eval change master to master_host='0:0:0:0:0:0:0:1'; diff --git a/mysql-test/suite/rpl/t/rpl_ipv6_win.cnf b/mysql-test/suite/rpl/t/rpl_ipv6_win.cnf deleted file mode 100644 index c657e7c5115..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ipv6_win.cnf +++ /dev/null @@ -1,56 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf -!include include/default_client.cnf - -[mysqld.1] - -# Run the master.sh script before starting this process -#!run-master-sh - -log-bin= master-bin - -loose-innodb - -skip-name-resolve -bind-address= :: - - -[mysqld.2] -# Run the slave.sh script before starting this process -#!run-slave-sh - -# Append <testname>-slave.opt file to the list of argument used when -# starting the mysqld -#!use-slave-opt - -log-bin= slave-bin -relay-log= slave-relay-bin - -init-rpl-role= slave -log-slave-updates -master-retry-count= 10 - -# Values reported by slave when it connect to master -# and shows up in SHOW SLAVE STATUS; -report-host= localhost -report-port= @mysqld.2.port -report-user= root - -skip-slave-start -skip-name-resolve -bind-address= :: - -# Directory where slaves find the dumps generated by "load data" -# on the server. The path need to have constant length otherwise -# test results will vary, thus a relative path is used. -slave-load-tmpdir= ../../tmp - -loose-innodb - -[ENV] -MASTER_MYPORT= @mysqld.1.port -MASTER_MYSOCK= @mysqld.1.socket - -SLAVE_MYPORT= @mysqld.2.port -SLAVE_MYSOCK= @mysqld.2.socket - diff --git a/mysql-test/suite/rpl/t/rpl_ipv6_win.test b/mysql-test/suite/rpl/t/rpl_ipv6_win.test deleted file mode 100644 index 7c9d437541a..00000000000 --- a/mysql-test/suite/rpl/t/rpl_ipv6_win.test +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems
-# All rights reserved. Use is subject to license terms.
-# Author: Horst Hunger
-# Nov. 19, 2009
-# Test of ipv6 format, especially "change master host=..."
-# Options: --skip-name-resolve, --bind-address=:: (see corresponding cnf file)
-# for master and slave.
-#
---source include/check_ipv6.inc
-# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1
---source include/windows.inc
---source include/have_log_bin.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ipv6.inc
-
-let $IPv6= ::1/128;
-#--echo #################### IP: $IPv6 ###########################
-#--source include/rpl_ipv6.inc
-
-let $IPv6= 0000:0000:0000:0000:0000:0000:0000:0001;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ipv6.inc
-
-let $IPv6= 0:0:0:0:0:0:0:1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ipv6.inc
-
-let $IPv6= 127.0.0.1;
---echo #################### IP: $IPv6 ###########################
---source include/rpl_ipv6.inc
-
-let $IPv6= ::1;
---echo #################### IP: $IPv6 mix #######################
---echo connect (master,127.0.0.1,root,,test,MASTER_MYPORT);
-connect (master,127.0.0.1,root,,test,$MASTER_MYPORT);
---echo connect (slave,127.0.0.1,root,,test,SLAVE_MYPORT);
-connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT);
---echo connection master;
-connection master;
-reset master;
-source include/show_master_status.inc;
-save_master_pos;
---echo connection slave;
-connection slave;
-reset slave;
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='$IPv6';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='127.0.0.1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
-eval change master to master_host='0:0:0:0:0:0:0:1';
-let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
---echo Master-Host: $master_host
---echo disconnect slave;
-disconnect slave;
---echo disconnect master;
-disconnect master;
---echo connection default;
-connection default;
---exit
diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync.test b/mysql-test/suite/rpl/t/rpl_semi_sync.test index 4900acc1e91..b04541aba21 100644 --- a/mysql-test/suite/rpl/t/rpl_semi_sync.test +++ b/mysql-test/suite/rpl/t/rpl_semi_sync.test @@ -11,6 +11,7 @@ disable_query_log; connection master; call mtr.add_suppression("Timeout waiting for reply of binlog"); call mtr.add_suppression("Read semi-sync reply"); +call mtr.add_suppression("Unsafe statement binlogged in statement format since BINLOG_FORMAT = STATEMENT."); connection slave; call mtr.add_suppression("Master server does not support semi-sync"); call mtr.add_suppression("Semi-sync slave .* reply"); @@ -193,8 +194,38 @@ select count(distinct a) from t1; select min(a) from t1; select max(a) from t1; +--echo +--echo # BUG#50157 +--echo # semi-sync replication crashes when replicating a transaction which +--echo # include 'CREATE TEMPORARY TABLE `MyISAM_t` SELECT * FROM `Innodb_t` ; + +connection master; +echo [ on master ]; +SET SESSION AUTOCOMMIT= 0; +CREATE TABLE t2(c1 INT) ENGINE=innodb; +sync_slave_with_master; + +connection master; +BEGIN; +--echo +--echo # Even though it is in a transaction, this statement is binlogged into binlog +--echo # file immediately. +--disable_warnings +CREATE TEMPORARY TABLE t3 SELECT c1 FROM t2 where 1=1; +--enable_warnings +--echo +--echo # These statements will not be binlogged until the transaction is committed +INSERT INTO t2 VALUES(11); +INSERT INTO t2 VALUES(22); +COMMIT; + +DROP TABLE t2, t3; +SET SESSION AUTOCOMMIT= 1; +sync_slave_with_master; + + --echo # ---echo # Test semi-sync master will switch OFF after one transacton +--echo # Test semi-sync master will switch OFF after one transaction --echo # timeout waiting for slave reply. --echo # connection slave; diff --git a/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test b/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test index 437e1ebb92d..b85ed18ab51 100644 --- a/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test +++ b/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test @@ -33,10 +33,17 @@ commit; connection slave; source include/wait_for_slave_sql_to_stop.inc; ---replace_result $MASTER_MYPORT MASTER_MYPORT ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 # ---replace_regex /SQL_LOAD-[0-9]-[0-9]-[0-9]*/SQL_LOAD/ -query_vertical show slave status; +--let $error= query_get_value(SHOW SLAVE STATUS, Last_Errno, 1) +# windows and linux different error numbers here: +# Windows: +# - Last_Errno 29 (File not found) +# Unix like OS: +# - Last_Errno 13 (Can't stat file) +--let $assertion= `SELECT $error=29 OR $error=13` +if (!$assertion) +{ + --echo UNEXPECTED ERROR NUMBER: $error +} ########################################################################## # Clean up @@ -49,4 +56,5 @@ connection slave; drop table t1; -call mtr.add_suppression("Slave: Error writing file 'UNKNOWN' .Errcode: 9. Error_code: 3"); +call mtr.add_suppression("Slave: Can't get stat of .*"); +call mtr.add_suppression("Slave: File.* not found.*"); diff --git a/mysql-test/suite/rpl/t/rpl_stm_user_variables.test b/mysql-test/suite/rpl/t/rpl_stm_user_variables.test new file mode 100644 index 00000000000..c58acdcb084 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_stm_user_variables.test @@ -0,0 +1,141 @@ +# +# BUG#49562: SBR out of sync when using numeric data types + user variable +# + +-- source include/master-slave.inc +-- source include/have_binlog_format_statement.inc + +## Setup user variables for several numeric types, so that we get +## coverage on the User_var_log_event different val types + +-- let $max_unsigned_long= 18446744073709551615 +-- let $min_signed_long= -9223372036854775808 +-- eval SET @positive= $max_unsigned_long +-- eval SET @negative= $min_signed_long + +CREATE TABLE t1 (`tinyint` TINYINT, + `smallint` SMALLINT, + `mediumint` MEDIUMINT, + `integer` INTEGER, + `bigint` BIGINT, + `utinyint` TINYINT UNSIGNED, + `usmallint` SMALLINT UNSIGNED, + `umediumint` MEDIUMINT UNSIGNED, + `uinteger` INTEGER UNSIGNED, + `ubigint` BIGINT UNSIGNED, + `double` DOUBLE, + `float` FLOAT, + `real` REAL(30,2), + `decimal` DECIMAL(30,2)) ENGINE = MyISAM; + +-- disable_warnings + +-- echo ### insert max unsigned +-- echo ### a) declarative +-- eval INSERT INTO t1 VALUES ($max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long,$max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long, $max_unsigned_long); + +-- echo ######################################### +-- echo #### [ on master ] +-- query_vertical SELECT * FROM t1 +-- sync_slave_with_master +-- echo #### [ on slave ] +-- query_vertical SELECT * FROM t1 +-- echo ######################################### +-- connection master +-- echo ## assertion: master and slave tables are in sync +-- let $diff_table_1=master:test.t1 +-- let $diff_table_2=slave:test.t1 +-- source include/diff_tables.inc +-- connection master +TRUNCATE t1; + +-- echo ### b) user var +INSERT INTO t1 VALUES (@positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive, + @positive); + +-- echo ######################################### +-- echo #### [ on master ] +-- query_vertical SELECT * FROM t1 +-- sync_slave_with_master +-- echo #### [ on slave ] +-- query_vertical SELECT * FROM t1 +-- echo ######################################### +-- connection master +-- echo ## assertion: master and slave tables are in sync +-- let $diff_table_1=master:test.t1 +-- let $diff_table_2=slave:test.t1 +-- source include/diff_tables.inc +-- connection master +TRUNCATE t1; + + +-- echo ### insert min signed +-- echo ### a) declarative +-- eval INSERT INTO t1 VALUES ($min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long,$min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long, $min_signed_long); + +-- echo ######################################### +-- echo #### [ on master ] +-- query_vertical SELECT * FROM t1 +-- sync_slave_with_master +-- echo #### [ on slave ] +-- query_vertical SELECT * FROM t1 +-- echo ######################################### +-- connection master +-- echo ## assertion: master and slave tables are in sync +-- let $diff_table_1=master:test.t1 +-- let $diff_table_2=slave:test.t1 +-- source include/diff_tables.inc +-- connection master +TRUNCATE t1; + +-- echo ### b) user var +INSERT INTO t1 VALUES (@negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative, + @negative); + +-- echo ######################################### +-- echo #### [ on master ] +-- query_vertical SELECT * FROM t1 +-- sync_slave_with_master +-- echo #### [ on slave ] +-- query_vertical SELECT * FROM t1 +-- echo ######################################### +-- connection master + +-- echo ## assertion: master and slave tables are in sync +-- let $diff_table_1=master:test.t1 +-- let $diff_table_2=slave:test.t1 +-- source include/diff_tables.inc +-- connection master +TRUNCATE t1; + +-- echo ## check: contents of both tables master's and slave's +-- enable_warnings + +## cleanup +-- connection master +DROP TABLE t1; +-- sync_slave_with_master diff --git a/mysql-test/suite/rpl/t/rpl_sync.test b/mysql-test/suite/rpl/t/rpl_sync.test index 80b6a144187..48c8dc02efb 100644 --- a/mysql-test/suite/rpl/t/rpl_sync.test +++ b/mysql-test/suite/rpl/t/rpl_sync.test @@ -64,8 +64,15 @@ stop slave IO_THREAD; source include/wait_for_slave_io_to_stop.inc; let $file= query_get_value("SHOW SLAVE STATUS", Relay_Log_File, 1); ---replace_result $MYSQLD_SLAVE_DATADIR MYSQLD_SLAVE_DATADIR ---exec echo "failure" > $MYSQLD_SLAVE_DATADIR/$file + +--let FILE_TO_CORRUPT= $MYSQLD_SLAVE_DATADIR/$file +perl; +$file= $ENV{'FILE_TO_CORRUPT'}; +open(FILE, ">$file") || die "Unable to open $file."; +truncate(FILE,0); +print FILE "failure"; +close ($file); +EOF --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect SET SESSION debug="d,crash_before_rotate_relaylog"; @@ -102,9 +109,6 @@ insert into t1(a) values(8); insert into t1(a) values(9); connection slave; ---replace_result $MYSQLD_SLAVE_DATADIR MYSQLD_SLAVE_DATADIR ---exec cat $MYSQLD_SLAVE_DATADIR/master.backup > $MYSQLD_SLAVE_DATADIR/master.info - let MYSQLD_SLAVE_DATADIR=`select @@datadir`; --perl diff --git a/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test index 56924a2efe9..b3efb578b68 100644 --- a/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test +++ b/mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test @@ -10,4 +10,5 @@ source include/have_binlog_format_row.inc; LET $ENGINE_TYPE= MyISAM; source extra/rpl_tests/rpl_tmp_table_and_DDL.test; +sync_slave_with_master; diff --git a/mysql-test/suite/sys_vars/r/delayed_insert_limit_func.result b/mysql-test/suite/sys_vars/r/delayed_insert_limit_func.result index 0f1a16a6911..eeb7a28c816 100644 --- a/mysql-test/suite/sys_vars/r/delayed_insert_limit_func.result +++ b/mysql-test/suite/sys_vars/r/delayed_insert_limit_func.result @@ -103,19 +103,19 @@ INSERT DELAYED INTO t1 VALUES('21'); INSERT DELAYED INTO t1 VALUES('22');| ** Connection con0 ** Asynchronous execute -SELECT COUNT(*) = 22 FROM t1; +SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1; ** Connection default ** ** Wait till con0 is blocked ** UNLOCK TABLES; ** Connection con1 ** ** Connection con0 ** Asynchronous "reap" result -COUNT(*) = 22 +COUNT(*) BETWEEN 6 AND 22 1 ** Connection default** Checking if the delayed insert gives the same result afterwards -SELECT COUNT(*) = 22 FROM t1; -COUNT(*) = 22 +SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1; +COUNT(*) BETWEEN 6 AND 22 1 ** Connection default** DROP TABLE t1; diff --git a/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_basic.result b/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_basic.result new file mode 100644 index 00000000000..418a693d319 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_basic.result @@ -0,0 +1,92 @@ +SET @start_global_value = @@global.innodb_adaptive_flushing; +SELECT @start_global_value; +@start_global_value +1 +Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_flushing in (0, 1); +@@global.innodb_adaptive_flushing in (0, 1) +1 +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +1 +select @@session.innodb_adaptive_flushing; +ERROR HY000: Variable 'innodb_adaptive_flushing' is a GLOBAL variable +show global variables like 'innodb_adaptive_flushing'; +Variable_name Value +innodb_adaptive_flushing ON +show session variables like 'innodb_adaptive_flushing'; +Variable_name Value +innodb_adaptive_flushing ON +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +set global innodb_adaptive_flushing='OFF'; +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +0 +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING OFF +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING OFF +set @@global.innodb_adaptive_flushing=1; +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +set global innodb_adaptive_flushing=0; +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +0 +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING OFF +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING OFF +set @@global.innodb_adaptive_flushing='ON'; +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +set session innodb_adaptive_flushing='OFF'; +ERROR HY000: Variable 'innodb_adaptive_flushing' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_adaptive_flushing='ON'; +ERROR HY000: Variable 'innodb_adaptive_flushing' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_adaptive_flushing=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing' +set global innodb_adaptive_flushing=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing' +set global innodb_adaptive_flushing=2; +ERROR 42000: Variable 'innodb_adaptive_flushing' can't be set to the value of '2' +NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_adaptive_flushing=-3; +select @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_FLUSHING ON +set global innodb_adaptive_flushing='AUTO'; +ERROR 42000: Variable 'innodb_adaptive_flushing' can't be set to the value of 'AUTO' +SET @@global.innodb_adaptive_flushing = @start_global_value; +SELECT @@global.innodb_adaptive_flushing; +@@global.innodb_adaptive_flushing +1 diff --git a/mysql-test/suite/sys_vars/r/innodb_adaptive_hash_index_basic.result b/mysql-test/suite/sys_vars/r/innodb_adaptive_hash_index_basic.result new file mode 100644 index 00000000000..bc908090627 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_adaptive_hash_index_basic.result @@ -0,0 +1,92 @@ +SET @start_global_value = @@global.innodb_adaptive_hash_index; +SELECT @start_global_value; +@start_global_value +1 +Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_hash_index in (0, 1); +@@global.innodb_adaptive_hash_index in (0, 1) +1 +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +1 +select @@session.innodb_adaptive_hash_index; +ERROR HY000: Variable 'innodb_adaptive_hash_index' is a GLOBAL variable +show global variables like 'innodb_adaptive_hash_index'; +Variable_name Value +innodb_adaptive_hash_index ON +show session variables like 'innodb_adaptive_hash_index'; +Variable_name Value +innodb_adaptive_hash_index ON +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +set global innodb_adaptive_hash_index='OFF'; +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +0 +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX OFF +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX OFF +set @@global.innodb_adaptive_hash_index=1; +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +set global innodb_adaptive_hash_index=0; +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +0 +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX OFF +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX OFF +set @@global.innodb_adaptive_hash_index='ON'; +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +set session innodb_adaptive_hash_index='OFF'; +ERROR HY000: Variable 'innodb_adaptive_hash_index' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_adaptive_hash_index='ON'; +ERROR HY000: Variable 'innodb_adaptive_hash_index' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_adaptive_hash_index=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_hash_index' +set global innodb_adaptive_hash_index=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_hash_index' +set global innodb_adaptive_hash_index=2; +ERROR 42000: Variable 'innodb_adaptive_hash_index' can't be set to the value of '2' +NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_adaptive_hash_index=-3; +select @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +1 +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_ADAPTIVE_HASH_INDEX ON +set global innodb_adaptive_hash_index='AUTO'; +ERROR 42000: Variable 'innodb_adaptive_hash_index' can't be set to the value of 'AUTO' +SET @@global.innodb_adaptive_hash_index = @start_global_value; +SELECT @@global.innodb_adaptive_hash_index; +@@global.innodb_adaptive_hash_index +1 diff --git a/mysql-test/suite/sys_vars/r/innodb_change_buffering_basic.result b/mysql-test/suite/sys_vars/r/innodb_change_buffering_basic.result new file mode 100644 index 00000000000..70b0425ce6f --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_change_buffering_basic.result @@ -0,0 +1,63 @@ +SET @start_global_value = @@global.innodb_change_buffering; +SELECT @start_global_value; +@start_global_value +inserts +Valid values are 'inserts' and 'none' +select @@global.innodb_change_buffering in ('inserts', 'none'); +@@global.innodb_change_buffering in ('inserts', 'none') +1 +select @@global.innodb_change_buffering; +@@global.innodb_change_buffering +inserts +select @@session.innodb_change_buffering; +ERROR HY000: Variable 'innodb_change_buffering' is a GLOBAL variable +show global variables like 'innodb_change_buffering'; +Variable_name Value +innodb_change_buffering inserts +show session variables like 'innodb_change_buffering'; +Variable_name Value +innodb_change_buffering inserts +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING inserts +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING inserts +set global innodb_change_buffering='none'; +select @@global.innodb_change_buffering; +@@global.innodb_change_buffering +none +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING none +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING none +set @@global.innodb_change_buffering='inserts'; +select @@global.innodb_change_buffering; +@@global.innodb_change_buffering +inserts +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING inserts +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_CHANGE_BUFFERING inserts +set session innodb_change_buffering='some'; +ERROR HY000: Variable 'innodb_change_buffering' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_change_buffering='some'; +ERROR HY000: Variable 'innodb_change_buffering' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_change_buffering=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering' +set global innodb_change_buffering=1; +ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering' +set global innodb_change_buffering=-2; +ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering' +set global innodb_change_buffering=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_change_buffering' +set global innodb_change_buffering='some'; +ERROR 42000: Variable 'innodb_change_buffering' can't be set to the value of 'some' +SET @@global.innodb_change_buffering = @start_global_value; +SELECT @@global.innodb_change_buffering; +@@global.innodb_change_buffering +inserts diff --git a/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result b/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result new file mode 100644 index 00000000000..58e009ea705 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result @@ -0,0 +1,59 @@ +SET @start_global_value = @@global.innodb_file_format; +SELECT @start_global_value; +@start_global_value +Antelope +Valid values are 'Antelope' and 'Barracuda' +select @@global.innodb_file_format in ('Antelope', 'Barracuda'); +@@global.innodb_file_format in ('Antelope', 'Barracuda') +1 +select @@global.innodb_file_format; +@@global.innodb_file_format +Antelope +select @@session.innodb_file_format; +ERROR HY000: Variable 'innodb_file_format' is a GLOBAL variable +show global variables like 'innodb_file_format'; +Variable_name Value +innodb_file_format Antelope +show session variables like 'innodb_file_format'; +Variable_name Value +innodb_file_format Antelope +select * from information_schema.global_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Antelope +select * from information_schema.session_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Antelope +set global innodb_file_format='Antelope'; +select @@global.innodb_file_format; +@@global.innodb_file_format +Antelope +select * from information_schema.global_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Antelope +select * from information_schema.session_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Antelope +set @@global.innodb_file_format='Barracuda'; +select @@global.innodb_file_format; +@@global.innodb_file_format +Barracuda +select * from information_schema.global_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Barracuda +select * from information_schema.session_variables where variable_name='innodb_file_format'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT Barracuda +set session innodb_file_format='Salmon'; +ERROR HY000: Variable 'innodb_file_format' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_file_format='Salmon'; +ERROR HY000: Variable 'innodb_file_format' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_file_format=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_file_format' +set global innodb_file_format=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_file_format' +set global innodb_file_format='Salmon'; +ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'Salmon' +SET @@global.innodb_file_format = @start_global_value; +SELECT @@global.innodb_file_format; +@@global.innodb_file_format +Antelope diff --git a/mysql-test/suite/sys_vars/r/innodb_file_format_check_basic.result b/mysql-test/suite/sys_vars/r/innodb_file_format_check_basic.result new file mode 100644 index 00000000000..29be30cf096 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_file_format_check_basic.result @@ -0,0 +1,59 @@ +SET @start_global_value = @@global.innodb_file_format_check; +SELECT @start_global_value; +@start_global_value +Antelope +Valid values are 'Antelope' and 'Barracuda' +select @@global.innodb_file_format_check in ('Antelope', 'Barracuda'); +@@global.innodb_file_format_check in ('Antelope', 'Barracuda') +1 +select @@global.innodb_file_format_check; +@@global.innodb_file_format_check +Antelope +select @@session.innodb_file_format_check; +ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable +show global variables like 'innodb_file_format_check'; +Variable_name Value +innodb_file_format_check Antelope +show session variables like 'innodb_file_format_check'; +Variable_name Value +innodb_file_format_check Antelope +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Antelope +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Antelope +set global innodb_file_format_check='Antelope'; +select @@global.innodb_file_format_check; +@@global.innodb_file_format_check +Antelope +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Antelope +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Antelope +set @@global.innodb_file_format_check='Barracuda'; +select @@global.innodb_file_format_check; +@@global.innodb_file_format_check +Barracuda +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Barracuda +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_FILE_FORMAT_CHECK Barracuda +set session innodb_file_format_check='Salmon'; +ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_file_format_check='Salmon'; +ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_file_format_check=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check' +set global innodb_file_format_check=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check' +set global innodb_file_format_check='Salmon'; +ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'Salmon' +SET @@global.innodb_file_format_check = @start_global_value; +SELECT @@global.innodb_file_format_check; +@@global.innodb_file_format_check +Antelope diff --git a/mysql-test/suite/sys_vars/r/innodb_io_capacity_basic.result b/mysql-test/suite/sys_vars/r/innodb_io_capacity_basic.result new file mode 100644 index 00000000000..25058bc6f09 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_io_capacity_basic.result @@ -0,0 +1,69 @@ +SET @start_global_value = @@global.innodb_io_capacity; +SELECT @start_global_value; +@start_global_value +200 +Valid value 100 or more +select @@global.innodb_io_capacity > 99; +@@global.innodb_io_capacity > 99 +1 +select @@global.innodb_io_capacity; +@@global.innodb_io_capacity +200 +select @@session.innodb_io_capacity; +ERROR HY000: Variable 'innodb_io_capacity' is a GLOBAL variable +show global variables like 'innodb_io_capacity'; +Variable_name Value +innodb_io_capacity 200 +show session variables like 'innodb_io_capacity'; +Variable_name Value +innodb_io_capacity 200 +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 200 +select * from information_schema.session_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 200 +set global innodb_io_capacity=123; +select @@global.innodb_io_capacity; +@@global.innodb_io_capacity +123 +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 123 +select * from information_schema.session_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 123 +set session innodb_io_capacity=444; +ERROR HY000: Variable 'innodb_io_capacity' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_io_capacity=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_io_capacity' +set global innodb_io_capacity=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_io_capacity' +set global innodb_io_capacity="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_io_capacity' +set global innodb_io_capacity=7; +Warnings: +Warning 1292 Truncated incorrect innodb_io_capacity value: '7' +select @@global.innodb_io_capacity; +@@global.innodb_io_capacity +100 +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 100 +set global innodb_io_capacity=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_io_capacity value: '-7' +select @@global.innodb_io_capacity; +@@global.innodb_io_capacity +100 +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IO_CAPACITY 100 +set global innodb_io_capacity=100; +select @@global.innodb_io_capacity; +@@global.innodb_io_capacity +100 +SET @@global.innodb_io_capacity = @start_global_value; +SELECT @@global.innodb_io_capacity; +@@global.innodb_io_capacity +200 diff --git a/mysql-test/suite/sys_vars/r/innodb_old_blocks_pct_basic.result b/mysql-test/suite/sys_vars/r/innodb_old_blocks_pct_basic.result new file mode 100644 index 00000000000..bbcc2dabb22 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_old_blocks_pct_basic.result @@ -0,0 +1,82 @@ +SET @start_global_value = @@global.innodb_old_blocks_pct; +SELECT @start_global_value; +@start_global_value +37 +Valid values are between 5 and 95 +select @@global.innodb_old_blocks_pct between 5 and 95; +@@global.innodb_old_blocks_pct between 5 and 95 +1 +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +37 +select @@session.innodb_old_blocks_pct; +ERROR HY000: Variable 'innodb_old_blocks_pct' is a GLOBAL variable +show global variables like 'innodb_old_blocks_pct'; +Variable_name Value +innodb_old_blocks_pct 37 +show session variables like 'innodb_old_blocks_pct'; +Variable_name Value +innodb_old_blocks_pct 37 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 37 +select * from information_schema.session_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 37 +set global innodb_old_blocks_pct=10; +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +10 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 10 +select * from information_schema.session_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 10 +set session innodb_old_blocks_pct=1; +ERROR HY000: Variable 'innodb_old_blocks_pct' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_old_blocks_pct=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_pct' +set global innodb_old_blocks_pct=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_pct' +set global innodb_old_blocks_pct="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_pct' +set global innodb_old_blocks_pct=4; +Warnings: +Warning 1292 Truncated incorrect innodb_old_blocks_pct value: '4' +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +5 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 5 +set global innodb_old_blocks_pct=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_old_blocks_pct value: '-7' +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +5 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 5 +set global innodb_old_blocks_pct=96; +Warnings: +Warning 1292 Truncated incorrect innodb_old_blocks_pct value: '96' +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +95 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_PCT 95 +set global innodb_old_blocks_pct=5; +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +5 +set global innodb_old_blocks_pct=95; +select @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +95 +SET @@global.innodb_old_blocks_pct = @start_global_value; +SELECT @@global.innodb_old_blocks_pct; +@@global.innodb_old_blocks_pct +37 diff --git a/mysql-test/suite/sys_vars/r/innodb_old_blocks_time_basic.result b/mysql-test/suite/sys_vars/r/innodb_old_blocks_time_basic.result new file mode 100644 index 00000000000..a285cc14a01 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_old_blocks_time_basic.result @@ -0,0 +1,56 @@ +SET @start_global_value = @@global.innodb_old_blocks_time; +SELECT @start_global_value; +@start_global_value +0 +Valid values are zero or above +select @@global.innodb_old_blocks_time >=0; +@@global.innodb_old_blocks_time >=0 +1 +select @@global.innodb_old_blocks_time; +@@global.innodb_old_blocks_time +0 +select @@session.innodb_old_blocks_time; +ERROR HY000: Variable 'innodb_old_blocks_time' is a GLOBAL variable +show global variables like 'innodb_old_blocks_time'; +Variable_name Value +innodb_old_blocks_time 0 +show session variables like 'innodb_old_blocks_time'; +Variable_name Value +innodb_old_blocks_time 0 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_TIME 0 +select * from information_schema.session_variables where variable_name='innodb_old_blocks_time'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_TIME 0 +set global innodb_old_blocks_time=10; +select @@global.innodb_old_blocks_time; +@@global.innodb_old_blocks_time +10 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_TIME 10 +select * from information_schema.session_variables where variable_name='innodb_old_blocks_time'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_TIME 10 +set session innodb_old_blocks_time=1; +ERROR HY000: Variable 'innodb_old_blocks_time' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_old_blocks_time=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_time' +set global innodb_old_blocks_time=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_time' +set global innodb_old_blocks_time="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_old_blocks_time' +set global innodb_old_blocks_time=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_old_blocks_time value: '-7' +select @@global.innodb_old_blocks_time; +@@global.innodb_old_blocks_time +0 +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_OLD_BLOCKS_TIME 0 +SET @@global.innodb_old_blocks_time = @start_global_value; +SELECT @@global.innodb_old_blocks_time; +@@global.innodb_old_blocks_time +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_read_ahead_threshold_basic.result b/mysql-test/suite/sys_vars/r/innodb_read_ahead_threshold_basic.result new file mode 100644 index 00000000000..65a1a8e319f --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_read_ahead_threshold_basic.result @@ -0,0 +1,73 @@ +SET @start_global_value = @@global.innodb_read_ahead_threshold; +SELECT @start_global_value; +@start_global_value +56 +Valid values are between 0 and 64 +select @@global.innodb_read_ahead_threshold between 0 and 64; +@@global.innodb_read_ahead_threshold between 0 and 64 +1 +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +56 +select @@session.innodb_read_ahead_threshold; +ERROR HY000: Variable 'innodb_read_ahead_threshold' is a GLOBAL variable +show global variables like 'innodb_read_ahead_threshold'; +Variable_name Value +innodb_read_ahead_threshold 56 +show session variables like 'innodb_read_ahead_threshold'; +Variable_name Value +innodb_read_ahead_threshold 56 +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 56 +select * from information_schema.session_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 56 +set global innodb_read_ahead_threshold=10; +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +10 +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 10 +select * from information_schema.session_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 10 +set session innodb_read_ahead_threshold=1; +ERROR HY000: Variable 'innodb_read_ahead_threshold' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_read_ahead_threshold=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_read_ahead_threshold' +set global innodb_read_ahead_threshold=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_read_ahead_threshold' +set global innodb_read_ahead_threshold="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_read_ahead_threshold' +set global innodb_read_ahead_threshold=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_read_ahead_threshold value: '-7' +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +0 +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 0 +set global innodb_read_ahead_threshold=96; +Warnings: +Warning 1292 Truncated incorrect innodb_read_ahead_threshold value: '96' +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +64 +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_AHEAD_THRESHOLD 64 +set global innodb_read_ahead_threshold=0; +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +0 +set global innodb_read_ahead_threshold=64; +select @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +64 +SET @@global.innodb_read_ahead_threshold = @start_global_value; +SELECT @@global.innodb_read_ahead_threshold; +@@global.innodb_read_ahead_threshold +56 diff --git a/mysql-test/suite/sys_vars/r/innodb_read_io_threads_basic.result b/mysql-test/suite/sys_vars/r/innodb_read_io_threads_basic.result new file mode 100644 index 00000000000..f43fa81c0d0 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_read_io_threads_basic.result @@ -0,0 +1,21 @@ +select @@global.innodb_read_io_threads; +@@global.innodb_read_io_threads +2 +select @@session.innodb_read_io_threads; +ERROR HY000: Variable 'innodb_read_io_threads' is a GLOBAL variable +show global variables like 'innodb_read_io_threads'; +Variable_name Value +innodb_read_io_threads 2 +show session variables like 'innodb_read_io_threads'; +Variable_name Value +innodb_read_io_threads 2 +select * from information_schema.global_variables where variable_name='innodb_read_io_threads'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_IO_THREADS 2 +select * from information_schema.session_variables where variable_name='innodb_read_io_threads'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_READ_IO_THREADS 2 +set global innodb_read_io_threads=1; +ERROR HY000: Variable 'innodb_read_io_threads' is a read only variable +set session innodb_read_io_threads=1; +ERROR HY000: Variable 'innodb_read_io_threads' is a read only variable diff --git a/mysql-test/suite/sys_vars/r/innodb_replication_delay_basic.result b/mysql-test/suite/sys_vars/r/innodb_replication_delay_basic.result new file mode 100644 index 00000000000..fa00baa218e --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_replication_delay_basic.result @@ -0,0 +1,56 @@ +SET @start_global_value = @@global.innodb_replication_delay; +SELECT @start_global_value; +@start_global_value +0 +Valid values are zero or above +select @@global.innodb_replication_delay >=0; +@@global.innodb_replication_delay >=0 +1 +select @@global.innodb_replication_delay; +@@global.innodb_replication_delay +0 +select @@session.innodb_replication_delay; +ERROR HY000: Variable 'innodb_replication_delay' is a GLOBAL variable +show global variables like 'innodb_replication_delay'; +Variable_name Value +innodb_replication_delay 0 +show session variables like 'innodb_replication_delay'; +Variable_name Value +innodb_replication_delay 0 +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_REPLICATION_DELAY 0 +select * from information_schema.session_variables where variable_name='innodb_replication_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_REPLICATION_DELAY 0 +set global innodb_replication_delay=10; +select @@global.innodb_replication_delay; +@@global.innodb_replication_delay +10 +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_REPLICATION_DELAY 10 +select * from information_schema.session_variables where variable_name='innodb_replication_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_REPLICATION_DELAY 10 +set session innodb_replication_delay=1; +ERROR HY000: Variable 'innodb_replication_delay' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_replication_delay=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_replication_delay' +set global innodb_replication_delay=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_replication_delay' +set global innodb_replication_delay="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_replication_delay' +set global innodb_replication_delay=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_replication_delay value: '-7' +select @@global.innodb_replication_delay; +@@global.innodb_replication_delay +0 +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_REPLICATION_DELAY 0 +SET @@global.innodb_replication_delay = @start_global_value; +SELECT @@global.innodb_replication_delay; +@@global.innodb_replication_delay +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_spin_wait_delay_basic.result b/mysql-test/suite/sys_vars/r/innodb_spin_wait_delay_basic.result new file mode 100644 index 00000000000..05672cbb966 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_spin_wait_delay_basic.result @@ -0,0 +1,56 @@ +SET @start_global_value = @@global.innodb_spin_wait_delay; +SELECT @start_global_value; +@start_global_value +6 +Valid values are zero or above +select @@global.innodb_spin_wait_delay >=0; +@@global.innodb_spin_wait_delay >=0 +1 +select @@global.innodb_spin_wait_delay; +@@global.innodb_spin_wait_delay +6 +select @@session.innodb_spin_wait_delay; +ERROR HY000: Variable 'innodb_spin_wait_delay' is a GLOBAL variable +show global variables like 'innodb_spin_wait_delay'; +Variable_name Value +innodb_spin_wait_delay 6 +show session variables like 'innodb_spin_wait_delay'; +Variable_name Value +innodb_spin_wait_delay 6 +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_SPIN_WAIT_DELAY 6 +select * from information_schema.session_variables where variable_name='innodb_spin_wait_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_SPIN_WAIT_DELAY 6 +set global innodb_spin_wait_delay=10; +select @@global.innodb_spin_wait_delay; +@@global.innodb_spin_wait_delay +10 +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_SPIN_WAIT_DELAY 10 +select * from information_schema.session_variables where variable_name='innodb_spin_wait_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_SPIN_WAIT_DELAY 10 +set session innodb_spin_wait_delay=1; +ERROR HY000: Variable 'innodb_spin_wait_delay' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_spin_wait_delay=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_spin_wait_delay' +set global innodb_spin_wait_delay=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_spin_wait_delay' +set global innodb_spin_wait_delay="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_spin_wait_delay' +set global innodb_spin_wait_delay=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_spin_wait_delay value: '-7' +select @@global.innodb_spin_wait_delay; +@@global.innodb_spin_wait_delay +0 +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_SPIN_WAIT_DELAY 0 +SET @@global.innodb_spin_wait_delay = @start_global_value; +SELECT @@global.innodb_spin_wait_delay; +@@global.innodb_spin_wait_delay +6 diff --git a/mysql-test/suite/sys_vars/r/innodb_stats_on_metadata_basic.result b/mysql-test/suite/sys_vars/r/innodb_stats_on_metadata_basic.result new file mode 100644 index 00000000000..d3410d7b9c1 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_stats_on_metadata_basic.result @@ -0,0 +1,92 @@ +SET @start_global_value = @@global.innodb_stats_on_metadata; +SELECT @start_global_value; +@start_global_value +1 +Valid values are 'ON' and 'OFF' +select @@global.innodb_stats_on_metadata in (0, 1); +@@global.innodb_stats_on_metadata in (0, 1) +1 +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +1 +select @@session.innodb_stats_on_metadata; +ERROR HY000: Variable 'innodb_stats_on_metadata' is a GLOBAL variable +show global variables like 'innodb_stats_on_metadata'; +Variable_name Value +innodb_stats_on_metadata ON +show session variables like 'innodb_stats_on_metadata'; +Variable_name Value +innodb_stats_on_metadata ON +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +set global innodb_stats_on_metadata='OFF'; +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +0 +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA OFF +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA OFF +set @@global.innodb_stats_on_metadata=1; +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +1 +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +set global innodb_stats_on_metadata=0; +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +0 +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA OFF +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA OFF +set @@global.innodb_stats_on_metadata='ON'; +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +1 +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +set session innodb_stats_on_metadata='OFF'; +ERROR HY000: Variable 'innodb_stats_on_metadata' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_stats_on_metadata='ON'; +ERROR HY000: Variable 'innodb_stats_on_metadata' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_stats_on_metadata=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_stats_on_metadata' +set global innodb_stats_on_metadata=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_stats_on_metadata' +set global innodb_stats_on_metadata=2; +ERROR 42000: Variable 'innodb_stats_on_metadata' can't be set to the value of '2' +NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_stats_on_metadata=-3; +select @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +1 +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_ON_METADATA ON +set global innodb_stats_on_metadata='AUTO'; +ERROR 42000: Variable 'innodb_stats_on_metadata' can't be set to the value of 'AUTO' +SET @@global.innodb_stats_on_metadata = @start_global_value; +SELECT @@global.innodb_stats_on_metadata; +@@global.innodb_stats_on_metadata +1 diff --git a/mysql-test/suite/sys_vars/r/innodb_stats_sample_pages_basic.result b/mysql-test/suite/sys_vars/r/innodb_stats_sample_pages_basic.result new file mode 100644 index 00000000000..153ae95a4fe --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_stats_sample_pages_basic.result @@ -0,0 +1,56 @@ +SET @start_global_value = @@global.innodb_stats_sample_pages; +SELECT @start_global_value; +@start_global_value +8 +Valid values are one or above +select @@global.innodb_stats_sample_pages >=1; +@@global.innodb_stats_sample_pages >=1 +1 +select @@global.innodb_stats_sample_pages; +@@global.innodb_stats_sample_pages +8 +select @@session.innodb_stats_sample_pages; +ERROR HY000: Variable 'innodb_stats_sample_pages' is a GLOBAL variable +show global variables like 'innodb_stats_sample_pages'; +Variable_name Value +innodb_stats_sample_pages 8 +show session variables like 'innodb_stats_sample_pages'; +Variable_name Value +innodb_stats_sample_pages 8 +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_SAMPLE_PAGES 8 +select * from information_schema.session_variables where variable_name='innodb_stats_sample_pages'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_SAMPLE_PAGES 8 +set global innodb_stats_sample_pages=10; +select @@global.innodb_stats_sample_pages; +@@global.innodb_stats_sample_pages +10 +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_SAMPLE_PAGES 10 +select * from information_schema.session_variables where variable_name='innodb_stats_sample_pages'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_SAMPLE_PAGES 10 +set session innodb_stats_sample_pages=1; +ERROR HY000: Variable 'innodb_stats_sample_pages' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_stats_sample_pages=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_stats_sample_pages' +set global innodb_stats_sample_pages=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_stats_sample_pages' +set global innodb_stats_sample_pages="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_stats_sample_pages' +set global innodb_stats_sample_pages=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_stats_sample_pages value: '-7' +select @@global.innodb_stats_sample_pages; +@@global.innodb_stats_sample_pages +1 +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STATS_SAMPLE_PAGES 1 +SET @@global.innodb_stats_sample_pages = @start_global_value; +SELECT @@global.innodb_stats_sample_pages; +@@global.innodb_stats_sample_pages +8 diff --git a/mysql-test/suite/sys_vars/r/innodb_strict_mode_basic.result b/mysql-test/suite/sys_vars/r/innodb_strict_mode_basic.result new file mode 100644 index 00000000000..200f9166215 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_strict_mode_basic.result @@ -0,0 +1,120 @@ +SET @start_global_value = @@global.innodb_strict_mode; +SELECT @start_global_value; +@start_global_value +0 +Valid values are 'ON' and 'OFF' +select @@global.innodb_strict_mode in (0, 1); +@@global.innodb_strict_mode in (0, 1) +1 +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +0 +select @@session.innodb_strict_mode in (0, 1); +@@session.innodb_strict_mode in (0, 1) +1 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +0 +show global variables like 'innodb_strict_mode'; +Variable_name Value +innodb_strict_mode OFF +show session variables like 'innodb_strict_mode'; +Variable_name Value +innodb_strict_mode OFF +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +set global innodb_strict_mode='OFF'; +set session innodb_strict_mode='OFF'; +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +0 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +0 +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +set @@global.innodb_strict_mode=1; +set @@session.innodb_strict_mode=1; +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +1 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +1 +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +set global innodb_strict_mode=0; +set session innodb_strict_mode=0; +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +0 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +0 +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE OFF +set @@global.innodb_strict_mode='ON'; +set @@session.innodb_strict_mode='ON'; +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +1 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +1 +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +set global innodb_strict_mode=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_strict_mode' +set session innodb_strict_mode=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_strict_mode' +set global innodb_strict_mode=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_strict_mode' +set session innodb_strict_mode=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_strict_mode' +set global innodb_strict_mode=2; +ERROR 42000: Variable 'innodb_strict_mode' can't be set to the value of '2' +set session innodb_strict_mode=2; +ERROR 42000: Variable 'innodb_strict_mode' can't be set to the value of '2' +set global innodb_strict_mode='AUTO'; +ERROR 42000: Variable 'innodb_strict_mode' can't be set to the value of 'AUTO' +set session innodb_strict_mode='AUTO'; +ERROR 42000: Variable 'innodb_strict_mode' can't be set to the value of 'AUTO' +NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_strict_mode=-3; +set session innodb_strict_mode=-7; +select @@global.innodb_strict_mode; +@@global.innodb_strict_mode +1 +select @@session.innodb_strict_mode; +@@session.innodb_strict_mode +1 +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_STRICT_MODE ON +SET @@global.innodb_strict_mode = @start_global_value; +SELECT @@global.innodb_strict_mode; +@@global.innodb_strict_mode +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_thread_sleep_delay_basic.result b/mysql-test/suite/sys_vars/r/innodb_thread_sleep_delay_basic.result index 979bfd930ca..fb7093ec3b3 100644 --- a/mysql-test/suite/sys_vars/r/innodb_thread_sleep_delay_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_thread_sleep_delay_basic.result @@ -1,84 +1,56 @@ -SET @global_start_value = @@global.innodb_thread_sleep_delay; -SELECT @global_start_value; -@global_start_value +SET @start_global_value = @@global.innodb_thread_sleep_delay; +SELECT @start_global_value; +@start_global_value 10000 -'#--------------------FN_DYNVARS_046_01------------------------#' -SET @@global.innodb_thread_sleep_delay = 0; -SET @@global.innodb_thread_sleep_delay = DEFAULT; -SELECT @@global.innodb_thread_sleep_delay; +Valid values are zero or above +select @@global.innodb_thread_sleep_delay >=0; +@@global.innodb_thread_sleep_delay >=0 +1 +select @@global.innodb_thread_sleep_delay; @@global.innodb_thread_sleep_delay 10000 -'#---------------------FN_DYNVARS_046_02-------------------------#' -SET innodb_thread_sleep_delay = 1; +select @@session.innodb_thread_sleep_delay; +ERROR HY000: Variable 'innodb_thread_sleep_delay' is a GLOBAL variable +show global variables like 'innodb_thread_sleep_delay'; +Variable_name Value +innodb_thread_sleep_delay 10000 +show session variables like 'innodb_thread_sleep_delay'; +Variable_name Value +innodb_thread_sleep_delay 10000 +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_THREAD_SLEEP_DELAY 10000 +select * from information_schema.session_variables where variable_name='innodb_thread_sleep_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_THREAD_SLEEP_DELAY 10000 +set global innodb_thread_sleep_delay=10; +select @@global.innodb_thread_sleep_delay; +@@global.innodb_thread_sleep_delay +10 +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_THREAD_SLEEP_DELAY 10 +select * from information_schema.session_variables where variable_name='innodb_thread_sleep_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_THREAD_SLEEP_DELAY 10 +set session innodb_thread_sleep_delay=1; ERROR HY000: Variable 'innodb_thread_sleep_delay' is a GLOBAL variable and should be set with SET GLOBAL -SELECT @@innodb_thread_sleep_delay; -@@innodb_thread_sleep_delay -10000 -SELECT local.innodb_thread_sleep_delay; -ERROR 42S02: Unknown table 'local' in field list -SET global innodb_thread_sleep_delay = 0; -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -0 -'#--------------------FN_DYNVARS_046_03------------------------#' -SET @@global.innodb_thread_sleep_delay = 0; -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -0 -SET @@global.innodb_thread_sleep_delay = 1; -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -1 -SET @@global.innodb_thread_sleep_delay = 4294967295; -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -4294967295 -'#--------------------FN_DYNVARS_046_04-------------------------#' -SET @@global.innodb_thread_sleep_delay = -1; -SELECT @@global.innodb_autoextend_increment; -@@global.innodb_autoextend_increment -8 -SET @@global.innodb_thread_sleep_delay = "T"; +set global innodb_thread_sleep_delay=1.1; ERROR 42000: Incorrect argument type to variable 'innodb_thread_sleep_delay' -SELECT @@global.innodb_autoextend_increment; -@@global.innodb_autoextend_increment -8 -SET @@global.innodb_thread_sleep_delay = "Y"; +set global innodb_thread_sleep_delay=1e1; ERROR 42000: Incorrect argument type to variable 'innodb_thread_sleep_delay' -SELECT @@global.innodb_autoextend_increment; -@@global.innodb_autoextend_increment -8 -SET @@global.innodb_thread_sleep_delay = 1001; -SELECT @@global.innodb_autoextend_increment; -@@global.innodb_autoextend_increment -8 -'#----------------------FN_DYNVARS_046_05------------------------#' -SELECT @@global.innodb_thread_sleep_delay = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_thread_sleep_delay'; -@@global.innodb_thread_sleep_delay = VARIABLE_VALUE -1 -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -1001 -SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_thread_sleep_delay'; -VARIABLE_VALUE -1001 -'#---------------------FN_DYNVARS_046_06-------------------------#' -SET @@global.innodb_thread_sleep_delay = OFF; +set global innodb_thread_sleep_delay="foo"; ERROR 42000: Incorrect argument type to variable 'innodb_thread_sleep_delay' -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -1001 -SET @@global.innodb_thread_sleep_delay = ON; -ERROR 42000: Incorrect argument type to variable 'innodb_thread_sleep_delay' -SELECT @@global.innodb_thread_sleep_delay; +set global innodb_thread_sleep_delay=-7; +Warnings: +Warning 1292 Truncated incorrect innodb_thread_sleep_delay value: '-7' +select @@global.innodb_thread_sleep_delay; @@global.innodb_thread_sleep_delay -1001 -'#---------------------FN_DYNVARS_046_07----------------------#' -SET @@global.innodb_thread_sleep_delay = TRUE; -SELECT @@global.innodb_thread_sleep_delay; -@@global.innodb_thread_sleep_delay -1 -SET @@global.innodb_thread_sleep_delay = FALSE; +0 +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_THREAD_SLEEP_DELAY 0 +SET @@global.innodb_thread_sleep_delay = @start_global_value; SELECT @@global.innodb_thread_sleep_delay; @@global.innodb_thread_sleep_delay -0 +10000 diff --git a/mysql-test/suite/sys_vars/r/innodb_use_sys_malloc_basic.result b/mysql-test/suite/sys_vars/r/innodb_use_sys_malloc_basic.result new file mode 100644 index 00000000000..0c2685b1a49 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_use_sys_malloc_basic.result @@ -0,0 +1,25 @@ +Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_flushing in (0, 1); +@@global.innodb_adaptive_flushing in (0, 1) +1 +select @@global.innodb_use_sys_malloc; +@@global.innodb_use_sys_malloc +1 +select @@session.innodb_use_sys_malloc; +ERROR HY000: Variable 'innodb_use_sys_malloc' is a GLOBAL variable +show global variables like 'innodb_use_sys_malloc'; +Variable_name Value +innodb_use_sys_malloc ON +show session variables like 'innodb_use_sys_malloc'; +Variable_name Value +innodb_use_sys_malloc ON +select * from information_schema.global_variables where variable_name='innodb_use_sys_malloc'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_USE_SYS_MALLOC ON +select * from information_schema.session_variables where variable_name='innodb_use_sys_malloc'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_USE_SYS_MALLOC ON +set global innodb_use_sys_malloc=1; +ERROR HY000: Variable 'innodb_use_sys_malloc' is a read only variable +set session innodb_use_sys_malloc=1; +ERROR HY000: Variable 'innodb_use_sys_malloc' is a read only variable diff --git a/mysql-test/suite/sys_vars/r/innodb_version_basic.result b/mysql-test/suite/sys_vars/r/innodb_version_basic.result new file mode 100644 index 00000000000..759b5048512 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_version_basic.result @@ -0,0 +1,17 @@ +select @@global.innodb_version; +@@global.innodb_version +x.y.z +select @@session.innodb_version; +ERROR HY000: Variable 'innodb_version' is a GLOBAL variable +show global variables like 'innodb_version' disabled so to not change with every version; +show session variables like 'innodb_version' disabled so to not change with every version; +select VARIABLE_VALUE=@@global.innodb_version from information_schema.global_variables where variable_name='innodb_version'; +VARIABLE_VALUE=@@global.innodb_version +1 +select VARIABLE_VALUE=@@global.innodb_version from information_schema.session_variables where variable_name='innodb_version'; +VARIABLE_VALUE=@@global.innodb_version +1 +set global innodb_version=1; +ERROR HY000: Variable 'innodb_version' is a read only variable +set session innodb_version=1; +ERROR HY000: Variable 'innodb_version' is a read only variable diff --git a/mysql-test/suite/sys_vars/r/innodb_write_io_threads_basic.result b/mysql-test/suite/sys_vars/r/innodb_write_io_threads_basic.result new file mode 100644 index 00000000000..a363f4292dd --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_write_io_threads_basic.result @@ -0,0 +1,21 @@ +select @@global.innodb_write_io_threads; +@@global.innodb_write_io_threads +2 +select @@session.innodb_write_io_threads; +ERROR HY000: Variable 'innodb_write_io_threads' is a GLOBAL variable +show global variables like 'innodb_write_io_threads'; +Variable_name Value +innodb_write_io_threads 2 +show session variables like 'innodb_write_io_threads'; +Variable_name Value +innodb_write_io_threads 2 +select * from information_schema.global_variables where variable_name='innodb_write_io_threads'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_WRITE_IO_THREADS 2 +select * from information_schema.session_variables where variable_name='innodb_write_io_threads'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_WRITE_IO_THREADS 2 +set global innodb_write_io_threads=1; +ERROR HY000: Variable 'innodb_write_io_threads' is a read only variable +set session innodb_write_io_threads=1; +ERROR HY000: Variable 'innodb_write_io_threads' is a read only variable diff --git a/mysql-test/suite/sys_vars/r/last_insert_id_basic.result b/mysql-test/suite/sys_vars/r/last_insert_id_basic.result index c29a313b9e7..a4ae20dbabb 100644 --- a/mysql-test/suite/sys_vars/r/last_insert_id_basic.result +++ b/mysql-test/suite/sys_vars/r/last_insert_id_basic.result @@ -13,12 +13,24 @@ VARIABLE_NAME VARIABLE_VALUE select * from information_schema.session_variables where variable_name='last_insert_id'; VARIABLE_NAME VARIABLE_VALUE LAST_INSERT_ID 0 -set session last_insert_id=1; +set global last_insert_id=99; +ERROR HY000: Variable 'last_insert_id' is a SESSION variable and can't be used with SET GLOBAL +set session last_insert_id=42; +select @@global.last_insert_id; +ERROR HY000: Variable 'last_insert_id' is a SESSION variable select @@session.last_insert_id; @@session.last_insert_id -1 -set global last_insert_id=1; -ERROR HY000: Variable 'last_insert_id' is a SESSION variable and can't be used with SET GLOBAL +42 +show global variables like 'last_insert_id'; +Variable_name Value +show session variables like 'last_insert_id'; +Variable_name Value +last_insert_id 42 +select * from information_schema.global_variables where variable_name='last_insert_id'; +VARIABLE_NAME VARIABLE_VALUE +select * from information_schema.session_variables where variable_name='last_insert_id'; +VARIABLE_NAME VARIABLE_VALUE +LAST_INSERT_ID 42 set session last_insert_id=1.1; ERROR 42000: Incorrect argument type to variable 'last_insert_id' set session last_insert_id=1e1; diff --git a/mysql-test/suite/sys_vars/r/lc_messages_basic.result b/mysql-test/suite/sys_vars/r/lc_messages_basic.result index e765dd53516..b9350828dba 100644 --- a/mysql-test/suite/sys_vars/r/lc_messages_basic.result +++ b/mysql-test/suite/sys_vars/r/lc_messages_basic.result @@ -29,13 +29,19 @@ select @@session.lc_messages; @@session.lc_messages ja_JP set global lc_messages="en_US"; +set session lc_messages="en_GB"; select @@global.lc_messages; @@global.lc_messages en_US -set session lc_messages="en_GB"; select @@session.lc_messages; @@session.lc_messages en_GB +select * from information_schema.global_variables where variable_name='lc_messages'; +VARIABLE_NAME VARIABLE_VALUE +LC_MESSAGES en_US +select * from information_schema.session_variables where variable_name='lc_messages'; +VARIABLE_NAME VARIABLE_VALUE +LC_MESSAGES en_GB set global lc_messages=1.1; ERROR 42000: Incorrect argument type to variable 'lc_messages' set global lc_messages=1e1; diff --git a/mysql-test/suite/sys_vars/r/log_slow_queries_basic.result b/mysql-test/suite/sys_vars/r/log_slow_queries_basic.result index ca530ebb41a..1748406b74b 100644 --- a/mysql-test/suite/sys_vars/r/log_slow_queries_basic.result +++ b/mysql-test/suite/sys_vars/r/log_slow_queries_basic.result @@ -65,12 +65,22 @@ Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed i SELECT @@global.log_slow_queries; @@global.log_slow_queries 0 +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; +IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +1 SET @@global.log_slow_queries = 1; Warnings: Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead SELECT @@global.log_slow_queries; @@global.log_slow_queries 1 +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; +IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +1 '#---------------------FN_DYNVARS_004_07----------------------#' SET @@global.log_slow_queries = TRUE; Warnings: @@ -78,12 +88,22 @@ Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed i SELECT @@global.log_slow_queries; @@global.log_slow_queries 1 +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; +IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +1 SET @@global.log_slow_queries = FALSE; Warnings: Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead SELECT @@global.log_slow_queries; @@global.log_slow_queries 0 +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; +IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +1 '#---------------------FN_DYNVARS_004_08----------------------#' SET @@global.log_slow_queries = ON; Warnings: diff --git a/mysql-test/suite/sys_vars/r/lower_case_file_system_basic.result b/mysql-test/suite/sys_vars/r/lower_case_file_system_basic.result index 0488ed30dc0..4ecd81685c5 100644 --- a/mysql-test/suite/sys_vars/r/lower_case_file_system_basic.result +++ b/mysql-test/suite/sys_vars/r/lower_case_file_system_basic.result @@ -3,18 +3,19 @@ select @@global.lower_case_file_system=2; 0 select @@session.lower_case_file_system; ERROR HY000: Variable 'lower_case_file_system' is a GLOBAL variable -show global variables like 'lower_case_file_system'; -Variable_name Value -lower_case_file_system # -show session variables like 'lower_case_file_system'; -Variable_name Value -lower_case_file_system # -select * from information_schema.global_variables where variable_name='lower_case_file_system'; -VARIABLE_NAME VARIABLE_VALUE -LOWER_CASE_FILE_SYSTEM # -select * from information_schema.session_variables where variable_name='lower_case_file_system'; -VARIABLE_NAME VARIABLE_VALUE -LOWER_CASE_FILE_SYSTEM # +SELECT @@global.lower_case_file_system in (0,1); +@@global.lower_case_file_system in (0,1) +1 +SELECT IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_file_system'; +IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +1 +SELECT IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.SESSION_VARIABLES +WHERE VARIABLE_NAME='lower_case_file_system'; +IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +1 set global lower_case_file_system=1; ERROR HY000: Variable 'lower_case_file_system' is a read only variable set session lower_case_file_system=1; diff --git a/mysql-test/suite/sys_vars/r/lower_case_table_names_basic.result b/mysql-test/suite/sys_vars/r/lower_case_table_names_basic.result index d7dc6d69e30..cae6ecb215c 100644 --- a/mysql-test/suite/sys_vars/r/lower_case_table_names_basic.result +++ b/mysql-test/suite/sys_vars/r/lower_case_table_names_basic.result @@ -3,18 +3,19 @@ select @@global.lower_case_table_names=20; 0 select @@session.lower_case_table_names; ERROR HY000: Variable 'lower_case_table_names' is a GLOBAL variable -show global variables like 'lower_case_table_names'; -Variable_name Value -lower_case_table_names # -show session variables like 'lower_case_table_names'; -Variable_name Value -lower_case_table_names # -select * from information_schema.global_variables where variable_name='lower_case_table_names'; -VARIABLE_NAME VARIABLE_VALUE -LOWER_CASE_TABLE_NAMES # -select * from information_schema.session_variables where variable_name='lower_case_table_names'; -VARIABLE_NAME VARIABLE_VALUE -LOWER_CASE_TABLE_NAMES # +SELECT @@global.lower_case_table_names in (0,1,2); +@@global.lower_case_table_names in (0,1,2) +1 +SELECT @@global.lower_case_table_names = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_table_names'; +@@global.lower_case_table_names = VARIABLE_VALUE +1 +SELECT @@global.lower_case_table_names = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_table_names'; +@@global.lower_case_table_names = VARIABLE_VALUE +1 set global lower_case_table_names=1; ERROR HY000: Variable 'lower_case_table_names' is a read only variable set session lower_case_table_names=1; diff --git a/mysql-test/suite/sys_vars/r/max_join_size_basic.result b/mysql-test/suite/sys_vars/r/max_join_size_basic.result index 5cebefe9ea3..acf9f123238 100644 --- a/mysql-test/suite/sys_vars/r/max_join_size_basic.result +++ b/mysql-test/suite/sys_vars/r/max_join_size_basic.result @@ -21,13 +21,25 @@ select * from information_schema.session_variables where variable_name='max_join VARIABLE_NAME VARIABLE_VALUE MAX_JOIN_SIZE 18446744073709551615 set global max_join_size=10; +set session max_join_size=20; select @@global.max_join_size; @@global.max_join_size 10 -set session max_join_size=20; select @@session.max_join_size; @@session.max_join_size 20 +show global variables like 'max_join_size'; +Variable_name Value +max_join_size 10 +show session variables like 'max_join_size'; +Variable_name Value +max_join_size 20 +select * from information_schema.global_variables where variable_name='max_join_size'; +VARIABLE_NAME VARIABLE_VALUE +MAX_JOIN_SIZE 10 +select * from information_schema.session_variables where variable_name='max_join_size'; +VARIABLE_NAME VARIABLE_VALUE +MAX_JOIN_SIZE 20 set global max_join_size=1.1; ERROR 42000: Incorrect argument type to variable 'max_join_size' set global max_join_size=1e1; diff --git a/mysql-test/suite/sys_vars/r/old_alter_table_basic.result b/mysql-test/suite/sys_vars/r/old_alter_table_basic.result index 0619235b8e0..5cc17917242 100644 --- a/mysql-test/suite/sys_vars/r/old_alter_table_basic.result +++ b/mysql-test/suite/sys_vars/r/old_alter_table_basic.result @@ -21,13 +21,25 @@ select * from information_schema.session_variables where variable_name='old_alte VARIABLE_NAME VARIABLE_VALUE OLD_ALTER_TABLE OFF set global old_alter_table=1; +set session old_alter_table=ON; select @@global.old_alter_table; @@global.old_alter_table 1 -set session old_alter_table=ON; select @@session.old_alter_table; @@session.old_alter_table 1 +show global variables like 'old_alter_table'; +Variable_name Value +old_alter_table ON +show session variables like 'old_alter_table'; +Variable_name Value +old_alter_table ON +select * from information_schema.global_variables where variable_name='old_alter_table'; +VARIABLE_NAME VARIABLE_VALUE +OLD_ALTER_TABLE ON +select * from information_schema.session_variables where variable_name='old_alter_table'; +VARIABLE_NAME VARIABLE_VALUE +OLD_ALTER_TABLE ON set global old_alter_table=1.1; ERROR 42000: Incorrect argument type to variable 'old_alter_table' set global old_alter_table=1e1; 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 2d648259a26..acc8cd699f8 100644 --- a/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result +++ b/mysql-test/suite/sys_vars/r/optimizer_switch_basic.result @@ -21,21 +21,33 @@ select * from information_schema.session_variables where variable_name='optimize VARIABLE_NAME VARIABLE_VALUE OPTIMIZER_SWITCH index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on 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,engine_condition_pushdown=off -set session optimizer_switch=5; select @@session.optimizer_switch; @@session.optimizer_switch index_merge=on,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,engine_condition_pushdown=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,engine_condition_pushdown=off -set session optimizer_switch="index_merge=off"; select @@session.optimizer_switch; @@session.optimizer_switch index_merge=off,index_merge_union=off,index_merge_sort_union=on,index_merge_intersection=off,engine_condition_pushdown=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,engine_condition_pushdown=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,engine_condition_pushdown=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,engine_condition_pushdown=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,engine_condition_pushdown=off set session optimizer_switch="default"; select @@session.optimizer_switch; @@session.optimizer_switch diff --git a/mysql-test/suite/sys_vars/r/profiling_basic.result b/mysql-test/suite/sys_vars/r/profiling_basic.result index 26704b6b725..4f987d690ba 100644 --- a/mysql-test/suite/sys_vars/r/profiling_basic.result +++ b/mysql-test/suite/sys_vars/r/profiling_basic.result @@ -21,13 +21,45 @@ select * from information_schema.session_variables where variable_name='profilin VARIABLE_NAME VARIABLE_VALUE PROFILING OFF set global profiling=1; +set session profiling=ON; select @@global.profiling; @@global.profiling 1 -set session profiling=ON; select @@session.profiling; @@session.profiling 1 +show global variables like 'profiling'; +Variable_name Value +profiling ON +show session variables like 'profiling'; +Variable_name Value +profiling ON +select * from information_schema.global_variables where variable_name='profiling'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING ON +select * from information_schema.session_variables where variable_name='profiling'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING ON +set global profiling=0; +set session profiling=OFF; +select @@global.profiling; +@@global.profiling +0 +select @@session.profiling; +@@session.profiling +0 +show global variables like 'profiling'; +Variable_name Value +profiling OFF +show session variables like 'profiling'; +Variable_name Value +profiling OFF +select * from information_schema.global_variables where variable_name='profiling'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING OFF +select * from information_schema.session_variables where variable_name='profiling'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING OFF set global profiling=1.1; ERROR 42000: Incorrect argument type to variable 'profiling' set global profiling=1e1; diff --git a/mysql-test/suite/sys_vars/r/profiling_history_size_basic.result b/mysql-test/suite/sys_vars/r/profiling_history_size_basic.result index be92d075326..396d280ad18 100644 --- a/mysql-test/suite/sys_vars/r/profiling_history_size_basic.result +++ b/mysql-test/suite/sys_vars/r/profiling_history_size_basic.result @@ -21,13 +21,25 @@ select * from information_schema.session_variables where variable_name='profilin VARIABLE_NAME VARIABLE_VALUE PROFILING_HISTORY_SIZE 15 set global profiling_history_size=10; +set session profiling_history_size=20; select @@global.profiling_history_size; @@global.profiling_history_size 10 -set session profiling_history_size=20; select @@session.profiling_history_size; @@session.profiling_history_size 20 +show global variables like 'profiling_history_size'; +Variable_name Value +profiling_history_size 10 +show session variables like 'profiling_history_size'; +Variable_name Value +profiling_history_size 20 +select * from information_schema.global_variables where variable_name='profiling_history_size'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING_HISTORY_SIZE 10 +select * from information_schema.session_variables where variable_name='profiling_history_size'; +VARIABLE_NAME VARIABLE_VALUE +PROFILING_HISTORY_SIZE 20 set global profiling_history_size=1.1; ERROR 42000: Incorrect argument type to variable 'profiling_history_size' set global profiling_history_size=1e1; diff --git a/mysql-test/suite/sys_vars/r/pseudo_thread_id_basic.result b/mysql-test/suite/sys_vars/r/pseudo_thread_id_basic.result index e6619e206f1..ee6169a9e35 100644 --- a/mysql-test/suite/sys_vars/r/pseudo_thread_id_basic.result +++ b/mysql-test/suite/sys_vars/r/pseudo_thread_id_basic.result @@ -1,22 +1,29 @@ select @@global.pseudo_thread_id; ERROR HY000: Variable 'pseudo_thread_id' is a SESSION variable -select @@session.pseudo_thread_id=0; -@@session.pseudo_thread_id=0 -0 +select @@session.pseudo_thread_id between 1 and 10000; +@@session.pseudo_thread_id between 1 and 10000 +1 +should be empty show global variables like 'pseudo_thread_id'; Variable_name Value show session variables like 'pseudo_thread_id'; Variable_name Value pseudo_thread_id # +should be empty select * from information_schema.global_variables where variable_name='pseudo_thread_id'; VARIABLE_NAME VARIABLE_VALUE -select * from information_schema.session_variables where variable_name='pseudo_thread_id'; -VARIABLE_NAME VARIABLE_VALUE -PSEUDO_THREAD_ID # -set session pseudo_thread_id=1; +select @@session.pseudo_thread_id = variable_value from information_schema.session_variables where variable_name='pseudo_thread_id'; +@@session.pseudo_thread_id = variable_value +1 +set session pseudo_thread_id=42; select @@session.pseudo_thread_id; @@session.pseudo_thread_id -1 +42 +select * from information_schema.global_variables where variable_name='pseudo_thread_id'; +VARIABLE_NAME VARIABLE_VALUE +select variable_value from information_schema.session_variables where variable_name='pseudo_thread_id'; +variable_value +42 set global pseudo_thread_id=1; ERROR HY000: Variable 'pseudo_thread_id' is a SESSION variable and can't be used with SET GLOBAL set session pseudo_thread_id=1.1; diff --git a/mysql-test/suite/sys_vars/r/rand_seed1_basic.result b/mysql-test/suite/sys_vars/r/rand_seed1_basic.result index 7b92d533c9e..155d7169168 100644 --- a/mysql-test/suite/sys_vars/r/rand_seed1_basic.result +++ b/mysql-test/suite/sys_vars/r/rand_seed1_basic.result @@ -17,6 +17,11 @@ set session rand_seed1=1; select @@session.rand_seed1; @@session.rand_seed1 0 +select * from information_schema.global_variables where variable_name='rand_seed1'; +VARIABLE_NAME VARIABLE_VALUE +select * from information_schema.session_variables where variable_name='rand_seed1'; +VARIABLE_NAME VARIABLE_VALUE +RAND_SEED1 0 set global rand_seed1=1; ERROR HY000: Variable 'rand_seed1' is a SESSION variable and can't be used with SET GLOBAL set session rand_seed1=1.1; diff --git a/mysql-test/suite/sys_vars/r/rand_seed2_basic.result b/mysql-test/suite/sys_vars/r/rand_seed2_basic.result index 3d84aa3e37e..4974d8a53a3 100644 --- a/mysql-test/suite/sys_vars/r/rand_seed2_basic.result +++ b/mysql-test/suite/sys_vars/r/rand_seed2_basic.result @@ -17,6 +17,11 @@ set session rand_seed2=1; select @@session.rand_seed2; @@session.rand_seed2 0 +select * from information_schema.global_variables where variable_name='rand_seed2'; +VARIABLE_NAME VARIABLE_VALUE +select * from information_schema.session_variables where variable_name='rand_seed2'; +VARIABLE_NAME VARIABLE_VALUE +RAND_SEED2 0 set global rand_seed2=1; ERROR HY000: Variable 'rand_seed2' is a SESSION variable and can't be used with SET GLOBAL set session rand_seed2=1.1; diff --git a/mysql-test/suite/sys_vars/r/relay_log_recovery_basic.result b/mysql-test/suite/sys_vars/r/relay_log_recovery_basic.result index 97b991ce65b..af3b51bcffe 100644 --- a/mysql-test/suite/sys_vars/r/relay_log_recovery_basic.result +++ b/mysql-test/suite/sys_vars/r/relay_log_recovery_basic.result @@ -23,10 +23,22 @@ set global relay_log_recovery=1; select @@global.relay_log_recovery; @@global.relay_log_recovery 1 +select * from information_schema.global_variables where variable_name='relay_log_recovery'; +VARIABLE_NAME VARIABLE_VALUE +RELAY_LOG_RECOVERY ON +select * from information_schema.session_variables where variable_name='relay_log_recovery'; +VARIABLE_NAME VARIABLE_VALUE +RELAY_LOG_RECOVERY ON set global relay_log_recovery=OFF; select @@global.relay_log_recovery; @@global.relay_log_recovery 0 +select * from information_schema.global_variables where variable_name='relay_log_recovery'; +VARIABLE_NAME VARIABLE_VALUE +RELAY_LOG_RECOVERY OFF +select * from information_schema.session_variables where variable_name='relay_log_recovery'; +VARIABLE_NAME VARIABLE_VALUE +RELAY_LOG_RECOVERY OFF set session relay_log_recovery=1; ERROR HY000: Variable 'relay_log_recovery' is a GLOBAL variable and should be set with SET GLOBAL set global relay_log_recovery=1.1; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result new file mode 100644 index 00000000000..ad3ca0de0fa --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result @@ -0,0 +1,73 @@ +INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; +select @@global.rpl_semi_sync_master_enabled; +@@global.rpl_semi_sync_master_enabled +0 +SET @start_global_value = @@global.rpl_semi_sync_master_enabled; +select @@global.rpl_semi_sync_master_enabled in (0,1); +@@global.rpl_semi_sync_master_enabled in (0,1) +1 +select @@session.rpl_semi_sync_master_enabled; +ERROR HY000: Variable 'rpl_semi_sync_master_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +show session variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED OFF +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED OFF +set global rpl_semi_sync_master_enabled=0; +set session rpl_semi_sync_master_enabled=0; +ERROR HY000: Variable 'rpl_semi_sync_master_enabled' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_enabled; +@@global.rpl_semi_sync_master_enabled +0 +select @@session.rpl_semi_sync_master_enabled; +ERROR HY000: Variable 'rpl_semi_sync_master_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +show session variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED OFF +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED OFF +set global rpl_semi_sync_master_enabled=1; +set session rpl_semi_sync_master_enabled=1; +ERROR HY000: Variable 'rpl_semi_sync_master_enabled' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_enabled; +@@global.rpl_semi_sync_master_enabled +-1 +select @@session.rpl_semi_sync_master_enabled; +ERROR HY000: Variable 'rpl_semi_sync_master_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled ON +show session variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled ON +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED ON +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_ENABLED ON +set global rpl_semi_sync_master_enabled=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_enabled' +set global rpl_semi_sync_master_enabled=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_enabled' +set global rpl_semi_sync_master_enabled="some text"; +ERROR 42000: Variable 'rpl_semi_sync_master_enabled' can't be set to the value of 'some text' +SET @@global.rpl_semi_sync_master_enabled = @start_global_value; +select @@global.rpl_semi_sync_master_enabled; +@@global.rpl_semi_sync_master_enabled +0 +UNINSTALL PLUGIN rpl_semi_sync_master; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_timeout_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_timeout_basic.result new file mode 100644 index 00000000000..e77bcc1c12a --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_timeout_basic.result @@ -0,0 +1,54 @@ +INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; +select @@global.rpl_semi_sync_master_timeout; +@@global.rpl_semi_sync_master_timeout +10000 +SET @start_global_value = @@global.rpl_semi_sync_master_timeout; +Assuming value will not be more then 100 sec +select @@global.rpl_semi_sync_master_timeout between 1 and 100000; +@@global.rpl_semi_sync_master_timeout between 1 and 100000 +1 +select @@session.rpl_semi_sync_master_timeout; +ERROR HY000: Variable 'rpl_semi_sync_master_timeout' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_timeout'; +Variable_name Value +rpl_semi_sync_master_timeout 10000 +show session variables like 'rpl_semi_sync_master_timeout'; +Variable_name Value +rpl_semi_sync_master_timeout 10000 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_timeout'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TIMEOUT 10000 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_timeout'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TIMEOUT 10000 +set global rpl_semi_sync_master_timeout=42; +set session rpl_semi_sync_master_timeout=99; +ERROR HY000: Variable 'rpl_semi_sync_master_timeout' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_timeout; +@@global.rpl_semi_sync_master_timeout +42 +select @@session.rpl_semi_sync_master_timeout; +ERROR HY000: Variable 'rpl_semi_sync_master_timeout' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_timeout'; +Variable_name Value +rpl_semi_sync_master_timeout 42 +show session variables like 'rpl_semi_sync_master_timeout'; +Variable_name Value +rpl_semi_sync_master_timeout 42 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_timeout'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TIMEOUT 42 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_timeout'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TIMEOUT 42 +set global rpl_semi_sync_master_timeout=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_timeout' +set global rpl_semi_sync_master_timeout=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_timeout' +set global rpl_semi_sync_master_timeout="some text"; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_timeout' +SET @@global.rpl_semi_sync_master_timeout = @start_global_value; +select @@global.rpl_semi_sync_master_timeout; +@@global.rpl_semi_sync_master_timeout +10000 +UNINSTALL PLUGIN rpl_semi_sync_master; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_trace_level_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_trace_level_basic.result new file mode 100644 index 00000000000..55df5f57d9e --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_trace_level_basic.result @@ -0,0 +1,72 @@ +INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; +select @@global.rpl_semi_sync_master_trace_level; +@@global.rpl_semi_sync_master_trace_level +32 +SET @start_global_value = @@global.rpl_semi_sync_master_trace_level; +select @@global.rpl_semi_sync_master_trace_level in (1,16,32,64); +@@global.rpl_semi_sync_master_trace_level in (1,16,32,64) +1 +select @@session.rpl_semi_sync_master_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_master_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 32 +show session variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 32 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 32 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 32 +set global rpl_semi_sync_master_trace_level=16; +set session rpl_semi_sync_master_trace_level=99; +ERROR HY000: Variable 'rpl_semi_sync_master_trace_level' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_trace_level; +@@global.rpl_semi_sync_master_trace_level +16 +select @@session.rpl_semi_sync_master_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_master_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 16 +show session variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 16 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 16 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 16 +NOTE: Value can also be set to values that are combinations of values +set global rpl_semi_sync_master_trace_level=42; +select @@global.rpl_semi_sync_master_trace_level; +@@global.rpl_semi_sync_master_trace_level +42 +select @@session.rpl_semi_sync_master_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_master_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 42 +show session variables like 'rpl_semi_sync_master_trace_level'; +Variable_name Value +rpl_semi_sync_master_trace_level 42 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 42 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_TRACE_LEVEL 42 +set global rpl_semi_sync_master_trace_level=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_trace_level' +set global rpl_semi_sync_master_trace_level=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_trace_level' +set global rpl_semi_sync_master_trace_level="some text"; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_trace_level' +SET @@global.rpl_semi_sync_master_trace_level = @start_global_value; +select @@global.rpl_semi_sync_master_trace_level; +@@global.rpl_semi_sync_master_trace_level +32 +UNINSTALL PLUGIN rpl_semi_sync_master; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_wait_no_slave_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_wait_no_slave_basic.result new file mode 100644 index 00000000000..3d951b499ed --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_wait_no_slave_basic.result @@ -0,0 +1,73 @@ +INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; +select @@global.rpl_semi_sync_master_wait_no_slave; +@@global.rpl_semi_sync_master_wait_no_slave +1 +SET @start_global_value = @@global.rpl_semi_sync_master_wait_no_slave; +select @@global.rpl_semi_sync_master_wait_no_slave in (0,1); +@@global.rpl_semi_sync_master_wait_no_slave in (0,1) +1 +select @@session.rpl_semi_sync_master_wait_no_slave; +ERROR HY000: Variable 'rpl_semi_sync_master_wait_no_slave' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave ON +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave ON +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE ON +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE ON +set global rpl_semi_sync_master_wait_no_slave=0; +set session rpl_semi_sync_master_wait_no_slave=0; +ERROR HY000: Variable 'rpl_semi_sync_master_wait_no_slave' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_wait_no_slave; +@@global.rpl_semi_sync_master_wait_no_slave +0 +select @@session.rpl_semi_sync_master_wait_no_slave; +ERROR HY000: Variable 'rpl_semi_sync_master_wait_no_slave' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave OFF +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave OFF +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE OFF +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE OFF +set global rpl_semi_sync_master_wait_no_slave=1; +set session rpl_semi_sync_master_wait_no_slave=1; +ERROR HY000: Variable 'rpl_semi_sync_master_wait_no_slave' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_master_wait_no_slave; +@@global.rpl_semi_sync_master_wait_no_slave +1 +select @@session.rpl_semi_sync_master_wait_no_slave; +ERROR HY000: Variable 'rpl_semi_sync_master_wait_no_slave' is a GLOBAL variable +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave ON +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +Variable_name Value +rpl_semi_sync_master_wait_no_slave ON +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE ON +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_MASTER_WAIT_NO_SLAVE ON +set global rpl_semi_sync_master_wait_no_slave=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_wait_no_slave' +set global rpl_semi_sync_master_wait_no_slave=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_wait_no_slave' +set global rpl_semi_sync_master_wait_no_slave="some text"; +ERROR 42000: Variable 'rpl_semi_sync_master_wait_no_slave' can't be set to the value of 'some text' +SET @@global.rpl_semi_sync_master_wait_no_slave = @start_global_value; +select @@global.rpl_semi_sync_master_wait_no_slave; +@@global.rpl_semi_sync_master_wait_no_slave +1 +UNINSTALL PLUGIN rpl_semi_sync_master; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_enabled_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_enabled_basic.result new file mode 100644 index 00000000000..25688f55ecd --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_enabled_basic.result @@ -0,0 +1,73 @@ +INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; +select @@global.rpl_semi_sync_slave_enabled; +@@global.rpl_semi_sync_slave_enabled +0 +SET @start_global_value = @@global.rpl_semi_sync_slave_enabled; +select @@global.rpl_semi_sync_slave_enabled in (0,1); +@@global.rpl_semi_sync_slave_enabled in (0,1) +1 +select @@session.rpl_semi_sync_slave_enabled; +ERROR HY000: Variable 'rpl_semi_sync_slave_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +show session variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED OFF +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED OFF +set global rpl_semi_sync_slave_enabled=0; +set session rpl_semi_sync_slave_enabled=0; +ERROR HY000: Variable 'rpl_semi_sync_slave_enabled' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_slave_enabled; +@@global.rpl_semi_sync_slave_enabled +0 +select @@session.rpl_semi_sync_slave_enabled; +ERROR HY000: Variable 'rpl_semi_sync_slave_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +show session variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED OFF +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED OFF +set global rpl_semi_sync_slave_enabled=1; +set session rpl_semi_sync_slave_enabled=1; +ERROR HY000: Variable 'rpl_semi_sync_slave_enabled' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_slave_enabled; +@@global.rpl_semi_sync_slave_enabled +-1 +select @@session.rpl_semi_sync_slave_enabled; +ERROR HY000: Variable 'rpl_semi_sync_slave_enabled' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled ON +show session variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled ON +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED ON +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_ENABLED ON +set global rpl_semi_sync_slave_enabled=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_slave_enabled' +set global rpl_semi_sync_slave_enabled=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_slave_enabled' +set global rpl_semi_sync_slave_enabled="some text"; +ERROR 42000: Variable 'rpl_semi_sync_slave_enabled' can't be set to the value of 'some text' +SET @@global.rpl_semi_sync_slave_enabled = @start_global_value; +select @@global.rpl_semi_sync_slave_enabled; +@@global.rpl_semi_sync_slave_enabled +0 +UNINSTALL PLUGIN rpl_semi_sync_slave; diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_trace_level_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_trace_level_basic.result new file mode 100644 index 00000000000..f7796309aea --- /dev/null +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_trace_level_basic.result @@ -0,0 +1,72 @@ +INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; +select @@global.rpl_semi_sync_slave_trace_level; +@@global.rpl_semi_sync_slave_trace_level +32 +SET @start_global_value = @@global.rpl_semi_sync_slave_trace_level; +select @@global.rpl_semi_sync_slave_trace_level in (1,16,32,64); +@@global.rpl_semi_sync_slave_trace_level in (1,16,32,64) +1 +select @@session.rpl_semi_sync_slave_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_slave_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 32 +show session variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 32 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 32 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 32 +set global rpl_semi_sync_slave_trace_level=16; +set session rpl_semi_sync_slave_trace_level=99; +ERROR HY000: Variable 'rpl_semi_sync_slave_trace_level' is a GLOBAL variable and should be set with SET GLOBAL +select @@global.rpl_semi_sync_slave_trace_level; +@@global.rpl_semi_sync_slave_trace_level +16 +select @@session.rpl_semi_sync_slave_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_slave_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 16 +show session variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 16 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 16 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 16 +NOTE: Value can also be set to values that are combinations of values +set global rpl_semi_sync_slave_trace_level=42; +select @@global.rpl_semi_sync_slave_trace_level; +@@global.rpl_semi_sync_slave_trace_level +42 +select @@session.rpl_semi_sync_slave_trace_level; +ERROR HY000: Variable 'rpl_semi_sync_slave_trace_level' is a GLOBAL variable +show global variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 42 +show session variables like 'rpl_semi_sync_slave_trace_level'; +Variable_name Value +rpl_semi_sync_slave_trace_level 42 +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 42 +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; +VARIABLE_NAME VARIABLE_VALUE +RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL 42 +set global rpl_semi_sync_slave_trace_level=1.1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_slave_trace_level' +set global rpl_semi_sync_slave_trace_level=1e1; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_slave_trace_level' +set global rpl_semi_sync_slave_trace_level="some text"; +ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_slave_trace_level' +SET @@global.rpl_semi_sync_slave_trace_level = @start_global_value; +select @@global.rpl_semi_sync_slave_trace_level; +@@global.rpl_semi_sync_slave_trace_level +32 +UNINSTALL PLUGIN rpl_semi_sync_slave; diff --git a/mysql-test/suite/sys_vars/r/sql_log_update_basic.result b/mysql-test/suite/sys_vars/r/sql_log_update_basic.result index b6329b2820c..c18b9017021 100644 --- a/mysql-test/suite/sys_vars/r/sql_log_update_basic.result +++ b/mysql-test/suite/sys_vars/r/sql_log_update_basic.result @@ -23,15 +23,51 @@ SQL_LOG_UPDATE ON set global sql_log_update=1; Warnings: Note 1315 The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6. +set session sql_log_update=ON; +Warnings: +Note 1315 The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6. select @@global.sql_log_update; @@global.sql_log_update 1 -set session sql_log_update=ON; +select @@session.sql_log_update; +@@session.sql_log_update +1 +show global variables like 'sql_log_update'; +Variable_name Value +sql_log_update ON +show session variables like 'sql_log_update'; +Variable_name Value +sql_log_update ON +select * from information_schema.global_variables where variable_name='sql_log_update'; +VARIABLE_NAME VARIABLE_VALUE +SQL_LOG_UPDATE ON +select * from information_schema.session_variables where variable_name='sql_log_update'; +VARIABLE_NAME VARIABLE_VALUE +SQL_LOG_UPDATE ON +set global sql_log_update=0; +Warnings: +Note 1315 The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6. +set session sql_log_update=OFF; Warnings: Note 1315 The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MySQL 5.6. +select @@global.sql_log_update; +@@global.sql_log_update +0 select @@session.sql_log_update; @@session.sql_log_update -1 +0 +show global variables like 'sql_log_update'; +Variable_name Value +sql_log_update OFF +show session variables like 'sql_log_update'; +Variable_name Value +sql_log_update OFF +select * from information_schema.global_variables where variable_name='sql_log_update'; +VARIABLE_NAME VARIABLE_VALUE +SQL_LOG_UPDATE OFF +select * from information_schema.session_variables where variable_name='sql_log_update'; +VARIABLE_NAME VARIABLE_VALUE +SQL_LOG_UPDATE OFF set global sql_log_update=1.1; ERROR 42000: Incorrect argument type to variable 'sql_log_update' set global sql_log_update=1e1; diff --git a/mysql-test/suite/sys_vars/r/sql_max_join_size_basic.result b/mysql-test/suite/sys_vars/r/sql_max_join_size_basic.result index 8aaea049b94..8ec2a60887f 100644 --- a/mysql-test/suite/sys_vars/r/sql_max_join_size_basic.result +++ b/mysql-test/suite/sys_vars/r/sql_max_join_size_basic.result @@ -23,15 +23,27 @@ SQL_MAX_JOIN_SIZE 18446744073709551615 set global sql_max_join_size=10; Warnings: Warning 1287 The syntax '@@sql_max_join_size' is deprecated and will be removed in MySQL 7.0. -select @@global.sql_max_join_size; -@@global.sql_max_join_size -10 set session sql_max_join_size=20; Warnings: Warning 1287 The syntax '@@sql_max_join_size' is deprecated and will be removed in MySQL 7.0. +select @@global.sql_max_join_size; +@@global.sql_max_join_size +10 select @@session.sql_max_join_size; @@session.sql_max_join_size 20 +show global variables like 'sql_max_join_size'; +Variable_name Value +sql_max_join_size 10 +show session variables like 'sql_max_join_size'; +Variable_name Value +sql_max_join_size 20 +select * from information_schema.global_variables where variable_name='sql_max_join_size'; +VARIABLE_NAME VARIABLE_VALUE +SQL_MAX_JOIN_SIZE 10 +select * from information_schema.session_variables where variable_name='sql_max_join_size'; +VARIABLE_NAME VARIABLE_VALUE +SQL_MAX_JOIN_SIZE 20 set global sql_max_join_size=1.1; ERROR 42000: Incorrect argument type to variable 'sql_max_join_size' set global sql_max_join_size=1e1; diff --git a/mysql-test/suite/sys_vars/r/sql_select_limit_basic.result b/mysql-test/suite/sys_vars/r/sql_select_limit_basic.result index c601fa148ce..78119cd9dff 100644 --- a/mysql-test/suite/sys_vars/r/sql_select_limit_basic.result +++ b/mysql-test/suite/sys_vars/r/sql_select_limit_basic.result @@ -21,13 +21,25 @@ select * from information_schema.session_variables where variable_name='sql_sele VARIABLE_NAME VARIABLE_VALUE SQL_SELECT_LIMIT 18446744073709551615 set global sql_select_limit=10; +set session sql_select_limit=20; select @@global.sql_select_limit; @@global.sql_select_limit 10 -set session sql_select_limit=20; select @@session.sql_select_limit; @@session.sql_select_limit 20 +show global variables like 'sql_select_limit'; +Variable_name Value +sql_select_limit 10 +show session variables like 'sql_select_limit'; +Variable_name Value +sql_select_limit 20 +select * from information_schema.global_variables where variable_name='sql_select_limit'; +VARIABLE_NAME VARIABLE_VALUE +SQL_SELECT_LIMIT 10 +select * from information_schema.session_variables where variable_name='sql_select_limit'; +VARIABLE_NAME VARIABLE_VALUE +SQL_SELECT_LIMIT 20 set global sql_select_limit=1.1; ERROR 42000: Incorrect argument type to variable 'sql_select_limit' set global sql_select_limit=1e1; diff --git a/mysql-test/suite/sys_vars/r/thread_cache_size_basic.result b/mysql-test/suite/sys_vars/r/thread_cache_size_basic.result index 1c802f1afdd..83501ca929b 100644 --- a/mysql-test/suite/sys_vars/r/thread_cache_size_basic.result +++ b/mysql-test/suite/sys_vars/r/thread_cache_size_basic.result @@ -23,6 +23,12 @@ set global thread_cache_size=1; select @@global.thread_cache_size; @@global.thread_cache_size 1 +select * from information_schema.global_variables where variable_name='thread_cache_size'; +VARIABLE_NAME VARIABLE_VALUE +THREAD_CACHE_SIZE 1 +select * from information_schema.session_variables where variable_name='thread_cache_size'; +VARIABLE_NAME VARIABLE_VALUE +THREAD_CACHE_SIZE 1 set session thread_cache_size=1; ERROR HY000: Variable 'thread_cache_size' is a GLOBAL variable and should be set with SET GLOBAL set global thread_cache_size=1.1; diff --git a/mysql-test/suite/sys_vars/t/all_vars-master.opt b/mysql-test/suite/sys_vars/t/all_vars-master.opt new file mode 100644 index 00000000000..3eec696ce86 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/all_vars-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT --loose-innodb diff --git a/mysql-test/suite/sys_vars/t/all_vars.test b/mysql-test/suite/sys_vars/t/all_vars.test index 6a18b5e3d37..e9e7e16687a 100644 --- a/mysql-test/suite/sys_vars/t/all_vars.test +++ b/mysql-test/suite/sys_vars/t/all_vars.test @@ -15,6 +15,25 @@ --source include/not_embedded.inc +# 2010-01-28 OBN Added support to load 'innodb' and 'semisync' if possible. +# As we need to have there variables loaded if the components exist but do +# not want the test skiped if they are not, we cannot use the 'have_xxx' mecanizm. +# Added an 'all_vars-master.opt' file that includes +# "$SEMISYNC_PLUGIN_OPT --loose-innodb" (see $SEMISYNC_PLUGIN_OPT setting in mysql-test-run.pl) +# and logic similar to 'include/have_semisync_plugin.inc' that will load semisync plugin +if (`SELECT @@have_dynamic_loading = 'YES' AND LENGTH('$SEMISYNC_MASTER_PLUGIN') > 0`) +{ + --disable_query_log + # The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' + --replace_regex /\.dll/.so/ + eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN'; + --replace_regex /\.dll/.so/ + eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN'; + --enable_query_log +} + + + # # This test verifies that *all* system variables are tested # by the sys_vars suite. For every system variable @@ -58,3 +77,12 @@ select variable_name as `There should be *no* variables listed below:` from t2 drop table t1; drop table t2; + +# Unloading the semisync plugins in case they were loaded +if (`SELECT @@have_dynamic_loading = 'YES' AND LENGTH('$SEMISYNC_MASTER_PLUGIN') > 0`) +{ + --disable_query_log + UNINSTALL PLUGIN rpl_semi_sync_master; + UNINSTALL PLUGIN rpl_semi_sync_slave; + --enable_query_log +} diff --git a/mysql-test/suite/sys_vars/t/delayed_insert_limit_func.test b/mysql-test/suite/sys_vars/t/delayed_insert_limit_func.test index 8ab825ea31d..60092dbb8e8 100644 --- a/mysql-test/suite/sys_vars/t/delayed_insert_limit_func.test +++ b/mysql-test/suite/sys_vars/t/delayed_insert_limit_func.test @@ -208,7 +208,9 @@ let $wait_condition= WHERE variable_name like 'Not_flushed_delayed_rows'; --source include/wait_condition.inc --echo Asynchronous execute -let $my_select= SELECT COUNT(*) = 22 FROM t1; +# Due to performance and server behaveiour the test observes values between 6 and 22. +# In any case the value must not be outside of that range. +let $my_select= SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1; send; eval $my_select; diff --git a/mysql-test/suite/sys_vars/t/innodb_adaptive_flushing_basic.test b/mysql-test/suite/sys_vars/t/innodb_adaptive_flushing_basic.test new file mode 100644 index 00000000000..236b652f9c6 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_adaptive_flushing_basic.test @@ -0,0 +1,70 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_adaptive_flushing; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_flushing in (0, 1); +select @@global.innodb_adaptive_flushing; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_adaptive_flushing; +show global variables like 'innodb_adaptive_flushing'; +show session variables like 'innodb_adaptive_flushing'; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; + +# +# show that it's writable +# +set global innodb_adaptive_flushing='OFF'; +select @@global.innodb_adaptive_flushing; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +set @@global.innodb_adaptive_flushing=1; +select @@global.innodb_adaptive_flushing; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +set global innodb_adaptive_flushing=0; +select @@global.innodb_adaptive_flushing; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +set @@global.innodb_adaptive_flushing='ON'; +select @@global.innodb_adaptive_flushing; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +--error ER_GLOBAL_VARIABLE +set session innodb_adaptive_flushing='OFF'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_adaptive_flushing='ON'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_adaptive_flushing=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_adaptive_flushing=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_adaptive_flushing=2; +--echo NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_adaptive_flushing=-3; +select @@global.innodb_adaptive_flushing; +select * from information_schema.global_variables where variable_name='innodb_adaptive_flushing'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_flushing'; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_adaptive_flushing='AUTO'; + +# +# Cleanup +# + +SET @@global.innodb_adaptive_flushing = @start_global_value; +SELECT @@global.innodb_adaptive_flushing; diff --git a/mysql-test/suite/sys_vars/t/innodb_adaptive_hash_index_basic.test b/mysql-test/suite/sys_vars/t/innodb_adaptive_hash_index_basic.test new file mode 100644 index 00000000000..d6d48ab460c --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_adaptive_hash_index_basic.test @@ -0,0 +1,70 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_adaptive_hash_index; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_hash_index in (0, 1); +select @@global.innodb_adaptive_hash_index; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_adaptive_hash_index; +show global variables like 'innodb_adaptive_hash_index'; +show session variables like 'innodb_adaptive_hash_index'; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; + +# +# show that it's writable +# +set global innodb_adaptive_hash_index='OFF'; +select @@global.innodb_adaptive_hash_index; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +set @@global.innodb_adaptive_hash_index=1; +select @@global.innodb_adaptive_hash_index; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +set global innodb_adaptive_hash_index=0; +select @@global.innodb_adaptive_hash_index; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +set @@global.innodb_adaptive_hash_index='ON'; +select @@global.innodb_adaptive_hash_index; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +--error ER_GLOBAL_VARIABLE +set session innodb_adaptive_hash_index='OFF'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_adaptive_hash_index='ON'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_adaptive_hash_index=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_adaptive_hash_index=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_adaptive_hash_index=2; +--echo NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_adaptive_hash_index=-3; +select @@global.innodb_adaptive_hash_index; +select * from information_schema.global_variables where variable_name='innodb_adaptive_hash_index'; +select * from information_schema.session_variables where variable_name='innodb_adaptive_hash_index'; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_adaptive_hash_index='AUTO'; + +# +# Cleanup +# + +SET @@global.innodb_adaptive_hash_index = @start_global_value; +SELECT @@global.innodb_adaptive_hash_index; diff --git a/mysql-test/suite/sys_vars/t/innodb_change_buffering_basic.test b/mysql-test/suite/sys_vars/t/innodb_change_buffering_basic.test new file mode 100644 index 00000000000..65e36aa9cb3 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_change_buffering_basic.test @@ -0,0 +1,59 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_change_buffering; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'inserts' and 'none' +select @@global.innodb_change_buffering in ('inserts', 'none'); +select @@global.innodb_change_buffering; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_change_buffering; +show global variables like 'innodb_change_buffering'; +show session variables like 'innodb_change_buffering'; +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; + +# +# show that it's writable +# +set global innodb_change_buffering='none'; +select @@global.innodb_change_buffering; +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; +set @@global.innodb_change_buffering='inserts'; +select @@global.innodb_change_buffering; +select * from information_schema.global_variables where variable_name='innodb_change_buffering'; +select * from information_schema.session_variables where variable_name='innodb_change_buffering'; +--error ER_GLOBAL_VARIABLE +set session innodb_change_buffering='some'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_change_buffering='some'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_change_buffering=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_change_buffering=1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_change_buffering=-2; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_change_buffering=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_change_buffering='some'; + +# +# Cleanup +# + +SET @@global.innodb_change_buffering = @start_global_value; +SELECT @@global.innodb_change_buffering; diff --git a/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test b/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test new file mode 100644 index 00000000000..bfc092f2f05 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test @@ -0,0 +1,55 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_file_format; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'Antelope' and 'Barracuda' +select @@global.innodb_file_format in ('Antelope', 'Barracuda'); +select @@global.innodb_file_format; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_file_format; +show global variables like 'innodb_file_format'; +show session variables like 'innodb_file_format'; +select * from information_schema.global_variables where variable_name='innodb_file_format'; +select * from information_schema.session_variables where variable_name='innodb_file_format'; + +# +# show that it's writable +# +set global innodb_file_format='Antelope'; +select @@global.innodb_file_format; +select * from information_schema.global_variables where variable_name='innodb_file_format'; +select * from information_schema.session_variables where variable_name='innodb_file_format'; +set @@global.innodb_file_format='Barracuda'; +select @@global.innodb_file_format; +select * from information_schema.global_variables where variable_name='innodb_file_format'; +select * from information_schema.session_variables where variable_name='innodb_file_format'; +--error ER_GLOBAL_VARIABLE +set session innodb_file_format='Salmon'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_file_format='Salmon'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_file_format=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_file_format=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_file_format='Salmon'; + +# +# Cleanup +# + +SET @@global.innodb_file_format = @start_global_value; +SELECT @@global.innodb_file_format; diff --git a/mysql-test/suite/sys_vars/t/innodb_file_format_check_basic.test b/mysql-test/suite/sys_vars/t/innodb_file_format_check_basic.test new file mode 100644 index 00000000000..4c60957561c --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_file_format_check_basic.test @@ -0,0 +1,55 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_file_format_check; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'Antelope' and 'Barracuda' +select @@global.innodb_file_format_check in ('Antelope', 'Barracuda'); +select @@global.innodb_file_format_check; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_file_format_check; +show global variables like 'innodb_file_format_check'; +show session variables like 'innodb_file_format_check'; +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; + +# +# show that it's writable +# +set global innodb_file_format_check='Antelope'; +select @@global.innodb_file_format_check; +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; +set @@global.innodb_file_format_check='Barracuda'; +select @@global.innodb_file_format_check; +select * from information_schema.global_variables where variable_name='innodb_file_format_check'; +select * from information_schema.session_variables where variable_name='innodb_file_format_check'; +--error ER_GLOBAL_VARIABLE +set session innodb_file_format_check='Salmon'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_file_format_check='Salmon'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_file_format_check=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_file_format_check=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_file_format_check='Salmon'; + +# +# Cleanup +# + +SET @@global.innodb_file_format_check = @start_global_value; +SELECT @@global.innodb_file_format_check; diff --git a/mysql-test/suite/sys_vars/t/innodb_io_capacity_basic.test b/mysql-test/suite/sys_vars/t/innodb_io_capacity_basic.test new file mode 100644 index 00000000000..3f00b50cf08 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_io_capacity_basic.test @@ -0,0 +1,58 @@ + + +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_io_capacity; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid value 100 or more +select @@global.innodb_io_capacity > 99; +select @@global.innodb_io_capacity; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_io_capacity; +show global variables like 'innodb_io_capacity'; +show session variables like 'innodb_io_capacity'; +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +select * from information_schema.session_variables where variable_name='innodb_io_capacity'; + +# +# show that it's writable +# +set global innodb_io_capacity=123; +select @@global.innodb_io_capacity; +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +select * from information_schema.session_variables where variable_name='innodb_io_capacity'; +--error ER_GLOBAL_VARIABLE +set session innodb_io_capacity=444; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_io_capacity=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_io_capacity=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_io_capacity="foo"; + +set global innodb_io_capacity=7; +select @@global.innodb_io_capacity; +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; +set global innodb_io_capacity=-7; +select @@global.innodb_io_capacity; +select * from information_schema.global_variables where variable_name='innodb_io_capacity'; + +# +# min/max values +# +set global innodb_io_capacity=100; +select @@global.innodb_io_capacity; + +SET @@global.innodb_io_capacity = @start_global_value; +SELECT @@global.innodb_io_capacity; diff --git a/mysql-test/suite/sys_vars/t/innodb_old_blocks_pct_basic.test b/mysql-test/suite/sys_vars/t/innodb_old_blocks_pct_basic.test new file mode 100644 index 00000000000..0dcef3bb09f --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_old_blocks_pct_basic.test @@ -0,0 +1,63 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_old_blocks_pct; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are between 5 and 95 +select @@global.innodb_old_blocks_pct between 5 and 95; +select @@global.innodb_old_blocks_pct; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_old_blocks_pct; +show global variables like 'innodb_old_blocks_pct'; +show session variables like 'innodb_old_blocks_pct'; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +select * from information_schema.session_variables where variable_name='innodb_old_blocks_pct'; + +# +# show that it's writable +# +set global innodb_old_blocks_pct=10; +select @@global.innodb_old_blocks_pct; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +select * from information_schema.session_variables where variable_name='innodb_old_blocks_pct'; +--error ER_GLOBAL_VARIABLE +set session innodb_old_blocks_pct=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_pct=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_pct=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_pct="foo"; + +set global innodb_old_blocks_pct=4; +select @@global.innodb_old_blocks_pct; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +set global innodb_old_blocks_pct=-7; +select @@global.innodb_old_blocks_pct; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; +set global innodb_old_blocks_pct=96; +select @@global.innodb_old_blocks_pct; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_pct'; + +# +# min/max values +# +set global innodb_old_blocks_pct=5; +select @@global.innodb_old_blocks_pct; +set global innodb_old_blocks_pct=95; +select @@global.innodb_old_blocks_pct; + +SET @@global.innodb_old_blocks_pct = @start_global_value; +SELECT @@global.innodb_old_blocks_pct; diff --git a/mysql-test/suite/sys_vars/t/innodb_old_blocks_time_basic.test b/mysql-test/suite/sys_vars/t/innodb_old_blocks_time_basic.test new file mode 100644 index 00000000000..3efec2bbf15 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_old_blocks_time_basic.test @@ -0,0 +1,52 @@ + +# +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_old_blocks_time; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are zero or above +select @@global.innodb_old_blocks_time >=0; +select @@global.innodb_old_blocks_time; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_old_blocks_time; +show global variables like 'innodb_old_blocks_time'; +show session variables like 'innodb_old_blocks_time'; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; +select * from information_schema.session_variables where variable_name='innodb_old_blocks_time'; + +# +# show that it's writable +# +set global innodb_old_blocks_time=10; +select @@global.innodb_old_blocks_time; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; +select * from information_schema.session_variables where variable_name='innodb_old_blocks_time'; +--error ER_GLOBAL_VARIABLE +set session innodb_old_blocks_time=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_time=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_time=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_old_blocks_time="foo"; + +set global innodb_old_blocks_time=-7; +select @@global.innodb_old_blocks_time; +select * from information_schema.global_variables where variable_name='innodb_old_blocks_time'; + +# +# cleanup +# +SET @@global.innodb_old_blocks_time = @start_global_value; +SELECT @@global.innodb_old_blocks_time; diff --git a/mysql-test/suite/sys_vars/t/innodb_read_ahead_threshold_basic.test b/mysql-test/suite/sys_vars/t/innodb_read_ahead_threshold_basic.test new file mode 100644 index 00000000000..1298a28b3d3 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_read_ahead_threshold_basic.test @@ -0,0 +1,60 @@ + + +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_read_ahead_threshold; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are between 0 and 64 +select @@global.innodb_read_ahead_threshold between 0 and 64; +select @@global.innodb_read_ahead_threshold; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_read_ahead_threshold; +show global variables like 'innodb_read_ahead_threshold'; +show session variables like 'innodb_read_ahead_threshold'; +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +select * from information_schema.session_variables where variable_name='innodb_read_ahead_threshold'; + +# +# show that it's writable +# +set global innodb_read_ahead_threshold=10; +select @@global.innodb_read_ahead_threshold; +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +select * from information_schema.session_variables where variable_name='innodb_read_ahead_threshold'; +--error ER_GLOBAL_VARIABLE +set session innodb_read_ahead_threshold=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_read_ahead_threshold=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_read_ahead_threshold=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_read_ahead_threshold="foo"; + +set global innodb_read_ahead_threshold=-7; +select @@global.innodb_read_ahead_threshold; +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; +set global innodb_read_ahead_threshold=96; +select @@global.innodb_read_ahead_threshold; +select * from information_schema.global_variables where variable_name='innodb_read_ahead_threshold'; + +# +# min/max values +# +set global innodb_read_ahead_threshold=0; +select @@global.innodb_read_ahead_threshold; +set global innodb_read_ahead_threshold=64; +select @@global.innodb_read_ahead_threshold; + +SET @@global.innodb_read_ahead_threshold = @start_global_value; +SELECT @@global.innodb_read_ahead_threshold; diff --git a/mysql-test/suite/sys_vars/t/innodb_read_io_threads_basic.test b/mysql-test/suite/sys_vars/t/innodb_read_io_threads_basic.test new file mode 100644 index 00000000000..14426395d6c --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_read_io_threads_basic.test @@ -0,0 +1,26 @@ + +# +# 2010-01-27 OBN - Added (this variable is also covered in innodb_file_io_threads_basic.test) +# + +--source include/have_innodb.inc + +# +# show the global and session values; +# +select @@global.innodb_read_io_threads; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_read_io_threads; +show global variables like 'innodb_read_io_threads'; +show session variables like 'innodb_read_io_threads'; +select * from information_schema.global_variables where variable_name='innodb_read_io_threads'; +select * from information_schema.session_variables where variable_name='innodb_read_io_threads'; + +# +# show that it's read-only +# +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global innodb_read_io_threads=1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set session innodb_read_io_threads=1; + diff --git a/mysql-test/suite/sys_vars/t/innodb_replication_delay_basic.test b/mysql-test/suite/sys_vars/t/innodb_replication_delay_basic.test new file mode 100644 index 00000000000..e495de46611 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_replication_delay_basic.test @@ -0,0 +1,52 @@ + +# +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_replication_delay; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are zero or above +select @@global.innodb_replication_delay >=0; +select @@global.innodb_replication_delay; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_replication_delay; +show global variables like 'innodb_replication_delay'; +show session variables like 'innodb_replication_delay'; +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; +select * from information_schema.session_variables where variable_name='innodb_replication_delay'; + +# +# show that it's writable +# +set global innodb_replication_delay=10; +select @@global.innodb_replication_delay; +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; +select * from information_schema.session_variables where variable_name='innodb_replication_delay'; +--error ER_GLOBAL_VARIABLE +set session innodb_replication_delay=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_replication_delay=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_replication_delay=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_replication_delay="foo"; + +set global innodb_replication_delay=-7; +select @@global.innodb_replication_delay; +select * from information_schema.global_variables where variable_name='innodb_replication_delay'; + +# +# cleanup +# +SET @@global.innodb_replication_delay = @start_global_value; +SELECT @@global.innodb_replication_delay; diff --git a/mysql-test/suite/sys_vars/t/innodb_spin_wait_delay_basic.test b/mysql-test/suite/sys_vars/t/innodb_spin_wait_delay_basic.test new file mode 100644 index 00000000000..8f2eee08b6a --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_spin_wait_delay_basic.test @@ -0,0 +1,52 @@ + +# +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_spin_wait_delay; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are zero or above +select @@global.innodb_spin_wait_delay >=0; +select @@global.innodb_spin_wait_delay; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_spin_wait_delay; +show global variables like 'innodb_spin_wait_delay'; +show session variables like 'innodb_spin_wait_delay'; +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; +select * from information_schema.session_variables where variable_name='innodb_spin_wait_delay'; + +# +# show that it's writable +# +set global innodb_spin_wait_delay=10; +select @@global.innodb_spin_wait_delay; +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; +select * from information_schema.session_variables where variable_name='innodb_spin_wait_delay'; +--error ER_GLOBAL_VARIABLE +set session innodb_spin_wait_delay=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_spin_wait_delay=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_spin_wait_delay=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_spin_wait_delay="foo"; + +set global innodb_spin_wait_delay=-7; +select @@global.innodb_spin_wait_delay; +select * from information_schema.global_variables where variable_name='innodb_spin_wait_delay'; + +# +# cleanup +# +SET @@global.innodb_spin_wait_delay = @start_global_value; +SELECT @@global.innodb_spin_wait_delay; diff --git a/mysql-test/suite/sys_vars/t/innodb_stats_on_metadata_basic.test b/mysql-test/suite/sys_vars/t/innodb_stats_on_metadata_basic.test new file mode 100644 index 00000000000..e6d59997ac6 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_stats_on_metadata_basic.test @@ -0,0 +1,70 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_stats_on_metadata; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are 'ON' and 'OFF' +select @@global.innodb_stats_on_metadata in (0, 1); +select @@global.innodb_stats_on_metadata; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_stats_on_metadata; +show global variables like 'innodb_stats_on_metadata'; +show session variables like 'innodb_stats_on_metadata'; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; + +# +# show that it's writable +# +set global innodb_stats_on_metadata='OFF'; +select @@global.innodb_stats_on_metadata; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +set @@global.innodb_stats_on_metadata=1; +select @@global.innodb_stats_on_metadata; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +set global innodb_stats_on_metadata=0; +select @@global.innodb_stats_on_metadata; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +set @@global.innodb_stats_on_metadata='ON'; +select @@global.innodb_stats_on_metadata; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +--error ER_GLOBAL_VARIABLE +set session innodb_stats_on_metadata='OFF'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_stats_on_metadata='ON'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_stats_on_metadata=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_stats_on_metadata=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_stats_on_metadata=2; +--echo NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_stats_on_metadata=-3; +select @@global.innodb_stats_on_metadata; +select * from information_schema.global_variables where variable_name='innodb_stats_on_metadata'; +select * from information_schema.session_variables where variable_name='innodb_stats_on_metadata'; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_stats_on_metadata='AUTO'; + +# +# Cleanup +# + +SET @@global.innodb_stats_on_metadata = @start_global_value; +SELECT @@global.innodb_stats_on_metadata; diff --git a/mysql-test/suite/sys_vars/t/innodb_stats_sample_pages_basic.test b/mysql-test/suite/sys_vars/t/innodb_stats_sample_pages_basic.test new file mode 100644 index 00000000000..2c91f11405d --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_stats_sample_pages_basic.test @@ -0,0 +1,52 @@ + +# +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_stats_sample_pages; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are one or above +select @@global.innodb_stats_sample_pages >=1; +select @@global.innodb_stats_sample_pages; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_stats_sample_pages; +show global variables like 'innodb_stats_sample_pages'; +show session variables like 'innodb_stats_sample_pages'; +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; +select * from information_schema.session_variables where variable_name='innodb_stats_sample_pages'; + +# +# show that it's writable +# +set global innodb_stats_sample_pages=10; +select @@global.innodb_stats_sample_pages; +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; +select * from information_schema.session_variables where variable_name='innodb_stats_sample_pages'; +--error ER_GLOBAL_VARIABLE +set session innodb_stats_sample_pages=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_stats_sample_pages=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_stats_sample_pages=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_stats_sample_pages="foo"; + +set global innodb_stats_sample_pages=-7; +select @@global.innodb_stats_sample_pages; +select * from information_schema.global_variables where variable_name='innodb_stats_sample_pages'; + +# +# cleanup +# +SET @@global.innodb_stats_sample_pages = @start_global_value; +SELECT @@global.innodb_stats_sample_pages; diff --git a/mysql-test/suite/sys_vars/t/innodb_strict_mode_basic.test b/mysql-test/suite/sys_vars/t/innodb_strict_mode_basic.test new file mode 100644 index 00000000000..53fbdca2d32 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_strict_mode_basic.test @@ -0,0 +1,84 @@ + + +# 2010-01-25 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_strict_mode; +SELECT @start_global_value; + +# +# exists as global and session +# +--echo Valid values are 'ON' and 'OFF' +select @@global.innodb_strict_mode in (0, 1); +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode in (0, 1); +select @@session.innodb_strict_mode; +show global variables like 'innodb_strict_mode'; +show session variables like 'innodb_strict_mode'; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; + +# +# show that it's writable +# +set global innodb_strict_mode='OFF'; +set session innodb_strict_mode='OFF'; +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +set @@global.innodb_strict_mode=1; +set @@session.innodb_strict_mode=1; +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +set global innodb_strict_mode=0; +set session innodb_strict_mode=0; +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; +set @@global.innodb_strict_mode='ON'; +set @@session.innodb_strict_mode='ON'; +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_strict_mode=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set session innodb_strict_mode=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_strict_mode=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set session innodb_strict_mode=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_strict_mode=2; +--error ER_WRONG_VALUE_FOR_VAR +set session innodb_strict_mode=2; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_strict_mode='AUTO'; +--error ER_WRONG_VALUE_FOR_VAR +set session innodb_strict_mode='AUTO'; +--echo NOTE: The following should fail with ER_WRONG_VALUE_FOR_VAR (BUG#50643) +set global innodb_strict_mode=-3; +set session innodb_strict_mode=-7; +select @@global.innodb_strict_mode; +select @@session.innodb_strict_mode; +select * from information_schema.global_variables where variable_name='innodb_strict_mode'; +select * from information_schema.session_variables where variable_name='innodb_strict_mode'; + +# +# Cleanup +# + +SET @@global.innodb_strict_mode = @start_global_value; +SELECT @@global.innodb_strict_mode; diff --git a/mysql-test/suite/sys_vars/t/innodb_thread_sleep_delay_basic.test b/mysql-test/suite/sys_vars/t/innodb_thread_sleep_delay_basic.test new file mode 100644 index 00000000000..7156f309a64 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_thread_sleep_delay_basic.test @@ -0,0 +1,52 @@ + +# +# 2010-01-27 - Added +# + +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_thread_sleep_delay; +SELECT @start_global_value; + +# +# exists as global only +# +--echo Valid values are zero or above +select @@global.innodb_thread_sleep_delay >=0; +select @@global.innodb_thread_sleep_delay; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_thread_sleep_delay; +show global variables like 'innodb_thread_sleep_delay'; +show session variables like 'innodb_thread_sleep_delay'; +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; +select * from information_schema.session_variables where variable_name='innodb_thread_sleep_delay'; + +# +# show that it's writable +# +set global innodb_thread_sleep_delay=10; +select @@global.innodb_thread_sleep_delay; +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; +select * from information_schema.session_variables where variable_name='innodb_thread_sleep_delay'; +--error ER_GLOBAL_VARIABLE +set session innodb_thread_sleep_delay=1; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_thread_sleep_delay=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_thread_sleep_delay=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_thread_sleep_delay="foo"; + +set global innodb_thread_sleep_delay=-7; +select @@global.innodb_thread_sleep_delay; +select * from information_schema.global_variables where variable_name='innodb_thread_sleep_delay'; + +# +# cleanup +# +SET @@global.innodb_thread_sleep_delay = @start_global_value; +SELECT @@global.innodb_thread_sleep_delay; diff --git a/mysql-test/suite/sys_vars/t/innodb_use_sys_malloc_basic.test b/mysql-test/suite/sys_vars/t/innodb_use_sys_malloc_basic.test new file mode 100644 index 00000000000..21f3e904547 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_use_sys_malloc_basic.test @@ -0,0 +1,28 @@ + +# +# 2010-01-27 OBN - Added +# + +--source include/have_innodb.inc + +# +# show the global and session values; +# +--echo Valid values are 'ON' and 'OFF' +select @@global.innodb_adaptive_flushing in (0, 1); +select @@global.innodb_use_sys_malloc; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_use_sys_malloc; +show global variables like 'innodb_use_sys_malloc'; +show session variables like 'innodb_use_sys_malloc'; +select * from information_schema.global_variables where variable_name='innodb_use_sys_malloc'; +select * from information_schema.session_variables where variable_name='innodb_use_sys_malloc'; + +# +# show that it's read-only +# +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global innodb_use_sys_malloc=1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set session innodb_use_sys_malloc=1; + diff --git a/mysql-test/suite/sys_vars/t/innodb_version_basic.test b/mysql-test/suite/sys_vars/t/innodb_version_basic.test new file mode 100644 index 00000000000..6ee2adf6cf9 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_version_basic.test @@ -0,0 +1,28 @@ + +# +# 2010-01-27 OBN - Added +# + +--source include/have_innodb.inc + +# +# show the global and session values; +# +--let $inno_ver= `select @@global.innodb_version` +--replace_result $inno_ver x.y.z +select @@global.innodb_version; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_version; +--echo show global variables like 'innodb_version' disabled so to not change with every version; +--echo show session variables like 'innodb_version' disabled so to not change with every version; +select VARIABLE_VALUE=@@global.innodb_version from information_schema.global_variables where variable_name='innodb_version'; +select VARIABLE_VALUE=@@global.innodb_version from information_schema.session_variables where variable_name='innodb_version'; + +# +# show that it's read-only +# +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global innodb_version=1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set session innodb_version=1; + diff --git a/mysql-test/suite/sys_vars/t/innodb_write_io_threads_basic.test b/mysql-test/suite/sys_vars/t/innodb_write_io_threads_basic.test new file mode 100644 index 00000000000..8efa6576a66 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_write_io_threads_basic.test @@ -0,0 +1,26 @@ + +# +# 2010-01-27 OBN - Added (this variable is also covered in innodb_file_io_threads_basic.test) +# + +--source include/have_innodb.inc + +# +# show the global and session values; +# +select @@global.innodb_write_io_threads; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_write_io_threads; +show global variables like 'innodb_write_io_threads'; +show session variables like 'innodb_write_io_threads'; +select * from information_schema.global_variables where variable_name='innodb_write_io_threads'; +select * from information_schema.session_variables where variable_name='innodb_write_io_threads'; + +# +# show that it's read-only +# +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global innodb_write_io_threads=1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set session innodb_write_io_threads=1; + diff --git a/mysql-test/suite/sys_vars/t/last_insert_id_basic.test b/mysql-test/suite/sys_vars/t/last_insert_id_basic.test index a2e0116f11d..ca971c660ca 100644 --- a/mysql-test/suite/sys_vars/t/last_insert_id_basic.test +++ b/mysql-test/suite/sys_vars/t/last_insert_id_basic.test @@ -2,6 +2,8 @@ # # exists as a session only # +# 2010-01-20 OBN - Added check for variable value matching I_S tables +# --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@global.last_insert_id; select @@session.last_insert_id; @@ -13,10 +15,16 @@ select * from information_schema.session_variables where variable_name='last_ins # # show that it's writable # -set session last_insert_id=1; -select @@session.last_insert_id; --error ER_LOCAL_VARIABLE -set global last_insert_id=1; +set global last_insert_id=99; +set session last_insert_id=42; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@global.last_insert_id; +select @@session.last_insert_id; +show global variables like 'last_insert_id'; +show session variables like 'last_insert_id'; +select * from information_schema.global_variables where variable_name='last_insert_id'; +select * from information_schema.session_variables where variable_name='last_insert_id'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/lc_messages_basic.test b/mysql-test/suite/sys_vars/t/lc_messages_basic.test index f8a25738285..a76381e8cb4 100644 --- a/mysql-test/suite/sys_vars/t/lc_messages_basic.test +++ b/mysql-test/suite/sys_vars/t/lc_messages_basic.test @@ -1,3 +1,8 @@ +# +# 2010-01-20 OBN - Added check for variable value matching I_S tables +# + + SET @start_global_value = @@global.lc_messages; SELECT @start_global_value; @@ -19,9 +24,11 @@ select @@global.lc_messages; set session lc_messages=2; select @@session.lc_messages; set global lc_messages="en_US"; -select @@global.lc_messages; set session lc_messages="en_GB"; +select @@global.lc_messages; select @@session.lc_messages; +select * from information_schema.global_variables where variable_name='lc_messages'; +select * from information_schema.session_variables where variable_name='lc_messages'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/log_slow_queries_basic.test b/mysql-test/suite/sys_vars/t/log_slow_queries_basic.test index 95dda5b73c9..22fe4dfaa6e 100644 --- a/mysql-test/suite/sys_vars/t/log_slow_queries_basic.test +++ b/mysql-test/suite/sys_vars/t/log_slow_queries_basic.test @@ -11,7 +11,7 @@ # Creation Date: 2008-03-16 # # Author: Salman Rawala # # # -# Description: Test Cases of Dynamic System Variable "log_slow_queries" # +# Description: Test Cases of Dynamic System Variable "log_slow_queries" # # that checks behavior of this variable in the following ways # # * Default Value # # * Valid & Invalid values # @@ -21,6 +21,10 @@ # Reference: http://dev.mysql.com/doc/refman/5.1/en/ # # server-options.html#option_mysqld_event-scheduler # # # +# # +# 2010-01-20 OBN - Added check for variable value matching I_S tables after # +# variable value change # +# # ################################################################################ --source include/load_sysvars.inc @@ -116,8 +120,14 @@ WHERE VARIABLE_NAME='log_slow_queries'; SET @@global.log_slow_queries = 0; SELECT @@global.log_slow_queries; +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; SET @@global.log_slow_queries = 1; SELECT @@global.log_slow_queries; +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; --echo '#---------------------FN_DYNVARS_004_07----------------------#' ################################################################### @@ -126,8 +136,14 @@ SELECT @@global.log_slow_queries; SET @@global.log_slow_queries = TRUE; SELECT @@global.log_slow_queries; +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; SET @@global.log_slow_queries = FALSE; SELECT @@global.log_slow_queries; +SELECT IF(@@global.log_slow_queries, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='log_slow_queries'; --echo '#---------------------FN_DYNVARS_004_08----------------------#' ############################################################################## diff --git a/mysql-test/suite/sys_vars/t/lower_case_file_system_basic.test b/mysql-test/suite/sys_vars/t/lower_case_file_system_basic.test index 6c15f188880..6c2af693128 100644 --- a/mysql-test/suite/sys_vars/t/lower_case_file_system_basic.test +++ b/mysql-test/suite/sys_vars/t/lower_case_file_system_basic.test @@ -1,17 +1,25 @@ # # only global # +# 2010-01-20 OBN - Modified to include check for valid values +# - Added check for variable value matching I_S tables +# select @@global.lower_case_file_system=2; --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@session.lower_case_file_system; ---replace_column 2 # -show global variables like 'lower_case_file_system'; ---replace_column 2 # -show session variables like 'lower_case_file_system'; ---replace_column 2 # -select * from information_schema.global_variables where variable_name='lower_case_file_system'; ---replace_column 2 # -select * from information_schema.session_variables where variable_name='lower_case_file_system'; + +# Show variable has a valid value +SELECT @@global.lower_case_file_system in (0,1); + +# Show that value of the variable matches the value in the GLOBAL I_S table +SELECT IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_file_system'; + +# Show that value of the variable matches the value in the SESSION I_S table +SELECT IF(@@global.lower_case_file_system, "ON", "OFF") = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.SESSION_VARIABLES +WHERE VARIABLE_NAME='lower_case_file_system'; # # show that it's read-only diff --git a/mysql-test/suite/sys_vars/t/lower_case_table_names_basic.test b/mysql-test/suite/sys_vars/t/lower_case_table_names_basic.test index 8d6a3bb5ca6..eaa6c95974e 100644 --- a/mysql-test/suite/sys_vars/t/lower_case_table_names_basic.test +++ b/mysql-test/suite/sys_vars/t/lower_case_table_names_basic.test @@ -1,17 +1,26 @@ # # only global # +# 2010-01-20 OBN - Modified to include check for valid values +# - Added check for variable value matching I_S tables +# + select @@global.lower_case_table_names=20; --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@session.lower_case_table_names; ---replace_column 2 # -show global variables like 'lower_case_table_names'; ---replace_column 2 # -show session variables like 'lower_case_table_names'; ---replace_column 2 # -select * from information_schema.global_variables where variable_name='lower_case_table_names'; ---replace_column 2 # -select * from information_schema.session_variables where variable_name='lower_case_table_names'; + +# Show variable has a valid value +SELECT @@global.lower_case_table_names in (0,1,2); + +# Show that value of the variable matches the value in the GLOBAL I_S table +SELECT @@global.lower_case_table_names = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_table_names'; + +# Show that value of the variable matches the value in the SESSION I_S table +SELECT @@global.lower_case_table_names = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='lower_case_table_names'; # # show that it's read-only diff --git a/mysql-test/suite/sys_vars/t/max_join_size_basic.test b/mysql-test/suite/sys_vars/t/max_join_size_basic.test index 7566ab11520..bbe13457ee7 100644 --- a/mysql-test/suite/sys_vars/t/max_join_size_basic.test +++ b/mysql-test/suite/sys_vars/t/max_join_size_basic.test @@ -1,3 +1,11 @@ + + +# +# 2010-01-20 - OBN - Added check for variable value sameas I_S table +# after variable value change +# + + SET @start_global_value = @@global.max_join_size; SELECT @start_global_value; @@ -15,9 +23,13 @@ select * from information_schema.session_variables where variable_name='max_join # show that it's writable # set global max_join_size=10; -select @@global.max_join_size; set session max_join_size=20; +select @@global.max_join_size; select @@session.max_join_size; +show global variables like 'max_join_size'; +show session variables like 'max_join_size'; +select * from information_schema.global_variables where variable_name='max_join_size'; +select * from information_schema.session_variables where variable_name='max_join_size'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/old_alter_table_basic.test b/mysql-test/suite/sys_vars/t/old_alter_table_basic.test index 32d0f45ad25..cce180fea67 100644 --- a/mysql-test/suite/sys_vars/t/old_alter_table_basic.test +++ b/mysql-test/suite/sys_vars/t/old_alter_table_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-20 OBN - added check of I_S values after variable value changed +# + SET @start_global_value = @@global.old_alter_table; SELECT @start_global_value; @@ -15,9 +20,13 @@ select * from information_schema.session_variables where variable_name='old_alte # show that it's writable # set global old_alter_table=1; -select @@global.old_alter_table; set session old_alter_table=ON; +select @@global.old_alter_table; select @@session.old_alter_table; +show global variables like 'old_alter_table'; +show session variables like 'old_alter_table'; +select * from information_schema.global_variables where variable_name='old_alter_table'; +select * from information_schema.session_variables where variable_name='old_alter_table'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/optimizer_switch_basic.test b/mysql-test/suite/sys_vars/t/optimizer_switch_basic.test index 32a77c90b34..4267b3726aa 100644 --- a/mysql-test/suite/sys_vars/t/optimizer_switch_basic.test +++ b/mysql-test/suite/sys_vars/t/optimizer_switch_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-20 OBN Added check for I_S values after variable value changed +# + SET @start_global_value = @@global.optimizer_switch; SELECT @start_global_value; @@ -15,13 +20,17 @@ select * from information_schema.session_variables where variable_name='optimize # show that it's writable # set global optimizer_switch=10; -select @@global.optimizer_switch; set session optimizer_switch=5; +select @@global.optimizer_switch; select @@session.optimizer_switch; set global optimizer_switch="index_merge_sort_union=on"; -select @@global.optimizer_switch; set session optimizer_switch="index_merge=off"; +select @@global.optimizer_switch; select @@session.optimizer_switch; +show global variables like 'optimizer_switch'; +show session variables like 'optimizer_switch'; +select * from information_schema.global_variables where variable_name='optimizer_switch'; +select * from information_schema.session_variables where variable_name='optimizer_switch'; set session optimizer_switch="default"; select @@session.optimizer_switch; diff --git a/mysql-test/suite/sys_vars/t/profiling_basic.test b/mysql-test/suite/sys_vars/t/profiling_basic.test index aef56e50900..da54d5a207d 100644 --- a/mysql-test/suite/sys_vars/t/profiling_basic.test +++ b/mysql-test/suite/sys_vars/t/profiling_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-20 OBN - Added check for I_S values after variable value change +# + --source include/have_profiling.inc SET @start_global_value = @@global.profiling; @@ -17,9 +22,21 @@ select * from information_schema.session_variables where variable_name='profilin # show that it's writable # set global profiling=1; -select @@global.profiling; set session profiling=ON; +select @@global.profiling; +select @@session.profiling; +show global variables like 'profiling'; +show session variables like 'profiling'; +select * from information_schema.global_variables where variable_name='profiling'; +select * from information_schema.session_variables where variable_name='profiling'; +set global profiling=0; +set session profiling=OFF; +select @@global.profiling; select @@session.profiling; +show global variables like 'profiling'; +show session variables like 'profiling'; +select * from information_schema.global_variables where variable_name='profiling'; +select * from information_schema.session_variables where variable_name='profiling'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/profiling_history_size_basic.test b/mysql-test/suite/sys_vars/t/profiling_history_size_basic.test index 01d3533be3d..26fdc55328b 100644 --- a/mysql-test/suite/sys_vars/t/profiling_history_size_basic.test +++ b/mysql-test/suite/sys_vars/t/profiling_history_size_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-20 OBN Added check for variable and I_S values after incorrect change attempt +# + --source include/have_profiling.inc SET @start_global_value = @@global.profiling_history_size; @@ -17,9 +22,13 @@ select * from information_schema.session_variables where variable_name='profilin # show that it's writable # set global profiling_history_size=10; -select @@global.profiling_history_size; set session profiling_history_size=20; +select @@global.profiling_history_size; select @@session.profiling_history_size; +show global variables like 'profiling_history_size'; +show session variables like 'profiling_history_size'; +select * from information_schema.global_variables where variable_name='profiling_history_size'; +select * from information_schema.session_variables where variable_name='profiling_history_size'; # # incorrect assignments diff --git a/mysql-test/suite/sys_vars/t/pseudo_thread_id_basic.test b/mysql-test/suite/sys_vars/t/pseudo_thread_id_basic.test index a948f2a8ff0..fef3e906869 100644 --- a/mysql-test/suite/sys_vars/t/pseudo_thread_id_basic.test +++ b/mysql-test/suite/sys_vars/t/pseudo_thread_id_basic.test @@ -2,21 +2,37 @@ # # exists as a session only # +# 2010-01-20 OBN - Added check for session I_S values being equal to variable value +# - Added check for session variable value being numberic +# + --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@global.pseudo_thread_id; -select @@session.pseudo_thread_id=0; + +# Check the variable has a valid numeric value (assumed to be less then 10000) +select @@session.pseudo_thread_id between 1 and 10000; + +--echo should be empty show global variables like 'pseudo_thread_id'; + +# Check that shows returns a value (can't confirm the actual one) --replace_column 2 # show session variables like 'pseudo_thread_id'; + +# Global I_S variable is empty +--echo should be empty select * from information_schema.global_variables where variable_name='pseudo_thread_id'; ---replace_column 2 # -select * from information_schema.session_variables where variable_name='pseudo_thread_id'; + +# Check that I_S value is same as variable +select @@session.pseudo_thread_id = variable_value from information_schema.session_variables where variable_name='pseudo_thread_id'; # # show that it's writable # -set session pseudo_thread_id=1; +set session pseudo_thread_id=42; select @@session.pseudo_thread_id; +select * from information_schema.global_variables where variable_name='pseudo_thread_id'; +select variable_value from information_schema.session_variables where variable_name='pseudo_thread_id'; --error ER_LOCAL_VARIABLE set global pseudo_thread_id=1; diff --git a/mysql-test/suite/sys_vars/t/rand_seed1_basic.test b/mysql-test/suite/sys_vars/t/rand_seed1_basic.test index 79c946a3d2f..3745d2fcb1e 100644 --- a/mysql-test/suite/sys_vars/t/rand_seed1_basic.test +++ b/mysql-test/suite/sys_vars/t/rand_seed1_basic.test @@ -2,6 +2,8 @@ # # exists as a session only # +# 2010-01-20 OBN - Added check for I_S value after variable value change +# --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@global.rand_seed1; select @@session.rand_seed1; @@ -11,10 +13,12 @@ select * from information_schema.global_variables where variable_name='rand_seed select * from information_schema.session_variables where variable_name='rand_seed1'; # -# show that it's writable +# show that it's writable (note value can be set but not read - returned value is zero) # set session rand_seed1=1; select @@session.rand_seed1; +select * from information_schema.global_variables where variable_name='rand_seed1'; +select * from information_schema.session_variables where variable_name='rand_seed1'; --error ER_LOCAL_VARIABLE set global rand_seed1=1; diff --git a/mysql-test/suite/sys_vars/t/rand_seed2_basic.test b/mysql-test/suite/sys_vars/t/rand_seed2_basic.test index 18e2a62557c..7a5abcd340b 100644 --- a/mysql-test/suite/sys_vars/t/rand_seed2_basic.test +++ b/mysql-test/suite/sys_vars/t/rand_seed2_basic.test @@ -2,6 +2,9 @@ # # exists as a session only # +# +# 2010-01-20 OBN - Added check for I_S value after variable value change +# --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@global.rand_seed2; select @@session.rand_seed2; @@ -11,10 +14,12 @@ select * from information_schema.global_variables where variable_name='rand_seed select * from information_schema.session_variables where variable_name='rand_seed2'; # -# show that it's writable +# show that it's writable (note value can be set but not read - returned value is zero) # set session rand_seed2=1; select @@session.rand_seed2; +select * from information_schema.global_variables where variable_name='rand_seed2'; +select * from information_schema.session_variables where variable_name='rand_seed2'; --error ER_LOCAL_VARIABLE set global rand_seed2=1; diff --git a/mysql-test/suite/sys_vars/t/relay_log_recovery_basic.test b/mysql-test/suite/sys_vars/t/relay_log_recovery_basic.test index 57c28468bd1..a6f218a59ae 100644 --- a/mysql-test/suite/sys_vars/t/relay_log_recovery_basic.test +++ b/mysql-test/suite/sys_vars/t/relay_log_recovery_basic.test @@ -1,3 +1,9 @@ + + +# +# 2010-01-10 - Added check for I_S values aver variable value change +# + --source include/not_embedded.inc SET @start_global_value = @@global.relay_log_recovery; @@ -19,8 +25,12 @@ select * from information_schema.session_variables where variable_name='relay_lo # set global relay_log_recovery=1; select @@global.relay_log_recovery; +select * from information_schema.global_variables where variable_name='relay_log_recovery'; +select * from information_schema.session_variables where variable_name='relay_log_recovery'; set global relay_log_recovery=OFF; select @@global.relay_log_recovery; +select * from information_schema.global_variables where variable_name='relay_log_recovery'; +select * from information_schema.session_variables where variable_name='relay_log_recovery'; --error ER_GLOBAL_VARIABLE set session relay_log_recovery=1; diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test new file mode 100644 index 00000000000..749695e035c --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test @@ -0,0 +1,64 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN'; +select @@global.rpl_semi_sync_master_enabled; +SET @start_global_value = @@global.rpl_semi_sync_master_enabled; + +select @@global.rpl_semi_sync_master_enabled in (0,1); +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_enabled; +show global variables like 'rpl_semi_sync_master_enabled'; +show session variables like 'rpl_semi_sync_master_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; + +# +# show that it's writable +# +set global rpl_semi_sync_master_enabled=0; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_enabled=0; +select @@global.rpl_semi_sync_master_enabled; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_enabled; +show global variables like 'rpl_semi_sync_master_enabled'; +show session variables like 'rpl_semi_sync_master_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; +set global rpl_semi_sync_master_enabled=1; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_enabled=1; +select @@global.rpl_semi_sync_master_enabled; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_enabled; +show global variables like 'rpl_semi_sync_master_enabled'; +show session variables like 'rpl_semi_sync_master_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_enabled'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_enabled=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_enabled=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global rpl_semi_sync_master_enabled="some text"; + + +# +# Cleanup +# +SET @@global.rpl_semi_sync_master_enabled = @start_global_value; +select @@global.rpl_semi_sync_master_enabled; +UNINSTALL PLUGIN rpl_semi_sync_master; + diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic.test new file mode 100644 index 00000000000..16389c23d54 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic.test @@ -0,0 +1,54 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN'; +select @@global.rpl_semi_sync_master_timeout; +SET @start_global_value = @@global.rpl_semi_sync_master_timeout; + +--echo Assuming value will not be more then 100 sec +select @@global.rpl_semi_sync_master_timeout between 1 and 100000; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_timeout; +show global variables like 'rpl_semi_sync_master_timeout'; +show session variables like 'rpl_semi_sync_master_timeout'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_timeout'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_timeout'; + +# +# show that it's writable +# +set global rpl_semi_sync_master_timeout=42; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_timeout=99; +select @@global.rpl_semi_sync_master_timeout; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_timeout; +show global variables like 'rpl_semi_sync_master_timeout'; +show session variables like 'rpl_semi_sync_master_timeout'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_timeout'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_timeout'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_timeout=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_timeout=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_timeout="some text"; + + +# +# Cleanup +# +SET @@global.rpl_semi_sync_master_timeout = @start_global_value; +select @@global.rpl_semi_sync_master_timeout; +UNINSTALL PLUGIN rpl_semi_sync_master; + diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic.test new file mode 100644 index 00000000000..c23aa1da688 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic.test @@ -0,0 +1,62 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN'; +select @@global.rpl_semi_sync_master_trace_level; +SET @start_global_value = @@global.rpl_semi_sync_master_trace_level; + +select @@global.rpl_semi_sync_master_trace_level in (1,16,32,64); +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_trace_level; +show global variables like 'rpl_semi_sync_master_trace_level'; +show session variables like 'rpl_semi_sync_master_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; + +# +# show that it's writable +# +set global rpl_semi_sync_master_trace_level=16; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_trace_level=99; +select @@global.rpl_semi_sync_master_trace_level; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_trace_level; +show global variables like 'rpl_semi_sync_master_trace_level'; +show session variables like 'rpl_semi_sync_master_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; + +--echo NOTE: Value can also be set to values that are combinations of values +set global rpl_semi_sync_master_trace_level=42; +select @@global.rpl_semi_sync_master_trace_level; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_trace_level; +show global variables like 'rpl_semi_sync_master_trace_level'; +show session variables like 'rpl_semi_sync_master_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_trace_level'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_trace_level=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_trace_level=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_trace_level="some text"; + +# +# Cleanup +# +SET @@global.rpl_semi_sync_master_trace_level = @start_global_value; +select @@global.rpl_semi_sync_master_trace_level; +UNINSTALL PLUGIN rpl_semi_sync_master; + diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic.test new file mode 100644 index 00000000000..9686a0e0d9a --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic.test @@ -0,0 +1,64 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN'; +select @@global.rpl_semi_sync_master_wait_no_slave; +SET @start_global_value = @@global.rpl_semi_sync_master_wait_no_slave; + +select @@global.rpl_semi_sync_master_wait_no_slave in (0,1); +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_wait_no_slave; +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; + +# +# show that it's writable +# +set global rpl_semi_sync_master_wait_no_slave=0; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_wait_no_slave=0; +select @@global.rpl_semi_sync_master_wait_no_slave; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_wait_no_slave; +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +set global rpl_semi_sync_master_wait_no_slave=1; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_master_wait_no_slave=1; +select @@global.rpl_semi_sync_master_wait_no_slave; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_master_wait_no_slave; +show global variables like 'rpl_semi_sync_master_wait_no_slave'; +show session variables like 'rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_master_wait_no_slave'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_wait_no_slave=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_master_wait_no_slave=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global rpl_semi_sync_master_wait_no_slave="some text"; + + +# +# Cleanup +# +SET @@global.rpl_semi_sync_master_wait_no_slave = @start_global_value; +select @@global.rpl_semi_sync_master_wait_no_slave; +UNINSTALL PLUGIN rpl_semi_sync_master; + diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic.test new file mode 100644 index 00000000000..0bb16cfd38e --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic.test @@ -0,0 +1,65 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN'; +select @@global.rpl_semi_sync_slave_enabled; +SET @start_global_value = @@global.rpl_semi_sync_slave_enabled; + +select @@global.rpl_semi_sync_slave_enabled in (0,1); +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_enabled; +show global variables like 'rpl_semi_sync_slave_enabled'; +show session variables like 'rpl_semi_sync_slave_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; + +# +# show that it's writable +# +set global rpl_semi_sync_slave_enabled=0; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_slave_enabled=0; +select @@global.rpl_semi_sync_slave_enabled; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_enabled; +show global variables like 'rpl_semi_sync_slave_enabled'; +show session variables like 'rpl_semi_sync_slave_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; +set global rpl_semi_sync_slave_enabled=1; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_slave_enabled=1; +select @@global.rpl_semi_sync_slave_enabled; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_enabled; +show global variables like 'rpl_semi_sync_slave_enabled'; +show session variables like 'rpl_semi_sync_slave_enabled'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_enabled'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_enabled'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_slave_enabled=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_slave_enabled=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global rpl_semi_sync_slave_enabled="some text"; +--error ER_WRONG_VALUE_FOR_VAR + + +# +# Cleanup +# +SET @@global.rpl_semi_sync_slave_enabled = @start_global_value; +select @@global.rpl_semi_sync_slave_enabled; +UNINSTALL PLUGIN rpl_semi_sync_slave; + diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic-master.opt b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic-master.opt new file mode 100644 index 00000000000..58029d28ace --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic.test new file mode 100644 index 00000000000..2bdf09f2a7f --- /dev/null +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic.test @@ -0,0 +1,62 @@ + +# +# exists as a global only +# +# 2010-01-21 OBN - Added +# +source include/have_semisync_plugin.inc; +# The following is to prevent a mis-match on windows that has the name of of the lib ending with 'dll' +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN'; +select @@global.rpl_semi_sync_slave_trace_level; +SET @start_global_value = @@global.rpl_semi_sync_slave_trace_level; + +select @@global.rpl_semi_sync_slave_trace_level in (1,16,32,64); +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_trace_level; +show global variables like 'rpl_semi_sync_slave_trace_level'; +show session variables like 'rpl_semi_sync_slave_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; + +# +# show that it's writable +# +set global rpl_semi_sync_slave_trace_level=16; +--error ER_GLOBAL_VARIABLE +set session rpl_semi_sync_slave_trace_level=99; +select @@global.rpl_semi_sync_slave_trace_level; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_trace_level; +show global variables like 'rpl_semi_sync_slave_trace_level'; +show session variables like 'rpl_semi_sync_slave_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; + +--echo NOTE: Value can also be set to values that are combinations of values +set global rpl_semi_sync_slave_trace_level=42; +select @@global.rpl_semi_sync_slave_trace_level; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.rpl_semi_sync_slave_trace_level; +show global variables like 'rpl_semi_sync_slave_trace_level'; +show session variables like 'rpl_semi_sync_slave_trace_level'; +select * from information_schema.global_variables where variable_name='rpl_semi_sync_slave_trace_level'; +select * from information_schema.session_variables where variable_name='rpl_semi_sync_slave_trace_level'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_slave_trace_level=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_slave_trace_level=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global rpl_semi_sync_slave_trace_level="some text"; + +# +# Cleanup +# +SET @@global.rpl_semi_sync_slave_trace_level = @start_global_value; +select @@global.rpl_semi_sync_slave_trace_level; +UNINSTALL PLUGIN rpl_semi_sync_slave; + diff --git a/mysql-test/suite/sys_vars/t/sql_log_update_basic.test b/mysql-test/suite/sys_vars/t/sql_log_update_basic.test index c48840d4a81..9b9f6f375b6 100644 --- a/mysql-test/suite/sys_vars/t/sql_log_update_basic.test +++ b/mysql-test/suite/sys_vars/t/sql_log_update_basic.test @@ -1,3 +1,9 @@ + +# +# 2010-01-20 OBN - Added check of I_S tables after variable value changes. +# - Added value change to ON/OFF to ensure change of current value +# + --source include/have_profiling.inc SET @start_global_value = @@global.sql_log_update; @@ -17,9 +23,21 @@ select * from information_schema.session_variables where variable_name='sql_log_ # show that it's writable # set global sql_log_update=1; -select @@global.sql_log_update; set session sql_log_update=ON; +select @@global.sql_log_update; +select @@session.sql_log_update; +show global variables like 'sql_log_update'; +show session variables like 'sql_log_update'; +select * from information_schema.global_variables where variable_name='sql_log_update'; +select * from information_schema.session_variables where variable_name='sql_log_update'; +set global sql_log_update=0; +set session sql_log_update=OFF; +select @@global.sql_log_update; select @@session.sql_log_update; +show global variables like 'sql_log_update'; +show session variables like 'sql_log_update'; +select * from information_schema.global_variables where variable_name='sql_log_update'; +select * from information_schema.session_variables where variable_name='sql_log_update'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/sql_max_join_size_basic.test b/mysql-test/suite/sys_vars/t/sql_max_join_size_basic.test index bafa11379aa..9a72846b29c 100644 --- a/mysql-test/suite/sys_vars/t/sql_max_join_size_basic.test +++ b/mysql-test/suite/sys_vars/t/sql_max_join_size_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-20 OBN - Added check of I_S values after variable value change +# + SET @start_global_value = @@global.sql_max_join_size; SELECT @start_global_value; @@ -15,9 +20,13 @@ select * from information_schema.session_variables where variable_name='sql_max_ # show that it's writable # set global sql_max_join_size=10; -select @@global.sql_max_join_size; set session sql_max_join_size=20; +select @@global.sql_max_join_size; select @@session.sql_max_join_size; +show global variables like 'sql_max_join_size'; +show session variables like 'sql_max_join_size'; +select * from information_schema.global_variables where variable_name='sql_max_join_size'; +select * from information_schema.session_variables where variable_name='sql_max_join_size'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/sql_select_limit_basic.test b/mysql-test/suite/sys_vars/t/sql_select_limit_basic.test index 0b941d25f42..c6bc5962205 100644 --- a/mysql-test/suite/sys_vars/t/sql_select_limit_basic.test +++ b/mysql-test/suite/sys_vars/t/sql_select_limit_basic.test @@ -1,3 +1,8 @@ + +# +# 2010-01-10 OBN - Added check for I_S values after change of variable value +# + SET @start_global_value = @@global.sql_select_limit; SELECT @start_global_value; @@ -15,9 +20,13 @@ select * from information_schema.session_variables where variable_name='sql_sele # show that it's writable # set global sql_select_limit=10; -select @@global.sql_select_limit; set session sql_select_limit=20; +select @@global.sql_select_limit; select @@session.sql_select_limit; +show global variables like 'sql_select_limit'; +show session variables like 'sql_select_limit'; +select * from information_schema.global_variables where variable_name='sql_select_limit'; +select * from information_schema.session_variables where variable_name='sql_select_limit'; # # incorrect types diff --git a/mysql-test/suite/sys_vars/t/thread_cache_size_basic.test b/mysql-test/suite/sys_vars/t/thread_cache_size_basic.test index 48a4c0797e5..22aaff6d426 100644 --- a/mysql-test/suite/sys_vars/t/thread_cache_size_basic.test +++ b/mysql-test/suite/sys_vars/t/thread_cache_size_basic.test @@ -1,4 +1,8 @@ +# +# 2010-01-20 OBN - Added check of I_S values after variable value change +# + SET @start_global_value = @@global.thread_cache_size; SELECT @start_global_value; @@ -18,6 +22,8 @@ select * from information_schema.session_variables where variable_name='thread_c # set global thread_cache_size=1; select @@global.thread_cache_size; +select * from information_schema.global_variables where variable_name='thread_cache_size'; +select * from information_schema.session_variables where variable_name='thread_cache_size'; --error ER_GLOBAL_VARIABLE set session thread_cache_size=1; diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 2bfe6dbaa62..54c662bccf2 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -1089,3 +1089,31 @@ ALTER TABLE t1 ADD i INT UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 1; DROP TABLE t1; + + +# +# Bug#50542 5.5.x doesn't check length of key prefixes: +# corruption and crash results +# +# This case is related to Bug#31031 (above) +# A statement where the index key is larger/wider than +# the column type, should cause an error +# +--error ER_WRONG_SUB_KEY +CREATE TABLE t1 (a CHAR(1), PRIMARY KEY (a(255))); + +# Test other variants of creating indices +CREATE TABLE t1 (a CHAR(1)); +# ALTER TABLE +--error ER_WRONG_SUB_KEY +ALTER TABLE t1 ADD PRIMARY KEY (a(20)); +--error ER_WRONG_SUB_KEY +ALTER TABLE t1 ADD KEY (a(20)); +# CREATE INDEX +--error ER_WRONG_SUB_KEY +CREATE UNIQUE INDEX i1 ON t1 (a(20)); +--error ER_WRONG_SUB_KEY +CREATE INDEX i2 ON t1 (a(20)); +# cleanup +DROP TABLE t1; + diff --git a/mysql-test/t/constraints.test b/mysql-test/t/constraints.test index ed268ab5846..70a95e5f16e 100644 --- a/mysql-test/t/constraints.test +++ b/mysql-test/t/constraints.test @@ -10,7 +10,7 @@ create table t1 (a int check (a>0)); insert into t1 values (1); insert into t1 values (0); drop table t1; -create table t1 (a int ,b int, check a>b); +create table t1 (a int, b int, check (a>b)); insert into t1 values (1,0); insert into t1 values (0,1); drop table t1; @@ -29,3 +29,45 @@ show create table t1; drop table t1; # End of 4.1 tests + +# +# Bug#35578 (Parser allows useless/illegal CREATE TABLE syntax) +# + +--disable_warnings +drop table if exists t_illegal; +--enable_warnings + +--error ER_PARSE_ERROR +create table t_illegal (a int, b int, check a>b); + +--error ER_PARSE_ERROR +create table t_illegal (a int, b int, constraint abc check a>b); + +--error ER_PARSE_ERROR +create table t_illegal (a int, b int, constraint abc); + +# +# Bug#11714 (Non-sensical ALTER TABLE ADD CONSTRAINT allowed) +# + +--disable_warnings +drop table if exists t_11714; +--enable_warnings + +create table t_11714(a int, b int); + +--error ER_PARSE_ERROR +alter table t_11714 add constraint cons1; + +drop table t_11714; + +# +# Bug#38696 (CREATE TABLE ... CHECK ... allows illegal syntax) + +--error ER_PARSE_ERROR +CREATE TABLE t_illegal (col_1 INT CHECK something (whatever)); + +--error ER_PARSE_ERROR +CREATE TABLE t_illegal (col_1 INT CHECK something); + diff --git a/mysql-test/t/foreign_key.test b/mysql-test/t/foreign_key.test index 0a3708e6dc8..2a6ab01f511 100644 --- a/mysql-test/t/foreign_key.test +++ b/mysql-test/t/foreign_key.test @@ -23,3 +23,75 @@ create unique index b on t1 (a,b); drop table t1; # End of 4.1 tests + +# +# Bug#34455 (Ambiguous foreign keys syntax is accepted) +# + +--disable_warnings +drop table if exists t_34455; +--enable_warnings + +# 2 match clauses, illegal +--error ER_PARSE_ERROR +create table t_34455 ( + a int not null, + foreign key (a) references t3 (a) match full match partial); + +# match after on delete, illegal +--error ER_PARSE_ERROR +create table t_34455 ( + a int not null, + foreign key (a) references t3 (a) on delete set default match full); + +# match after on update, illegal +--error ER_PARSE_ERROR +create table t_34455 ( + a int not null, + foreign key (a) references t3 (a) on update set default match full); + +# 2 on delete clauses, illegal +--error ER_PARSE_ERROR +create table t_34455 ( + a int not null, + foreign key (a) references t3 (a) + on delete set default on delete set default); + +# 2 on update clauses, illegal +--error ER_PARSE_ERROR +create table t_34455 ( + a int not null, + foreign key (a) references t3 (a) + on update set default on update set default); + +create table t_34455 (a int not null); + +# 2 match clauses, illegal +--error ER_PARSE_ERROR +alter table t_34455 + add foreign key (a) references t3 (a) match full match partial); + +# match after on delete, illegal +--error ER_PARSE_ERROR +alter table t_34455 + add foreign key (a) references t3 (a) on delete set default match full); + +# match after on update, illegal +--error ER_PARSE_ERROR +alter table t_34455 + add foreign key (a) references t3 (a) on update set default match full); + +# 2 on delete clauses, illegal +--error ER_PARSE_ERROR +alter table t_34455 + add foreign key (a) references t3 (a) + on delete set default on delete set default); + +# 2 on update clauses, illegal +--error ER_PARSE_ERROR +alter table t_34455 + add foreign key (a) references t3 (a) + on update set default on update set default); + +drop table t_34455; + diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 70d73234ea8..1aeb2fa5b14 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -726,3 +726,48 @@ SELECT Polygon(1234512,''); SELECT Polygon(12345123,''); --echo End of 5.1 tests + +# +# Bug #50574 5.5.x allows spatial indexes on non-spatial +# columns, causing crashes! +# +--error ER_SPATIAL_MUST_HAVE_GEOM_COL +CREATE TABLE t1( + col0 BINARY NOT NULL, + col2 TIMESTAMP, + SPATIAL INDEX i1 (col0) +) ENGINE=MyISAM; + +# Test other ways to add indices +CREATE TABLE t1 ( + col0 BINARY NOT NULL, + col2 TIMESTAMP +) ENGINE=MyISAM; + +--error ER_SPATIAL_MUST_HAVE_GEOM_COL +CREATE SPATIAL INDEX idx0 ON t1(col0); + +--error ER_SPATIAL_MUST_HAVE_GEOM_COL +ALTER TABLE t1 ADD SPATIAL INDEX i1 (col0); + +CREATE TABLE t2 ( + col0 INTEGER NOT NULL, + col1 POINT, + col2 POINT +); + +--error ER_WRONG_ARGUMENTS +CREATE SPATIAL INDEX idx0 ON t2 (col1, col2); + +--error ER_WRONG_ARGUMENTS +CREATE TABLE t3 ( + col0 INTEGER NOT NULL, + col1 POINT, + col2 LINESTRING, + SPATIAL INDEX i1 (col1, col2) +); + +# cleanup +DROP TABLE t1; +DROP TABLE t2; + diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test index 0e6fef9b855..1e7f28d5916 100644 --- a/mysql-test/t/group_min_max.test +++ b/mysql-test/t/group_min_max.test @@ -1166,3 +1166,22 @@ SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a; DROP TABLE t1,t2; --echo # end of WL#3220 tests + +--echo # +--echo # Bug#50539: Wrong result when loose index scan is used for an aggregate +--echo # function with distinct +--echo # +CREATE TABLE t1 ( + f1 int(11) NOT NULL DEFAULT '0', + f2 char(1) NOT NULL DEFAULT '', + PRIMARY KEY (f1,f2) +) ; +insert into t1 values(1,'A'),(1 , 'B'), (1, 'C'), (2, 'A'), +(3, 'A'), (3, 'B'), (3, 'C'), (3, 'D'); + +SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1; +explain SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1; + +drop table t1; +--echo # End of test#50539. + diff --git a/mysql-test/t/ipv4_as_ipv6.test b/mysql-test/t/ipv4_as_ipv6.test index 4f4e68e8bfc..ace3c286643 100644 --- a/mysql-test/t/ipv4_as_ipv6.test +++ b/mysql-test/t/ipv4_as_ipv6.test @@ -5,8 +5,7 @@ # Test of ipv4 (127.0.0.1) in ipv6 format # Options: --skip-name-resolve, --bind-address=0.0.0.0 (see corresponding opt file). # -# Can't be tested with windows due to mixed format like 0::0000:FFFF:127.0.0.1 ---source include/not_windows.inc +--source include/have_ipv4_mapped.inc # Can't be tested with embedded server --source include/not_embedded.inc diff --git a/mysql-test/t/ipv4_as_ipv6_win-master.opt b/mysql-test/t/ipv4_as_ipv6_win-master.opt deleted file mode 100644 index f55a8e9209d..00000000000 --- a/mysql-test/t/ipv4_as_ipv6_win-master.opt +++ /dev/null @@ -1 +0,0 @@ ---skip-name-resolve --bind-address=0.0.0.0 diff --git a/mysql-test/t/ipv4_as_ipv6_win.test b/mysql-test/t/ipv4_as_ipv6_win.test deleted file mode 100644 index 04f908a119d..00000000000 --- a/mysql-test/t/ipv4_as_ipv6_win.test +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems
-# All rights reserved. Use is subject to license terms.
-# Author: Horst Hunger
-# Nov. 19, 2009
-# Test of ipv4 (127.0.0.1) in ipv6 format
-# Options: --skip-name-resolve, --bind-address=0.0.0.0 (see corresponding opt file).
-#
-# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1
---source include/windows.inc
-# Can't be tested with embedded server
---source include/not_embedded.inc
-
-# Save the initial number of concurrent sessions
---source include/count_sessions.inc
-
-echo =============Test of '127.0.0.1' (IPv4) ===========================;
-let $IPv6= 127.0.0.1;
---source include/ipv6_clients.inc
---source include/ipv6.inc
-
-echo =============Test of '::1' ========================;
-let $IPv6= ::1;
---echo connect (con1, $IPv6, root, , test, MASTER_MYPORT);
---disable_query_log
---error 2003,2006
-connect (con1, $IPv6, root, , test, $MASTER_MYPORT);
---enable_query_log
-connection default;
-
-# Wait till all disconnects are completed
---source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/ipv6.test b/mysql-test/t/ipv6.test index a1515e9d533..5c08cde3746 100644 --- a/mysql-test/t/ipv6.test +++ b/mysql-test/t/ipv6.test @@ -6,9 +6,6 @@ # Options: --skip-name-resolve, --bind-address=:: (see corresponding opt file). # --source include/check_ipv6.inc - -# Can't be tested with windows due to the mixed format like 0:0:0:0:0:FFFF:127.0.0.1 ---source include/not_windows.inc # Can't be tested with embedded server --source include/not_embedded.inc @@ -35,45 +32,5 @@ let $IPv6= 0:0:0:0:0:0:0:1; --source include/ipv6_clients.inc --source include/ipv6.inc -echo =============Test of '127.0.0.1' (IPv4) ===========================; -let $IPv6= 127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0:0:0:0:0:FFFF:127.0.0.1' ===================; -let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0000:0000:0000:0000:0000:FFFF:127.0.0.1' ====; -let $IPv6= 0000:0000:0000:0000:0000:FFFF:127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0:0000:0000:0:0000:FFFF:127.0.0.1' ====; -let $IPv6= 0:0000:0000:0:0000:FFFF:127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0::0000:FFFF:127.0.0.1' ====; -let $IPv6= 0::0000:FFFF:127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0:0:0:0:0:FFFF:127.0.0.1/96' ================; -let $IPv6= 0:0:0:0:0:FFFF:127.0.0.1/96; -#--source include/ipv6_clients.inc -#--source include/ipv6.inc - -echo =============Test of '::FFFF:127.0.0.1' ===========================; -let $IPv6= ::FFFF:127.0.0.1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '::FFFF:127.0.0.1/96' ========================; -let $IPv6= ::FFFF:127.0.0.1/96; -#--source include/ipv6_clients.inc -#--source include/ipv6.inc - # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc diff --git a/mysql-test/t/ipv6_win-master.opt b/mysql-test/t/ipv6_win-master.opt deleted file mode 100644 index d705811808c..00000000000 --- a/mysql-test/t/ipv6_win-master.opt +++ /dev/null @@ -1 +0,0 @@ ---skip-name-resolve --bind-address=:: diff --git a/mysql-test/t/ipv6_win.test b/mysql-test/t/ipv6_win.test deleted file mode 100644 index 86d867cc448..00000000000 --- a/mysql-test/t/ipv6_win.test +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2009 SUN Microsystems -# All rights reserved. Use is subject to license terms. -# Author: Horst Hunger -# Nov. 19, 2009 -# Test of ipv6 format -# Options: --skip-name-resolve, --bind-address=:: (see corresponding opt file). -# ---source include/check_ipv6.inc - -# For windows due to missing the mixed format like 0::0000:FFFF:127.0.0.1 ---source include/windows.inc -# Can't be tested with embedded server ---source include/not_embedded.inc - -# Save the initial number of concurrent sessions ---source include/count_sessions.inc - -echo =============Test of '::1' ========================================; -let $IPv6= ::1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '::1/128' ====================================; -let $IPv6= ::1/128; -#--source include/ipv6_clients.inc -#--source include/ipv6.inc - -echo =============Test of '0000:0000:0000:0000:0000:0000:0000:0001' ====; -let $IPv6= 0000:0000:0000:0000:0000:0000:0000:0001; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -echo =============Test of '0:0:0:0:0:0:0:1' ============================; -let $IPv6= 0:0:0:0:0:0:0:1; ---source include/ipv6_clients.inc ---source include/ipv6.inc - -# Wait till all disconnects are completed ---source include/wait_until_count_sessions.inc diff --git a/mysql-test/t/show_profile.test b/mysql-test/t/show_profile.test new file mode 100644 index 00000000000..c20b29c40bf --- /dev/null +++ b/mysql-test/t/show_profile.test @@ -0,0 +1,18 @@ +# +# Test for show profiles +# No meaningful check is possible. +# So it only checks that SET profiling is possible and +# that SHOW PROFILES, SHOW PROFILE FOR QUERY and SHOW PROFILE CPU FOR QUERY +# do not cause syntax errors. It also increases code coverage for sql_profile.cc + +--source include/have_profiling.inc +SET profiling = 1; +SELECT 1; +--replace_column 2 # +SHOW PROFILES; +--disable_result_log +SHOW PROFILE FOR QUERY 1; +SHOW PROFILE CPU FOR QUERY 1; +--enable_result_log +SET profiling = 0; + diff --git a/mysys/my_init.c b/mysys/my_init.c index 31adc5ed99e..a3e53fdaae1 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -74,6 +74,8 @@ static MYSQL_FILE instrumented_stdin; */ my_bool my_basic_init(void) { + char * str; + if (my_basic_init_done) return 0; my_basic_init_done= 1; @@ -82,6 +84,19 @@ my_bool my_basic_init(void) my_umask= 0660; /* Default umask for new files */ my_umask_dir= 0700; /* Default umask for new directories */ +#ifndef VMS + /* Default creation of new files */ + if ((str= getenv("UMASK")) != 0) + my_umask= (int) (atoi_octal(str) | 0600); + /* Default creation of new dir's */ + if ((str= getenv("UMASK_DIR")) != 0) + my_umask_dir= (int) (atoi_octal(str) | 0700); +#endif + + /* $HOME is needed early to parse configuration files located in ~/ */ + if ((home_dir= getenv("HOME")) != 0) + home_dir= intern_filename(home_dir_buff, home_dir); + init_glob_errs(); instrumented_stdin.m_file= stdin; @@ -124,7 +139,6 @@ my_bool my_basic_init(void) my_bool my_init(void) { - char * str; if (my_init_done) return 0; my_init_done= 1; @@ -142,24 +156,11 @@ my_bool my_init(void) { DBUG_ENTER("my_init"); DBUG_PROCESS((char*) (my_progname ? my_progname : "unknown")); - if (!home_dir) - { /* Don't initialize twice */ - my_win_init(); - if ((home_dir=getenv("HOME")) != 0) - home_dir=intern_filename(home_dir_buff,home_dir); -#ifndef VMS - /* Default creation of new files */ - if ((str=getenv("UMASK")) != 0) - my_umask=(int) (atoi_octal(str) | 0600); - /* Default creation of new dir's */ - if ((str=getenv("UMASK_DIR")) != 0) - my_umask_dir=(int) (atoi_octal(str) | 0700); -#endif + my_win_init(); #ifdef VMS - init_ctype(); /* Stupid linker don't link _ctype.c */ + init_ctype(); /* Stupid linker don't link _ctype.c */ #endif - DBUG_PRINT("exit",("home: '%s'",home_dir)); - } + DBUG_PRINT("exit", ("home: '%s'", home_dir)); #ifdef __WIN__ win32_init_tcp_ip(); #endif diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index 83d35863eca..236b694726f 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -88,6 +88,30 @@ my_bool my_thread_basic_global_init(void) return 0; my_thread_basic_global_init_done= 1; +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + /* + Set mutex type to "fast" a.k.a "adaptive" + + In this case the thread may steal the mutex from some other thread + that is waiting for the same mutex. This will save us some + context switches but may cause a thread to 'starve forever' while + waiting for the mutex (not likely if the code within the mutex is + short). + */ + pthread_mutexattr_init(&my_fast_mutexattr); + pthread_mutexattr_settype(&my_fast_mutexattr, + PTHREAD_MUTEX_ADAPTIVE_NP); +#endif + +#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + /* + Set mutex type to "errorcheck" + */ + pthread_mutexattr_init(&my_errorcheck_mutexattr); + pthread_mutexattr_settype(&my_errorcheck_mutexattr, + PTHREAD_MUTEX_ERRORCHECK); +#endif + mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST); @@ -190,29 +214,6 @@ my_bool my_thread_global_init(void) } #endif /* TARGET_OS_LINUX */ -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP - /* - Set mutex type to "fast" a.k.a "adaptive" - - In this case the thread may steal the mutex from some other thread - that is waiting for the same mutex. This will save us some - context switches but may cause a thread to 'starve forever' while - waiting for the mutex (not likely if the code within the mutex is - short). - */ - pthread_mutexattr_init(&my_fast_mutexattr); - pthread_mutexattr_settype(&my_fast_mutexattr, - PTHREAD_MUTEX_ADAPTIVE_NP); -#endif -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP - /* - Set mutex type to "errorcheck" - */ - pthread_mutexattr_init(&my_errorcheck_mutexattr); - pthread_mutexattr_settype(&my_errorcheck_mutexattr, - PTHREAD_MUTEX_ERRORCHECK); -#endif - mysql_mutex_init(key_THR_LOCK_lock, &THR_LOCK_lock, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_THR_LOCK_isam, &THR_LOCK_isam, MY_MUTEX_INIT_SLOW); mysql_mutex_init(key_THR_LOCK_myisam, &THR_LOCK_myisam, MY_MUTEX_INIT_SLOW); diff --git a/plugin/semisync/semisync_master.cc b/plugin/semisync/semisync_master.cc index eb8d7465025..8d7bda94ef0 100644 --- a/plugin/semisync/semisync_master.cc +++ b/plugin/semisync/semisync_master.cc @@ -65,7 +65,7 @@ static int gettimeofday(struct timeval *tv, void *tz) ActiveTranx::ActiveTranx(mysql_mutex_t *lock, unsigned long trace_level) - : Trace(trace_level), + : Trace(trace_level), allocator_(max_connections), num_entries_(max_connections << 1), /* Transaction hash table size * is set to double the size * of max_connections */ @@ -115,25 +115,6 @@ unsigned int ActiveTranx::get_hash_value(const char *log_file_name, return (hash1 + hash2) % num_entries_; } -ActiveTranx::TranxNode* ActiveTranx::alloc_tranx_node() -{ - MYSQL_THD thd= (MYSQL_THD)current_thd; - /* The memory allocated for TranxNode will be automatically freed at - the end of the command of current THD. And because - ha_autocommit_or_rollback() will always be called before that, so - we are sure that the node will be removed from the active list - before it get freed. */ - TranxNode *trx_node = (TranxNode *)thd_alloc(thd, sizeof(TranxNode)); - if (trx_node) - { - trx_node->log_name_[0] = '\0'; - trx_node->log_pos_= 0; - trx_node->next_= 0; - trx_node->hash_next_= 0; - } - return trx_node; -} - int ActiveTranx::compare(const char *log_file_name1, my_off_t log_file_pos1, const char *log_file_name2, my_off_t log_file_pos2) { @@ -159,7 +140,7 @@ int ActiveTranx::insert_tranx_node(const char *log_file_name, function_enter(kWho); - ins_node = alloc_tranx_node(); + ins_node = allocator_.allocate_node(); if (!ins_node) { sql_print_error("%s: transaction node allocation failed for: (%s, %lu)", @@ -271,6 +252,7 @@ int ActiveTranx::clear_active_tranx_nodes(const char *log_file_name, /* Clear the hash table. */ memset(trx_htb_, 0, num_entries_ * sizeof(TranxNode *)); + allocator_.free_all_nodes(); /* Clear the active transaction list. */ if (trx_front_ != NULL) @@ -311,6 +293,7 @@ int ActiveTranx::clear_active_tranx_nodes(const char *log_file_name, } trx_front_ = new_front; + allocator_.free_nodes_before(trx_front_); if (trace_level_ & kTraceDetail) sql_print_information("%s: cleared %d nodes back until pos (%s, %lu)", diff --git a/plugin/semisync/semisync_master.h b/plugin/semisync/semisync_master.h index 1a951fa0ba2..e1ad28cd9f6 100644 --- a/plugin/semisync/semisync_master.h +++ b/plugin/semisync/semisync_master.h @@ -26,6 +26,266 @@ extern PSI_mutex_key key_ss_mutex_LOCK_binlog_; extern PSI_cond_key key_ss_cond_COND_binlog_send_; #endif +struct TranxNode { + char log_name_[FN_REFLEN]; + my_off_t log_pos_; + struct TranxNode *next_; /* the next node in the sorted list */ + struct TranxNode *hash_next_; /* the next node during hash collision */ +}; + +/** + @class TranxNodeAllocator + + This class provides memory allocating and freeing methods for + TranxNode. The main target is performance. + + @section ALLOCATE How to allocate a node + The pointer of the first node after 'last_node' in current_block is + returned. current_block will move to the next free Block when all nodes of + it are in use. A new Block is allocated and is put into the rear of the + Block link table if no Block is free. + + The list starts up empty (ie, there is no allocated Block). + + After some nodes are freed, there probably are some free nodes before + the sequence of the allocated nodes, but we do not reuse it. It is better + to keep the allocated nodes are in the sequence, for it is more efficient + for allocating and freeing TranxNode. + + @section FREENODE How to free nodes + There are two methods for freeing nodes. They are free_all_nodes and + free_nodes_before. + + 'A Block is free' means all of its nodes are free. + @subsection free_nodes_before + As all allocated nodes are in the sequence, 'Before one node' means all + nodes before given node in the same Block and all Blocks before the Block + which containing the given node. As such, all Blocks before the given one + ('node') are free Block and moved into the rear of the Block link table. + The Block containing the given 'node', however, is not. For at least the + given 'node' is still in use. This will waste at most one Block, but it is + more efficient. + */ +#define BLOCK_TRANX_NODES 16 +class TranxNodeAllocator +{ +public: + /** + @param reserved_nodes + The number of reserved TranxNodes. It is used to set 'reserved_blocks' + which can contain at least 'reserved_nodes' number of TranxNodes. When + freeing memory, we will reserve at least reserved_blocks of Blocks not + freed. + */ + TranxNodeAllocator(uint reserved_nodes) : + reserved_blocks(reserved_nodes/BLOCK_TRANX_NODES + + (reserved_nodes%BLOCK_TRANX_NODES > 1 ? 2 : 1)), + first_block(NULL), last_block(NULL), + current_block(NULL), last_node(-1), block_num(0) {} + + ~TranxNodeAllocator() + { + Block *block= first_block; + while (block != NULL) + { + Block *next= block->next; + free_block(block); + block= next; + } + } + + /** + The pointer of the first node after 'last_node' in current_block is + returned. current_block will move to the next free Block when all nodes of + it are in use. A new Block is allocated and is put into the rear of the + Block link table if no Block is free. + + @return Return a TranxNode *, or NULL if an error occured. + */ + TranxNode *allocate_node() + { + TranxNode *trx_node; + Block *block= current_block; + + if (last_node == BLOCK_TRANX_NODES-1) + { + current_block= current_block->next; + last_node= -1; + } + + if (current_block == NULL && allocate_block()) + { + current_block= block; + if (current_block) + last_node= BLOCK_TRANX_NODES-1; + return NULL; + } + + trx_node= &(current_block->nodes[++last_node]); + trx_node->log_name_[0] = '\0'; + trx_node->log_pos_= 0; + trx_node->next_= 0; + trx_node->hash_next_= 0; + return trx_node; + } + + /** + All nodes are freed. + + @return Return 0, or 1 if an error occured. + */ + int free_all_nodes() + { + current_block= first_block; + last_node= -1; + free_blocks(); + return 0; + } + + /** + All Blocks before the given 'node' are free Block and moved into the rear + of the Block link table. + + @param node All nodes before 'node' will be freed + + @return Return 0, or 1 if an error occured. + */ + int free_nodes_before(TranxNode* node) + { + Block *block; + Block *prev_block; + + block= first_block; + while (block != current_block->next) + { + /* Find the Block containing the given node */ + if (&(block->nodes[0]) <= node && &(block->nodes[BLOCK_TRANX_NODES]) >= node) + { + /* All Blocks before the given node are put into the rear */ + if (first_block != block) + { + last_block->next= first_block; + first_block= block; + last_block= prev_block; + last_block->next= NULL; + free_blocks(); + } + return 0; + } + prev_block= block; + block= block->next; + } + + /* Node does not find should never happen */ + DBUG_ASSERT(0); + return 1; + } + +private: + uint reserved_blocks; + + /** + A sequence memory which contains BLOCK_TRANX_NODES TranxNodes. + + BLOCK_TRANX_NODES The number of TranxNodes which are in a Block. + + next Every Block has a 'next' pointer which points to the next Block. + These linking Blocks constitute a Block link table. + */ + struct Block { + Block *next; + TranxNode nodes[BLOCK_TRANX_NODES]; + }; + + /** + The 'first_block' is the head of the Block link table; + */ + Block *first_block; + /** + The 'last_block' is the rear of the Block link table; + */ + Block *last_block; + + /** + current_block always points the Block in the Block link table in + which the last allocated node is. The Blocks before it are all in use + and the Blocks after it are all free. + */ + Block *current_block; + + /** + It always points to the last node which has been allocated in the + current_block. + */ + int last_node; + + /** + How many Blocks are in the Block link table. + */ + uint block_num; + + /** + Allocate a block and then assign it to current_block. + */ + int allocate_block() + { + Block *block= (Block *)my_malloc(sizeof(Block), MYF(0)); + if (block) + { + block->next= NULL; + + if (first_block == NULL) + first_block= block; + else + last_block->next= block; + + /* New Block is always put into the rear */ + last_block= block; + /* New Block is always the current_block */ + current_block= block; + ++block_num; + return 0; + } + return 1; + } + + /** + Free a given Block. + @param block The Block will be freed. + */ + void free_block(Block *block) + { + my_free(block, MYF(0)); + --block_num; + } + + + /** + If there are some free Blocks and the total number of the Blocks in the + Block link table is larger than the 'reserved_blocks', Some free Blocks + will be freed until the total number of the Blocks is equal to the + 'reserved_blocks' or there is only one free Block behind the + 'current_block'. + */ + void free_blocks() + { + if (current_block == NULL || current_block->next == NULL) + return; + + /* One free Block is always kept behind the current block */ + Block *block= current_block->next->next; + while (block_num > reserved_blocks && block != NULL) + { + Block *next= block->next; + free_block(block); + block= next; + } + current_block->next->next= block; + if (block == NULL) + last_block= current_block->next; + } +}; + /** This class manages memory for active transaction list. @@ -37,13 +297,8 @@ extern PSI_cond_key key_ss_cond_COND_binlog_send_; class ActiveTranx :public Trace { private: - struct TranxNode { - char log_name_[FN_REFLEN]; - my_off_t log_pos_; - struct TranxNode *next_; /* the next node in the sorted list */ - struct TranxNode *hash_next_; /* the next node during hash collision */ - }; + TranxNodeAllocator allocator_; /* These two record the active transaction list in sort order. */ TranxNode *trx_front_, *trx_rear_; @@ -54,24 +309,22 @@ private: inline void assert_lock_owner(); - inline TranxNode* alloc_tranx_node(); - inline unsigned int calc_hash(const unsigned char *key,unsigned int length); unsigned int get_hash_value(const char *log_file_name, my_off_t log_file_pos); int compare(const char *log_file_name1, my_off_t log_file_pos1, - const TranxNode *node2) { + const TranxNode *node2) { return compare(log_file_name1, log_file_pos1, - node2->log_name_, node2->log_pos_); + node2->log_name_, node2->log_pos_); } int compare(const TranxNode *node1, - const char *log_file_name2, my_off_t log_file_pos2) { + const char *log_file_name2, my_off_t log_file_pos2) { return compare(node1->log_name_, node1->log_pos_, - log_file_name2, log_file_pos2); + log_file_name2, log_file_pos2); } int compare(const TranxNode *node1, const TranxNode *node2) { return compare(node1->log_name_, node1->log_pos_, - node2->log_name_, node2->log_pos_); + node2->log_name_, node2->log_pos_); } public: @@ -94,7 +347,7 @@ public: * 0: success; non-zero: error */ int clear_active_tranx_nodes(const char *log_file_name, - my_off_t log_file_pos); + my_off_t log_file_pos); /* Given a position, check to see whether the position is an active * transaction's ending position by probing the hash table. @@ -105,7 +358,7 @@ public: * (file_name, file_position). */ static int compare(const char *log_file_name1, my_off_t log_file_pos1, - const char *log_file_name2, my_off_t log_file_pos2); + const char *log_file_name2, my_off_t log_file_pos2); }; diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index 53f1025458e..e9bcecc459d 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -1053,8 +1053,8 @@ update_timing_fields_for_event(THD *thd, Turn off row binlogging of event timing updates. These are not used for RBR of events replicated to the slave. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); DBUG_ASSERT(thd->security_ctx->master_access & SUPER_ACL); @@ -1097,7 +1097,9 @@ end: if (table) close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(test(ret)); } diff --git a/sql/events.cc b/sql/events.cc index 6629bb9aefd..d8bf549321e 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -326,8 +326,8 @@ Events::create_event(THD *thd, Event_parse_data *parse_data, Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for CREATE EVENT command. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); mysql_mutex_lock(&LOCK_event_metadata); @@ -368,7 +368,9 @@ Events::create_event(THD *thd, Event_parse_data *parse_data, sql_print_error("Event Error: An error occurred while creating query string, " "before writing it into binary log."); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(TRUE); } /* If the definer is not set or set to CURRENT_USER, the value of CURRENT_USER @@ -378,7 +380,9 @@ Events::create_event(THD *thd, Event_parse_data *parse_data, } mysql_mutex_unlock(&LOCK_event_metadata); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } @@ -455,8 +459,8 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for UPDATE EVENT command. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); mysql_mutex_lock(&LOCK_event_metadata); @@ -493,7 +497,9 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, } mysql_mutex_unlock(&LOCK_event_metadata); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } @@ -540,8 +546,8 @@ Events::drop_event(THD *thd, LEX_STRING dbname, LEX_STRING name, bool if_exists) Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for DROP EVENT command. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); mysql_mutex_lock(&LOCK_event_metadata); /* On error conditions my_error() is called so no need to handle here */ @@ -555,7 +561,9 @@ Events::drop_event(THD *thd, LEX_STRING dbname, LEX_STRING name, bool if_exists) } mysql_mutex_unlock(&LOCK_event_metadata); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } diff --git a/sql/log.cc b/sql/log.cc index 04f1445adfd..75853aec485 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -4668,12 +4668,19 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info) { BINLOG_USER_VAR_EVENT *user_var_event; get_dynamic(&thd->user_var_events,(uchar*) &user_var_event, i); + + /* setting flags for user var log event */ + uchar flags= User_var_log_event::UNDEF_F; + if (user_var_event->user_var_event->unsigned_flag) + flags|= User_var_log_event::UNSIGNED_F; + User_var_log_event e(thd, user_var_event->user_var_event->name.str, user_var_event->user_var_event->name.length, user_var_event->value, user_var_event->length, user_var_event->type, - user_var_event->charset_number); + user_var_event->charset_number, + flags); if (e.write(file)) goto err; } diff --git a/sql/log_event.cc b/sql/log_event.cc index 637096e54c3..b0deee62fd7 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -5503,7 +5503,9 @@ void User_var_log_event::pack_info(Protocol* protocol) case INT_RESULT: if (!(buf= (char*) my_malloc(val_offset + 22, MYF(MY_WME)))) return; - event_len= longlong10_to_str(uint8korr(val), buf + val_offset,-10)-buf; + event_len= longlong10_to_str(uint8korr(val), buf + val_offset, + ((flags & User_var_log_event::UNSIGNED_F) ? + 10 : -10))-buf; break; case DECIMAL_RESULT: { @@ -5561,12 +5563,14 @@ User_var_log_event(const char* buf, :Log_event(buf, description_event) { /* The Post-Header is empty. The Variable Data part begins immediately. */ + const char *start= buf; buf+= description_event->common_header_len + description_event->post_header_len[USER_VAR_EVENT-1]; name_len= uint4korr(buf); name= (char *) buf + UV_NAME_LEN_SIZE; buf+= UV_NAME_LEN_SIZE + name_len; is_null= (bool) *buf; + flags= User_var_log_event::UNDEF_F; // defaults to UNDEF_F if (is_null) { type= STRING_RESULT; @@ -5582,6 +5586,27 @@ User_var_log_event(const char* buf, UV_CHARSET_NUMBER_SIZE); val= (char *) (buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE); + + /** + We need to check if this is from an old server + that did not pack information for flags. + We do this by checking if there are extra bytes + after the packed value. If there are we take the + extra byte and it's value is assumed to contain + the flags value. + + Old events will not have this extra byte, thence, + we keep the flags set to UNDEF_F. + */ + uint bytes_read= ((val + val_len) - start); + DBUG_ASSERT(bytes_read==data_written || + bytes_read==(data_written-1)); + if ((data_written - bytes_read) > 0) + { + flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE + + val_len); + } } } @@ -5593,6 +5618,7 @@ bool User_var_log_event::write(IO_CACHE* file) char buf1[UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE]; uchar buf2[max(8, DECIMAL_MAX_FIELD_SIZE + 2)], *pos= buf2; + uint unsigned_len= 0; uint buf1_length; ulong event_length; @@ -5614,6 +5640,7 @@ bool User_var_log_event::write(IO_CACHE* file) break; case INT_RESULT: int8store(buf2, *(longlong*) val); + unsigned_len= 1; break; case DECIMAL_RESULT: { @@ -5638,13 +5665,14 @@ bool User_var_log_event::write(IO_CACHE* file) } /* Length of the whole event */ - event_length= sizeof(buf)+ name_len + buf1_length + val_len; + event_length= sizeof(buf)+ name_len + buf1_length + val_len + unsigned_len; return (write_header(file, event_length) || my_b_safe_write(file, (uchar*) buf, sizeof(buf)) || my_b_safe_write(file, (uchar*) name, name_len) || my_b_safe_write(file, (uchar*) buf1, buf1_length) || - my_b_safe_write(file, pos, val_len)); + my_b_safe_write(file, pos, val_len) || + my_b_safe_write(file, &flags, unsigned_len)); } #endif @@ -5685,7 +5713,8 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) break; case INT_RESULT: char int_buf[22]; - longlong10_to_str(uint8korr(val), int_buf, -10); + longlong10_to_str(uint8korr(val), int_buf, + ((flags & User_var_log_event::UNSIGNED_F) ? 10 : -10)); my_b_printf(&cache, ":=%s%s\n", int_buf, print_event_info->delimiter); break; case DECIMAL_RESULT: @@ -5832,7 +5861,8 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) a single record and with a single column. Thus, like a column value, it could always have IMPLICIT derivation. */ - e.update_hash(val, val_len, type, charset, DERIVATION_IMPLICIT, 0); + e.update_hash(val, val_len, type, charset, DERIVATION_IMPLICIT, + (flags & User_var_log_event::UNSIGNED_F)); free_root(thd->mem_root,0); return 0; @@ -6499,9 +6529,7 @@ int Append_block_log_event::do_apply_event(Relay_log_info const *rli) DBUG_EXECUTE_IF("remove_slave_load_file_before_write", { - mysql_file_close(fd, MYF(0)); - fd= -1; - mysql_file_delete(0, fname, MYF(0)); + my_delete_allow_opened(fname, MYF(0)); }); if (mysql_file_write(fd, (uchar*) block, block_len, MYF(MY_WME+MY_NABP))) diff --git a/sql/log_event.h b/sql/log_event.h index 5530444b0d4..81669e24708 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -2498,6 +2498,10 @@ private: class User_var_log_event: public Log_event { public: + enum { + UNDEF_F= 0, + UNSIGNED_F= 1 + }; char *name; uint name_len; char *val; @@ -2505,12 +2509,14 @@ public: Item_result type; uint charset_number; bool is_null; + uchar flags; #ifndef MYSQL_CLIENT User_var_log_event(THD* thd_arg, char *name_arg, uint name_len_arg, char *val_arg, ulong val_len_arg, Item_result type_arg, - uint charset_number_arg) + uint charset_number_arg, uchar flags_arg) :Log_event(), name(name_arg), name_len(name_len_arg), val(val_arg), - val_len(val_len_arg), type(type_arg), charset_number(charset_number_arg) + val_len(val_len_arg), type(type_arg), charset_number(charset_number_arg), + flags(flags_arg) { is_null= !val; } void pack_info(Protocol* protocol); #else diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index a4d9eab2685..b27a7ea5078 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -235,6 +235,7 @@ typedef struct my_locale_errmsgs extern char err_shared_dir[]; +/** @note Keep this a POD-type because we use offsetof() on it */ typedef struct my_locale_st { uint number; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 07a4c9317c4..a11ba2eec49 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -317,6 +317,10 @@ static PSI_thread_key key_thread_handle_con_sockets; #ifdef __WIN__ static PSI_thread_key key_thread_handle_shutdown; #endif /* __WIN__ */ + +#if defined (HAVE_OPENSSL) && !defined(HAVE_YASSL) +static PSI_rwlock_key key_rwlock_openssl; +#endif #endif /* HAVE_PSI_INTERFACE */ /* the default log output is log tables */ @@ -928,8 +932,6 @@ static bool add_terminator(DYNAMIC_ARRAY *options); extern "C" my_bool mysqld_get_one_option(int, const struct my_option *, char *); static void set_server_version(void); static int init_thread_environment(); -static void init_error_log_mutex(); -static void clean_up_error_log_mutex(); static char *get_relative_path(const char *path); static int fix_paths(void); void handle_connections_sockets(); @@ -1346,6 +1348,18 @@ extern "C" sig_handler print_signal_warning(int sig) #ifndef EMBEDDED_LIBRARY +static void init_error_log_mutex() +{ + mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log, MY_MUTEX_INIT_FAST); +} + + +static void clean_up_error_log_mutex() +{ + mysql_mutex_destroy(&LOCK_error_log); +} + + /** cleanup all memory and end program nicely. @@ -1552,7 +1566,7 @@ static void clean_up_mutexes() mysql_mutex_destroy(&LOCK_des_key_file); #ifndef HAVE_YASSL for (int i= 0; i < CRYPTO_num_locks(); ++i) - rwlock_destroy(&openssl_stdlocks[i].lock); + mysql_rwlock_destroy(&openssl_stdlocks[i].lock); OPENSSL_free(openssl_stdlocks); #endif #endif @@ -3361,7 +3375,7 @@ static int init_common_variables() set the def_value member to 0 in my_long_options and initialize it to the correct value here. */ - default_storage_engine="MyISAM"; + default_storage_engine= const_cast<char *>("MyISAM"); /* Add server status variables to the dynamic list of @@ -3702,15 +3716,6 @@ You should consider changing lower_case_table_names to 1 or 2", return 0; } -static void init_error_log_mutex() -{ - mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log, MY_MUTEX_INIT_FAST); -} - -static void clean_up_error_log_mutex() -{ - mysql_mutex_destroy(&LOCK_error_log); -} static int init_thread_environment() { @@ -3753,7 +3758,7 @@ static int init_thread_environment() openssl_stdlocks= (openssl_lock_t*) OPENSSL_malloc(CRYPTO_num_locks() * sizeof(openssl_lock_t)); for (int i= 0; i < CRYPTO_num_locks(); ++i) - my_rwlock_init(&openssl_stdlocks[i].lock, NULL); + mysql_rwlock_init(key_rwlock_openssl, &openssl_stdlocks[i].lock); CRYPTO_set_dynlock_create_callback(openssl_dynlock_create); CRYPTO_set_dynlock_destroy_callback(openssl_dynlock_destroy); CRYPTO_set_dynlock_lock_callback(openssl_lock); @@ -3807,7 +3812,7 @@ static unsigned long openssl_id_function() static openssl_lock_t *openssl_dynlock_create(const char *file, int line) { openssl_lock_t *lock= new openssl_lock_t; - my_rwlock_init(&lock->lock, NULL); + mysql_rwlock_init(key_rwlock_openssl, &lock->lock); return lock; } @@ -3815,7 +3820,7 @@ static openssl_lock_t *openssl_dynlock_create(const char *file, int line) static void openssl_dynlock_destroy(openssl_lock_t *lock, const char *file, int line) { - rwlock_destroy(&lock->lock); + mysql_rwlock_destroy(&lock->lock); delete lock; } @@ -3841,16 +3846,16 @@ static void openssl_lock(int mode, openssl_lock_t *lock, const char *file, switch (mode) { case CRYPTO_LOCK|CRYPTO_READ: what = "read lock"; - err = rw_rdlock(&lock->lock); + err= mysql_rwlock_rdlock(&lock->lock); break; case CRYPTO_LOCK|CRYPTO_WRITE: what = "write lock"; - err = rw_wrlock(&lock->lock); + err= mysql_rwlock_wrlock(&lock->lock); break; case CRYPTO_UNLOCK|CRYPTO_READ: case CRYPTO_UNLOCK|CRYPTO_WRITE: what = "unlock"; - err = rw_unlock(&lock->lock); + err= mysql_rwlock_unlock(&lock->lock); break; default: /* Unknown locking mode. */ @@ -7987,6 +7992,9 @@ PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, static PSI_rwlock_info all_server_rwlocks[]= { +#if defined (HAVE_OPENSSL) && !defined(HAVE_YASSL) + { &key_rwlock_openssl, "CRYPTO_dynlock_value::lock", 0}, +#endif { &key_rwlock_LOCK_grant, "LOCK_grant", PSI_FLAG_GLOBAL}, { &key_rwlock_LOCK_logger, "LOGGER::LOCK_logger", 0}, { &key_rwlock_LOCK_sys_init_connect, "LOCK_sys_init_connect", PSI_FLAG_GLOBAL}, diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 741815585e2..b9ea8c7c991 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -10955,17 +10955,7 @@ int QUICK_GROUP_MIN_MAX_SELECT::get_next() } while ((result == HA_ERR_KEY_NOT_FOUND || result == HA_ERR_END_OF_FILE) && is_last_prefix != 0); - if (result == 0) - { - /* - Partially mimic the behavior of end_select_send. Copy the - field data from Item_field::field into Item_field::result_field - of each non-aggregated field (the group fields, and optionally - other fields in non-ANSI SQL mode). - */ - copy_fields(&join->tmp_table_param); - } - else if (result == HA_ERR_KEY_NOT_FOUND) + if (result == HA_ERR_KEY_NOT_FOUND) result= HA_ERR_END_OF_FILE; DBUG_RETURN(result); diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 5bf87dea90e..29443eb6e65 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -38,7 +38,7 @@ #define SLAVE_ERRMSG_SIZE (FN_REFLEN+64) -uint rpl_status=RPL_NULL; +RPL_STATUS rpl_status=RPL_NULL; mysql_mutex_t LOCK_rpl_status; mysql_cond_t COND_rpl_status; HASH slave_list; diff --git a/sql/repl_failsafe.h b/sql/repl_failsafe.h index dd6770be0b4..94b151aaee7 100644 --- a/sql/repl_failsafe.h +++ b/sql/repl_failsafe.h @@ -26,7 +26,7 @@ typedef enum {RPL_AUTH_MASTER=0,RPL_IDLE_SLAVE,RPL_ACTIVE_SLAVE, RPL_LOST_SOLDIER,RPL_TROOP_SOLDIER, RPL_RECOVERY_CAPTAIN,RPL_NULL /* inactive */, RPL_ANY /* wild card used by change_rpl_status */ } RPL_STATUS; -extern uint rpl_status; +extern RPL_STATUS rpl_status; extern mysql_mutex_t LOCK_rpl_status; extern mysql_cond_t COND_rpl_status; diff --git a/sql/rpl_handler.cc b/sql/rpl_handler.cc index ebd6e4e0c0b..5a406866513 100644 --- a/sql/rpl_handler.cc +++ b/sql/rpl_handler.cc @@ -190,8 +190,8 @@ int Trans_delegate::after_commit(THD *thd, bool all) { Trans_param param; bool is_real_trans= (all || thd->transaction.all.ha_list == 0); - if (is_real_trans) - param.flags |= TRANS_IS_REAL_TRANS; + + param.flags = is_real_trans ? TRANS_IS_REAL_TRANS : 0; Trans_binlog_info *log_info= my_pthread_getspecific_ptr(Trans_binlog_info*, RPL_TRANS_BINLOG_INFO); @@ -218,8 +218,8 @@ int Trans_delegate::after_rollback(THD *thd, bool all) { Trans_param param; bool is_real_trans= (all || thd->transaction.all.ha_list == 0); - if (is_real_trans) - param.flags |= TRANS_IS_REAL_TRANS; + + param.flags = is_real_trans ? TRANS_IS_REAL_TRANS : 0; Trans_binlog_info *log_info= my_pthread_getspecific_ptr(Trans_binlog_info*, RPL_TRANS_BINLOG_INFO); @@ -228,7 +228,7 @@ int Trans_delegate::after_rollback(THD *thd, bool all) param.log_pos= log_info ? log_info->log_pos : 0; int ret= 0; - FOREACH_OBSERVER(ret, after_commit, thd, (¶m)); + FOREACH_OBSERVER(ret, after_rollback, thd, (¶m)); /* This is the end of a real transaction or autocommit statement, we diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index 38382fd2a0e..7dad340cfa6 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -33,8 +33,8 @@ int init_dynarray_intvar_from_file(DYNAMIC_ARRAY* arr, IO_CACHE* f); Master_info::Master_info(bool is_slave_recovery) :Slave_reporting_capability("I/O"), ssl(0), ssl_verify_server_cert(0), fd(-1), io_thd(0), - port(MYSQL_PORT), connect_retry(DEFAULT_CONNECT_RETRY), inited(0), - rli(is_slave_recovery), abort_slave(0), + rli(is_slave_recovery), port(MYSQL_PORT), + connect_retry(DEFAULT_CONNECT_RETRY), inited(0), abort_slave(0), slave_running(0), slave_run_id(0), sync_counter(0), heartbeat_period(0), received_heartbeats(0), master_id(0) { @@ -369,7 +369,7 @@ file '%s')", fname); mi->rli.is_relay_log_recovery= FALSE; // now change cache READ -> WRITE - must do this before flush_master_info reinit_io_cache(&mi->file, WRITE_CACHE, 0L, 0, 1); - if ((error=test(flush_master_info(mi, 1)))) + if ((error=test(flush_master_info(mi, TRUE, TRUE)))) sql_print_error("Failed to flush master info file"); mysql_mutex_unlock(&mi->data_lock); DBUG_RETURN(error); @@ -395,7 +395,9 @@ err: 1 - flush master info failed 0 - all ok */ -int flush_master_info(Master_info* mi, bool flush_relay_log_cache) +int flush_master_info(Master_info* mi, + bool flush_relay_log_cache, + bool need_lock_relay_log) { IO_CACHE* file = &mi->file; char lbuf[22]; @@ -418,8 +420,19 @@ int flush_master_info(Master_info* mi, bool flush_relay_log_cache) */ if (flush_relay_log_cache) { + mysql_mutex_t *log_lock= mi->rli.relay_log.get_log_lock(); IO_CACHE *log_file= mi->rli.relay_log.get_log_file(); - if (flush_io_cache(log_file)) + + if (need_lock_relay_log) + mysql_mutex_lock(log_lock); + + mysql_mutex_assert_owner(log_lock); + err= flush_io_cache(log_file); + + if (need_lock_relay_log) + mysql_mutex_unlock(log_lock); + + if (err) DBUG_RETURN(2); } diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h index 6dd9fab7904..c4ca5714306 100644 --- a/sql/rpl_mi.h +++ b/sql/rpl_mi.h @@ -119,7 +119,9 @@ int init_master_info(Master_info* mi, const char* master_info_fname, bool abort_if_no_master_info_file, int thread_mask); void end_master_info(Master_info* mi); -int flush_master_info(Master_info* mi, bool flush_relay_log_cache); +int flush_master_info(Master_info* mi, + bool flush_relay_log_cache, + bool need_lock_relay_log); int change_master_server_id_cmp(ulong *id1, ulong *id2); #endif /* HAVE_REPLICATION */ diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index 54124ff30e4..e1c43771b32 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -124,7 +124,7 @@ int init_relay_log_info(Relay_log_info* rli, /* The relay log will now be opened, as a SEQ_READ_APPEND IO_CACHE. Note that the I/O thread flushes it to disk after writing every - event, in flush_master_info(mi, 1). + event, in flush_master_info(mi, 1, ?). */ /* diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 889673acbcc..a49aab0a9ab 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -6280,8 +6280,8 @@ ER_BINLOG_UNSAFE_INSERT_DELAYED eng "Statement uses INSERT DELAYED. This is unsafe because the time when rows are inserted cannot be predicted." ER_BINLOG_UNSAFE_SYSTEM_TABLE eng "Statement uses the general_log, slow_log or performance_schema table(s). This is unsafe because system tables may differ on slave." -ER_BINLOG_UNSAFE_TWO_AUTOINC_COLUMNS - eng "Statement updates two AUTO_INCREMENT columns. This is unsafe because the generated value cannot be predicted by slave." +ER_BINLOG_UNSAFE_AUTOINC_COLUMNS + eng "Statement invokes a trigger or a stored function that inserts into AUTO_INCREMENT column which is unsafe to binlog in STATEMENT format because slave may execute it non-deterministically." ER_BINLOG_UNSAFE_UDF eng "Statement uses a UDF. It cannot be determined if the UDF will return the same value on slave." ER_BINLOG_UNSAFE_SYSTEM_VARIABLE @@ -6318,3 +6318,6 @@ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT eng "Cannot modify @@session.binlog_direct_non_transactional_updates inside a transaction" ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT eng "Cannot change the binlog direct flag inside a stored function or trigger" +ER_SPATIAL_MUST_HAVE_GEOM_COL 42000 + eng "A SPATIAL index may only contain a geometrical type column" + diff --git a/sql/slave.cc b/sql/slave.cc index 69b7d8c4553..337117a8d86 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -511,7 +511,7 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock) DBUG_PRINT("info",("Flushing relay log and master info file.")); if (current_thd) thd_proc_info(current_thd, "Flushing relay log and master info files."); - if (flush_master_info(mi, TRUE /* flush relay log */)) + if (flush_master_info(mi, TRUE, FALSE)) DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS); if (my_sync(mi->rli.relay_log.get_log_file()->file, MYF(MY_WME))) @@ -1112,7 +1112,7 @@ int init_dynarray_intvar_from_file(DYNAMIC_ARRAY* arr, IO_CACHE* f) memcpy(buf_act, buf, read_size); snd_size= my_b_gets(f, buf_act + read_size, max_size - read_size); if (snd_size == 0 || - (snd_size + 1 == max_size - read_size) && buf[max_size - 2] != '\n') + ((snd_size + 1 == max_size - read_size) && buf[max_size - 2] != '\n')) { /* failure to make the 2nd read or short read again @@ -1602,7 +1602,7 @@ static void write_ignored_events_info_to_relay_log(THD *thd, Master_info *mi) " to the relay log, SHOW SLAVE STATUS may be" " inaccurate"); rli->relay_log.harvest_bytes_written(&rli->log_space_total); - if (flush_master_info(mi, 1)) + if (flush_master_info(mi, TRUE, FALSE)) sql_print_error("Failed to flush master info file"); delete ev; } @@ -2931,7 +2931,7 @@ Stopping slave I/O thread due to out-of-memory error from master"); goto err; } - if (flush_master_info(mi, 1)) + if (flush_master_info(mi, TRUE, TRUE)) { sql_print_error("Failed to flush master info file"); goto err; @@ -3946,8 +3946,8 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len) /* everything is filtered out from non-master */ (s_id != mi->master_id || /* for the master meta information is necessary */ - buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT && - buf[EVENT_TYPE_OFFSET] != ROTATE_EVENT))) + (buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT && + buf[EVENT_TYPE_OFFSET] != ROTATE_EVENT)))) { /* Do not write it to the relay log. @@ -3967,9 +3967,9 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len) as well as rli->group_relay_log_pos. */ if (!(s_id == ::server_id && !mi->rli.replicate_same_server_id) || - buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT && - buf[EVENT_TYPE_OFFSET] != ROTATE_EVENT && - buf[EVENT_TYPE_OFFSET] != STOP_EVENT) + (buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT && + buf[EVENT_TYPE_OFFSET] != ROTATE_EVENT && + buf[EVENT_TYPE_OFFSET] != STOP_EVENT)) { mi->master_log_pos+= inc_pos; memcpy(rli->ign_master_log_name_end, mi->master_log_name, FN_REFLEN); diff --git a/sql/sp.cc b/sql/sp.cc index 680538d33e9..39a8b6a009f 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -928,8 +928,8 @@ sp_create_routine(THD *thd, int type, sp_head *sp) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* Grab an exclusive MDL lock. */ if (lock_routine_name(thd, type == TYPE_ENUM_FUNCTION, @@ -1144,7 +1144,9 @@ done: close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } @@ -1182,8 +1184,8 @@ sp_drop_routine(THD *thd, int type, sp_name *name) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* Grab an exclusive MDL lock. */ if (lock_routine_name(thd, type == TYPE_ENUM_FUNCTION, @@ -1221,7 +1223,9 @@ sp_drop_routine(THD *thd, int type, sp_name *name) close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } @@ -1266,8 +1270,8 @@ sp_update_routine(THD *thd, int type, sp_name *name, st_sp_chistics *chistics) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); if (!(table= open_proc_table_for_update(thd))) DBUG_RETURN(SP_OPEN_TABLE_FAILED); @@ -1326,7 +1330,9 @@ sp_update_routine(THD *thd, int type, sp_name *name, st_sp_chistics *chistics) err: close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(ret); } diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index da83b8929c8..fb257a6e5ec 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -3114,8 +3114,8 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); #ifdef HAVE_REPLICATION /* @@ -3132,7 +3132,9 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(FALSE); } } @@ -3148,7 +3150,9 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, { // Should never happen close_thread_tables(thd); /* purecov: deadcode */ /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(TRUE); /* purecov: deadcode */ } @@ -3276,7 +3280,9 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, /* Tables are automatically closed */ thd->lex->restore_backup_query_tables_list(&backup); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result); } @@ -3342,8 +3348,8 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); #ifdef HAVE_REPLICATION /* @@ -3360,7 +3366,9 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(FALSE); } } @@ -3370,7 +3378,9 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, { // Should never happen close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(TRUE); } @@ -3448,7 +3458,9 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, mysql_rwlock_unlock(&LOCK_grant); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); /* Tables are automatically closed */ DBUG_RETURN(result); @@ -3493,8 +3505,8 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); #ifdef HAVE_REPLICATION /* @@ -3511,7 +3523,9 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(FALSE); } } @@ -3521,7 +3535,9 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, { // This should never happen close_thread_tables(thd); /* purecov: deadcode */ /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(TRUE); /* purecov: deadcode */ } @@ -3582,7 +3598,9 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, if (!result) my_ok(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result); } @@ -5798,14 +5816,16 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* CREATE USER may be skipped on replication client. */ if ((result= open_grant_tables(thd, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result != 1); } @@ -5851,7 +5871,9 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list) mysql_rwlock_unlock(&LOCK_grant); close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result); } @@ -5886,14 +5908,16 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* DROP USER may be skipped on replication client. */ if ((result= open_grant_tables(thd, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result != 1); } @@ -5933,7 +5957,9 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list) close_thread_tables(thd); thd->variables.sql_mode= old_sql_mode; /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result); } @@ -5968,14 +5994,16 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* RENAME USER may be skipped on replication client. */ if ((result= open_grant_tables(thd, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result != 1); } @@ -6025,7 +6053,9 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list) mysql_rwlock_unlock(&LOCK_grant); close_thread_tables(thd); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result); } @@ -6058,13 +6088,15 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list) row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); if ((result= open_grant_tables(thd, tables))) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result != 1); } @@ -6220,7 +6252,9 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list) if (result && !binlog_error) my_message(ER_REVOKE_GRANTS, ER(ER_REVOKE_GRANTS), MYF(0)); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(result || binlog_error); } @@ -6329,8 +6363,8 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name, row-based replication. The flag will be reset at the end of the statement. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); /* Remove procedure access */ do @@ -6367,7 +6401,9 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name, thd->pop_internal_handler(); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(error_handler.has_errors()); } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index ae5c5803545..6ff7085f740 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5278,10 +5278,7 @@ bool lock_tables(THD *thd, TABLE_LIST *tables, uint count, */ if (thd->variables.binlog_format != BINLOG_FORMAT_ROW && tables && has_write_table_with_auto_increment(thd->lex->first_not_own_table())) - { - thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_TWO_AUTOINC_COLUMNS); - thd->set_current_stmt_binlog_format_row_if_mixed(); - } + thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS); } DEBUG_SYNC(thd, "before_lock_tables_takes_lock"); diff --git a/sql/sql_class.cc b/sql/sql_class.cc index bdf83ebe8ec..b7ded3b632f 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -3568,7 +3568,7 @@ int THD::decide_logging_format(TABLE_LIST *tables) { DBUG_ENTER("THD::decide_logging_format"); DBUG_PRINT("info", ("query: %s", query())); - DBUG_PRINT("info", ("variables.binlog_format: %ld", + DBUG_PRINT("info", ("variables.binlog_format: %u", variables.binlog_format)); DBUG_PRINT("info", ("lex->get_stmt_unsafe_flags(): 0x%x", lex->get_stmt_unsafe_flags())); @@ -3709,7 +3709,7 @@ int THD::decide_logging_format(TABLE_LIST *tables) lock history on the slave will be different from the master. */ if (mixed_engine || - trans_has_updated_trans_table(this) && !all_trans_engines) + (trans_has_updated_trans_table(this) && !all_trans_engines)) lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_NONTRANS_AFTER_TRANS); DBUG_PRINT("info", ("flags_all_set: 0x%llx", flags_all_set)); @@ -3839,7 +3839,7 @@ int THD::decide_logging_format(TABLE_LIST *tables) DBUG_PRINT("info", ("decision: no logging since " "mysql_bin_log.is_open() = %d " "and (options & OPTION_BIN_LOG) = 0x%llx " - "and binlog_format = %ld " + "and binlog_format = %u " "and binlog_filter->db_ok(db) = %d", mysql_bin_log.is_open(), (variables.option_bits & OPTION_BIN_LOG), diff --git a/sql/sql_class.h b/sql/sql_class.h index e6ee7139b24..ce7d0b5296b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -2008,7 +2008,7 @@ public: bool slave_thread, one_shot_set; /* tells if current statement should binlog row-based(1) or stmt-based(0) */ - bool current_stmt_binlog_row_based; + bool locked, some_tables_deleted; bool last_cuted_field; bool no_errors, password; /** diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 0d423ba85eb..6da734592dc 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -48,7 +48,7 @@ Query_tables_list::binlog_stmt_unsafe_errcode[BINLOG_STMT_UNSAFE_COUNT] = ER_BINLOG_UNSAFE_LIMIT, ER_BINLOG_UNSAFE_INSERT_DELAYED, ER_BINLOG_UNSAFE_SYSTEM_TABLE, - ER_BINLOG_UNSAFE_TWO_AUTOINC_COLUMNS, + ER_BINLOG_UNSAFE_AUTOINC_COLUMNS, ER_BINLOG_UNSAFE_UDF, ER_BINLOG_UNSAFE_SYSTEM_VARIABLE, ER_BINLOG_UNSAFE_SYSTEM_FUNCTION, diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 0cf188c31da..7ec87806ea5 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -1111,13 +1111,15 @@ public: */ BINLOG_STMT_UNSAFE_SYSTEM_TABLE, /** - Update of two autoincrement columns is unsafe. With one - autoincrement column, we store the counter in the binlog so that - slave can restore the correct value. But we can only store one - such counter per statement, so updating more than one - autoincrement column is not safe. + Inserting into an autoincrement column in a stored routine is unsafe. + Even with just one autoincrement column, if the routine is invoked more than + once slave is not guaranteed to execute the statement graph same way as + the master. + And since it's impossible to estimate how many times a routine can be invoked at + the query pre-execution phase (see lock_tables), the statement is marked + pessimistically unsafe. */ - BINLOG_STMT_UNSAFE_TWO_AUTOINC_COLUMNS, + BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS, /** Using a UDF (user-defined function) is unsafe. */ @@ -1913,7 +1915,9 @@ struct LEX: public Query_tables_list uint profile_options; uint uint_geom_type; uint grant, grant_tot_col, which_columns; - uint fk_delete_opt, fk_update_opt, fk_match_option; + enum Foreign_key::fk_match_opt fk_match_option; + enum Foreign_key::fk_option fk_update_opt; + enum Foreign_key::fk_option fk_delete_opt; uint slave_thd_opt, start_transaction_opt; int nest_level; /* diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc index 2356af439e8..74d7beede47 100644 --- a/sql/sql_profile.cc +++ b/sql/sql_profile.cc @@ -131,6 +131,26 @@ int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table) #define RUSAGE_USEC(tv) ((tv).tv_sec*1000*1000 + (tv).tv_usec) #define RUSAGE_DIFF_USEC(tv1, tv2) (RUSAGE_USEC((tv1))-RUSAGE_USEC((tv2))) +#ifdef _WIN32 +static ULONGLONG FileTimeToQuadWord(FILETIME *ft) +{ + // Overlay FILETIME onto a ULONGLONG. + union { + ULONGLONG qwTime; + FILETIME ft; + } u; + + u.ft = *ft; + return u.qwTime; +} + + +// Get time difference between to FILETIME objects in seconds. +static double GetTimeDiffInSeconds(FILETIME *a, FILETIME *b) +{ + return ((FileTimeToQuadWord(a) - FileTimeToQuadWord(b)) / 1e7); +} +#endif PROF_MEASUREMENT::PROF_MEASUREMENT(QUERY_PROFILE *profile_arg, const char *status_arg) @@ -221,6 +241,12 @@ void PROF_MEASUREMENT::collect() time_usecs= (double) my_getsystime() / 10.0; /* 1 sec was 1e7, now is 1e6 */ #ifdef HAVE_GETRUSAGE getrusage(RUSAGE_SELF, &rusage); +#elif defined(_WIN32) + FILETIME ftDummy; + // NOTE: Get{Process|Thread}Times has a granularity of the clock interval, + // which is typically ~15ms. So intervals shorter than that will not be + // measurable by this function. + GetProcessTimes(GetCurrentProcess(), &ftDummy, &ftDummy, &ftKernel, &ftUser); #endif } @@ -590,6 +616,23 @@ int PROFILING::fill_statistics_info(THD *thd, TABLE_LIST *tables, Item *cond) table->field[5]->store_decimal(&cpu_stime_decimal); table->field[4]->set_notnull(); table->field[5]->set_notnull(); +#elif defined(_WIN32) + my_decimal cpu_utime_decimal, cpu_stime_decimal; + + double2my_decimal(E_DEC_FATAL_ERROR, + GetTimeDiffInSeconds(&entry->ftUser, + &previous->ftUser), + &cpu_utime_decimal); + double2my_decimal(E_DEC_FATAL_ERROR, + GetTimeDiffInSeconds(&entry->ftKernel, + &previous->ftKernel), + &cpu_stime_decimal); + + // Store the result. + table->field[4]->store_decimal(&cpu_utime_decimal); + table->field[5]->store_decimal(&cpu_stime_decimal); + table->field[4]->set_notnull(); + table->field[5]->set_notnull(); #else /* TODO: Add CPU-usage info for non-BSD systems */ #endif diff --git a/sql/sql_profile.h b/sql/sql_profile.h index e9c5686efab..33597ca337e 100644 --- a/sql/sql_profile.h +++ b/sql/sql_profile.h @@ -165,6 +165,8 @@ private: char *status; #ifdef HAVE_GETRUSAGE struct rusage rusage; +#elif defined(_WIN32) + FILETIME ftKernel, ftUser; #endif char *function; diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 436e979df1e..510f9d8dc01 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -828,11 +828,11 @@ impossible position"; { if (coord) { - DBUG_ASSERT(heartbeat_ts && heartbeat_period != LL(0)); + DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0); set_timespec_nsec(*heartbeat_ts, heartbeat_period); } ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts); - DBUG_ASSERT(ret == 0 || heartbeat_period != LL(0) && coord != NULL); + DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL)); if (ret == ETIMEDOUT || ret == ETIME) { #ifndef DBUG_OFF @@ -1525,7 +1525,7 @@ bool change_master(THD* thd, Master_info* mi) Relay log's IO_CACHE may not be inited, if rli->inited==0 (server was never a slave before). */ - if (flush_master_info(mi, 0)) + if (flush_master_info(mi, FALSE, FALSE)) { my_error(ER_RELAY_LOG_INIT, MYF(0), "Failed to flush master info file"); ret= TRUE; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3ee973557db..c37aeb39f6c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4392,7 +4392,7 @@ best_access_path(JOIN *join, */ if (table->quick_keys.is_set(key) && (const_part & ((1 << table->quick_key_parts[key])-1)) == - ((1 << table->quick_key_parts[key])-1) && + (((key_part_map)1 << table->quick_key_parts[key])-1) && table->quick_n_ranges[key] == 1 && records > (double) table->quick_rows[key]) { @@ -12323,6 +12323,12 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), if (!end_of_records) { int error; + if (join->tables && + join->join_tab->is_using_loose_index_scan()) + { + /* Copy non-aggregated fields when loose index scan is used. */ + copy_fields(&join->tmp_table_param); + } if (join->having && join->having->val_int() == 0) DBUG_RETURN(NESTED_LOOP_OK); // Didn't match having error=0; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index d6c656080b4..2e057d6a731 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -295,7 +295,8 @@ uint explain_filename(THD* thd, { if (explain_mode == EXPLAIN_ALL_VERBOSE) { - to_p= strnmov(to_p, ER(ER_DATABASE_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_DATABASE_NAME), + end_p - to_p); *(to_p++)= ' '; to_p= add_identifier(thd, to_p, end_p, db_name, db_name_len); to_p= strnmov(to_p, ", ", end_p - to_p); @@ -308,7 +309,7 @@ uint explain_filename(THD* thd, } if (explain_mode == EXPLAIN_ALL_VERBOSE) { - to_p= strnmov(to_p, ER(ER_TABLE_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_TABLE_NAME), end_p - to_p); *(to_p++)= ' '; to_p= add_identifier(thd, to_p, end_p, table_name, table_name_len); } @@ -325,18 +326,22 @@ uint explain_filename(THD* thd, if (name_type != NORMAL) { if (name_type == TEMP) - to_p= strnmov(to_p, ER(ER_TEMPORARY_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_TEMPORARY_NAME), + end_p - to_p); else - to_p= strnmov(to_p, ER(ER_RENAMED_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_RENAMED_NAME), + end_p - to_p); to_p= strnmov(to_p, " ", end_p - to_p); } - to_p= strnmov(to_p, ER(ER_PARTITION_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_PARTITION_NAME), + end_p - to_p); *(to_p++)= ' '; to_p= add_identifier(thd, to_p, end_p, part_name, part_name_len); if (subpart_name) { to_p= strnmov(to_p, ", ", end_p - to_p); - to_p= strnmov(to_p, ER(ER_SUBPARTITION_NAME), end_p - to_p); + to_p= strnmov(to_p, ER_THD_OR_DEFAULT(thd, ER_SUBPARTITION_NAME), + end_p - to_p); *(to_p++)= ' '; to_p= add_identifier(thd, to_p, end_p, subpart_name, subpart_name_len); } @@ -3269,11 +3274,19 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, { column->length*= sql_field->charset->mbmaxlen; - if (key->type == Key::SPATIAL && column->length) + if (key->type == Key::SPATIAL) { - my_error(ER_WRONG_SUB_KEY, MYF(0)); - DBUG_RETURN(TRUE); - } + if (column->length) + { + my_error(ER_WRONG_SUB_KEY, MYF(0)); + DBUG_RETURN(TRUE); + } + if (!f_is_geom(sql_field->pack_flag)) + { + my_error(ER_SPATIAL_MUST_HAVE_GEOM_COL, MYF(0)); + DBUG_RETURN(TRUE); + } + } if (f_is_blob(sql_field->pack_flag) || (f_is_geom(sql_field->pack_flag) && key->type != Key::SPATIAL)) @@ -3368,22 +3381,21 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, } } } + // Catch invalid use of partial keys else if (!f_is_geom(sql_field->pack_flag) && - ((column->length > length && - !Field::type_can_have_key_part (sql_field->sql_type)) || - ((f_is_packed(sql_field->pack_flag) || - ((file->ha_table_flags() & HA_NO_PREFIX_CHAR_KEYS) && - (key_info->flags & HA_NOSAME))) && - column->length != length))) - { - /* Catch invalid uses of partial keys. - A key is identified as 'partial' if column->length != length. - A partial key is invalid if they data type does - not allow it, or the field is packed (as in MyISAM), - or the storage engine doesn't allow prefixed search and - the key is primary key. - */ - + // is the key partial? + column->length != length && + // is prefix length bigger than field length? + (column->length > length || + // can the field have a partial key? + !Field::type_can_have_key_part (sql_field->sql_type) || + // a packed field can't be used in a partial key + f_is_packed(sql_field->pack_flag) || + // does the storage engine allow prefixed search? + ((file->ha_table_flags() & HA_NO_PREFIX_CHAR_KEYS) && + // and is this a 'unique' key? + (key_info->flags & HA_NOSAME)))) + { my_message(ER_WRONG_SUB_KEY, ER(ER_WRONG_SUB_KEY), MYF(0)); DBUG_RETURN(TRUE); } @@ -6470,7 +6482,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, thd->clear_error(); Query_log_event qinfo(thd, thd->query(), thd->query_length(), FALSE, TRUE, FALSE, 0); - if (error= mysql_bin_log.write(&qinfo)) + if ((error= mysql_bin_log.write(&qinfo))) goto view_err_unlock; } my_ok(thd); diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 15c3083ea9d..3bead5217f0 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -458,8 +458,8 @@ int mysql_create_function(THD *thd,udf_func *udf) Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for CREATE FUNCTION command. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); mysql_rwlock_wrlock(&THR_LOCK_udf); if ((my_hash_search(&udf_hash,(uchar*) udf->name.str, udf->name.length))) @@ -528,11 +528,15 @@ int mysql_create_function(THD *thd,udf_func *udf) if (write_bin_log(thd, TRUE, thd->query(), thd->query_length())) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(1); } /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(0); err: @@ -540,7 +544,9 @@ int mysql_create_function(THD *thd,udf_func *udf) dlclose(dl); mysql_rwlock_unlock(&THR_LOCK_udf); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(1); } @@ -568,8 +574,8 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for DROP FUNCTION command. */ - save_binlog_row_based= thd->is_current_stmt_binlog_format_row(); - thd->clear_current_stmt_binlog_format_row(); + if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row())) + thd->clear_current_stmt_binlog_format_row(); mysql_rwlock_wrlock(&THR_LOCK_udf); if (!(udf=(udf_func*) my_hash_search(&udf_hash,(uchar*) udf_name->str, @@ -612,16 +618,22 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) if (write_bin_log(thd, TRUE, thd->query(), thd->query_length())) { /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(1); } /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(0); err: mysql_rwlock_unlock(&THR_LOCK_udf); /* Restore the state of binlog format */ - thd->current_stmt_binlog_row_based= save_binlog_row_based; + DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); + if (save_binlog_row_based) + thd->set_current_stmt_binlog_format_row(); DBUG_RETURN(1); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 285d5596b24..34361ab3f99 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -757,6 +757,7 @@ static bool add_create_index (LEX *lex, Key::Keytype type, struct p_elem_val *p_elem_value; enum index_hint_type index_hint; enum enum_filetype filetype; + enum Foreign_key::fk_option m_fk_option; Diag_condition_item_name diag_condition_item_name; } @@ -766,10 +767,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %pure_parser /* We have threads */ /* - Currently there are 172 shift/reduce conflicts. + Currently there are 169 shift/reduce conflicts. We should not introduce new conflicts any more. */ -%expect 172 +%expect 169 /* Comments for TOKENS. @@ -1423,7 +1424,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); type type_with_opt_collate int_type real_type order_dir lock_option udf_type if_exists opt_local opt_table_options table_options table_option opt_if_not_exists opt_no_write_to_binlog - delete_option opt_temporary all_or_any opt_distinct + opt_temporary all_or_any opt_distinct opt_ignore_leaves fulltext_options spatial_type union_option start_transaction_opts opt_chain opt_release union_opt select_derived_init option_type2 @@ -1431,6 +1432,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); opt_ev_status opt_ev_on_completion ev_on_completion opt_ev_comment ev_alter_on_schedule_completion opt_ev_rename_to opt_ev_sql_stmt +%type <m_fk_option> + delete_option + %type <ulong_num> ulong_num real_ulong_num merge_insert_types @@ -1545,7 +1549,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); opt_precision opt_ignore opt_column opt_restrict grant revoke set lock unlock string_list field_options field_option field_opt_list opt_binary ascii unicode table_lock_list table_lock - ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use + ref_list opt_match_clause opt_on_update_delete use opt_delete_options opt_delete_option varchar nchar nvarchar opt_outer table_list table_name table_alias_ref_list table_alias_ref opt_option opt_place @@ -5317,10 +5321,6 @@ key_def: /* Only used for ALTER TABLE. Ignored otherwise. */ lex->alter_info.flags|= ALTER_FOREIGN_KEY; } - | constraint opt_check_constraint - { - Lex->col_list.empty(); /* Alloced by sql_alloc */ - } | opt_constraint check_constraint { Lex->col_list.empty(); /* Alloced by sql_alloc */ @@ -5333,7 +5333,7 @@ opt_check_constraint: ; check_constraint: - CHECK_SYM expr + CHECK_SYM '(' expr ')' ; opt_constraint: @@ -5872,21 +5872,20 @@ opt_primary: ; references: - REFERENCES table_ident - { - LEX *lex=Lex; - lex->fk_delete_opt= lex->fk_update_opt= lex->fk_match_option= 0; - lex->ref_list.empty(); - } + REFERENCES + table_ident opt_ref_list + opt_match_clause + opt_on_update_delete { $$=$2; } ; opt_ref_list: - /* empty */ opt_on_delete {} - | '(' ref_list ')' opt_on_delete {} + /* empty */ + { Lex->ref_list.empty(); } + | '(' ref_list ')' ; ref_list: @@ -5902,34 +5901,64 @@ ref_list: Key_part_spec *key= new Key_part_spec($1, 0); if (key == NULL) MYSQL_YYABORT; - Lex->ref_list.push_back(key); + LEX *lex= Lex; + lex->ref_list.empty(); + lex->ref_list.push_back(key); } ; -opt_on_delete: - /* empty */ {} - | opt_on_delete_list {} - ; - -opt_on_delete_list: - opt_on_delete_list opt_on_delete_item {} - | opt_on_delete_item {} +opt_match_clause: + /* empty */ + { Lex->fk_match_option= Foreign_key::FK_MATCH_UNDEF; } + | MATCH FULL + { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } + | MATCH PARTIAL + { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } + | MATCH SIMPLE_SYM + { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; } ; -opt_on_delete_item: - ON DELETE_SYM delete_option { Lex->fk_delete_opt= $3; } - | ON UPDATE_SYM delete_option { Lex->fk_update_opt= $3; } - | MATCH FULL { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } - | MATCH PARTIAL { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } - | MATCH SIMPLE_SYM { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; } +opt_on_update_delete: + /* empty */ + { + LEX *lex= Lex; + lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; + lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF; + } + | ON UPDATE_SYM delete_option + { + LEX *lex= Lex; + lex->fk_update_opt= $3; + lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF; + } + | ON DELETE_SYM delete_option + { + LEX *lex= Lex; + lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; + lex->fk_delete_opt= $3; + } + | ON UPDATE_SYM delete_option + ON DELETE_SYM delete_option + { + LEX *lex= Lex; + lex->fk_update_opt= $3; + lex->fk_delete_opt= $6; + } + | ON DELETE_SYM delete_option + ON UPDATE_SYM delete_option + { + LEX *lex= Lex; + lex->fk_update_opt= $6; + lex->fk_delete_opt= $3; + } ; delete_option: - RESTRICT { $$= (int) Foreign_key::FK_OPTION_RESTRICT; } - | CASCADE { $$= (int) Foreign_key::FK_OPTION_CASCADE; } - | SET NULL_SYM { $$= (int) Foreign_key::FK_OPTION_SET_NULL; } - | NO_SYM ACTION { $$= (int) Foreign_key::FK_OPTION_NO_ACTION; } - | SET DEFAULT { $$= (int) Foreign_key::FK_OPTION_DEFAULT; } + RESTRICT { $$= Foreign_key::FK_OPTION_RESTRICT; } + | CASCADE { $$= Foreign_key::FK_OPTION_CASCADE; } + | SET NULL_SYM { $$= Foreign_key::FK_OPTION_SET_NULL; } + | NO_SYM ACTION { $$= Foreign_key::FK_OPTION_NO_ACTION; } + | SET DEFAULT { $$= Foreign_key::FK_OPTION_DEFAULT; } ; normal_key_type: @@ -9265,8 +9294,8 @@ table_factor: lex->pop_context(); lex->nest_level--; } - else if ($3->select_lex && - $3->select_lex->master_unit()->is_union() || $5) + else if (($3->select_lex && + $3->select_lex->master_unit()->is_union()) || $5) { /* simple nested joins cannot have aliases or unions */ my_parse_error(ER(ER_SYNTAX_ERROR)); diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 085e8b8ee1e..9f8914ac3fe 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -242,15 +242,25 @@ static bool check_has_super(sys_var *self, THD *thd, set_var *var) static bool binlog_format_check(sys_var *self, THD *thd, set_var *var) { /* - If RBR and open temporary tables, their CREATE TABLE may not be in the - binlog, so we can't toggle to SBR in this connection. + If RBR and open temporary tables, their CREATE TABLE may not be in the + binlog, so we can't toggle to SBR in this connection. + + If binlog_format=MIXED, there are open temporary tables, and an unsafe + statement is executed, then subsequent statements are logged in row + format and hence changes to temporary tables may be lost. So we forbid + switching @@SESSION.binlog_format from MIXED to STATEMENT when there are + open temp tables and we are logging in row format. */ - if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) && - thd->temporary_tables) + if (thd->temporary_tables && var->type == OPT_SESSION && + var->save_result.ulonglong_value == BINLOG_FORMAT_STMT && + ((thd->variables.binlog_format == BINLOG_FORMAT_MIXED && + thd->is_current_stmt_binlog_format_row()) || + thd->variables.binlog_format == BINLOG_FORMAT_ROW)) { my_error(ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR, MYF(0)); return true; } + /* if in a stored function/trigger, it's too late to change mode */ @@ -325,7 +335,7 @@ static bool binlog_direct_check(sys_var *self, THD *thd, set_var *var) return true; if (var->type == OPT_GLOBAL || (thd->variables.binlog_direct_non_trans_update == - var->save_result.ulonglong_value)) + static_cast<my_bool>(var->save_result.ulonglong_value))) return false; return false; @@ -2965,14 +2975,14 @@ static bool check_locale(sys_var *self, THD *thd, set_var *var) static Sys_var_struct Sys_lc_messages( "lc_messages", "Set the language used for the error messages", SESSION_VAR(lc_messages), NO_CMD_LINE, - offsetof(MY_LOCALE, name), DEFAULT(&my_default_lc_messages), + my_offsetof(MY_LOCALE, name), DEFAULT(&my_default_lc_messages), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_locale)); static Sys_var_struct Sys_lc_time_names( "lc_time_names", "Set the language used for the month " "names and the days of the week", SESSION_VAR(lc_time_names), NO_CMD_LINE, - offsetof(MY_LOCALE, name), DEFAULT(&my_default_lc_time_names), + my_offsetof(MY_LOCALE, name), DEFAULT(&my_default_lc_time_names), NO_MUTEX_GUARD, IN_BINLOG, ON_CHECK(check_locale)); static Sys_var_tz Sys_time_zone( diff --git a/sql/unireg.h b/sql/unireg.h index def4fb12b39..9932be7ae74 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -46,6 +46,9 @@ #define ER(X) CURRENT_THD_ERRMSGS[(X) - ER_ERROR_FIRST] #define ER_DEFAULT(X) DEFAULT_ERRMSGS[(X) - ER_ERROR_FIRST] #define ER_SAFE(X) (((X) >= ER_ERROR_FIRST && (X) <= ER_ERROR_LAST) ? ER(X) : "Invalid error code") +#define ER_THD(thd,X) ((thd)->variables.lc_messages->errmsgs->errmsgs[(X) - \ + ER_ERROR_FIRST]) +#define ER_THD_OR_DEFAULT(thd,X) ((thd) ? ER_THD(thd, X) : ER_DEFAULT(X)) #define ERRMAPP 1 /* Errormap f|r my_error */ diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index 01b4b3711c1..380801c8677 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -1081,6 +1081,13 @@ static void delete_current_thread_v1(void) } } +static void delete_thread_v1(PSI_thread *thread) +{ + PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread); + if (pfs != NULL) + destroy_thread(pfs); +} + static PSI_mutex_locker* get_thread_mutex_locker_v1(PSI_mutex *mutex, PSI_mutex_operation op) { @@ -2007,6 +2014,7 @@ PSI_v1 PFS_v1= get_thread_v1, set_thread_v1, delete_current_thread_v1, + delete_thread_v1, get_thread_mutex_locker_v1, get_thread_rwlock_locker_v1, get_thread_cond_locker_v1, diff --git a/storage/perfschema/pfs_engine_table.cc b/storage/perfschema/pfs_engine_table.cc index fe6783e10eb..c824b93093e 100644 --- a/storage/perfschema/pfs_engine_table.cc +++ b/storage/perfschema/pfs_engine_table.cc @@ -221,7 +221,7 @@ int PFS_engine_table::read_row(TABLE *table, if (! m_share_ptr->m_checked) { my_error(ER_WRONG_NATIVE_TABLE_STRUCTURE, MYF(0), - PERFORMANCE_SCHEMA_str.str, m_share_ptr->m_name); + PERFORMANCE_SCHEMA_str.str, m_share_ptr->m_name.str); return HA_ERR_TABLE_NEEDS_UPGRADE; } @@ -258,7 +258,7 @@ int PFS_engine_table::update_row(TABLE *table, if (! m_share_ptr->m_checked) { my_error(ER_WRONG_NATIVE_TABLE_STRUCTURE, MYF(0), - PERFORMANCE_SCHEMA_str.str, m_share_ptr->m_name); + PERFORMANCE_SCHEMA_str.str, m_share_ptr->m_name.str); return HA_ERR_TABLE_NEEDS_UPGRADE; } diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index cc71e65ee08..7a4725026bf 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -1,71 +1,61 @@ # Copyright (C) 2000-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc. -# +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1301 USA. -%define mysql_version @VERSION@ +############################################################################## +# Some common macro definitions +############################################################################## # NOTE: "vendor" is used in upgrade/downgrade check, so you can't # change these, has to be exactly as is. %define mysql_old_vendor MySQL AB %define mysql_vendor Sun Microsystems, Inc. -# use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x) -# to enable static linking (off by default) -%{?_with_static:%define STATIC_BUILD 1} -%{!?_with_static:%define STATIC_BUILD 0} - -# use "rpmbuild --with yassl" or "rpm --define '_with_yassl 1'" (for RPM 3.x) -# to build with yaSSL support (off by default) -%{?_with_yassl:%define YASSL_BUILD 1} -%{!?_with_yassl:%define YASSL_BUILD 0} - -# ---------------------------------------------------------------------- -# use "rpmbuild --with bundled_zlib" or "rpm --define '_with_bundled_zlib 1'" -# (for RPM 3.x) to build using the bundled zlib (off by default) -# ---------------------------------------------------------------------- -%{?_with_bundled_zlib:%define WITH_BUNDLED_ZLIB 1} -%{!?_with_bundled_zlib:%define WITH_BUNDLED_ZLIB 0} +%define mysql_version @VERSION@ -# use "rpmbuild --with cluster" or "rpm --define '_with_cluster 1'" (for RPM 3.x) -# to build with cluster support (off by default) -%{?_with_cluster:%define CLUSTER_BUILD 1} -%{!?_with_cluster:%define CLUSTER_BUILD 0} - -# ---------------------------------------------------------------------- -# support optional "tcmalloc" stuff (experimental) -# ---------------------------------------------------------------------- -%{?malloc_lib_target:%define WITH_TCMALLOC 1} -%{!?malloc_lib_target:%define WITH_TCMALLOC 0} +%define mysqld_user mysql +%define mysqld_group mysql +%define mysqldatadir /var/lib/mysql +%define see_base For a description of MySQL see the base MySQL RPM or http://www.mysql.com -%if %{STATIC_BUILD} -%define release 1 -%else -%define release 1.glibc23 -%endif -%define mysql_license GPL -%define mysqld_user mysql -%define mysqld_group mysql -%define server_suffix -standard -%define mysqldatadir /var/lib/mysql +# ------------------------------------------------------------------------------ +# On SuSE 9 no separate "debuginfo" package is built. To enable basic +# debugging on that platform, we don't strip binaries on SuSE 9. We +# disable the strip of binaries by redefining the RPM macro +# "__os_install_post" leaving out the script calls that normally does +# this. We do this in all cases, as on platforms where "debuginfo" is +# created, a script "find-debuginfo.sh" will be called that will do +# the strip anyway, part of separating the executable and debug +# information into separate files put into separate packages. +# +# Some references (shows more advanced conditional usage): +# http://www.redhat.com/archives/rpm-list/2001-November/msg00257.html +# http://www.redhat.com/archives/rpm-list/2003-February/msg00275.html +# http://www.redhat.com/archives/rhl-devel-list/2004-January/msg01546.html +# http://lists.opensuse.org/archive/opensuse-commit/2006-May/1171.html +# ------------------------------------------------------------------------------ +%define __os_install_post /usr/lib/rpm/brp-compress +# ------------------------------------------------------------------------------ # We don't package all files installed into the build root by intention - # See BUG#998 for details. +# ------------------------------------------------------------------------------ %define _unpackaged_files_terminate_build 0 # ------------------------------------------------------------------------------ -# RPM build tools now automatically detects Perl module dependencies. This +# RPM build tools now automatically detects Perl module dependencies. This # detection gives problems as it is broken in some versions, and it also # give unwanted dependencies from mandatory scripts in our package. # Might not be possible to disable in all RPM tool versions, but here we @@ -77,34 +67,73 @@ %undefine __perl_provides %undefine __perl_requires -%define see_base For a description of MySQL see the base MySQL RPM or http://www.mysql.com +############################################################################## +# Command line handling +############################################################################## -# On SuSE 9 no separate "debuginfo" package is built. To enable basic -# debugging on that platform, we don't strip binaries on SuSE 9. We -# disable the strip of binaries by redefining the RPM macro -# "__os_install_post" leaving out the script calls that normally does -# this. We do this in all cases, as on platforms where "debuginfo" is -# created, a script "find-debuginfo.sh" will be called that will do -# the strip anyway, part of separating the executable and debug -# information into separate files put into separate packages. -# -# Some references (shows more advanced conditional usage): -# http://www.redhat.com/archives/rpm-list/2001-November/msg00257.html -# http://www.redhat.com/archives/rpm-list/2003-February/msg00275.html -# http://www.redhat.com/archives/rhl-devel-list/2004-January/msg01546.html -# http://lists.opensuse.org/archive/opensuse-commit/2006-May/1171.html +# ---------------------------------------------------------------------- +# use "rpmbuild --with yassl" or "rpm --define '_with_yassl 1'" (for RPM 3.x) +# to build with yaSSL support (off by default) +# ---------------------------------------------------------------------- +%{?_with_yassl:%define YASSL_BUILD 1} +%{!?_with_yassl:%define YASSL_BUILD 0} -%define __os_install_post /usr/lib/rpm/brp-compress +# ---------------------------------------------------------------------- +# use "rpmbuild --without bundled_zlib" or "rpm --define '_without_bundled_zlib 1'" +# (for RPM 3.x) to not build using the bundled zlib (on by default) +# ---------------------------------------------------------------------- +%{!?_with_bundled_zlib: %{!?_without_bundled_zlib: %define WITH_BUNDLED_ZLIB 1}} +%{?_with_bundled_zlib:%define WITH_BUNDLED_ZLIB 1} +%{?_without_bundled_zlib:%define WITH_BUNDLED_ZLIB 0} -Name: MySQL +# ---------------------------------------------------------------------- +# support optional "tcmalloc" stuff (experimental) +# ---------------------------------------------------------------------- +%{?malloc_lib_target:%define WITH_TCMALLOC 1} +%{!?malloc_lib_target:%define WITH_TCMALLOC 0} + +# ---------------------------------------------------------------------- +# use "rpmbuild --with cluster" or "rpm --define '_with_cluster 1'" (for RPM 3.x) +# to build with cluster support (off by default) +# ---------------------------------------------------------------------- +%{?_with_cluster:%define CLUSTER_BUILD 1} +%{!?_with_cluster:%define CLUSTER_BUILD 0} + +############################################################################## +# Product definitions - set for a "community" package +############################################################################## + +%define server_suffix -community +%define package_suffix -community +%define ndbug_comment MySQL Community Server (GPL) +%define debug_comment MySQL Community Server - Debug (GPL) +%define commercial 0 +%define EMBEDDED_BUILD 1 +%define PARTITION_BUILD 1 +# Default for CLUSTER_BUILD is "0", but command line option may override it +%define COMMUNITY_BUILD 1 +%define INNODB_BUILD 1 +%define NORMAL_TEST_MODE test-bt +%define DEBUG_TEST_MODE test-bt-debug + +%define release 1.glibc23 + +%define mysql_license GPL +%define src_dir mysql-%{mysql_version} + +############################################################################## +# Main spec file section +############################################################################## + +Name: MySQL Summary: MySQL: a very fast and reliable SQL database server Group: Applications/Databases Version: @MYSQL_U_SCORE_VERSION@ Release: %{release} -License: Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Under %{mysql_license} license as shown in the Description field. -Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%{mysql_version}.tar.gz +License: Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ %{mysql_vendor} All rights reserved. Use is subject to license terms. Under %{mysql_license} license as shown in the Description field. +Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz URL: http://www.mysql.com/ -Packager: Sun Microsystems, Inc. Product Engineering Team <build@mysql.com> +Packager: %{mysql_vendor} Product Engineering Team <build@mysql.com> Vendor: %{mysql_vendor} Provides: msqlormysql MySQL-server mysql BuildRequires: ncurses-devel @@ -120,9 +149,9 @@ The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. MySQL Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software. MySQL is a trademark of -Sun Microsystems, Inc. +%{mysql_vendor} -Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ Sun Microsystems, Inc. All rights reserved. +Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ %{mysql_vendor} All rights reserved. Use is subject to license terms. This software comes with ABSOLUTELY NO WARRANTY. This is free software, @@ -132,6 +161,10 @@ The MySQL web site (http://www.mysql.com/) provides the latest news and information about the MySQL software. Also please see the documentation and the manual for more information. +############################################################################## +# Sub package definition +############################################################################## + %package server Summary: MySQL: a very fast and reliable SQL database server Group: Applications/Databases @@ -144,9 +177,9 @@ The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. MySQL Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software. MySQL is a trademark of -Sun Microsystems, Inc. +%{mysql_vendor} -Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ Sun Microsystems, Inc. All rights reserved. +Copyright 2000-2008 MySQL AB, @MYSQL_COPYRIGHT_YEAR@ %{mysql_vendor} All rights reserved. Use is subject to license terms. This software comes with ABSOLUTELY NO WARRANTY. This is free software, @@ -156,12 +189,17 @@ The MySQL web site (http://www.mysql.com/) provides the latest news and information about the MySQL software. Also please see the documentation and the manual for more information. -This package includes the MySQL server binary (incl. InnoDB) as well -as related utilities to run and administrate a MySQL server. +This package includes the MySQL server binary +%if %{INNODB_BUILD} +(configured including InnoDB) +%endif +as well as related utilities to run and administer a MySQL server. If you want to access and work with the database, you have to install package "MySQL-client" as well! +# ------------------------------------------------------------------------------ + %package client Summary: MySQL - Client Group: Applications/Databases @@ -169,33 +207,39 @@ Obsoletes: mysql-client Provides: mysql-client %description client -This package contains the standard MySQL clients and administration tools. +This package contains the standard MySQL clients and administration tools. %{see_base} +# ------------------------------------------------------------------------------ + %if %{CLUSTER_BUILD} %package ndb-storage Summary: MySQL - ndbcluster storage engine Group: Applications/Databases %description ndb-storage -This package contains the ndbcluster storage engine. -It is necessary to have this package installed on all +This package contains the ndbcluster storage engine. +It is necessary to have this package installed on all computers that should store ndbcluster table data. %{see_base} +# ------------------------------------------------------------------------------ + %package ndb-management Summary: MySQL - ndbcluster storage engine management Group: Applications/Databases %description ndb-management This package contains ndbcluster storage engine management. -It is necessary to have this package installed on at least +It is necessary to have this package installed on at least one computer in the cluster. %{see_base} +# ------------------------------------------------------------------------------ + %package ndb-tools Summary: MySQL - ndbcluster storage engine basic tools Group: Applications/Databases @@ -205,6 +249,8 @@ This package contains ndbcluster storage engine basic tools. %{see_base} +# ------------------------------------------------------------------------------ + %package ndb-extra Summary: MySQL - ndbcluster storage engine extra tools Group: Applications/Databases @@ -216,6 +262,8 @@ They should be used with caution. %{see_base} %endif +# ------------------------------------------------------------------------------ + %package test Requires: %{name}-client perl Summary: MySQL - Test suite @@ -229,6 +277,8 @@ This package contains the MySQL regression test suite. %{see_base} +# ------------------------------------------------------------------------------ + %package devel Summary: MySQL - Development header files and libraries Group: Applications/Databases @@ -241,6 +291,8 @@ necessary to develop MySQL client applications. %{see_base} +# ------------------------------------------------------------------------------ + %package shared Summary: MySQL - Shared libraries Group: Applications/Databases @@ -249,6 +301,10 @@ Group: Applications/Databases This package contains the shared libraries (*.so*) which certain languages and applications need to dynamically load and use MySQL. +# ------------------------------------------------------------------------------ + +%if %{EMBEDDED_BUILD} + %package embedded Requires: %{name}-devel Summary: MySQL - embedded library @@ -268,6 +324,12 @@ client/server version. %{see_base} +%endif + +############################################################################## +# +############################################################################## + %prep # We unpack the source two times, for 'debug' and 'release' build. %setup -T -a 0 -c -n mysql-%{mysql_version} @@ -275,29 +337,53 @@ mv mysql-%{mysql_version} mysql-debug-%{mysql_version} %setup -D -T -a 0 -n mysql-%{mysql_version} mv mysql-%{mysql_version} mysql-release-%{mysql_version} +############################################################################## +# The actual build +############################################################################## + %build BuildMySQL() { +# Let "MYSQL_BUILD_*FLAGS" take precedence. +CFLAGS=${MYSQL_BUILD_CFLAGS:-$CFLAGS} +CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-$CXXFLAGS} +LDFLAGS=${MYSQL_BUILD_LDFLAGS:-$LDFLAGS} +# Fall back on RPM_OPT_FLAGS (part of RPM environment) if no flags are given. +CFLAGS=${CFLAGS:-$RPM_OPT_FLAGS} +CXXFLAGS=${CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors -fno-exceptions -fno-rtti } +# Evaluate current setting of $DEBUG +if [ $DEBUG -gt 0 ] ; then + OPT_COMMENT='--with-comment="%{debug_comment}"' + OPT_DEBUG='--with-debug' + CFLAGS=`echo " $CFLAGS " | \ + sed -e 's/ -O[0-9]* / /' -e 's/ -unroll2 / /' -e 's/ -ip / /' \ + -e 's/^ //' -e 's/ $//'` + CXXFLAGS=`echo " $CXXFLAGS " | \ + sed -e 's/ -O[0-9]* / /' -e 's/ -unroll2 / /' -e 's/ -ip / /' \ + -e 's/^ //' -e 's/ $//'` +else + OPT_COMMENT='--with-comment="%{ndbug_comment}"' + OPT_DEBUG='' +fi # The --enable-assembler simply does nothing on systems that does not # support assembler speedups. sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \ - CC=\"${CC:-$MYSQL_BUILD_CC}\" \ - CXX=\"${CXX:-$MYSQL_BUILD_CXX}\" \ + CC=\"${MYSQL_BUILD_CC:-$CC}\" \ + CXX=\"${MYSQL_BUILD_CXX:-$CXX}\" \ CFLAGS=\"$CFLAGS\" \ CXXFLAGS=\"$CXXFLAGS\" \ - LDFLAGS=\"$MYSQL_BUILD_LDFLAGS\" \ + LDFLAGS=\"$LDFLAGS\" \ ./configure \ $* \ --with-mysqld-ldflags='-static' \ --with-client-ldflags='-static' \ - --with-zlib-dir=bundled \ --enable-assembler \ --enable-local-infile \ --with-fast-mutexes \ - --with-mysqld-user=%{mysqld_user} \ - --with-unix-socket-path=/var/lib/mysql/mysql.sock \ + --with-mysqld-user=%{mysqld_user} \ + --with-unix-socket-path=/var/lib/mysql/mysql.sock \ --with-pic \ - --prefix=/ \ + --prefix=/ \ %if %{CLUSTER_BUILD} --with-extra-charsets=all \ %else @@ -305,39 +391,57 @@ sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \ %endif %if %{YASSL_BUILD} --with-ssl \ +%else + --without-ssl \ %endif - --exec-prefix=%{_exec_prefix} \ - --libexecdir=%{_sbindir} \ - --libdir=%{_libdir} \ - --sysconfdir=%{_sysconfdir} \ - --datadir=%{_datadir} \ - --localstatedir=%{mysqldatadir} \ - --infodir=%{_infodir} \ - --includedir=%{_includedir} \ - --mandir=%{_mandir} \ + --exec-prefix=%{_exec_prefix} \ + --libexecdir=%{_sbindir} \ + --libdir=%{_libdir} \ + --sysconfdir=%{_sysconfdir} \ + --datadir=%{_datadir} \ + --localstatedir=%{mysqldatadir} \ + --infodir=%{_infodir} \ + --includedir=%{_includedir} \ + --mandir=%{_mandir} \ --enable-thread-safe-client \ + $OPT_COMMENT \ + $OPT_DEBUG \ --with-readline \ - --with-innodb \ +%if %{WITH_BUNDLED_ZLIB} + --with-zlib-dir=bundled \ +%endif %if %{CLUSTER_BUILD} - --with-ndbcluster \ + --with-plugin-ndbcluster \ +%else + --without-plugin-ndbcluster \ +%endif +%if %{INNODB_BUILD} + --with-plugin-innobase \ %else - --without-ndbcluster \ + --without-plugin-innobase \ %endif - --with-archive-storage-engine \ - --with-csv-storage-engine \ - --with-blackhole-storage-engine \ - --with-federated-storage-engine \ +%if %{PARTITION_BUILD} + --with-plugin-partition \ +%else + --without-plugin-partition \ +%endif + --with-plugin-csv \ + --with-plugin-archive \ + --with-plugin-blackhole \ + --with-plugin-federated \ --without-plugin-daemon_example \ --without-plugin-ftexample \ - --with-partition \ - --with-big-tables \ -%if %{WITH_BUNDLED_ZLIB} - --with-zlib-dir=bundled \ +%if %{EMBEDDED_BUILD} + --with-embedded-server \ +%else + --without-embedded-server \ %endif + --with-big-tables \ --enable-shared \ " make } +# end of function definition "BuildMySQL" # Use our own copy of glibc @@ -366,15 +470,10 @@ export PATH # Use gcc for C and C++ code (to avoid a dependency on libstdc++ and # including exceptions into the code -if [ -z "$CXX" -a -z "$CC" ] -then - export CC="gcc" - export CXX="gcc" +if [ -z "$CXX" -a -z "$CC" ] ; then + export CC="gcc" CXX="gcc" fi -# Prepare compiler flags -CFLAGS=${MYSQL_BUILD_CFLAGS:-$RPM_OPT_FLAGS} -CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors -fno-exceptions -fno-rtti } ############################################################################## # @@ -384,20 +483,14 @@ CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors -fno-except ( # We are in a subshell, so we can modify variables just for one run. -CFLAGS=`echo " $CFLAGS " | \ - sed -e 's/ -O[0-9]* / /' -e 's/ -unroll2 / /' -e 's/ -ip / /' \ - -e 's/^ //' -e 's/ $//'` -CXXFLAGS=`echo " $CXXFLAGS " | \ - sed -e 's/ -O[0-9]* / /' -e 's/ -unroll2 / /' -e 's/ -ip / /' \ - -e 's/^ //' -e 's/ $//'` # Add -g and --with-debug. +DEBUG=1 cd mysql-debug-%{mysql_version} && CFLAGS="$CFLAGS" \ CXXFLAGS="$CXXFLAGS" \ -BuildMySQL "\ - --with-debug \ - --with-comment=\"MySQL Community Server - Debug (%{mysql_license})\"") +BuildMySQL +) # We might want to save the config log file if test -n "$MYSQL_DEBUGCONFLOG_DEST" @@ -413,12 +506,12 @@ fi # ############################################################################## +DEBUG=0 (cd mysql-release-%{mysql_version} && CFLAGS="$CFLAGS" \ CXXFLAGS="$CXXFLAGS" \ -BuildMySQL "\ - --with-embedded-server \ - --with-comment=\"MySQL Community Server (%{mysql_license})\"") +BuildMySQL +) # We might want to save the config log file if test -n "$MYSQL_CONFLOG_DEST" then @@ -429,15 +522,24 @@ fi ############################################################################## -# Include libgcc.a in the devel subpackage (BUG 4921) -if expr "$CC" : ".*gcc.*" > /dev/null ; +# For gcc builds, include libgcc.a in the devel subpackage (BUG 4921) +# Some "icc" calls may have "gcc" in the argument string, so we should first +# check for "icc". (If we don't check, the "--print-libgcc-file" call will fail.) +if expr "$CC" : ".*icc.*" > /dev/null ; +then + %define WITH_LIBGCC 0 +elif expr "$CC" : ".*gcc.*" > /dev/null ; then libgcc=`$CC $CFLAGS --print-libgcc-file` if [ -f $libgcc ] then - %define have_libgcc 1 + %define WITH_LIBGCC 1 install -m 644 $libgcc $RBR%{_libdir}/mysql/libmygcc.a + else + %define WITH_LIBGCC 0 fi +else + %define WITH_LIBGCC 0 fi ############################################################################## @@ -456,7 +558,7 @@ install -d $RBR%{_mandir} install -d $RBR%{_sbindir} -# Install all binaries +# Install all binaries (cd $MBD && make install DESTDIR=$RBR testroot=%{_datadir}) # Old packages put shared libs in %{_libdir}/ (not %{_libdir}/mysql), so do # the same here. @@ -467,13 +569,6 @@ $MBD/libtool --mode=execute install -m 755 \ $RPM_BUILD_DIR/mysql-%{mysql_version}/mysql-debug-%{mysql_version}/sql/mysqld \ $RBR%{_sbindir}/mysqld-debug -%if %{WITH_TCMALLOC} -# Even though this is a shared library, put it under /usr/lib/mysql, so it -# doesn't conflict with possible shared lib by the same name in /usr/lib. See -# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used. -install -m 644 "%{malloc_lib_source}" "$RBR%{_libdir}/mysql/%{malloc_lib_target}" -%endif - # install saved perror binary with NDB support (BUG#13740) install -m 755 $MBD/extra/perror $RBR%{_bindir}/perror @@ -481,20 +576,33 @@ install -m 755 $MBD/extra/perror $RBR%{_bindir}/perror install -m 644 $MBD/support-files/mysql-log-rotate $RBR%{_sysconfdir}/logrotate.d/mysql install -m 755 $MBD/support-files/mysql.server $RBR%{_sysconfdir}/init.d/mysql +%if %{EMBEDDED_BUILD} # Install embedded server library in the build root install -m 644 $MBD/libmysqld/libmysqld.a $RBR%{_libdir}/mysql/ +%endif # in RPMs, it is unlikely that anybody should use "sql-bench" rm -fr $RBR%{_datadir}/sql-bench # Create a symlink "rcmysql", pointing to the init.script. SuSE users # will appreciate that, as all services usually offer this. -ln -s %{_sysconfdir}/init.d/mysql $RPM_BUILD_ROOT%{_sbindir}/rcmysql +ln -s %{_sysconfdir}/init.d/mysql $RBR%{_sbindir}/rcmysql -# Touch the place where the my.cnf config file might be located. -# Just to make sure it's in the file list and marked as a config file. +# Touch the place where the my.cnf config file might be located +# Just to make sure it's in the file list and marked as a config file touch $RBR%{_sysconfdir}/my.cnf +%if %{WITH_TCMALLOC} +# Even though this is a shared library, put it under /usr/lib/mysql, so it +# doesn't conflict with possible shared lib by the same name in /usr/lib. See +# `mysql_config --variable=pkglibdir` and mysqld_safe for how this is used. +install -m 644 "%{malloc_lib_source}" "$RBR%{_libdir}/mysql/%{malloc_lib_target}" +%endif + +############################################################################## +# Post processing actions, i.e. when installed +############################################################################## + %pre server # Check if we can safely upgrade. An upgrade is only safe if it's from one # of our RPMs in the same version family. @@ -564,58 +672,66 @@ HERE fi # Shut down a previously installed server first -if test -x %{_sysconfdir}/init.d/mysql -then - %{_sysconfdir}/init.d/mysql stop > /dev/null 2>&1 - echo "Giving mysqld a couple of seconds to exit nicely" - sleep 5 -elif test -x %{_sysconfdir}/rc.d/init.d/mysql -then - %{_sysconfdir}/rc.d/init.d/mysql stop > /dev/null 2>&1 - echo "Giving mysqld a couple of seconds to exit nicely" - sleep 5 +if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql stop > /dev/null 2>&1 + echo "Giving mysqld 5 seconds to exit nicely" + sleep 5 fi %post server mysql_datadir=%{mysqldatadir} +# ---------------------------------------------------------------------- # Create data directory if needed -if test ! -d $mysql_datadir; then mkdir -m 755 $mysql_datadir; fi -if test ! -d $mysql_datadir/mysql; then mkdir $mysql_datadir/mysql; fi -if test ! -d $mysql_datadir/test; then mkdir $mysql_datadir/test; fi +# ---------------------------------------------------------------------- +if [ ! -d $mysql_datadir ] ; then mkdir -m 755 $mysql_datadir; fi +if [ ! -d $mysql_datadir/mysql ] ; then mkdir $mysql_datadir/mysql; fi +if [ ! -d $mysql_datadir/test ] ; then mkdir $mysql_datadir/test; fi +# ---------------------------------------------------------------------- # Make MySQL start/shutdown automatically when the machine does it. +# ---------------------------------------------------------------------- # use insserv for older SuSE Linux versions -if test -x /sbin/insserv -then +if [ -x /sbin/insserv ] ; then /sbin/insserv %{_sysconfdir}/init.d/mysql # use chkconfig on Red Hat and newer SuSE releases -elif test -x /sbin/chkconfig -then +elif [ -x /sbin/chkconfig ] ; then /sbin/chkconfig --add mysql fi +# ---------------------------------------------------------------------- # Create a MySQL user and group. Do not report any problems if it already # exists. +# ---------------------------------------------------------------------- groupadd -r %{mysqld_group} 2> /dev/null || true -useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true +useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true # The user may already exist, make sure it has the proper group nevertheless (BUG#12823) usermod -g %{mysqld_group} %{mysqld_user} 2> /dev/null || true +# ---------------------------------------------------------------------- # Change permissions so that the user that will run the MySQL daemon # owns all database files. +# ---------------------------------------------------------------------- chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir +# ---------------------------------------------------------------------- # Initiate databases if needed +# ---------------------------------------------------------------------- %{_bindir}/mysql_install_db --rpm --user=%{mysqld_user} +# ---------------------------------------------------------------------- # Upgrade databases if needed would go here - but it cannot be automated yet +# ---------------------------------------------------------------------- +# ---------------------------------------------------------------------- # Change permissions again to fix any new files. +# ---------------------------------------------------------------------- chown -R %{mysqld_user}:%{mysqld_group} $mysql_datadir +# ---------------------------------------------------------------------- # Fix permissions for the permission database so that only the user # can read them. +# ---------------------------------------------------------------------- chmod -R og-rw $mysql_datadir/mysql # Restart in the same way that mysqld will be started normally. @@ -628,7 +744,7 @@ sleep 2 #systems, we recommend MySQL Enterprise, which contains enterprise-ready #software, intelligent advisory services, and full production support with #scheduled service packs and more. Visit www.mysql.com/enterprise for more -#information." +#information." %if %{CLUSTER_BUILD} %post ndb-storage @@ -639,37 +755,38 @@ if test ! -d $mysql_clusterdir; then mkdir -m 755 $mysql_clusterdir; fi %endif %preun server -if test $1 = 0 -then - # Stop MySQL before uninstalling it - if test -x %{_sysconfdir}/init.d/mysql - then - %{_sysconfdir}/init.d/mysql stop > /dev/null - - # Remove autostart of mysql - # for older SuSE Linux versions - if test -x /sbin/insserv - then - /sbin/insserv -r %{_sysconfdir}/init.d/mysql - # use chkconfig on Red Hat and newer SuSE releases - elif test -x /sbin/chkconfig - then - /sbin/chkconfig --del mysql - fi - fi +if [ $1 = 0 ] ; then + # Stop MySQL before uninstalling it + if [ -x %{_sysconfdir}/init.d/mysql ] ; then + %{_sysconfdir}/init.d/mysql stop > /dev/null + # Remove autostart of MySQL + # For older SuSE Linux versions + if [ -x /sbin/insserv ] ; then + /sbin/insserv -r %{_sysconfdir}/init.d/mysql + # use chkconfig on Red Hat and newer SuSE releases + elif [ -x /sbin/chkconfig ] ; then + /sbin/chkconfig --del mysql + fi + fi fi # We do not remove the mysql user since it may still own a lot of # database files. -# Clean up the BuildRoot +# ---------------------------------------------------------------------- +# Clean up the BuildRoot after build is done +# ---------------------------------------------------------------------- %clean [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT; +############################################################################## +# Files section +############################################################################## + %files server %defattr(-,root,root,0755) -%doc mysql-release-%{mysql_version}/COPYING mysql-release-%{mysql_version}/README +%doc mysql-release-%{mysql_version}/COPYING mysql-release-%{mysql_version}/README %doc mysql-release-%{mysql_version}/support-files/my-*.cnf %if %{CLUSTER_BUILD} %doc mysql-release-%{mysql_version}/support-files/ndb-*.ini @@ -677,17 +794,23 @@ fi %doc %attr(644, root, root) %{_infodir}/mysql.info* +%if %{INNODB_BUILD} %doc %attr(644, root, man) %{_mandir}/man1/innochecksum.1* +%endif %doc %attr(644, root, man) %{_mandir}/man1/my_print_defaults.1* %doc %attr(644, root, man) %{_mandir}/man1/myisam_ftdump.1* %doc %attr(644, root, man) %{_mandir}/man1/myisamchk.1* %doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1* %doc %attr(644, root, man) %{_mandir}/man1/myisampack.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_convert_table_format.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_extensions.1* %doc %attr(644, root, man) %{_mandir}/man8/mysqld.8* %doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1* -#%doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_privilege_tables.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqldumpslow.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_secure_installation.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_setpermission.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* @@ -698,10 +821,14 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* %doc %attr(644, root, man) %{_mandir}/man1/perror.1* %doc %attr(644, root, man) %{_mandir}/man1/replace.1* +%doc %attr(644, root, man) %{_mandir}/man1/resolve_stack_dump.1* +%doc %attr(644, root, man) %{_mandir}/man1/resolveip.1* %ghost %config(noreplace,missingok) %{_sysconfdir}/my.cnf +%if %{INNODB_BUILD} %attr(755, root, root) %{_bindir}/innochecksum +%endif %attr(755, root, root) %{_bindir}/my_print_defaults %attr(755, root, root) %{_bindir}/myisam_ftdump %attr(755, root, root) %{_bindir}/myisamchk @@ -727,6 +854,9 @@ fi %attr(755, root, root) %{_bindir}/resolve_stack_dump %attr(755, root, root) %{_bindir}/resolveip +%attr(755, root, root) %{_sbindir}/mysqld +%attr(755, root, root) %{_sbindir}/mysqld-debug +%attr(755, root, root) %{_sbindir}/rcmysql %attr(755, root, root) %{_libdir}/mysql/plugin/ha_example.so* %attr(755, root, root) %{_libdir}/mysql/plugin/semisync_master.so* %attr(755, root, root) %{_libdir}/mysql/plugin/semisync_slave.so* @@ -735,10 +865,6 @@ fi %attr(755, root, root) %{_libdir}/mysql/%{malloc_lib_target} %endif -%attr(755, root, root) %{_sbindir}/mysqld -%attr(755, root, root) %{_sbindir}/mysqld-debug -%attr(755, root, root) %{_sbindir}/rcmysql - %attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql %attr(755, root, root) %{_sysconfdir}/init.d/mysql @@ -762,6 +888,7 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/msql2mysql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_find_rows.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_waitpid.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlaccess.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqladmin.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlbinlog.1* @@ -833,6 +960,7 @@ fi %files devel %defattr(-, root, root, 0755) %doc mysql-release-%{mysql_version}/EXCEPTIONS-CLIENT +%doc %attr(644, root, man) %{_mandir}/man1/comp_err.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_config.1* %attr(755, root, root) %{_bindir}/mysql_config %dir %attr(755, root, root) %{_includedir}/mysql @@ -841,7 +969,7 @@ fi %{_datadir}/aclocal/mysql.m4 %{_libdir}/mysql/libdbug.a %{_libdir}/mysql/libheap.a -%if %{have_libgcc} +%if %{WITH_LIBGCC} %{_libdir}/mysql/libmygcc.a %endif %{_libdir}/mysql/libmyisam.a @@ -879,22 +1007,48 @@ fi %defattr(-, root, root, 0755) %attr(-, root, root) %{_datadir}/mysql-test %attr(755, root, root) %{_bindir}/mysql_client_test -%attr(755, root, root) %{_bindir}/mysql_client_test_embedded -%attr(755, root, root) %{_bindir}/mysqltest_embedded %doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* +%if %{EMBEDDED_BUILD} +%attr(755, root, root) %{_bindir}/mysql_client_test_embedded +%attr(755, root, root) %{_bindir}/mysqltest_embedded +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* +%endif +%if %{EMBEDDED_BUILD} %files embedded -%defattr(-, root, root, 0755) +%defattr(-, root, root, 0755) %attr(644, root, root) %{_libdir}/mysql/libmysqld.a +%endif +############################################################################## # The spec file changelog only includes changes made to the spec file # itself - note that they must be ordered by date (important when # merging BK trees) +############################################################################## %changelog +* Fri Feb 12 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Formatting changes: + Have a consistent structure of separator lines and of indentation + (8 leading blanks => tab). +- Introduce the variable "src_dir". +- Give the environment variables "MYSQL_BUILD_CC(CXX)" precedence + over "CC" ("CXX"). +- Drop the old "with_static" argument analysis, this is not supported + in 5.1 since ages. +- Introduce variables to control the handlers individually, as well + as other options. +- Use the new "--with-plugin" notation for the table handlers. +- Drop handling "/etc/rc.d/init.d/mysql", the switch to "/etc/init.d/mysql" + was done back in 2002 already. +- Make "--with-zlib-dir=bundled" the default, add an option to disable it. +- Add missing manual pages to the file list. +- Improve the runtime check for "libgcc.a", protect it against being tried + with the Intel compiler "icc". + * Mon Jan 11 2010 Joerg Bruehe <joerg.bruehe@sun.com> - Change RPM file naming: |