diff --git a/velox/dwio/common/SelectiveColumnReader.cpp b/velox/dwio/common/SelectiveColumnReader.cpp index 25aff8eb42c3..cfc9973e2ebf 100644 --- a/velox/dwio/common/SelectiveColumnReader.cpp +++ b/velox/dwio/common/SelectiveColumnReader.cpp @@ -111,6 +111,7 @@ void SelectiveColumnReader::prepareNulls( } } } + returnReaderNulls_ = false; if (resultNulls_ && resultNulls_->unique() && resultNulls_->capacity() >= bits::nbytes(numRows) + simd::kPadding) { // Clear whole capacity because future uses could hit diff --git a/velox/dwio/parquet/tests/examples/different_encodings_with_filter.parquet b/velox/dwio/parquet/tests/examples/different_encodings_with_filter.parquet new file mode 100644 index 000000000000..15097cc3061c Binary files /dev/null and b/velox/dwio/parquet/tests/examples/different_encodings_with_filter.parquet differ diff --git a/velox/dwio/parquet/tests/reader/ParquetReaderTest.cpp b/velox/dwio/parquet/tests/reader/ParquetReaderTest.cpp index e98fcf78a202..d7037ddd740e 100644 --- a/velox/dwio/parquet/tests/reader/ParquetReaderTest.cpp +++ b/velox/dwio/parquet/tests/reader/ParquetReaderTest.cpp @@ -765,6 +765,32 @@ TEST_F(ParquetReaderTest, varcharFilters) { "nation.parquet", rowType, std::move(filters), expected); } +TEST_F(ParquetReaderTest, readDifferentEncodingsWithFilter) { + FilterMap filters; + filters.insert({"n_1", exec::equal(1)}); + auto rowType = ROW({"n_0", "n_1", "n_2"}, {INTEGER(), INTEGER(), VARCHAR()}); + auto expected = makeRowVector({ + makeFlatVector({1, 2, 3, 4, 1, 2, 3, 4, 6, 9}), + makeFlatVector(10, [](auto row) { return 1; }), + makeNullableFlatVector( + {"A", + "B", + std::nullopt, + std::nullopt, + "A", + "B", + std::nullopt, + std::nullopt, + "F", + std::nullopt}), + }); + assertReadWithFilters( + "different_encodings_with_filter.parquet", + rowType, + std::move(filters), + expected); +} + // This test is to verify filterRowGroups() doesn't throw the fileOffset Velox // check failure TEST_F(ParquetReaderTest, filterRowGroups) {