From d7b45e01b47b11daf21af9e68ad762f3a70b915c Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Sat, 19 Aug 2017 15:02:29 -0700 Subject: This patch complements the patch for mdev-10855. It allows to push conditions into derived with window functions not only in the cases when the window specifications of these window functions use the same partition, but also in the cases when the window functions use partitions that share only some fields. In these cases only the conditions over the common fields are pushed. --- sql/sql_derived.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'sql/sql_derived.cc') diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index ad18e1c4686..bf1a777f50c 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -1251,8 +1251,9 @@ bool pushdown_cond_for_derived(THD *thd, Item *cond, TABLE_LIST *derived) { if (sl->join->group_list || sl->join->implicit_grouping) continue; - if (!(sl->window_specs.elements == 1 && - sl->window_specs.head()->partition_list)) + ORDER *common_partition_fields= + sl->find_common_window_func_partition_fields(thd); + if (!common_partition_fields) continue; extracted_cond_copy= !sl->next_select() ? extracted_cond : @@ -1260,9 +1261,8 @@ bool pushdown_cond_for_derived(THD *thd, Item *cond, TABLE_LIST *derived) if (!extracted_cond_copy) continue; - Item *cond_over_partition_fields; - ORDER *grouping_list= sl->window_specs.head()->partition_list->first; - sl->collect_grouping_fields(thd, grouping_list); + Item *cond_over_partition_fields;; + sl->collect_grouping_fields(thd, common_partition_fields); sl->check_cond_extraction_for_grouping_fields(extracted_cond_copy, derived); cond_over_partition_fields= -- cgit v1.2.1