This is an automated email from the ASF dual-hosted git repository.
lihaopeng pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new f4674f61a76 [Fix-2.0](column) Fix wrong has_null flag after
filter_by_selector (#40849)
f4674f61a76 is described below
commit f4674f61a76fd2e774309849db6a5623b9c6a479
Author: zclllhhjj <[email protected]>
AuthorDate: Fri Sep 20 19:04:11 2024 +0800
[Fix-2.0](column) Fix wrong has_null flag after filter_by_selector (#40849)
in master and branch-2.1 it fixed by refactor
https://github.com/apache/doris/pull/40769. for 2.0 we pick
https://github.com/apache/doris/pull/40756 as a minimal modification
---
be/src/vec/columns/column_nullable.cpp | 11 ++---
.../correctness/test_column_nullable_cache.out | 5 ++
.../correctness/test_column_nullable_cache.groovy | 57 ++++++++++++++++++++++
3 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/be/src/vec/columns/column_nullable.cpp
b/be/src/vec/columns/column_nullable.cpp
index 47bd2d9e247..5dd612e6ced 100644
--- a/be/src/vec/columns/column_nullable.cpp
+++ b/be/src/vec/columns/column_nullable.cpp
@@ -365,15 +365,14 @@ size_t ColumnNullable::filter(const Filter& filter) {
}
Status ColumnNullable::filter_by_selector(const uint16_t* sel, size_t
sel_size, IColumn* col_ptr) {
- const ColumnNullable* nullable_col_ptr = reinterpret_cast<const
ColumnNullable*>(col_ptr);
+ ColumnNullable* nullable_col_ptr =
reinterpret_cast<ColumnNullable*>(col_ptr);
ColumnPtr nest_col_ptr = nullable_col_ptr->nested_column;
- ColumnPtr null_map_ptr = nullable_col_ptr->null_map;
+ // `get_null_map_data` will set `_need_update_has_null` to true
+ auto& res_nullmap = nullable_col_ptr->get_null_map_data();
+
RETURN_IF_ERROR(get_nested_column().filter_by_selector(
sel, sel_size,
const_cast<doris::vectorized::IColumn*>(nest_col_ptr.get())));
- //insert cur nullmap into result nullmap which is empty
- auto& res_nullmap = reinterpret_cast<vectorized::ColumnVector<UInt8>*>(
-
const_cast<doris::vectorized::IColumn*>(null_map_ptr.get()))
- ->get_data();
+
DCHECK(res_nullmap.empty());
res_nullmap.resize(sel_size);
auto& cur_nullmap = get_null_map_column().get_data();
diff --git a/regression-test/data/correctness/test_column_nullable_cache.out
b/regression-test/data/correctness/test_column_nullable_cache.out
new file mode 100644
index 00000000000..024f1702b54
--- /dev/null
+++ b/regression-test/data/correctness/test_column_nullable_cache.out
@@ -0,0 +1,5 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !test --
+
+-- !test --
+0
diff --git
a/regression-test/suites/correctness/test_column_nullable_cache.groovy
b/regression-test/suites/correctness/test_column_nullable_cache.groovy
new file mode 100644
index 00000000000..c6ec7b73848
--- /dev/null
+++ b/regression-test/suites/correctness/test_column_nullable_cache.groovy
@@ -0,0 +1,57 @@
+// 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_column_nullable_cache") {
+ sql """
+ drop table if exists test_column_nullable_cache;
+ """
+ sql """
+ CREATE TABLE `test_column_nullable_cache` (
+ `col_int_undef_signed2` int NULL,
+ `col_int_undef_signed` int NULL,
+ `col_int_undef_signed3` int NULL,
+ `col_int_undef_signed4` int NULL,
+ `pk` int NULL
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`col_int_undef_signed2`)
+ DISTRIBUTED by RANDOM BUCKETS 10
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ );
+ """
+
+ sql """
+ insert into test_column_nullable_cache
+
(pk,col_int_undef_signed,col_int_undef_signed2,col_int_undef_signed3,col_int_undef_signed4)
+ values
(0,3,7164641,5,8),(1,null,3916062,5,6),(2,1,5533498,0,9),(3,7,2,null,7057679),(4,1,0,7,7),
+
(5,null,4,2448564,1),(6,7531976,7324373,9,7),(7,3,1,1,3),(8,6,8131576,9,-1793807),(9,9,2,4214547,9),
+
(10,-7299852,5,1,3),(11,7,3,-1036551,5),(12,-6108579,84823,4,1229534),(13,-1065629,5,4,null),(14,null,8072633,3328285,2),
+
(15,2,7,6,6),(16,8,5,-4582103,1),(17,5,-4677722,-2379367,4),(18,-7807532,-6686732,0,5329341),
+
(19,8,7,-4013246,-7013374),(20,0,2,9,2),(21,7,2383333,5,4),(22,5844611,2,2,0),(23,0,4756185,0,-5612039),
+
(24,6,4878754,608172,0),(25,null,7858692,7,-6704206),(26,7,-1697597,6,9),(27,9,-7021349,3,-3094786),
+
(28,2,2830915,null,8),(29,4133633,489212,5,9),(30,6,-3346211,3668768,2),(31,1,4862070,-5066405,0),(32,9,6,7,8),
+
(33,2,null,4,2),(34,1,2893430,-3282825,5),(35,2,3,4,2),(36,4,-3418732,6,1263819),(37,5,4,-6342170,6),(99,9,2,8,null);
+ """
+
+ qt_test """
+ select * from test_column_nullable_cache where col_int_undef_signed3
IS NULL and col_int_undef_signed3 = col_int_undef_signed3;
+ """
+
+ qt_test """
+ select count(*) from test_column_nullable_cache where
col_int_undef_signed3 IS NULL and col_int_undef_signed3 = col_int_undef_signed3;
+ """
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]