From: Marc Alff Date: August 26 2010 9:21pm Subject: bzr commit into mysql-5.5-bugfixing branch (marc.alff:3193) List-Archive: http://lists.mysql.com/commits/116941 Message-Id: <20100826212143.ED1C745E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0076436820888751686==" --===============0076436820888751686== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-52312/ based on revid:marc.alff@stripped 3193 Marc Alff 2010-08-26 [merge] local merge added: mysql-test/r/mysql_not_windows.result mysql-test/suite/perfschema/r/bad_option_3.result mysql-test/suite/perfschema/r/bad_option_4.result mysql-test/suite/perfschema/r/bad_option_5.result mysql-test/suite/perfschema/r/short_option_1.result mysql-test/suite/perfschema/r/short_option_2.result mysql-test/suite/perfschema/t/bad_option_3.test mysql-test/suite/perfschema/t/bad_option_4.test mysql-test/suite/perfschema/t/bad_option_5.test mysql-test/suite/perfschema/t/short_option_1-master.opt mysql-test/suite/perfschema/t/short_option_1.test mysql-test/suite/perfschema/t/short_option_2-master.opt mysql-test/suite/perfschema/t/short_option_2.test mysql-test/t/mysql_not_windows.test modified: mysql-test/mysql-test-run.pl mysql-test/r/ctype_utf32.result mysql-test/r/mysql.result mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result mysql-test/suite/ndb/r/ndb_binlog_log_bin.result mysql-test/suite/ndb/r/ndb_binlog_multi.result mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result mysql-test/t/ctype_utf32.test mysql-test/t/mysql.test mysys/my_getopt.c sql/set_var.cc storage/myisam/mi_key.c storage/perfschema/pfs.cc storage/perfschema/pfs_stat.h === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-08-23 08:48:27 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-08-25 13:55:22 +0000 @@ -2155,9 +2155,8 @@ sub environment_setup { # mysqlhotcopy # ---------------------------------------------------- my $mysqlhotcopy= - mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy"); - # Since mysqltest interprets the real path as "false" in an if, - # use 1 ("true") to indicate "not exists" so it can be tested for + mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy") || + mtr_pl_maybe_exists("$path_client_bindir/mysqlhotcopy"); if ($mysqlhotcopy) { $ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy; === modified file 'mysql-test/r/ctype_utf32.result' --- a/mysql-test/r/ctype_utf32.result 2010-08-20 11:14:11 +0000 +++ b/mysql-test/r/ctype_utf32.result 2010-08-26 12:36:33 +0000 @@ -1114,5 +1114,18 @@ format(123,2,'no_NO') 123,00 DROP TABLE t1; # +# Bug#42511 mysqld: ctype-ucs2.c:2044: my_strnncollsp_utf32: Assertion (tlen % 4) == 0' faied +# +CREATE TABLE t1 ( +b char(250) CHARACTER SET utf32, +key (b) +) ENGINE=MYISAM; +INSERT INTO t1 VALUES ('d'),('f'); +SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z'; +b +d +f +DROP TABLE t1; +# # End of 5.5 tests # === modified file 'mysql-test/r/mysql.result' --- a/mysql-test/r/mysql.result 2010-08-19 11:35:47 +0000 +++ b/mysql-test/r/mysql.result 2010-08-25 08:17:15 +0000 @@ -432,8 +432,5 @@ Bug #47147: mysql client option --skip-c *************************** 1. row *************************** 1 -Bug #54466 client 5.5 built from source lacks "pager" support -a -1 End of tests === added file 'mysql-test/r/mysql_not_windows.result' --- a/mysql-test/r/mysql_not_windows.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysql_not_windows.result 2010-08-25 08:17:15 +0000 @@ -0,0 +1,5 @@ +Bug #54466 client 5.5 built from source lacks "pager" support +a +1 + +End of tests === modified file 'mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_ddl_multi.result 2010-08-25 14:13:20 +0000 @@ -193,4 +193,4 @@ mysqld-bin.000001 # Table_map 2 # table_ mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 2 # COMMIT -mysqld-bin.000001 # Query 2 # use `test`; drop table t2 +mysqld-bin.000001 # Query 2 # use `test`; DROP TABLE `t2` /* generated by server */ === modified file 'mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_ignore_db.result 2010-08-25 14:13:20 +0000 @@ -7,5 +7,5 @@ create table t1 (a int primary key, b in insert into t1 values (1, 1); show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -mysqld-bin.000001 # Query 1 # use `test`; drop table if exists t1 +mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */ drop database mysqltest; === modified file 'mysql-test/suite/ndb/r/ndb_binlog_log_bin.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_log_bin.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_log_bin.result 2010-08-25 14:13:20 +0000 @@ -47,8 +47,8 @@ mysqld-bin.000001 # Table_map 1 # table_ mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 1 # COMMIT -mysqld-bin.000001 # Query 1 # use `mysqltest`; drop table t1 -mysqld-bin.000001 # Query 1 # use `mysqltest`; drop table t2 +mysqld-bin.000001 # Query 1 # use `mysqltest`; DROP TABLE `t1` /* generated by server */ +mysqld-bin.000001 # Query 1 # use `mysqltest`; DROP TABLE `t2` /* generated by server */ mysqld-bin.000001 # Query 1 # use `mysqltest`; create table t1 (d int key, e int) engine=ndb mysqld-bin.000001 # Query 1 # use `mysqltest`; create table t2 (d int key, e int) engine=ndb mysqld-bin.000001 # Query 1 # BEGIN === modified file 'mysql-test/suite/ndb/r/ndb_binlog_multi.result' --- a/mysql-test/suite/ndb/r/ndb_binlog_multi.result 2007-12-19 16:16:22 +0000 +++ b/mysql-test/suite/ndb/r/ndb_binlog_multi.result 2010-08-25 14:13:20 +0000 @@ -37,7 +37,7 @@ mysqld-bin.000001 # Table_map 1 # table_ mysqld-bin.000001 # Write_rows 1 # table_id: # mysqld-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 1 # COMMIT -mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE t2 +mysqld-bin.000001 # Query 1 # use `test`; DROP TABLE `t2` /* generated by server */ SELECT inserts,updates,deletes,schemaops FROM mysql.ndb_binlog_index WHERE epoch=; inserts updates deletes schemaops @@ -73,7 +73,7 @@ mysqld-bin.000001 # Table_map 2 # table_ mysqld-bin.000001 # Write_rows 2 # table_id: # mysqld-bin.000001 # Write_rows 2 # table_id: # flags: STMT_END_F mysqld-bin.000001 # Query 2 # COMMIT -mysqld-bin.000001 # Query 2 # use `test`; drop table t1 +mysqld-bin.000001 # Query 2 # use `test`; DROP TABLE `t1` /* generated by server */ SELECT inserts,updates,deletes,schemaops FROM mysql.ndb_binlog_index WHERE epoch > AND epoch <= ; inserts updates deletes schemaops === added file 'mysql-test/suite/perfschema/r/bad_option_3.result' --- a/mysql-test/suite/perfschema/r/bad_option_3.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_3.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: unknown option '-x' +Found: Aborting === added file 'mysql-test/suite/perfschema/r/bad_option_4.result' --- a/mysql-test/suite/perfschema/r/bad_option_4.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_4.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: Can't change dir to.*bad_option_h_param +Found: Aborting === added file 'mysql-test/suite/perfschema/r/bad_option_5.result' --- a/mysql-test/suite/perfschema/r/bad_option_5.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/bad_option_5.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,2 @@ +Found: unknown option '-X' +Found: Aborting === added file 'mysql-test/suite/perfschema/r/short_option_1.result' --- a/mysql-test/suite/perfschema/r/short_option_1.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/short_option_1.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,27 @@ +select 'Ok, the server started' as result; +result +Ok, the server started +select @@SQL_MODE; +@@SQL_MODE +REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +show variables like 'sql_mode'; +Variable_name Value +sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +select @@character_set_server; +@@character_set_server +utf8 +show variables like 'character_set_system'; +Variable_name Value +character_set_system utf8 +show variables like 'log'; +Variable_name Value +log ON +show variables like 'general_log'; +Variable_name Value +general_log ON +show variables like 'new'; +Variable_name Value +new ON +show variables like 'log_warnings'; +Variable_name Value +log_warnings 3 === added file 'mysql-test/suite/perfschema/r/short_option_2.result' --- a/mysql-test/suite/perfschema/r/short_option_2.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/short_option_2.result 2010-08-26 00:59:28 +0000 @@ -0,0 +1,9 @@ +select 'Ok, the server started' as result; +result +Ok, the server started +select @@SQL_MODE; +@@SQL_MODE +REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI +select @@log_warnings; +@@log_warnings +5 === added file 'mysql-test/suite/perfschema/t/bad_option_3.test' --- a/mysql-test/suite/perfschema/t/bad_option_3.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_3.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,49 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_3.txt; +--error 0,1 +--remove_file $outfile +--error 2 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -x > $outfile 2>&1 + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_3.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("unknown option '-x'", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/bad_option_4.test' --- a/mysql-test/suite/perfschema/t/bad_option_4.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_4.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,49 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_4.txt; +--error 0,1 +--remove_file $outfile +--error 1 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -a -h bad_option_h_param > $outfile 2>&1 + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_4.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("Can't change dir to.*bad_option_h_param", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/bad_option_5.test' --- a/mysql-test/suite/perfschema/t/bad_option_5.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/bad_option_5.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,52 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check error handling for invalid server start options + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +let $outfile= $MYSQLTEST_VARDIR/tmp/bad_option_5.txt; +--error 0,1 +--remove_file $outfile +--error 2 +--exec $MYSQLD_BOOTSTRAP_CMD --loose-console -aXbroken > $outfile 2>&1 + +# -aXbroken should be parsed as -a -Xbroken, or --ansi -Xbroken, +# therefore the -X option is what the server should complain about + +perl; + use strict; + use warnings; + my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_5.txt"; + open(FILE, "<", $fname) or die; + my @lines= ; + # those must be in the file for the test to pass + my @patterns= + ("unknown option '-X'", + "Aborting"); + foreach my $one_line (@lines) + { + foreach my $one_pattern (@patterns) + { + # print pattern, not line, to get a stable output + print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/); + } + } + close FILE; +EOF +--remove_file $outfile + === added file 'mysql-test/suite/perfschema/t/short_option_1-master.opt' --- a/mysql-test/suite/perfschema/t/short_option_1-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_1-master.opt 2010-08-26 00:59:28 +0000 @@ -0,0 +1 @@ +-a -n -Cutf8 --collation=utf8_bin -l -T12 -W3 === added file 'mysql-test/suite/perfschema/t/short_option_1.test' --- a/mysql-test/suite/perfschema/t/short_option_1.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_1.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,35 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check server start for short server start options + +select 'Ok, the server started' as result; + +# See the associated -master.opt file. + +select @@SQL_MODE; +show variables like 'sql_mode'; + +select @@character_set_server; +show variables like 'character_set_system'; + +show variables like 'log'; +show variables like 'general_log'; + +show variables like 'new'; + +show variables like 'log_warnings'; + === added file 'mysql-test/suite/perfschema/t/short_option_2-master.opt' --- a/mysql-test/suite/perfschema/t/short_option_2-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_2-master.opt 2010-08-26 00:59:28 +0000 @@ -0,0 +1 @@ +-aW5 === added file 'mysql-test/suite/perfschema/t/short_option_2.test' --- a/mysql-test/suite/perfschema/t/short_option_2.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/short_option_2.test 2010-08-26 00:59:28 +0000 @@ -0,0 +1,29 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA +# Check server start for short server start options + +select 'Ok, the server started' as result; + +# See the associated -master.opt file. +# -aW5 should be parsed as -a -W5, which are two separate short options +# stuffed inside a single argv[i] argument. + +# Should contain ANSI, since we started the server with -a (stands for --ansi) +select @@SQL_MODE; + +# Should be 5, since we started the server with -W5 +select @@log_warnings; === modified file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result' --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result 2010-05-26 14:34:25 +0000 +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result 2010-08-25 14:13:20 +0000 @@ -25,7 +25,7 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; drop table t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -204,7 +204,7 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; drop table t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -240,7 +240,7 @@ slave-bin.000001 # Table_map # # table_i slave-bin.000001 # Write_rows # # table_id: # slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F slave-bin.000001 # Query # # COMMIT -slave-bin.000001 # Query # # use `test`; drop table t1 +slave-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ slave-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=NDB slave-bin.000001 # Query # # BEGIN slave-bin.000001 # Table_map # # table_id: # (test.t1) === modified file 'mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result' --- a/mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result 2010-05-26 14:34:25 +0000 +++ b/mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result 2010-08-25 14:13:20 +0000 @@ -37,7 +37,7 @@ master-bin.000001 # Write_rows # # table master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ **** On Master **** CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB; INSERT INTO t1 VALUES (1,1), (2,2); @@ -72,7 +72,7 @@ master-bin.000001 # Write_rows # # table master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1 -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b LONG) ENGINE=NDB master-bin.000001 # Query # # BEGIN master-bin.000001 # Table_map # # table_id: # (test.t1) @@ -86,4 +86,4 @@ master-bin.000001 # Table_map # # table_ master-bin.000001 # Write_rows # # table_id: # master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # COMMIT -master-bin.000001 # Query # # use `test`; DROP TABLE t1 +master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ === modified file 'mysql-test/t/ctype_utf32.test' --- a/mysql-test/t/ctype_utf32.test 2010-08-20 11:14:11 +0000 +++ b/mysql-test/t/ctype_utf32.test 2010-08-26 12:36:33 +0000 @@ -819,5 +819,16 @@ SELECT * FROM t1; DROP TABLE t1; --echo # +--echo # Bug#42511 mysqld: ctype-ucs2.c:2044: my_strnncollsp_utf32: Assertion (tlen % 4) == 0' faied +--echo # +CREATE TABLE t1 ( + b char(250) CHARACTER SET utf32, + key (b) +) ENGINE=MYISAM; +INSERT INTO t1 VALUES ('d'),('f'); +SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z'; +DROP TABLE t1; + +--echo # --echo # End of 5.5 tests --echo # === modified file 'mysql-test/t/mysql.test' --- a/mysql-test/t/mysql.test 2010-08-19 11:35:47 +0000 +++ b/mysql-test/t/mysql.test 2010-08-25 08:17:15 +0000 @@ -425,11 +425,5 @@ drop table t1; --echo --exec $MYSQL --skip-column-names --vertical test -e "select 1 as a" -# -# Bug #54466 client 5.5 built from source lacks "pager" support -# ---echo Bug #54466 client 5.5 built from source lacks "pager" support ---exec $MYSQL --pager test -e "select 1 as a" - --echo --echo End of tests === added file 'mysql-test/t/mysql_not_windows.test' --- a/mysql-test/t/mysql_not_windows.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysql_not_windows.test 2010-08-25 08:17:15 +0000 @@ -0,0 +1,15 @@ +-- source include/not_windows.inc +# This test should work in embedded server after we fix mysqltest +-- source include/not_embedded.inc +# +# Testing the MySQL command line client(mysql) +# + +# +# Bug #54466 client 5.5 built from source lacks "pager" support +# +--echo Bug #54466 client 5.5 built from source lacks "pager" support +--exec $MYSQL --pager test -e "select 1 as a" + +--echo +--echo End of tests === modified file 'mysys/my_getopt.c' --- a/mysys/my_getopt.c 2010-08-05 12:34:19 +0000 +++ b/mysys/my_getopt.c 2010-08-26 14:34:18 +0000 @@ -98,6 +98,49 @@ void my_getopt_register_get_addr(my_geto matches with one of the options in struct 'my_option'. Check that option was given an argument if it requires one Call the optional 'get_one_option()' function once for each option. + + Note that handle_options() can be invoked multiple times to + parse a command line in several steps. + In this case, use the global flag @c my_getopt_skip_unknown to indicate + that options unknown in the current step should be preserved in the + command line for later parsing in subsequent steps. + + For 'long' options (--a_long_option), @c my_getopt_skip_unknown is + fully supported. Command line parameters such as: + - "--a_long_option" + - "--a_long_option=value" + - "--a_long_option value" + will be preserved as is when the option is not known. + + For 'short' options (-S), support for @c my_getopt_skip_unknown + comes with some limitation, because several short options + can also be specified together in the same command line argument, + as in "-XYZ". + + The first use case supported is: all short options are declared. + handle_options() will be able to interpret "-XYZ" as one of: + - an unknown X option + - "-X -Y -Z", three short options with no arguments + - "-X -YZ", where Y is a short option with argument Z + - "-XYZ", where X is a short option with argument YZ + based on the full short options specifications. + + The second use case supported is: no short option is declared. + handle_options() will reject "-XYZ" as unknown, to be parsed later. + + The use case that is explicitly not supported is to provide + only a partial list of short options to handle_options(). + This function can not be expected to extract some option Y + in the middle of the string "-XYZ" in these conditions, + without knowing if X will be declared an option later. + + Note that this limitation only impacts parsing of several + short options from the same command line argument, + as in "mysqld -anW5". + When each short option is properly separated out in the command line + argument, for example in "mysqld -a -n -w5", the code would actually + work even with partial options specs given at each stage. + @param [in, out] argc command line options (count) @param [in, out] argv command line options (values) @param [in] longopts descriptor of all valid options @@ -464,14 +507,40 @@ int handle_options(int *argc, char ***ar } if (!opt_found) { - if (my_getopt_print_errors) - my_getopt_error_reporter(ERROR_LEVEL, - "%s: unknown option '-%c'", - my_progname, *optend); - return EXIT_UNKNOWN_OPTION; + if (my_getopt_skip_unknown) + { + /* + We are currently parsing a single argv[] argument + of the form "-XYZ". + One or the argument found (say Y) is not an option. + Hack the string "-XYZ" to make a "-YZ" substring in it, + and push that to the output as an unrecognized parameter. + */ + DBUG_ASSERT(optend > *pos); + DBUG_ASSERT(optend >= cur_arg); + DBUG_ASSERT(optend <= *pos + strlen(*pos)); + DBUG_ASSERT(*optend); + optend--; + optend[0]= '-'; /* replace 'X' or '-' by '-' */ + (*argv)[argvpos++]= optend; + /* + Do not continue to parse at the current "-XYZ" argument, + skip to the next argv[] argument instead. + */ + optend= (char*) " "; + } + else + { + if (my_getopt_print_errors) + my_getopt_error_reporter(ERROR_LEVEL, + "%s: unknown option '-%c'", + my_progname, *optend); + return EXIT_UNKNOWN_OPTION; + } } } - (*argc)--; /* option handled (short), decrease argument count */ + if (opt_found) + (*argc)--; /* option handled (short), decrease argument count */ continue; } if ((error= setval(optp, value, argument, set_maximum_value))) @@ -479,7 +548,7 @@ int handle_options(int *argc, char ***ar if (get_one_option && get_one_option(optp->id, optp, argument)) return EXIT_UNSPECIFIED_ERROR; - (*argc)--; /* option handled (short or long), decrease argument count */ + (*argc)--; /* option handled (long), decrease argument count */ } else /* non-option found */ (*argv)[argvpos++]= cur_arg; === modified file 'sql/set_var.cc' --- a/sql/set_var.cc 2010-07-27 10:25:53 +0000 +++ b/sql/set_var.cc 2010-08-26 00:59:28 +0000 @@ -153,6 +153,17 @@ sys_var::sys_var(sys_var_chain *chain, c guard(lock), offset(off), on_check(on_check_func), on_update(on_update_func), is_os_charset(FALSE) { + /* + There is a limitation in handle_options() related to short options: + - either all short options should be declared when parsing in multiple stages, + - or none should be declared. + Because a lot of short options are used in the normal parsing phase + for mysqld, we enforce here that no short option is present + in the first (PARSE_EARLY) stage. + See handle_options() for details. + */ + DBUG_ASSERT(parse_flag == PARSE_NORMAL || getopt_id <= 0 || getopt_id >= 255); + name.str= name_arg; name.length= strlen(name_arg); DBUG_ASSERT(name.length <= NAME_CHAR_LEN); === modified file 'storage/myisam/mi_key.c' --- a/storage/myisam/mi_key.c 2010-07-23 20:17:55 +0000 +++ b/storage/myisam/mi_key.c 2010-08-26 12:36:33 +0000 @@ -253,18 +253,17 @@ uint _mi_pack_key(register MI_INFO *info pos=old; if (keyseg->flag & HA_SPACE_PACK) { - uchar *end=pos+length; if (type == HA_KEYTYPE_NUM) { - while (pos < end && pos[0] == ' ') - pos++; + uchar *end= pos + length; + while (pos < end && pos[0] == ' ') + pos++; + length= (uint) (end - pos); } else if (type != HA_KEYTYPE_BINARY) { - while (end > pos && end[-1] == ' ') - end--; + length= cs->cset->lengthsp(cs, (char*) pos, length); } - length=(uint) (end-pos); FIX_LENGTH(cs, pos, length, char_length); store_key_length_inc(key,char_length); memcpy((uchar*) key,pos,(size_t) char_length); === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2010-08-19 22:24:07 +0000 +++ b/storage/perfschema/pfs.cc 2010-08-26 15:45:25 +0000 @@ -1625,18 +1625,26 @@ static void end_mutex_wait_v1(PSI_mutex_ if (flag_events_waits_history_long) insert_events_waits_history_long(wait); - if (rc == 0 && wait->m_timer_state == TIMER_STATE_TIMED) + if (rc == 0) { /* Thread safe: we are protected by the instrumented mutex */ - PFS_single_stat_chain *stat; PFS_mutex *mutex= pfs_locker->m_target.m_mutex; + PFS_single_stat_chain *stat= find_per_thread_mutex_class_wait_stat(wait->m_thread, mutex->m_class); mutex->m_owner= wait->m_thread; mutex->m_last_locked= wait->m_timer_end; - ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; - aggregate_single_stat_chain(&mutex->m_wait_stat, wait_time); - stat= find_per_thread_mutex_class_wait_stat(wait->m_thread, mutex->m_class); - aggregate_single_stat_chain(stat, wait_time); + /* If timed then aggregate stats, else increment the value counts only */ + if (wait->m_timer_state == TIMER_STATE_TIMED) + { + ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; + aggregate_single_stat_chain(&mutex->m_wait_stat, wait_time); + aggregate_single_stat_chain(stat, wait_time); + } + else + { + increment_single_stat_chain(&mutex->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1682,20 +1690,26 @@ static void end_rwlock_rdwait_v1(PSI_rwl The statistics generated are not safe, which is why they are just statistics, not facts. */ - PFS_single_stat_chain *stat; PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; + PFS_single_stat_chain *stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); + if (rwlock->m_readers == 0) rwlock->m_last_read= wait->m_timer_end; rwlock->m_writer= NULL; rwlock->m_readers++; + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); - stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&rwlock->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1735,21 +1749,26 @@ static void end_rwlock_wrwait_v1(PSI_rwl if (rc == 0) { /* Thread safe : we are protected by the instrumented rwlock */ - PFS_single_stat_chain *stat; PFS_rwlock *rwlock= pfs_locker->m_target.m_rwlock; + PFS_single_stat_chain *stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); rwlock->m_writer= wait->m_thread; rwlock->m_last_written= wait->m_timer_end; /* Reset the readers stats, they could be off */ rwlock->m_readers= 0; rwlock->m_last_read= 0; + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&rwlock->m_wait_stat, wait_time); - stat= find_per_thread_rwlock_class_wait_stat(wait->m_thread, rwlock->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&rwlock->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1803,16 +1822,21 @@ static void end_cond_wait_v1(PSI_cond_lo in condition B. This is accepted, the data will be slightly inaccurate. */ - PFS_single_stat_chain *stat; PFS_cond *cond= pfs_locker->m_target.m_cond; + PFS_single_stat_chain *stat= find_per_thread_cond_class_wait_stat(wait->m_thread, cond->m_class); + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&cond->m_wait_stat, wait_time); - stat= find_per_thread_cond_class_wait_stat(wait->m_thread, cond->m_class); aggregate_single_stat_chain(stat, wait_time); } + else + { + increment_single_stat_chain(&cond->m_wait_stat); + increment_single_stat_chain(stat); + } } wait->m_thread->m_wait_locker_count--; } @@ -1855,12 +1879,18 @@ static void end_table_wait_v1(PSI_table_ if (flag_events_waits_history_long) insert_events_waits_history_long(wait); + PFS_table *table= pfs_locker->m_target.m_table; + + /* If timed then aggregate stats, else increment the value counts only */ if (wait->m_timer_state == TIMER_STATE_TIMED) { - PFS_table *table= pfs_locker->m_target.m_table; ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; aggregate_single_stat_chain(&table->m_wait_stat, wait_time); } + else + { + increment_single_stat_chain(&table->m_wait_stat); + } /* There is currently no per table and per thread aggregation. @@ -1962,14 +1992,21 @@ static void end_file_wait_v1(PSI_file_lo if (flag_events_waits_history_long) insert_events_waits_history_long(wait); - PFS_single_stat_chain *stat; PFS_file *file= pfs_locker->m_target.m_file; + PFS_single_stat_chain *stat= find_per_thread_file_class_wait_stat(wait->m_thread, file->m_class); - ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; - aggregate_single_stat_chain(&file->m_wait_stat, wait_time); - stat= find_per_thread_file_class_wait_stat(wait->m_thread, - file->m_class); - aggregate_single_stat_chain(stat, wait_time); + /* If timed then aggregate stats, else increment the value counts only */ + if (wait->m_timer_state == TIMER_STATE_TIMED) + { + ulonglong wait_time= wait->m_timer_end - wait->m_timer_start; + aggregate_single_stat_chain(&file->m_wait_stat, wait_time); + aggregate_single_stat_chain(stat, wait_time); + } + else + { + increment_single_stat_chain(&file->m_wait_stat); + increment_single_stat_chain(stat); + } PFS_file_class *klass= file->m_class; === modified file 'storage/perfschema/pfs_stat.h' --- a/storage/perfschema/pfs_stat.h 2010-07-15 23:44:45 +0000 +++ b/storage/perfschema/pfs_stat.h 2010-08-26 15:45:25 +0000 @@ -83,6 +83,22 @@ inline void aggregate_single_stat_chain( while (stat); } +/** + Increment the value counts in a statistic chain. + Used for instruments that are 'ENABLED' but not 'TIMED'. + @param stat the aggregated statistic chain +*/ +inline void increment_single_stat_chain(PFS_single_stat_chain *stat) +{ + do + { + if (*stat->m_control_flag) + stat->m_count++; + stat= stat->m_parent; + } + while (stat); +} + /** Statistics for COND usage. */ struct PFS_cond_stat { --===============0076436820888751686== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-\ # 52312/ # testament_sha1: 7124f2a1e7d6bb5449ac64431197904ce63fc8ee # timestamp: 2010-08-26 15:21:43 -0600 # base_revision_id: marc.alff@stripped\ # 40kzuk7uwvpal7cl # # Begin bundle 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 --===============0076436820888751686==--