Commit 5b8a24cf authored by Alexey Botchkov's avatar Alexey Botchkov

merging.

parents 8afc2658 cd994f0e
...@@ -28,6 +28,18 @@ ...@@ -28,6 +28,18 @@
#include "mysql_priv.h" #include "mysql_priv.h"
#include "sql_select.h" #include "sql_select.h"
/**
Calculate the affordable RAM limit for structures like TREE or Unique
used in Item_sum_*
*/
ulonglong Item_sum::ram_limitation(THD *thd)
{
return min(thd->variables.tmp_table_size,
thd->variables.max_heap_table_size);
}
/** /**
Prepare an aggregate function item for checking context conditions. Prepare an aggregate function item for checking context conditions.
...@@ -833,7 +845,7 @@ bool Aggregator_distinct::setup(THD *thd) ...@@ -833,7 +845,7 @@ bool Aggregator_distinct::setup(THD *thd)
} }
DBUG_ASSERT(tree == 0); DBUG_ASSERT(tree == 0);
tree= new Unique(compare_key, cmp_arg, tree_key_length, tree= new Unique(compare_key, cmp_arg, tree_key_length,
thd->variables.max_heap_table_size); item_sum->ram_limitation(thd));
/* /*
The only time tree_key_length could be 0 is if someone does The only time tree_key_length could be 0 is if someone does
count(distinct) on a char(0) field - stupid thing to do, count(distinct) on a char(0) field - stupid thing to do,
...@@ -902,7 +914,7 @@ bool Aggregator_distinct::setup(THD *thd) ...@@ -902,7 +914,7 @@ bool Aggregator_distinct::setup(THD *thd)
are converted to binary representation as well. are converted to binary representation as well.
*/ */
tree= new Unique(simple_raw_key_cmp, &tree_key_length, tree_key_length, tree= new Unique(simple_raw_key_cmp, &tree_key_length, tree_key_length,
thd->variables.max_heap_table_size); item_sum->ram_limitation(thd));
DBUG_RETURN(tree == 0); DBUG_RETURN(tree == 0);
} }
...@@ -3514,7 +3526,7 @@ bool Item_func_group_concat::setup(THD *thd) ...@@ -3514,7 +3526,7 @@ bool Item_func_group_concat::setup(THD *thd)
unique_filter= new Unique(group_concat_key_cmp_with_distinct, unique_filter= new Unique(group_concat_key_cmp_with_distinct,
(void*)this, (void*)this,
tree_key_length, tree_key_length,
thd->variables.max_heap_table_size); ram_limitation(thd));
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
......
...@@ -364,6 +364,7 @@ protected: ...@@ -364,6 +364,7 @@ protected:
Item **orig_args, *tmp_orig_args[2]; Item **orig_args, *tmp_orig_args[2];
table_map used_tables_cache; table_map used_tables_cache;
bool forced_const; bool forced_const;
static ulonglong ram_limitation(THD *thd);
public: public:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment