Hi Alexander!
Ok to push this one. I really like how this splits the function.
Please put a comment that collation does not make sense (and thus is no concern) for numerical type handlers in the function where you compare them by pointer address.
Also, Item_get_cache should be on a separate line. In this patch it ends up being one long line:
+ Item *source_expr, Item *source_const) const; Item_cache *Item_get_cache(THD *thd, const Item *item) const;
Regards,
Vicentiu