diff options
author | Sergey Vojtovich <sergey.vojtovich@oracle.com> | 2011-03-03 12:12:32 +0300 |
---|---|---|
committer | Sergey Vojtovich <sergey.vojtovich@oracle.com> | 2011-03-03 12:12:32 +0300 |
commit | 923a72d3c67d8178aaab41bcaceb23f6b6f49f97 (patch) | |
tree | cb58cd056c59c8a5799be1fee5d519a8510d7bac | |
parent | fc03fff72d1ba62e3b2b03afd275fc85f715efbf (diff) | |
parent | 929d13ca4977ed1fa3dcbe6628c393ffc148004f (diff) | |
download | mariadb-git-923a72d3c67d8178aaab41bcaceb23f6b6f49f97.tar.gz |
Merge.
-rw-r--r-- | mysql-test/r/archive.result | 16 | ||||
-rw-r--r-- | mysql-test/t/archive.test | 15 | ||||
-rw-r--r-- | storage/archive/ha_archive.cc | 2 |
3 files changed, 32 insertions, 1 deletions
diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result index 231b7acb5b4..aacaff30898 100644 --- a/mysql-test/r/archive.result +++ b/mysql-test/r/archive.result @@ -12807,3 +12807,19 @@ DROP TABLE t1; # CREATE TABLE `a/../`(a INT) ENGINE=ARCHIVE; DROP TABLE `a/../`; +# +# BUG#57162 - valgrind errors, random data when returning +# ordered data from archive tables +# +SET sort_buffer_size=32804; +CREATE TABLE t1(a INT, b CHAR(255), c CHAR(255), d CHAR(255), +e CHAR(255), f INT) ENGINE=ARCHIVE DEFAULT CHARSET utf8; +INSERT INTO t1 VALUES(-1,'b','c','d','e',1); +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT t1.* FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6; +SELECT * FROM t1 ORDER BY f LIMIT 1; +a b c d e f +-1 b c d e 1 +DROP TABLE t1; +SET sort_buffer_size=DEFAULT; diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test index ce5047124a2..4686b3ca1dc 100644 --- a/mysql-test/t/archive.test +++ b/mysql-test/t/archive.test @@ -1730,3 +1730,18 @@ DROP TABLE t1; CREATE TABLE `a/../`(a INT) ENGINE=ARCHIVE; remove_file $MYSQLD_DATADIR/test/a@002f@002e@002e@002f.frm; DROP TABLE `a/../`; + +--echo # +--echo # BUG#57162 - valgrind errors, random data when returning +--echo # ordered data from archive tables +--echo # +SET sort_buffer_size=32804; +CREATE TABLE t1(a INT, b CHAR(255), c CHAR(255), d CHAR(255), + e CHAR(255), f INT) ENGINE=ARCHIVE DEFAULT CHARSET utf8; +INSERT INTO t1 VALUES(-1,'b','c','d','e',1); +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT t1.* FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6; +SELECT * FROM t1 ORDER BY f LIMIT 1; +DROP TABLE t1; +SET sort_buffer_size=DEFAULT; diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc index fe167318743..eb9705ea5aa 100644 --- a/storage/archive/ha_archive.cc +++ b/storage/archive/ha_archive.cc @@ -1179,7 +1179,7 @@ int ha_archive::unpack_row(azio_stream *file_to_read, uchar *record) ptr+= table->s->null_bytes; for (Field **field=table->field ; *field ; field++) { - if (!((*field)->is_null())) + if (!((*field)->is_null_in_record(record))) { ptr= (*field)->unpack(record + (*field)->offset(table->record[0]), ptr); } |