summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2015-04-29 17:53:27 +0400
committerAlexander Barkov <bar@mariadb.org>2015-04-29 17:53:27 +0400
commit499deca7fc7e8185434eaaf6923f600e18d95d90 (patch)
tree3d86ad953cd445799c513ac991258f56fd5837fb
parent9cdf5c2bfd362764444bb3658ec23490658f16fb (diff)
downloadmariadb-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.h16
-rw-r--r--sql/item_sum.h11
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 ()
{