Commit dd538218 authored by bar@bar.mysql.r18.ru's avatar bar@bar.mysql.r18.ru

Fix that this didn't work as far as sorting for ORDER BY was removed by optimizer:

SELECT k FROM t1 GROUP BY k COLLATE latin1 ORDER BY k COLLATE latin1_de
parent 22bcce25
...@@ -1967,6 +1967,26 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, ...@@ -1967,6 +1967,26 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables,
return 0; return 0;
} }
bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
{
/* Assume we don't have rtti */
if (this == item)
return 1;
if (item->type() != FUNC_ITEM)
return 0;
Item_func *item_func=(Item_func*) item;
if (arg_count != item_func->arg_count ||
func_name() != item_func->func_name())
return 0;
Item_func_set_collation *item_func_sc=(Item_func_set_collation*) item;
if (set_collation != item_func_sc->set_collation)
return 0;
for (uint i=0; i < arg_count ; i++)
if (!args[i]->eq(item_func_sc->args[i], binary_cmp))
return 0;
return 1;
}
String *Item_func_charset::val_str(String *str) String *Item_func_charset::val_str(String *str)
{ {
......
...@@ -508,6 +508,7 @@ public: ...@@ -508,6 +508,7 @@ public:
max_length = args[0]->max_length; max_length = args[0]->max_length;
str_value.set_charset(set_collation); str_value.set_charset(set_collation);
} }
bool eq(const Item *item, bool binary_cmp) const;
const char *func_name() const { return "set_collation"; } const char *func_name() const { return "set_collation"; }
}; };
......
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