diff options
author | Alexander Barkov <bar@mariadb.org> | 2015-04-29 17:53:27 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2015-04-29 17:53:27 +0400 |
commit | 499deca7fc7e8185434eaaf6923f600e18d95d90 (patch) | |
tree | 3d86ad953cd445799c513ac991258f56fd5837fb | |
parent | 9cdf5c2bfd362764444bb3658ec23490658f16fb (diff) | |
download | mariadb-git-499deca7fc7e8185434eaaf6923f600e18d95d90.tar.gz |
A clean-up for c8141f53140054282306d17459310fbca94cbf0e
MDEV-7950 Item_func::type() takes 0.26% in OLTP RO (Step#2)
- Item_ref was doing unnecessary extra job after the "MDEV-7950 Step#2" patch.
Fallback to Item::build_equal_items() if real_type() is not FIELD_ITEM.
Note, Item_ref::build_equal_items() will most likely be further simplified.
Waiting for Sanja and Igor to check a possibly dead code.
- Safety: Adding Item_sum::build_equal_items() with ASSERT, as Item_sum
should never appear in build_equal_items() context.
-rw-r--r-- | sql/item.h | 16 | ||||
-rw-r--r-- | sql/item_sum.h | 11 |
2 files changed, 27 insertions, 0 deletions
diff --git a/sql/item.h b/sql/item.h index b54064580e9..29114d5a440 100644 --- a/sql/item.h +++ b/sql/item.h @@ -3575,6 +3575,22 @@ public: Item *get_tmp_table_item(THD *thd); table_map used_tables() const; void update_used_tables(); + COND *build_equal_items(THD *thd, COND_EQUAL *inherited, + bool link_item_fields) + { + /* + Item_ref cannot refer to Item_field when build_equal_items() is called, + because all "WHERE/HAVING field" are already replaced to + "WHERE/HAVING field<>0" by this time. See normalize_cond(). + TODO: make sure with Igor and Sanja, perhaps the below expression + can be simplified just to a Item::build_equal_items() call. + */ + return real_type() == FIELD_ITEM ? + Item_ident_or_func_or_sum::build_equal_items(thd, inherited, + link_item_fields) : + Item::build_equal_items(thd, inherited, + link_item_fields); + } bool const_item() const { return (*ref)->const_item(); diff --git a/sql/item_sum.h b/sql/item_sum.h index db45a336b46..b540b44a31e 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -444,6 +444,17 @@ public: */ table_map used_tables() const { return used_tables_cache; } void update_used_tables (); + COND *build_equal_items(THD *thd, COND_EQUAL *inherited, + bool link_item_fields) + { + /* + Item_sum (and derivants) of the original WHERE/HAVING clauses + should already be replaced to Item_aggregate_ref by the time when + build_equal_items() is called. See Item::split_sum_func2(). + */ + DBUG_ASSERT(0); + return Item::build_equal_items(thd, inherited, link_item_fields); + } bool is_null() { return null_value; } void make_const () { |