Commit f8f2d51a authored by unknown's avatar unknown
Browse files

bug#15682 - ndb

  incorrect handling of varchar in position/rnd_pos

  Commit for 5.0.17 release clone


mysql-test/r/ndb_basic.result:
  bug#15682
mysql-test/t/ndb_basic.test:
  bug#15682
sql/ha_ndbcluster.cc:
  bug#15682
parent dbc27a62
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -677,3 +677,19 @@ select * from atablewithareallylongandirritatingname;
a
2
drop table atablewithareallylongandirritatingname;
create table t1 (f1 varchar(50), f2 text,f3 int, primary key(f1)) engine=NDB;
insert into t1 (f1,f2,f3)VALUES("111111","aaaaaa",1);
insert into t1 (f1,f2,f3)VALUES("222222","bbbbbb",2);
select * from t1 order by f1;
f1	f2	f3
111111	aaaaaa	1
222222	bbbbbb	2
select * from t1 order by f2;
f1	f2	f3
111111	aaaaaa	1
222222	bbbbbb	2
select * from t1 order by f3;
f1	f2	f3
111111	aaaaaa	1
222222	bbbbbb	2
drop table t1;
+11 −0
Original line number Diff line number Diff line
@@ -623,3 +623,14 @@ create table atablewithareallylongandirritatingname (a int);
insert into atablewithareallylongandirritatingname values (2);
select * from atablewithareallylongandirritatingname;
drop table atablewithareallylongandirritatingname;

#
# Bug#15682
#
create table t1 (f1 varchar(50), f2 text,f3 int, primary key(f1)) engine=NDB;
insert into t1 (f1,f2,f3)VALUES("111111","aaaaaa",1);
insert into t1 (f1,f2,f3)VALUES("222222","bbbbbb",2);
select * from t1 order by f1;
select * from t1 order by f2;
select * from t1 order by f3;
drop table t1;
+19 −2
Original line number Diff line number Diff line
@@ -2812,8 +2812,25 @@ void ha_ndbcluster::position(const byte *record)
        }      
        *buff++= 0;
      }
      memcpy(buff, record + key_part->offset, key_part->length);
      buff += key_part->length;
      size_t len = key_part->length;
      const byte * ptr = record + key_part->offset;
      Field *field = key_part->field;
      if ((field->type() ==  MYSQL_TYPE_VARCHAR) &&
	  ((Field_varstring*)field)->length_bytes == 1)
      {
	/** 
	 * Keys always use 2 bytes length
	 */
	buff[0] = ptr[0];
	buff[1] = 0;
	memcpy(buff+2, ptr + 1, len);	
	len += 2;
      }
      else
      {
	memcpy(buff, ptr, len);
      }
      buff += len;
    }
  } 
  else