List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:July 30 2010 6:19am
Subject:Re: bzr commit into mysql-next-mr-bugfixing branch (Dao-Gang.Qu:3310)
Bug#51639
View as plain text  
Nice work, Approved!

Dao-Gang.Qu@stripped wrote:
> #At file:///home/daogangqu/mysql/bzrwork1/bug51639/mysql-next-mr-bugfixing/ based on
> revid:aelkin@stripped
> 
>  3310 Dao-Gang.Qu@stripped	2010-07-30
>       Bug #51639  Some replication filters are case sensitive, some are not!
>       
>       There is an inconsistency in name comparison of rpl filters.
>       Some are case sensitive, while others are not. And they did
>       not follow the setting of lower_case_table_names.
>       
>       To fix the problem to make all the filters follow the setting
>       of lower_case_table_name to be case sensitive when setting
>       lower_case_table_name=0. Otherwise they will be case insensitive.
>      @ mysql-test/suite/rpl/r/rpl_do_filter.result
>         Test result for BUG# 51639
>      @ mysql-test/suite/rpl/r/rpl_ignore_db_filter.result
>         Test result for BUG# 51639
>      @ mysql-test/suite/rpl/r/rpl_ignore_table_filter.result
>         Test result for BUG# 51639
>      @ mysql-test/suite/rpl/r/rpl_rewrite_db_filter.result
>         Test result for BUG# 51639
>      @ mysql-test/suite/rpl/t/rpl_do_filter.test
>         Added test file to verify that 'do db' and 'do table 'filters
>         will follow the setting of lower_case_table_name to be case
>         insensitive when setting lower_case_table_name > 0
>      @ mysql-test/suite/rpl/t/rpl_ignore_db_filter.test
>         Added test file to verify that 'ignore db' filter will follow
>         the setting of lower_case_table_name to be case insensitive when
>         setting lower_case_table_name > 0
>      @ mysql-test/suite/rpl/t/rpl_ignore_table_filter.test
>         Added test file to verify that 'ignore table' filter will follow
>         the setting of lower_case_table_name to be case sensitive when
>         setting lower_case_table_name=0
>      @ mysql-test/suite/rpl/t/rpl_rewrite_db_filter.test
>         Added test file to verify that 'rewrite db' filter will follow
>         the setting of lower_case_table_name to be case insensitive
>         when setting lower_case_table_name > 0
>      @ sql/rpl_filter.cc
>         Added code to make filters follow the setting of lower_case_table_name
>         to be case sensitive when setting lower_case_table_name=0. Otherwise they
>         will be case insensitive.
>      @ sql/rpl_filter.h
>         Added code to change the data struct from HASH to DYNAMIC_ARRAY
>         for do_table and ignore_table in order to the setting of the
>         'do_table' and 'ignore_table' filters is affected by the setting
>         of lower_case_table_name regardless of the setting order.
> 
>     added:
>       mysql-test/extra/rpl_tests/rpl_filters.test
>       mysql-test/suite/rpl/r/rpl_do_filter.result
>       mysql-test/suite/rpl/r/rpl_ignore_db_filter.result
>       mysql-test/suite/rpl/r/rpl_ignore_table_filter.result
>       mysql-test/suite/rpl/r/rpl_rewrite_db_filter.result
>       mysql-test/suite/rpl/t/rpl_do_filter-master.opt
>       mysql-test/suite/rpl/t/rpl_do_filter-slave.opt
>       mysql-test/suite/rpl/t/rpl_do_filter.test
>       mysql-test/suite/rpl/t/rpl_ignore_db_filter-master.opt
>       mysql-test/suite/rpl/t/rpl_ignore_db_filter-slave.opt
>       mysql-test/suite/rpl/t/rpl_ignore_db_filter.test
>       mysql-test/suite/rpl/t/rpl_ignore_table_filter-master.opt
>       mysql-test/suite/rpl/t/rpl_ignore_table_filter-slave.opt
>       mysql-test/suite/rpl/t/rpl_ignore_table_filter.test
>       mysql-test/suite/rpl/t/rpl_rewrite_db_filter-master.opt
>       mysql-test/suite/rpl/t/rpl_rewrite_db_filter-slave.opt
>       mysql-test/suite/rpl/t/rpl_rewrite_db_filter.test
>     modified:
>       sql/rpl_filter.cc
>       sql/rpl_filter.h
> === added file 'mysql-test/extra/rpl_tests/rpl_filters.test'
> --- a/mysql-test/extra/rpl_tests/rpl_filters.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/extra/rpl_tests/rpl_filters.test	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,22 @@
> +# 
> +# Bug #51639
> +# The common part of Bug #51639 to test filters
> +#
> +
> +CREATE DATABASE mydb; 
> +USE mydb;
> +CREATE TABLE T1 (a INT) ENGINE= MYISAM;
> +CREATE TABLE t2 (a INT) ENGINE= MYISAM;
> +INSERT INTO T1 VALUES (1);
> +INSERT INTO t2 VALUES (1);
> +-- echo # On master
> +-- source include/show_binlog_events.inc
> +
> +-- sync_slave_with_master
> +-- echo # On slave
> +-- source include/show_binlog_events.inc
> +
> +-- connection master
> +DROP DATABASE mydb;
> +-- sync_slave_with_master
> +
> 
> === added file 'mysql-test/suite/rpl/r/rpl_do_filter.result'
> --- a/mysql-test/suite/rpl/r/rpl_do_filter.result	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_do_filter.result	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,37 @@
> +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;
> +CREATE DATABASE mydb;
> +USE mydb;
> +CREATE TABLE T1 (a INT) ENGINE= MYISAM;
> +CREATE TABLE t2 (a INT) ENGINE= MYISAM;
> +INSERT INTO T1 VALUES (1);
> +INSERT INTO t2 VALUES (1);
> +# On master
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +master-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO T1 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +# On slave
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +slave-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +slave-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +slave-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +slave-bin.000001	#	Query	#	#	BEGIN
> +slave-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO T1 VALUES (1)
> +slave-bin.000001	#	Query	#	#	COMMIT
> +slave-bin.000001	#	Query	#	#	BEGIN
> +slave-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +slave-bin.000001	#	Query	#	#	COMMIT
> +DROP DATABASE mydb;
> 
> === added file 'mysql-test/suite/rpl/r/rpl_ignore_db_filter.result'
> --- a/mysql-test/suite/rpl/r/rpl_ignore_db_filter.result	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_ignore_db_filter.result	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,28 @@
> +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;
> +CREATE DATABASE mydb;
> +USE mydb;
> +CREATE TABLE T1 (a INT) ENGINE= MYISAM;
> +CREATE TABLE t2 (a INT) ENGINE= MYISAM;
> +INSERT INTO T1 VALUES (1);
> +INSERT INTO t2 VALUES (1);
> +# On master
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +master-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO T1 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +# On slave
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +DROP DATABASE mydb;
> 
> === added file 'mysql-test/suite/rpl/r/rpl_ignore_table_filter.result'
> --- a/mysql-test/suite/rpl/r/rpl_ignore_table_filter.result	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_ignore_table_filter.result	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1,33 @@
> +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;
> +CREATE DATABASE mydb;
> +USE mydb;
> +CREATE TABLE T1 (a INT) ENGINE= MYISAM;
> +CREATE TABLE t2 (a INT) ENGINE= MYISAM;
> +INSERT INTO T1 VALUES (1);
> +INSERT INTO t2 VALUES (1);
> +# On master
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +master-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO T1 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +# On slave
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +slave-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +slave-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +slave-bin.000001	#	Query	#	#	BEGIN
> +slave-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +slave-bin.000001	#	Query	#	#	COMMIT
> +DROP DATABASE mydb;
> 
> === added file 'mysql-test/suite/rpl/r/rpl_rewrite_db_filter.result'
> --- a/mysql-test/suite/rpl/r/rpl_rewrite_db_filter.result	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_rewrite_db_filter.result	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,40 @@
> +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;
> +CREATE DATABASE rewrite;
> +CREATE DATABASE mydb;
> +USE mydb;
> +CREATE TABLE T1 (a INT) ENGINE= MYISAM;
> +CREATE TABLE t2 (a INT) ENGINE= MYISAM;
> +INSERT INTO T1 VALUES (1);
> +INSERT INTO t2 VALUES (1);
> +# On master
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +master-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	use `mydb`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO T1 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +master-bin.000001	#	Query	#	#	BEGIN
> +master-bin.000001	#	Query	#	#	use `mydb`; INSERT INTO t2 VALUES (1)
> +master-bin.000001	#	Query	#	#	COMMIT
> +# On slave
> +show binlog events from <binlog_start>;
> +Log_name	Pos	Event_type	Server_id	End_log_pos	Info
> +slave-bin.000001	#	Query	#	#	CREATE DATABASE rewrite
> +slave-bin.000001	#	Query	#	#	CREATE DATABASE mydb
> +slave-bin.000001	#	Query	#	#	use `rewrite`; CREATE TABLE T1 (a INT) ENGINE= MYISAM
> +slave-bin.000001	#	Query	#	#	use `rewrite`; CREATE TABLE t2 (a INT) ENGINE= MYISAM
> +slave-bin.000001	#	Query	#	#	BEGIN
> +slave-bin.000001	#	Query	#	#	use `rewrite`; INSERT INTO T1 VALUES (1)
> +slave-bin.000001	#	Query	#	#	COMMIT
> +slave-bin.000001	#	Query	#	#	BEGIN
> +slave-bin.000001	#	Query	#	#	use `rewrite`; INSERT INTO t2 VALUES (1)
> +slave-bin.000001	#	Query	#	#	COMMIT
> +DROP DATABASE mydb;
> +DROP DATABASE rewrite;
> 
> === added file 'mysql-test/suite/rpl/t/rpl_do_filter-master.opt'
> --- a/mysql-test/suite/rpl/t/rpl_do_filter-master.opt	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_do_filter-master.opt	2010-07-30 03:09:29 +0000
> @@ -0,0 +1 @@
> +--lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_do_filter-slave.opt'
> --- a/mysql-test/suite/rpl/t/rpl_do_filter-slave.opt	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_do_filter-slave.opt	2010-07-30 03:09:29 +0000
> @@ -0,0 +1 @@
> +--replicate-do-db=MYDB --replicate-do-table=mydb.T1 --replicate-do-table=mydb.T2
> --lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_do_filter.test'
> --- a/mysql-test/suite/rpl/t/rpl_do_filter.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_do_filter.test	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,12 @@
> +#
> +# Bug #51639
> +# This test verifies that 'do db' and 'do table'filters
> +# will follow the setting of lower_case_table_name to be
> +# case insensitive when setting lower_case_table_name > 0
> +#
> +
> +-- source include/master-slave.inc
> +-- source include/have_binlog_format_statement.inc
> +
> +-- source extra/rpl_tests/rpl_filters.test 
> +
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_db_filter-master.opt'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_db_filter-master.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_db_filter-master.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_db_filter-slave.opt'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_db_filter-slave.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_db_filter-slave.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--replicate-ignore-db=MYDB --lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_db_filter.test'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_db_filter.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_db_filter.test	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,11 @@
> +#
> +# Bug #51639
> +# This test verifies that 'ignore db' filter will follow
> +# the setting of lower_case_table_name to be case insensitive
> +# when setting lower_case_table_name > 0
> +#
> +
> +-- source include/master-slave.inc
> +-- source include/have_binlog_format_statement.inc
> +
> +-- source extra/rpl_tests/rpl_filters.test
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_table_filter-master.opt'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_table_filter-master.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_table_filter-master.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--lower_case_table_names=0
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_table_filter-slave.opt'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_table_filter-slave.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_table_filter-slave.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--replicate-do-db=mydb --replicate-wild-ignore-table=my%.T1
> --replicate-wild-ignore-table=my%.T2 --lower_case_table_names=0
> 
> === added file 'mysql-test/suite/rpl/t/rpl_ignore_table_filter.test'
> --- a/mysql-test/suite/rpl/t/rpl_ignore_table_filter.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_ignore_table_filter.test	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,12 @@
> +#
> +# Bug #51639
> +# This test verifies that 'ignore table' filter will follow
> +# the setting of lower_case_table_name to be case sensitive
> +# when setting lower_case_table_name=0
> +#
> +
> +-- source include/master-slave.inc
> +-- source include/have_binlog_format_statement.inc
> +
> +-- source extra/rpl_tests/rpl_filters.test 
> +
> 
> === added file 'mysql-test/suite/rpl/t/rpl_rewrite_db_filter-master.opt'
> --- a/mysql-test/suite/rpl/t/rpl_rewrite_db_filter-master.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_rewrite_db_filter-master.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_rewrite_db_filter-slave.opt'
> --- a/mysql-test/suite/rpl/t/rpl_rewrite_db_filter-slave.opt	1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_rewrite_db_filter-slave.opt	2010-07-30 03:09:29
> +0000
> @@ -0,0 +1 @@
> +--replicate-rewrite-db=MYDB->rewrite --lower_case_table_names=1
> 
> === added file 'mysql-test/suite/rpl/t/rpl_rewrite_db_filter.test'
> --- a/mysql-test/suite/rpl/t/rpl_rewrite_db_filter.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_rewrite_db_filter.test	2010-07-30 03:09:29 +0000
> @@ -0,0 +1,17 @@
> +#
> +# Bug #51639
> +# This test verifies that 'rewrite db' filter will follow
> +# the setting of lower_case_table_name to be case insensitive
> +# when setting lower_case_table_name > 0
> +#
> +
> +-- source include/master-slave.inc
> +-- source include/have_binlog_format_statement.inc
> +connection slave;
> +CREATE DATABASE rewrite;
> +
> +connection master;
> +-- source extra/rpl_tests/rpl_filters.test
> +
> +connection slave;
> +DROP DATABASE rewrite;
> 
> === modified file 'sql/rpl_filter.cc'
> --- a/sql/rpl_filter.cc	2010-07-08 21:42:23 +0000
> +++ b/sql/rpl_filter.cc	2010-07-30 03:09:29 +0000
> @@ -35,9 +35,9 @@ Rpl_filter::Rpl_filter() : 
>  Rpl_filter::~Rpl_filter() 
>  {
>    if (do_table_inited) 
> -    my_hash_free(&do_table);
> +    free_string_array(&do_table);
>    if (ignore_table_inited)
> -    my_hash_free(&ignore_table);
> +    free_string_array(&ignore_table);
>    if (wild_do_table_inited)
>      free_string_array(&wild_do_table);
>    if (wild_ignore_table_inited)
> @@ -106,12 +106,12 @@ Rpl_filter::tables_ok(const char* db, TA
>      len= (uint) (strmov(end, tables->table_name) - hash_key);
>      if (do_table_inited) // if there are any do's
>      {
> -      if (my_hash_search(&do_table, (uchar*) hash_key, len))
> +      if (find(&do_table, hash_key, len))
>  	DBUG_RETURN(1);
>      }
>      if (ignore_table_inited) // if there are any ignores
>      {
> -      if (my_hash_search(&ignore_table, (uchar*) hash_key, len))
> +      if (find(&ignore_table, hash_key, len))
>  	DBUG_RETURN(0); 
>      }
>      if (wild_do_table_inited && 
> @@ -167,8 +167,13 @@ Rpl_filter::db_ok(const char* db)
>  
>      while ((tmp=it++))
>      {
> -      if (!strcmp(tmp->ptr, db))
> -	DBUG_RETURN(1); // match
> +      /*
> +        Filters will follow the setting of lower_case_table_name
> +        to be case sensitive when setting lower_case_table_name=0.
> +        Otherwise they will be case insensitive.
> +      */
> +      if (!my_strcasecmp(table_alias_charset, tmp->ptr, db))
> +        DBUG_RETURN(1); // match
>      }
>      DBUG_RETURN(0);
>    }
> @@ -179,8 +184,13 @@ Rpl_filter::db_ok(const char* db)
>  
>      while ((tmp=it++))
>      {
> -      if (!strcmp(tmp->ptr, db))
> -	DBUG_RETURN(0); // match
> +      /*
> +        Filters will follow the setting of lower_case_table_name
> +        to be case sensitive when setting lower_case_table_name=0.
> +        Otherwise they will be case insensitive.
> +      */
> +      if (!my_strcasecmp(table_alias_charset, tmp->ptr, db))
> +        DBUG_RETURN(0); // match
>      }
>      DBUG_RETURN(1);
>    }
> @@ -255,23 +265,23 @@ Rpl_filter::is_on()
>  }
>  
> 
> -int 
> +int
>  Rpl_filter::add_do_table(const char* table_spec) 
>  {
>    DBUG_ENTER("Rpl_filter::add_do_table");
>    if (!do_table_inited)
> -    init_table_rule_hash(&do_table, &do_table_inited);
> +    init_table_rule_array(&do_table, &do_table_inited);
>    table_rules_on= 1;
>    DBUG_RETURN(add_table_rule(&do_table, table_spec));
>  }
> -  
>  
> -int 
> +
> +int
>  Rpl_filter::add_ignore_table(const char* table_spec) 
>  {
>    DBUG_ENTER("Rpl_filter::add_ignore_table");
>    if (!ignore_table_inited)
> -    init_table_rule_hash(&ignore_table, &ignore_table_inited);
> +    init_table_rule_array(&ignore_table, &ignore_table_inited);
>    table_rules_on= 1;
>    DBUG_RETURN(add_table_rule(&ignore_table, table_spec));
>  }
> @@ -284,7 +294,7 @@ Rpl_filter::add_wild_do_table(const char
>    if (!wild_do_table_inited)
>      init_table_rule_array(&wild_do_table, &wild_do_table_inited);
>    table_rules_on= 1;
> -  DBUG_RETURN(add_wild_table_rule(&wild_do_table, table_spec));
> +  DBUG_RETURN(add_table_rule(&wild_do_table, table_spec));
>  }
>    
>  
> @@ -295,7 +305,7 @@ Rpl_filter::add_wild_ignore_table(const 
>    if (!wild_ignore_table_inited)
>      init_table_rule_array(&wild_ignore_table, &wild_ignore_table_inited);
>    table_rules_on= 1;
> -  DBUG_RETURN(add_wild_table_rule(&wild_ignore_table, table_spec));
> +  DBUG_RETURN(add_table_rule(&wild_ignore_table, table_spec));
>  }
>  
> 
> @@ -307,31 +317,12 @@ Rpl_filter::add_db_rewrite(const char* f
>  }
>  
> 
> -int 
> -Rpl_filter::add_table_rule(HASH* h, const char* table_spec)
> -{
> -  const char* dot = strchr(table_spec, '.');
> -  if (!dot) return 1;
> -  // len is always > 0 because we know the there exists a '.'
> -  uint len = (uint)strlen(table_spec);
> -  TABLE_RULE_ENT* e = (TABLE_RULE_ENT*)my_malloc(sizeof(TABLE_RULE_ENT)
> -						 + len, MYF(MY_WME));
> -  if (!e) return 1;
> -  e->db= (char*)e + sizeof(TABLE_RULE_ENT);
> -  e->tbl_name= e->db + (dot - table_spec) + 1;
> -  e->key_len= len;
> -  memcpy(e->db, table_spec, len);
> -
> -  return my_hash_insert(h, (uchar*)e);
> -}
> -
> -
>  /*
> -  Add table expression with wildcards to dynamic array
> +  Add table expression to dynamic array
>  */
>  
> -int 
> -Rpl_filter::add_wild_table_rule(DYNAMIC_ARRAY* a, const char* table_spec)
> +int
> +Rpl_filter::add_table_rule(DYNAMIC_ARRAY* a, const char* table_spec)
>  {
>    const char* dot = strchr(table_spec, '.');
>    if (!dot) return 1;
> @@ -388,15 +379,6 @@ void free_table_ent(void* a)
>  
> 
>  void 
> -Rpl_filter::init_table_rule_hash(HASH* h, bool* h_inited)
> -{
> -  my_hash_init(h, system_charset_info,TABLE_RULE_HASH_SIZE,0,0,
> -	    get_table_key, free_table_ent, 0);
> -  *h_inited = 1;
> -}
> -
> -
> -void 
>  Rpl_filter::init_table_rule_array(DYNAMIC_ARRAY* a, bool* a_inited)
>  {
>    my_init_dynamic_array(a, sizeof(TABLE_RULE_ENT*), TABLE_RULE_ARR_SIZE,
> @@ -410,12 +392,17 @@ Rpl_filter::find_wild(DYNAMIC_ARRAY *a, 
>  {
>    uint i;
>    const char* key_end= key + len;
> -  
> +
>    for (i= 0; i < a->elements; i++)
>    {
>      TABLE_RULE_ENT* e ;
>      get_dynamic(a, (uchar*)&e, i);
> -    if (!my_wildcmp(system_charset_info, key, key_end, 
> +    /*
> +      Filters will follow the setting of lower_case_table_name
> +      to be case sensitive when setting lower_case_table_name=0.
> +      Otherwise they will be case insensitive.
> +    */
> +    if (!my_wildcmp(table_alias_charset, key, key_end,
>  		    (const char*)e->db,
>  		    (const char*)(e->db + e->key_len),
>  		    '\\',wild_one,wild_many))
> @@ -426,47 +413,40 @@ Rpl_filter::find_wild(DYNAMIC_ARRAY *a, 
>  }
>  
> 
> -void 
> -Rpl_filter::free_string_array(DYNAMIC_ARRAY *a)
> +TABLE_RULE_ENT*
> +Rpl_filter::find(DYNAMIC_ARRAY *a, const char* key, int len)
>  {
>    uint i;
> +
>    for (i= 0; i < a->elements; i++)
>    {
> -    char* p;
> -    get_dynamic(a, (uchar*) &p, i);
> -    my_free(p);
> +    TABLE_RULE_ENT* e ;
> +    get_dynamic(a, (uchar*)&e, i);
> +    /*
> +      Filters will follow the setting of lower_case_table_name
> +      to be case sensitive when setting lower_case_table_name=0.
> +      Otherwise they will be case insensitive.
> +    */
> +    if (!my_strnncoll(table_alias_charset, (const uchar *)key, len,
> +                      (const uchar *)e->db, e->key_len))
> +      return e;
>    }
> -  delete_dynamic(a);
> -}
>  
> +  return 0;
> +}
>  
> -/*
> -  Builds a String from a HASH of TABLE_RULE_ENT. Cannot be used for any other 
> -  hash, as it assumes that the hash entries are TABLE_RULE_ENT.
> -
> -  SYNOPSIS
> -    table_rule_ent_hash_to_str()
> -    s               pointer to the String to fill
> -    h               pointer to the HASH to read
> -
> -  RETURN VALUES
> -    none
> -*/
>  
>  void 
> -Rpl_filter::table_rule_ent_hash_to_str(String* s, HASH* h, bool inited)
> +Rpl_filter::free_string_array(DYNAMIC_ARRAY *a)
>  {
> -  s->length(0);
> -  if (inited)
> +  uint i;
> +  for (i= 0; i < a->elements; i++)
>    {
> -    for (uint i= 0; i < h->records; i++)
> -    {
> -      TABLE_RULE_ENT* e= (TABLE_RULE_ENT*) my_hash_element(h, i);
> -      if (s->length())
> -        s->append(',');
> -      s->append(e->db,e->key_len);
> -    }
> +    char* p;
> +    get_dynamic(a, (uchar*) &p, i);
> +    my_free(p);
>    }
> +  delete_dynamic(a);
>  }
>  
> 
> @@ -492,14 +472,14 @@ Rpl_filter::table_rule_ent_dynamic_array
>  void
>  Rpl_filter::get_do_table(String* str)
>  {
> -  table_rule_ent_hash_to_str(str, &do_table, do_table_inited);
> +  table_rule_ent_dynamic_array_to_str(str, &do_table, do_table_inited);
>  }
>  
> 
>  void
>  Rpl_filter::get_ignore_table(String* str)
>  {
> -  table_rule_ent_hash_to_str(str, &ignore_table, ignore_table_inited);
> +  table_rule_ent_dynamic_array_to_str(str, &ignore_table, ignore_table_inited);
>  }
>  
> 
> @@ -527,7 +507,12 @@ Rpl_filter::get_rewrite_db(const char* d
>  
>    while ((tmp=it++))
>    {
> -    if (!strcmp(tmp->key, db))
> +    /*
> +      Filters will follow the setting of lower_case_table_name
> +      to be case sensitive when setting lower_case_table_name=0.
> +      Otherwise they will be case insensitive.
> +    */
> +    if (!my_strcasecmp(table_alias_charset, tmp->key, db))
>      {
>        *new_len= strlen(tmp->val);
>        return tmp->val;
> 
> === modified file 'sql/rpl_filter.h'
> --- a/sql/rpl_filter.h	2010-07-02 18:15:21 +0000
> +++ b/sql/rpl_filter.h	2010-07-30 03:09:29 +0000
> @@ -83,25 +83,23 @@ public:
>  private:
>    bool table_rules_on;
>  
> -  void init_table_rule_hash(HASH* h, bool* h_inited);
>    void init_table_rule_array(DYNAMIC_ARRAY* a, bool* a_inited);
>  
> -  int add_table_rule(HASH* h, const char* table_spec);
> -  int add_wild_table_rule(DYNAMIC_ARRAY* a, const char* table_spec);
> +  int add_table_rule(DYNAMIC_ARRAY* a, const char* table_spec);
>  
>    void free_string_array(DYNAMIC_ARRAY *a);
>  
> -  void table_rule_ent_hash_to_str(String* s, HASH* h, bool inited);
>    void table_rule_ent_dynamic_array_to_str(String* s, DYNAMIC_ARRAY* a,
>                                             bool inited);
>    TABLE_RULE_ENT* find_wild(DYNAMIC_ARRAY *a, const char* key, int len);
> +  TABLE_RULE_ENT* find(DYNAMIC_ARRAY *a, const char* key, int len);
>  
>    /*
>      Those 4 structures below are uninitialized memory unless the
>      corresponding *_inited variables are "true".
>    */
> -  HASH do_table;
> -  HASH ignore_table;
> +  DYNAMIC_ARRAY do_table;
> +  DYNAMIC_ARRAY ignore_table;
>    DYNAMIC_ARRAY wild_do_table;
>    DYNAMIC_ARRAY wild_ignore_table;
>  
> 
> text/bzr-bundle 类型 附件
> (bzr/dao-gang.qu@stripped)
> # Bazaar merge directive format 2 (Bazaar 0.90)
> # revision_id: dao-gang.qu@stripped
> # target_branch: file:///home/daogangqu/mysql/bzrwork1/bug51639/mysql-\
> #   next-mr-bugfixing/
> # testament_sha1: 3378a9e367636b05cb2c5fa3d362b47fb2551a0d
> # timestamp: 2010-07-30 11:09:46 +0800
> # base_revision_id: aelkin@stripped
> # 
> # Begin bundle
> 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
> m8UqZU2WD/4u5IpwoSH5WXSG
> 
> 


Thread
bzr commit into mysql-next-mr-bugfixing branch (Dao-Gang.Qu:3310) Bug#51639Dao-Gang.Qu30 Jul
  • Re: bzr commit into mysql-next-mr-bugfixing branch (Dao-Gang.Qu:3310)Bug#51639He Zhenxing30 Jul