summaryrefslogtreecommitdiff
path: root/sql/opt_sum.cc
diff options
context:
space:
mode:
authorGeorgi Kodinov <kgeorge@mysql.com>2008-10-06 17:17:25 +0300
committerGeorgi Kodinov <kgeorge@mysql.com>2008-10-06 17:17:25 +0300
commit89d2b8efb9a45145b44b56aa5bdd2b341b46b382 (patch)
treefd3c4a772bff3c4ffe469097f4648fb887fdc22a /sql/opt_sum.cc
parent58f30a5886c117c9123986a3452364422ef395dd (diff)
downloadmariadb-git-89d2b8efb9a45145b44b56aa5bdd2b341b46b382.tar.gz
Bug#34773: query with explain extended and derived table / other table
crashes server When creating temporary table that contains aggregate functions a non-reversible source transformation was performed to redirect aggregate function arguments towards temporary table columns. This caused EXPLAIN EXTENDED to fail because it was trying to resolve references to the (freed) temporary table. Fixed by preserving the original aggregate function arguments and using them (instead of the transformed ones) for EXPLAIN EXTENDED. mysql-test/r/explain.result: Bug#34773: test case mysql-test/t/explain.test: Bug#34773: test case sql/item.cc: Bug#34773: use accessor functions instead of public members sql/item_sum.cc: Bug#34773: - Encapsulate the arguments into Item_sum and provide accessor and mutator methods - print the orginal arguments (if present) in EXPLAIN EXTENDED - preserve the original arguments list. sql/item_sum.h: Bug#34773: - Encapsulate the arguments into Item_sum and provide accessor and mutator methods - print the orginal arguments (if present) in EXPLAIN EXTENDED - preserve the original arguments list. sql/opt_range.cc: Bug#34773: use accessor functions instead of public members sql/opt_sum.cc: Bug#34773: use accessor functions instead of public members sql/sql_select.cc: Bug#34773: use accessor functions instead of public members
Diffstat (limited to 'sql/opt_sum.cc')
-rw-r--r--sql/opt_sum.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 42d36756845..3ccc1e5cf41 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -199,7 +199,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
to the number of rows in the tables if this number is exact and
there are no outer joins.
*/
- if (!conds && !((Item_sum_count*) item)->args[0]->maybe_null &&
+ if (!conds && !((Item_sum_count*) item)->get_arg(0)->maybe_null &&
!outer_tables && maybe_exact_count)
{
if (!is_exact_count)
@@ -225,7 +225,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
parts of the key is found in the COND, then we can use
indexes to find the key.
*/
- Item *expr=item_sum->args[0];
+ Item *expr=item_sum->get_arg(0);
if (expr->real_item()->type() == Item::FIELD_ITEM)
{
uchar key_buff[MAX_KEY_LENGTH];
@@ -373,7 +373,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
parts of the key is found in the COND, then we can use
indexes to find the key.
*/
- Item *expr=item_sum->args[0];
+ Item *expr=item_sum->get_arg(0);
if (expr->real_item()->type() == Item::FIELD_ITEM)
{
uchar key_buff[MAX_KEY_LENGTH];