This is an automated email from the ASF dual-hosted git repository.
gabriellee pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 8704618a2ba [fix](window function) Fix illegal frame range (#41147)
(#41306)
8704618a2ba is described below
commit 8704618a2bac1d56ccfe424da5c39f6f06d2c178
Author: Gabriel <[email protected]>
AuthorDate: Wed Sep 25 21:09:25 2024 +0800
[fix](window function) Fix illegal frame range (#41147) (#41306)
pick #41147
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int,
siginfo_t*, void*) at
/home/zcp/repo_center/doris_master/doris/be/src/common/signal_handler.h:421
1# 0x00007F591D573520 in /lib/x86_64-linux-gnu/libc.so.6
2# pthread_kill at ./nptl/pthread_kill.c:89
3# raise at ../sysdeps/posix/raise.c:27
4# abort at ./stdlib/abort.c:81
5# _nl_load_domain at ./intl/loadmsgcat.c:1177
6# 0x00007F591D56AE96 in /lib/x86_64-linux-gnu/libc.so.6
7# doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false,
false, false, DefaultMemoryAllocator>, 16ul, 15ul>::operator[](long)
const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/common/pod_array.h:365
8# doris::vectorized::ColumnNullable::is_null_at(unsigned long) const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/columns/column_nullable.h:158
9#
doris::vectorized::ReaderFirstAndLastData<doris::vectorized::ColumnVector<double>,
true, true, false>::insert_result_into(doris::vectorized::IColumn&)
const at
/home/zcp/repo_center/doris_master/doris/be/src/vec/aggregate_functions/aggregate_function_reader_first_last.h:125
10# doris::pipeline::AnalyticLocalState::_insert_result_info(long) in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
11# std::_Function_handler<void (long), std::_Bind_result<void, void
(doris::pipeline::AnalyticLocalState::*(doris::pipeline::AnalyticLocalState*,
std::_Placeholder<1>))(long)> >::_M_invoke(std::_Any_data const&,
long&&) at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
12# std::function<void (long)>::operator()(long) const at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
13# doris::pipeline::AnalyticLocalState::_get_next_for_rows(unsigned
long) in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be 14#
std::enable_if<is_invocable_r_v<doris::Status, doris::Status
(doris::pipeline::AnalyticLocalState::*&)(unsigned long),
doris::pipeline::AnalyticLocalState*&, unsigned long>,
doris::Status>::type std::__invoke_r<doris::Status, doris::Status
(doris::pipeline::AnalyticLocalState::*&)(unsigned long),
doris::pipeline::AnalyticLocalState*&, unsigned long>(doris::Status
(doris::pipeline::AnalyticLocalState::*&)(unsigned long),
doris::pipeline::AnalyticLocalState*&, unsigned long&&) at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:114
15# doris::Status std::_Bind_result<doris::Status, doris::Status
(doris::pipeline::AnalyticLocalState::*(doris::pipeline::AnalyticLocalState*,
std::_Placeholder<1>))(unsigned long)>::__call<doris::Status, unsigned
long&&, 0ul, 1ul>(std::tuple<unsigned long&&>&&, std::_Index_tuple<0ul,
1ul>) at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:570
16# std::_Function_handler<doris::Status (unsigned long),
std::_Bind_result<doris::Status, doris::Status
(doris::pipeline::AnalyticLocalState::*(doris::pipeline::AnalyticLocalState*,
std::_Placeholder<1>))(unsigned long)> >::_M_invoke(std::_Any_data
const&, unsigned long&&) at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
17# std::function<doris::Status (unsigned long)>::operator()(unsigned
long) const at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
18#
doris::pipeline::AnalyticSourceOperatorX::get_block(doris::RuntimeState*,
doris::vectorized::Block*, bool*) in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
19#
doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*,
doris::vectorized::Block*, bool*) at
/home/zcp/repo_center/doris_master/doris/be/src/pipeline/exec/operator.cpp:322
20# doris::pipeline::PipelineTask::execute(bool*) in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
21# doris::pipeline::TaskScheduler::_do_work(unsigned long) at
/home/zcp/repo_center/doris_master/doris/be/src/pipeline/task_scheduler.cpp:138
22# doris::ThreadPool::dispatch_thread() in
/mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be
23# doris::Thread::supervise_thread(void*) at
/home/zcp/repo_center/doris_master/doris/be/src/util/thread.cpp:499 24#
start_thread at ./nptl/pthread_create.c:442
25# 0x00007F591D657850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83
## Proposed changes
Issue Number: close #xxx
<!--Describe your changes.-->
---
be/src/pipeline/exec/analytic_source_operator.cpp | 4 +-
.../aggregate_function_window.h | 6 +-
.../data/nereids_syntax_p0/window_function.out | 202 +++++++++++++++++++++
.../nereids_syntax_p0/window_function.groovy | 39 ++++
4 files changed, 247 insertions(+), 4 deletions(-)
diff --git a/be/src/pipeline/exec/analytic_source_operator.cpp
b/be/src/pipeline/exec/analytic_source_operator.cpp
index 3583642273b..b3e692cdd95 100644
--- a/be/src/pipeline/exec/analytic_source_operator.cpp
+++ b/be/src/pipeline/exec/analytic_source_operator.cpp
@@ -355,6 +355,7 @@ Status AnalyticLocalState::_get_next_for_rows(size_t
current_block_rows) {
1; //going on calculate,add up data, no need to reset
state
} else {
_reset_agg_status();
+ range_end = _shared_state->current_row_position + _rows_end_offset
+ 1;
if (!_parent->cast<AnalyticSourceOperatorX>()
._window.__isset
.window_start) { //[preceding, offset]
--unbound: [preceding, following]
@@ -362,7 +363,8 @@ Status AnalyticLocalState::_get_next_for_rows(size_t
current_block_rows) {
} else {
range_start = _shared_state->current_row_position +
_rows_start_offset;
}
- range_end = _shared_state->current_row_position + _rows_end_offset
+ 1;
+ // Make sure range_start <= range_end
+ range_start = std::min(range_start, range_end);
}
_executor.execute(_partition_by_start.pos,
_shared_state->partition_by_end.pos, range_start,
range_end);
diff --git a/be/src/vec/aggregate_functions/aggregate_function_window.h
b/be/src/vec/aggregate_functions/aggregate_function_window.h
index ec1aab99e6a..92e22c895c4 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_window.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_window.h
@@ -499,9 +499,9 @@ template <typename Data, bool arg_ignore_null = false>
struct WindowFunctionLastImpl : Data {
void add_range_single_place(int64_t partition_start, int64_t
partition_end, int64_t frame_start,
int64_t frame_end, const IColumn** columns) {
- if ((frame_start <= frame_end) &&
- ((frame_end <= partition_start) ||
- (frame_start >= partition_end))) { //beyond or under partition,
set null
+ DCHECK_LE(frame_start, frame_end);
+ if ((frame_end <= partition_start) ||
+ (frame_start >= partition_end)) { //beyond or under partition, set
null
this->set_is_null();
return;
}
diff --git a/regression-test/data/nereids_syntax_p0/window_function.out
b/regression-test/data/nereids_syntax_p0/window_function.out
index 5e91a4682d1..4ec92fc61ad 100644
--- a/regression-test/data/nereids_syntax_p0/window_function.out
+++ b/regression-test/data/nereids_syntax_p0/window_function.out
@@ -359,3 +359,205 @@
1.0
1.5
+-- !sql --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
diff --git a/regression-test/suites/nereids_syntax_p0/window_function.groovy
b/regression-test/suites/nereids_syntax_p0/window_function.groovy
index 209729b9358..9a427d10198 100644
--- a/regression-test/suites/nereids_syntax_p0/window_function.groovy
+++ b/regression-test/suites/nereids_syntax_p0/window_function.groovy
@@ -201,4 +201,43 @@ suite("window_function") {
from
(select 1 as dt,2 as dt2)t
group by dt,dt2"""
+
+ sql """ DROP TABLE IF EXISTS
table_200_undef_partitions2_keys3_properties4_distributed_by53 """
+ sql """
+ create table
table_200_undef_partitions2_keys3_properties4_distributed_by53 (
+ pk int,
+ col_boolean_undef_signed boolean null ,
+ col_boolean_undef_signed_not_null boolean not null ,
+ col_tinyint_undef_signed tinyint null ,
+ col_tinyint_undef_signed_not_null tinyint not null ,
+ col_smallint_undef_signed smallint null ,
+ col_smallint_undef_signed_not_null smallint not null ,
+ col_int_undef_signed int null ,
+ col_int_undef_signed_not_null int not null ,
+ col_bigint_undef_signed bigint null ,
+ col_bigint_undef_signed_not_null bigint not null ,
+ col_float_undef_signed float null ,
+ col_float_undef_signed_not_null float not null ,
+ col_double_undef_signed double null ,
+ col_double_undef_signed_not_null double not null ,
+ col_decimal_10_0__undef_signed decimal(10,0) null ,
+ col_decimal_10_0__undef_signed_not_null decimal(10,0) not null ,
+ col_decimal_16_10__undef_signed decimal(16,10) null ,
+ col_decimal_16_10__undef_signed_not_null decimal(16,10) not null ,
+ col_decimal_37__12__undef_signed decimal(37, 12) null ,
+ col_decimal_37__12__undef_signed_not_null decimal(37, 12) not null ,
+ col_decimal_17_0__undef_signed decimal(17,0) null ,
+ col_decimal_17_0__undef_signed_not_null decimal(17,0) not null ,
+ col_decimal_8_4__undef_signed decimal(8,4) null ,
+ col_decimal_8_4__undef_signed_not_null decimal(8,4) not null ,
+ col_decimal_9_0__undef_signed decimal(9,0) null ,
+ col_decimal_9_0__undef_signed_not_null decimal(9,0) not null
+ ) engine=olap
+ UNIQUE KEY(pk)
+ distributed by hash(pk) buckets 10
+ properties("replication_num" = "1");
+ insert into
table_200_undef_partitions2_keys3_properties4_distributed_by53(pk,col_boolean_undef_signed,col_boolean_undef_signed_not_null,col_tinyint_undef_signed,col_tinyint_undef_signed_not_null,col_smallint_undef_signed,col_smallint_undef_signed_not_null,col_int_undef_signed,col_int_undef_signed_not_null,col_bigint_undef_signed,col_bigint_undef_signed_not_null,col_float_undef_signed,col_float_undef_signed_not_null,col_double_undef_signed,col_double_undef_signed_not_null,col_decimal
[...]
+ """
+
+ qt_sql """ select LAST_VALUE(col_tinyint_undef_signed_not_null) over
(partition by col_double_undef_signed_not_null, col_int_undef_signed,
(col_float_undef_signed_not_null - col_int_undef_signed),
round_bankers(col_int_undef_signed) order by pk rows between unbounded
preceding and 4 preceding) AS col_alias56089 from
table_200_undef_partitions2_keys3_properties4_distributed_by53 order by
col_alias56089; """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]