summaryrefslogtreecommitdiff
path: root/sql/item.h
diff options
context:
space:
mode:
authorGeorgi Kodinov <kgeorge@mysql.com>2008-10-02 17:44:49 +0300
committerGeorgi Kodinov <kgeorge@mysql.com>2008-10-02 17:44:49 +0300
commita18639b63426092f6df98f6c67ab1139fe50e3c8 (patch)
tree413e89307c136e039f03c0ba72d7a866436e22e5 /sql/item.h
parent6037e8ec49572eae3a0a079f6b818caf0f96ab1b (diff)
downloadmariadb-git-a18639b63426092f6df98f6c67ab1139fe50e3c8.tar.gz
Bug #37348: Crash in or immediately after JOIN::make_sum_func_list
The optimizer pulls up aggregate functions which should be aggregated in an outer select. At some point it may substitute such a function for a field in the temporary table. The setup_copy_fields function doesn't take this into account and may overrun the copy_field buffer. Fixed by filtering out the fields referenced through the specialized reference for aggregates (Item_aggregate_ref). Added an assertion to make sure bugs that cause similar discrepancy don't go undetected. mysql-test/r/func_group.result: Bug #37348: test case mysql-test/t/func_group.test: Bug #37348: test case sql/item.cc: Bug #37348: Added a way to distinguish Item_aggregate_ref from the other types of refs sql/item.h: Bug #37348: Added a way to distinguish Item_aggregate_ref from the other types of refs sql/sql_select.cc: Bug #37348: - Don't consider copying field references seen through Item_aggregate_ref - check for discrepancies between the number of expected fields that need copying and the actual fields copied.
Diffstat (limited to 'sql/item.h')
-rw-r--r--sql/item.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/sql/item.h b/sql/item.h
index be343e25d3f..00a2759a739 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -2126,7 +2126,7 @@ class Item_ref :public Item_ident
protected:
void set_properties();
public:
- enum Ref_Type { REF, DIRECT_REF, VIEW_REF, OUTER_REF };
+ enum Ref_Type { REF, DIRECT_REF, VIEW_REF, OUTER_REF, AGGREGATE_REF };
Field *result_field; /* Save result here */
Item **ref;
Item_ref(Name_resolution_context *context_arg,