summaryrefslogtreecommitdiff
path: root/heap
diff options
context:
space:
mode:
authorunknown <ramil@mysql.com>2005-04-21 21:06:08 +0500
committerunknown <ramil@mysql.com>2005-04-21 21:06:08 +0500
commitc8683be463c0618e9d42fe964b1c4e8831fec0e4 (patch)
tree777bb27eed163dcb09eee2a26f51ac36071fa8da /heap
parentda43c3cc6d2eaef41ee2c35a5b1a28d0eea80f93 (diff)
downloadmariadb-git-c8683be463c0618e9d42fe964b1c4e8831fec0e4.tar.gz
A fix (Bug #9489: Problem with BIT_OR and MySQL 5.0.3)
heap/hp_hash.c: A fix (Bug #9489: Problem with BIT_OR and MySQL 5.0.3). Should take into account key pack length.
Diffstat (limited to 'heap')
-rw-r--r--heap/hp_hash.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/heap/hp_hash.c b/heap/hp_hash.c
index 3121ef71fb0..52a250bd7af 100644
--- a/heap/hp_hash.c
+++ b/heap/hp_hash.c
@@ -255,6 +255,9 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const byte *key)
if (*pos) /* Found null */
{
nr^= (nr << 1) | 1;
+ /* Add key pack length (2) to key for VARCHAR segments */
+ if (seg->type == HA_KEYTYPE_VARTEXT1)
+ key+= 2;
continue;
}
pos++;
@@ -390,6 +393,9 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const byte *key)
if (*pos)
{
nr^= (nr << 1) | 1;
+ /* Add key pack length (2) to key for VARCHAR segments */
+ if (seg->type == HA_KEYTYPE_VARTEXT1)
+ key+= 2;
continue;
}
pos++;
@@ -584,7 +590,12 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key)
if (found_null != (int) *key++)
return 1;
if (found_null)
+ {
+ /* Add key pack length (2) to key for VARCHAR segments */
+ if (seg->type == HA_KEYTYPE_VARTEXT1)
+ key+= 2;
continue;
+ }
}
if (seg->type == HA_KEYTYPE_TEXT)
{