This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new cdd1b6d6dd [fix](function) fix lag/lead function return invalid data
(#9076)
cdd1b6d6dd is described below
commit cdd1b6d6dd0437d2332862637a75e92835926583
Author: zhangstar333 <[email protected]>
AuthorDate: Tue Apr 26 09:34:46 2022 +0800
[fix](function) fix lag/lead function return invalid data (#9076)
---
.../org/apache/doris/analysis/AnalyticExpr.java | 18 +++++----
.../java/org/apache/doris/catalog/FunctionSet.java | 4 +-
.../data/correctness/test_lag_lead_window.out | 11 ++++++
.../suites/correctness/test_lag_lead_window.groovy | 43 ++++++++++++++++++++++
4 files changed, 67 insertions(+), 9 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
index 21bdbf03de..7b1b208596 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
@@ -479,13 +479,17 @@ public class AnalyticExpr extends Expr {
standardize(analyzer);
- // min/max is not currently supported on sliding windows (i.e. start
bound is not
- // unbounded).
- if (window != null && isMinMax(fn) &&
- window.getLeftBoundary().getType() !=
BoundaryType.UNBOUNDED_PRECEDING) {
- throw new AnalysisException(
- "'" + getFnCall().toSql() + "' is only supported with an "
- + "UNBOUNDED PRECEDING start bound.");
+ // But in Vectorized mode, after calculate a window, will be call
reset() to reset state,
+ // And then restarted calculate next new window;
+ if (!VectorizedUtil.isVectorized()) {
+ // min/max is not currently supported on sliding windows (i.e.
start bound is not
+ // unbounded).
+ if (window != null && isMinMax(fn) &&
+ window.getLeftBoundary().getType() !=
BoundaryType.UNBOUNDED_PRECEDING) {
+ throw new AnalysisException(
+ "'" + getFnCall().toSql() + "' is only supported with an "
+ + "UNBOUNDED PRECEDING start bound.");
+ }
}
setChildren();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
index b6c08cba93..aed8231567 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
@@ -2427,13 +2427,13 @@ public class
FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
"lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
- null, null, null));
+ null, t.isStringType() ? stringValGetValue : null, null));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
- null, null, null));
+ null, t.isStringType() ? stringValGetValue : null, null));
//vec
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
diff --git a/regression-test/data/correctness/test_lag_lead_window.out
b/regression-test/data/correctness/test_lag_lead_window.out
new file mode 100644
index 0000000000..ce24131517
--- /dev/null
+++ b/regression-test/data/correctness/test_lag_lead_window.out
@@ -0,0 +1,11 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !select_default --
+/wyyt-image/2021/11/13/595345040188712460.jpg
+/wyyt-image/2022/04/13/1434607674511761493.jpg
+/wyyt-image/2022/04/13/1434607674511761493.jpg
/wyyt-image/2022/04/13/1434607674511761493.jpg
+
+-- !select_default2 --
+/wyyt-image/2021/11/13/595345040188712460.jpg
+/wyyt-image/2022/04/13/1434607674511761493.jpg
/wyyt-image/2022/04/13/1434607674511761493.jpg
+/wyyt-image/2022/04/13/1434607674511761493.jpg
+
diff --git a/regression-test/suites/correctness/test_lag_lead_window.groovy
b/regression-test/suites/correctness/test_lag_lead_window.groovy
new file mode 100644
index 0000000000..69ad1eeab4
--- /dev/null
+++ b/regression-test/suites/correctness/test_lag_lead_window.groovy
@@ -0,0 +1,43 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_lag_lead_window") {
+ def tableName = "wftest"
+
+
+ sql """ DROP TABLE IF EXISTS ${tableName} """
+ sql """
+ CREATE TABLE ${tableName} ( `aa` varchar(10) NULL COMMENT "", `bb`
text NULL COMMENT "", `cc` text NULL COMMENT "" )
+ ENGINE=OLAP UNIQUE KEY(`aa`) DISTRIBUTED BY HASH(`aa`) BUCKETS 3
+ PROPERTIES ( "replication_allocation" = "tag.location.default: 1",
"in_memory" = "false", "storage_format" = "V2" );
+ """
+
+ sql """ INSERT INTO ${tableName} VALUES
+ ('a','aa','/wyyt-image/2021/11/13/595345040188712460.jpg'),
+ ('b','aa','/wyyt-image/2022/04/13/1434607674511761493.jpg'),
+ ('c','cc','/wyyt-image/2022/04/13/1434607674511761493.jpg') """
+
+ // not_vectorized
+ sql """ set enable_vectorized_engine = false """
+
+ qt_select_default """ select min(t.cc) over(PARTITION by t.cc order by
t.aa) ,
+ lag(t.cc,1,'') over (PARTITION by t.cc order by
t.aa) as l1 from ${tableName} t; """
+
+ qt_select_default2 """ select min(t.cc) over(PARTITION by t.cc order by
t.aa) ,
+ lead(t.cc,1,'') over (PARTITION by t.cc order by
t.aa) as l1 from ${tableName} t; """
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]