summaryrefslogtreecommitdiff
path: root/storage/myisam
diff options
context:
space:
mode:
authorNeeraj Bisht <neeraj.x.bisht@oracle.com>2013-01-15 14:24:35 +0530
committerNeeraj Bisht <neeraj.x.bisht@oracle.com>2013-01-15 14:24:35 +0530
commitd8d6f270372521ac41248a499a3d0c5a856e04e3 (patch)
tree99b1e6453ddd74e2b9a010f2b31537d2685789a6 /storage/myisam
parent78664f54a0e49c46428c2b8a121d183e429f5686 (diff)
downloadmariadb-git-d8d6f270372521ac41248a499a3d0c5a856e04e3.tar.gz
Bug#11758009 - UNION EXECUTION ORDER WRONG ?
Problem:- In case of blob data field, UNION ALL doesn't give correct result. Analysis:- In MyISAM table, when we dont want to check for the distinct for particular key, we set the key_map to zero. While writing record in MyISAM table, we check the distinct with the help of keys, by checking whether that key is active in key_map and then writing the record. In case of blob field, we are checking for distinct by unique constraint, where we are not checking whether that unique key is active or not in key_map. Solution:- Before checking for distinct, check whether any key is active in key_map.
Diffstat (limited to 'storage/myisam')
-rw-r--r--storage/myisam/mi_write.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c
index 81262c229ce..1bcf1b28ecf 100644
--- a/storage/myisam/mi_write.c
+++ b/storage/myisam/mi_write.c
@@ -90,12 +90,15 @@ int mi_write(MI_INFO *info, uchar *record)
goto err2;
/* Calculate and check all unique constraints */
- for (i=0 ; i < share->state.header.uniques ; i++)
+ if (mi_is_any_key_active(share->state.key_map))
{
- if (mi_check_unique(info,share->uniqueinfo+i,record,
- mi_unique_hash(share->uniqueinfo+i,record),
- HA_OFFSET_ERROR))
- goto err2;
+ for (i= 0 ; i < share->state.header.uniques ; i++)
+ {
+ if (mi_check_unique(info, share->uniqueinfo + i, record,
+ mi_unique_hash(share->uniqueinfo + i, record),
+ HA_OFFSET_ERROR))
+ goto err2;
+ }
}
/* Write all keys to indextree */