summaryrefslogtreecommitdiff
path: root/sql/sql_derived.cc
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2017-08-19 15:02:29 -0700
committerIgor Babaev <igor@askmonty.org>2017-08-19 15:02:29 -0700
commitd7b45e01b47b11daf21af9e68ad762f3a70b915c (patch)
tree7b8f900ca8bd2714da887b17457a34b66b082341 /sql/sql_derived.cc
parent4305c3ca5797ba4157384c363579be8e934e2fb1 (diff)
downloadmariadb-git-d7b45e01b47b11daf21af9e68ad762f3a70b915c.tar.gz
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.
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r--sql/sql_derived.cc10
1 files changed, 5 insertions, 5 deletions
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=