[fix](function) Fix semantic analysis error in window function at first_value (#11855)

This commit is contained in:
yinzhijian
2022-08-19 09:13:29 +08:00
committed by GitHub
parent 8eb9ac3b04
commit f1ede2aa9d
3 changed files with 62 additions and 1 deletions

View File

@ -747,7 +747,9 @@ public class AnalyticExpr extends Expr {
&& window != null
&& window.getLeftBoundary().getType() != BoundaryType.UNBOUNDED_PRECEDING) {
if (window.getLeftBoundary().getType() != BoundaryType.PRECEDING) {
window = new AnalyticWindow(window.getType(), window.getLeftBoundary(),
// Here left bound can only be CURRENT_ROW and the function is last_value,
// so the type is changed to rows
window = new AnalyticWindow(AnalyticWindow.Type.ROWS, window.getLeftBoundary(),
window.getLeftBoundary());
fnCall = new FunctionCallExpr(new FunctionName(LASTVALUE),
getFnCall().getParams());

View File

@ -0,0 +1,8 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !select_default --
21 04-21-11 1 1
22 04-22-10-21 0 0
22 04-22-10-21 1 1
23 04-23-10 1 1
24 02-24-10-21 1 1

View File

@ -0,0 +1,51 @@
// 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_first_value_window") {
def tableName = "state"
sql """ DROP TABLE IF EXISTS ${tableName} """
sql """
CREATE TABLE ${tableName} (
`myday` INT,
`time_col` VARCHAR(40) NOT NULL,
`state` INT
) ENGINE=OLAP
DUPLICATE KEY(`myday`,time_col,state)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`myday`) BUCKETS 2
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"storage_format" = "V2"
);
"""
sql """ INSERT INTO ${tableName} VALUES
(21,"04-21-11",1),
(22,"04-22-10-21",0),
(22,"04-22-10-21",1),
(23,"04-23-10",1),
(24,"02-24-10-21",1); """
// not_vectorized
sql """ set enable_vectorized_engine = false; """
qt_select_default """ select *,first_value(state) over(partition by myday order by time_col range between current row and unbounded following) from ${tableName} order by myday, time_col, state; """
}