From: Martin Skold Date: January 19 2012 11:15am Subject: bzr push into mysql-5.1-telco-7.0 branch (Martin.Skold:4803 to 4804) Bug#13579318 List-Archive: http://lists.mysql.com/commits/142463 X-Bug: 13579318 Message-Id: <20120119111516.590F09F8D7F@quadfish> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4804 Martin Skold 2012-01-19 Bug#13579318 LIKE SEARCH DOESN'T MATCH ANY ROWS ON A MULTI BYTE CHARSET COLUMN: Passing actual string length to scan filter predicate modified: mysql-test/suite/ndb/r/ndb_condition_pushdown.result mysql-test/suite/ndb/t/ndb_condition_pushdown.test sql/ha_ndbcluster_cond.cc 4803 Jonas Oreland 2012-01-19 ndb - fix broken support for unused NO_EMULATED_JAM modified: storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp storage/ndb/src/kernel/error/ErrorReporter.cpp storage/ndb/src/kernel/vm/Emulator.cpp storage/ndb/src/kernel/vm/Emulator.hpp === modified file 'mysql-test/suite/ndb/r/ndb_condition_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2011-11-21 13:27:34 +0000 +++ b/mysql-test/suite/ndb/r/ndb_condition_pushdown.result 2012-01-19 11:14:35 +0000 @@ -2387,5 +2387,16 @@ select b from mytab where a like -1 havi b 1 drop table mytab; +create table t(a bigint unsigned not null primary key auto_increment, b varchar(100)) character set utf8 engine ndb; +insert into t (b) values('abc'),('aaa'),('bbb'),('ccc'); +select * from t where b like 'a%'; +a b +1 abc +2 aaa +select * from t where b not like 'a%'; +a b +3 bbb +4 ccc +drop table t; set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; === modified file 'mysql-test/suite/ndb/t/ndb_condition_pushdown.test' --- a/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2011-11-21 13:27:34 +0000 +++ b/mysql-test/suite/ndb/t/ndb_condition_pushdown.test 2012-01-19 11:14:35 +0000 @@ -2413,6 +2413,15 @@ select b from mytab where a like -1 havi drop table mytab; +# Bug #13579318 LIKE SEARCH DOESN'T MATCH ANY ROWS ON A MULTI BYTE CHARSET COLUMN +create table t(a bigint unsigned not null primary key auto_increment, b varchar(100)) character set utf8 engine ndb; + +insert into t (b) values('abc'),('aaa'),('bbb'),('ccc'); +--sorted_result +select * from t where b like 'a%'; +--sorted_result +select * from t where b not like 'a%'; +drop table t; + set engine_condition_pushdown = @old_ecpd; DROP TABLE t1,t2,t3,t4,t5; - === modified file 'sql/ha_ndbcluster_cond.cc' --- a/sql/ha_ndbcluster_cond.cc 2011-11-21 13:27:34 +0000 +++ b/sql/ha_ndbcluster_cond.cc 2012-01-19 11:14:35 +0000 @@ -1211,13 +1211,14 @@ ha_ndbcluster_cond::build_scan_filter_pr if (!value || !field) break; bool is_string= (value->qualification.value_type == Item::STRING_ITEM); // Save value in right format for the field type - uint32 len= value->save_in_field(field); + uint32 val_len= value->save_in_field(field); char buff[MAX_FIELD_WIDTH]; String str(buff,sizeof(buff),field->get_field_charset()); - if (len > field->get_field()->field_length) - str.set(value->get_val(), len, field->get_field_charset()); + if (val_len > field->get_field()->field_length) + str.set(value->get_val(), val_len, field->get_field_charset()); else field->get_field_val_str(&str); + uint32 len= str.length(); const char *val= (value->is_const_func() && is_string)? str.ptr() @@ -1239,13 +1240,14 @@ ha_ndbcluster_cond::build_scan_filter_pr if (!value || !field) break; bool is_string= (value->qualification.value_type == Item::STRING_ITEM); // Save value in right format for the field type - uint32 len= value->save_in_field(field); + uint32 val_len= value->save_in_field(field); char buff[MAX_FIELD_WIDTH]; String str(buff,sizeof(buff),field->get_field_charset()); - if (len > field->get_field()->field_length) - str.set(value->get_val(), len, field->get_field_charset()); + if (val_len > field->get_field()->field_length) + str.set(value->get_val(), val_len, field->get_field_charset()); else field->get_field_val_str(&str); + uint32 len= str.length(); const char *val= (value->is_const_func() && is_string)? str.ptr() No bundle (reason: useless for push emails).