summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorGleb Shchepa <gleb.shchepa@oracle.com>2010-10-31 19:04:38 +0300
committerGleb Shchepa <gleb.shchepa@oracle.com>2010-10-31 19:04:38 +0300
commit0389c6aac0bf32718e2166c97ef6dafb25e20e20 (patch)
tree3af3b3116a958e716120f22f95ce5af2b4799b03 /sql/sql_select.cc
parent9cff440d6088146804707cc8979adfe95852380b (diff)
downloadmariadb-git-0389c6aac0bf32718e2166c97ef6dafb25e20e20.tar.gz
Bug #52160: crash and inconsistent results when grouping
by a function and column The bugreport reveals two different bugs about grouping on a function: 1) grouping by the TIME_TO_SEC function result caused a server crash or wrong results and 2) grouping by the function returning a blob caused an unexpected "Duplicate entry" error and wrong result. Details for the 1st bug: TIME_TO_SEC() returns NULL if its argument is invalid (empty string for example). Thus its nullability depends not only on the nullability of its arguments but also on their values. Fixed by (overoptimistically) setting TIME_TO_SEC() to be nullable despite the nullability of its arguments. Details for the 2nd bug: The server is unable to create indices on blobs without explicit blob key part length. However, this fact was ignored for blob function result fields of GROUP BY intermediate tables. Fixed by disabling GROUP BY index creation for blob function result fields like regular blob fields.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 08bd0c28738..77d4447fd0f 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -15198,6 +15198,8 @@ calc_group_buffer(JOIN *join,ORDER *group)
{
key_length+= 8;
}
+ else if (type == MYSQL_TYPE_BLOB)
+ key_length+= MAX_BLOB_WIDTH; // Can't be used as a key
else
{
/*