List:Commits« Previous MessageNext Message »
From:Nirbhay Choubey Date:September 27 2010 2:08pm
Subject:bzr commit into mysql-5.1-bugteam branch (nirbhay.choubey:3519)
Bug#44771
View as plain text  
#At file:///home/nirbhay/Project/mysql/repo/wl/mysql-5.1-bugteam/ based on revid:davi.arnaut@stripped

 3519 Nirbhay Choubey	2010-09-27
      Bug#44771 : Unique Hash index in memory engine will give wrong query result for
                   NULL value.
      
      In a memory table when there are more than one NULL values for a unique key
      column using HASH index, a search for NULL on that column returns just one
      row.
      
      In memory engine, while reading a hash key which is NULL, it doesn't get copied
      to info->lastkey, which inturn is used to search next records.
      
      Fixed by adding the condition to check for NULL key, which lets copying of key
      to info->lastkey.
     @ mysql-test/r/heap_hash.result
        Bug#44771 : Unique Hash index in memory engine will give wrong query result for
                     NULL value.
     @ mysql-test/t/heap_hash.test
        Bug#44771 : Unique Hash index in memory engine will give wrong query result for
                     NULL value.
     @ storage/heap/hp_rkey.c
        Bug#44771 : Unique Hash index in memory engine will give wrong query result for
                     NULL value.
        
        Modified the condition to check for NULL key which is checked before copying key
        to info->lastkey in heap_rkey function. info->lastkey is further used by
        heap_rnext to search for the records with the same key.

    modified:
      mysql-test/r/heap_hash.result
      mysql-test/t/heap_hash.test
      storage/heap/hp_rkey.c
=== modified file 'mysql-test/r/heap_hash.result'
--- a/mysql-test/r/heap_hash.result	2007-05-31 12:04:58 +0000
+++ b/mysql-test/r/heap_hash.result	2010-09-27 14:07:48 +0000
@@ -382,3 +382,24 @@ INSERT INTO t1 VALUES('A ', 'A ');
 ERROR 23000: Duplicate entry 'A -A ' for key 'key1'
 DROP TABLE t1;
 End of 5.0 tests
+#
+# Bug #44771: Unique Hash index in memory engine will give wrong
+#             query result for NULL value.
+#
+CREATE TABLE t1
+(
+pk INT PRIMARY KEY,
+val INT,
+UNIQUE KEY USING HASH(val)
+) ENGINE=MEMORY;
+INSERT INTO t1 VALUES (1, NULL);
+INSERT INTO t1 VALUES (2, NULL);
+INSERT INTO t1 VALUES (3, NULL);
+INSERT INTO t1 VALUES (4, NULL);
+SELECT * FROM t1 WHERE val IS NULL;
+pk	val
+4	NULL
+3	NULL
+2	NULL
+1	NULL
+DROP TABLE t1;

=== modified file 'mysql-test/t/heap_hash.test'
--- a/mysql-test/t/heap_hash.test	2007-06-06 17:57:07 +0000
+++ b/mysql-test/t/heap_hash.test	2010-09-27 14:07:48 +0000
@@ -284,3 +284,23 @@ INSERT INTO t1 VALUES('A ', 'A ');
 DROP TABLE t1;
 
 --echo End of 5.0 tests
+
+--echo #
+--echo # Bug #44771: Unique Hash index in memory engine will give wrong
+--echo #             query result for NULL value.
+--echo #
+
+CREATE TABLE t1
+(
+  pk INT PRIMARY KEY,
+  val INT,
+  UNIQUE KEY USING HASH(val)
+) ENGINE=MEMORY;
+
+INSERT INTO t1 VALUES (1, NULL);
+INSERT INTO t1 VALUES (2, NULL);
+INSERT INTO t1 VALUES (3, NULL);
+INSERT INTO t1 VALUES (4, NULL);
+
+SELECT * FROM t1 WHERE val IS NULL;
+DROP TABLE t1;

=== modified file 'storage/heap/hp_rkey.c'
--- a/storage/heap/hp_rkey.c	2007-05-10 09:59:39 +0000
+++ b/storage/heap/hp_rkey.c	2010-09-27 14:07:48 +0000
@@ -63,7 +63,8 @@ int heap_rkey(HP_INFO *info, uchar *reco
       info->update= 0;
       DBUG_RETURN(my_errno);
     }
-    if (!(keyinfo->flag & HA_NOSAME) || (keyinfo->flag & HA_END_SPACE_KEY))
+    if (!(keyinfo->flag & HA_NOSAME) || (keyinfo->flag & HA_END_SPACE_KEY) ||
+        (keyinfo->flag & HA_NULL_PART_KEY))
       memcpy(info->lastkey, key, (size_t) keyinfo->length);
   }
   memcpy(record, pos, (size_t) share->reclength);


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-5.1-bugteam branch (nirbhay.choubey:3519)Bug#44771Nirbhay Choubey27 Sep
  • Re: bzr commit into mysql-5.1-bugteam branch(nirbhay.choubey:3519) Bug#44771Sergey Vojtovich29 Sep