From 590259a7a5225fa63209f220b46481c412a5067e Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov Date: Fri, 19 Mar 2021 17:28:15 +0300 Subject: [PATCH] disable optimize_read_in_order for window functions --- src/Interpreters/ExpressionAnalyzer.cpp | 1 + .../01591_window_functions.reference | 28 +++++++++++++++++++ .../0_stateless/01591_window_functions.sql | 11 ++++++++ 3 files changed, 40 insertions(+) diff --git a/src/Interpreters/ExpressionAnalyzer.cpp b/src/Interpreters/ExpressionAnalyzer.cpp index 03bd370fb8c..f60bdbbfd50 100644 --- a/src/Interpreters/ExpressionAnalyzer.cpp +++ b/src/Interpreters/ExpressionAnalyzer.cpp @@ -1511,6 +1511,7 @@ ExpressionAnalysisResult::ExpressionAnalysisResult( settings.optimize_read_in_order && storage && query.orderBy() && !query_analyzer.hasAggregation() + && !query_analyzer.hasWindow() && !query.final() && join_allow_read_in_order; diff --git a/tests/queries/0_stateless/01591_window_functions.reference b/tests/queries/0_stateless/01591_window_functions.reference index d2543f0db75..957ea282556 100644 --- a/tests/queries/0_stateless/01591_window_functions.reference +++ b/tests/queries/0_stateless/01591_window_functions.reference @@ -920,6 +920,34 @@ FROM numbers(2) ; 1 0 1 1 +-- optimize_read_in_order conflicts with sorting for window functions, must +-- be disabled. +create table window_mt engine MergeTree order by number + as select number, mod(number, 3) p from numbers(100); +select number, count(*) over (partition by p) + from window_mt order by number limit 10 settings optimize_read_in_order = 0; +0 34 +1 33 +2 33 +3 34 +4 33 +5 33 +6 34 +7 33 +8 33 +9 34 +select number, count(*) over (partition by p) + from window_mt order by number limit 10 settings optimize_read_in_order = 1; +0 34 +1 33 +2 33 +3 34 +4 33 +5 33 +6 34 +7 33 +8 33 +9 34 -- some true window functions -- rank and friends select number, p, o, count(*) over w, diff --git a/tests/queries/0_stateless/01591_window_functions.sql b/tests/queries/0_stateless/01591_window_functions.sql index 03bd8371e23..ae35167b4ba 100644 --- a/tests/queries/0_stateless/01591_window_functions.sql +++ b/tests/queries/0_stateless/01591_window_functions.sql @@ -316,6 +316,17 @@ SELECT FROM numbers(2) ; +-- optimize_read_in_order conflicts with sorting for window functions, must +-- be disabled. +create table window_mt engine MergeTree order by number + as select number, mod(number, 3) p from numbers(100); + +select number, count(*) over (partition by p) + from window_mt order by number limit 10 settings optimize_read_in_order = 0; + +select number, count(*) over (partition by p) + from window_mt order by number limit 10 settings optimize_read_in_order = 1; + -- some true window functions -- rank and friends select number, p, o, count(*) over w,