current_thd() is called many times while creating Items (in many cases 2 or more calls per item).
The problem is not only the number of calls to current_thd(), but also that when we create items we cause more calls, like calling sql_alloc() that calls current_thd and then uses this to call alloc_root() with the right argumetns.
By adding thd as an argument to all functions that creates Items, we can avoid most calls to current_thd(). We can also call alloc_root() directly instead of calling it trough sql_alloc().
Changes in the code as part of this task:
- Add THD as an argument to all functions that creates an Item.
- Replace 'new Item_xxx' with 'new (thd->memroot) Item_xxx
- Add thd->memroot as an argument to push_back() and push_front() for lists.
Before adding this to 10.1 code base, we need to benchmark the result to see that this big change is really worth it.