diff --git a/mysql-test/r/stat_tables_partition.result b/mysql-test/r/stat_tables_partition.result new file mode 100644 index 00000000000..75454b61fe0 --- /dev/null +++ b/mysql-test/r/stat_tables_partition.result @@ -0,0 +1,12 @@ +# +# Bug mdev-3866: valgrind complain from ANALYZE on a table with BIT field +# +SET use_stat_tables = 'preferably'; +CREATE TABLE t1 (pk int PRIMARY KEY, a bit(1), INDEX idx(a) +) ENGINE=MyISAM PARTITION BY KEY(pk) PARTITIONS 2; +INSERT INTO t1 VALUES (1,1),(2,0),(3,0),(4,1); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SET use_stat_tables = DEFAULT; +DROP TABLE t1; diff --git a/mysql-test/t/stat_tables_partition.test b/mysql-test/t/stat_tables_partition.test new file mode 100644 index 00000000000..1316e5cca11 --- /dev/null +++ b/mysql-test/t/stat_tables_partition.test @@ -0,0 +1,17 @@ +--source include/have_partition.inc + +--echo # +--echo # Bug mdev-3866: valgrind complain from ANALYZE on a table with BIT field +--echo # + +SET use_stat_tables = 'preferably'; + +CREATE TABLE t1 (pk int PRIMARY KEY, a bit(1), INDEX idx(a) +) ENGINE=MyISAM PARTITION BY KEY(pk) PARTITIONS 2; +INSERT INTO t1 VALUES (1,1),(2,0),(3,0),(4,1); + +ANALYZE TABLE t1; + +SET use_stat_tables = DEFAULT; + +DROP TABLE t1; diff --git a/sql/field.cc b/sql/field.cc index 93fed250045..fb3791e9656 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8371,7 +8371,9 @@ int Field_bit::cmp_max(const uchar *a, const uchar *b, uint max_len) if ((flag= (int) (bits_a - bits_b))) return flag; } - return memcmp(a, b, field_length); + if (!bytes_in_rec) + return 0; + return memcmp(a, b, bytes_in_rec); }