Commit f15c5686 authored by unknown's avatar unknown

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  moonbone.local:/work/19862-bug-5.0-opt-mysql

parents 38091170 1150869c
...@@ -752,7 +752,7 @@ class Item { ...@@ -752,7 +752,7 @@ class Item {
virtual bool find_item_in_field_list_processor(byte *arg) { return 0; } virtual bool find_item_in_field_list_processor(byte *arg) { return 0; }
virtual bool change_context_processor(byte *context) { return 0; } virtual bool change_context_processor(byte *context) { return 0; }
virtual bool reset_query_id_processor(byte *query_id) { return 0; } virtual bool reset_query_id_processor(byte *query_id) { return 0; }
virtual bool func_type_checker_processor(byte *arg) { return 0; } virtual bool is_expensive_processor(byte *arg) { return 0; }
virtual Item *equal_fields_propagator(byte * arg) { return this; } virtual Item *equal_fields_propagator(byte * arg) { return this; }
virtual Item *set_no_const_sub(byte *arg) { return this; } virtual Item *set_no_const_sub(byte *arg) { return this; }
......
...@@ -399,9 +399,9 @@ Field *Item_func::tmp_table_field(TABLE *t_arg) ...@@ -399,9 +399,9 @@ Field *Item_func::tmp_table_field(TABLE *t_arg)
} }
bool Item_func::func_type_checker_processor(byte *arg) bool Item_func::is_expensive_processor(byte *arg)
{ {
return *((Functype*)arg) == functype(); return is_expensive();
} }
......
...@@ -189,7 +189,8 @@ class Item_func :public Item_result_field ...@@ -189,7 +189,8 @@ class Item_func :public Item_result_field
Item *transform(Item_transformer transformer, byte *arg); Item *transform(Item_transformer transformer, byte *arg);
void traverse_cond(Cond_traverser traverser, void traverse_cond(Cond_traverser traverser,
void * arg, traverse_order order); void * arg, traverse_order order);
bool func_type_checker_processor(byte *arg); bool is_expensive_processor(byte *arg);
virtual bool is_expensive() { return 0; }
}; };
...@@ -947,6 +948,7 @@ class Item_udf_func :public Item_func ...@@ -947,6 +948,7 @@ class Item_udf_func :public Item_func
void cleanup(); void cleanup();
Item_result result_type () const { return udf.result_type(); } Item_result result_type () const { return udf.result_type(); }
table_map not_null_tables() const { return 0; } table_map not_null_tables() const { return 0; }
bool is_expensive() { return 1; }
}; };
...@@ -1475,6 +1477,7 @@ class Item_func_sp :public Item_func ...@@ -1475,6 +1477,7 @@ class Item_func_sp :public Item_func
virtual enum Functype functype() const { return FUNC_SP; } virtual enum Functype functype() const { return FUNC_SP; }
bool fix_fields(THD *thd, Item **ref); bool fix_fields(THD *thd, Item **ref);
bool is_expensive() { return 1; }
}; };
......
...@@ -1073,10 +1073,7 @@ JOIN::optimize() ...@@ -1073,10 +1073,7 @@ JOIN::optimize()
for (ORDER *tmp_order= order; tmp_order ; tmp_order=tmp_order->next) for (ORDER *tmp_order= order; tmp_order ; tmp_order=tmp_order->next)
{ {
Item *item= *tmp_order->item; Item *item= *tmp_order->item;
Item_func::Functype type=Item_func::FUNC_SP; if (item->walk(&Item::is_expensive_processor,(byte*)0))
Item_func::Functype type1=Item_func::UDF_FUNC;
if (item->walk(&Item::func_type_checker_processor,(byte*)&type) ||
item->walk(&Item::func_type_checker_processor,(byte*)&type1))
{ {
/* Force tmp table without sort */ /* Force tmp table without sort */
need_tmp=1; simple_order=simple_group=0; need_tmp=1; simple_order=simple_group=0;
......
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