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).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.0 branch (Martin.Skold:4803 to 4804)Bug#13579318 | Martin Skold | 20 Jan |