From 8fbacf358315530306ca43efc0b188bc78b4382f Mon Sep 17 00:00:00 2001 From: Bingyi Sun Date: Fri, 14 Mar 2025 16:06:08 +0800 Subject: [PATCH] fix: Null expr does not work for json field (#40456) issue: https://github.com/milvus-io/milvus/issues/40455 Signed-off-by: sunby --- internal/core/src/mmap/ChunkedColumn.h | 20 ++++++++++++------- .../src/segcore/ChunkedSegmentSealedImpl.cpp | 13 ++++++------ internal/core/src/storage/ChunkCache.cpp | 2 +- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/internal/core/src/mmap/ChunkedColumn.h b/internal/core/src/mmap/ChunkedColumn.h index 0136231b90..73fbdf2d8c 100644 --- a/internal/core/src/mmap/ChunkedColumn.h +++ b/internal/core/src/mmap/ChunkedColumn.h @@ -54,9 +54,7 @@ class ChunkedColumnBase : public ColumnBase { ChunkedColumnBase() = default; // memory mode ctor explicit ChunkedColumnBase(const FieldMeta& field_meta) { - if (field_meta.is_nullable()) { - nullable_ = true; - } + nullable_ = field_meta.is_nullable(); } virtual ~ChunkedColumnBase() = default; @@ -248,7 +246,9 @@ class ChunkedColumn : public ChunkedColumnBase { : ChunkedColumnBase(field_meta) { } - explicit ChunkedColumn(const std::vector>& chunks) { + explicit ChunkedColumn(const FieldMeta& field_meta, + const std::vector>& chunks) + : ChunkedColumnBase(field_meta) { for (auto& chunk : chunks) { AddChunk(chunk); } @@ -272,7 +272,9 @@ class ChunkedSparseFloatColumn : public ChunkedColumnBase { } explicit ChunkedSparseFloatColumn( - const std::vector>& chunks) { + const FieldMeta& field_meta, + const std::vector>& chunks) + : ChunkedColumnBase(field_meta) { for (auto& chunk : chunks) { AddChunk(chunk); } @@ -317,7 +319,9 @@ class ChunkedVariableColumn : public ChunkedColumnBase { } explicit ChunkedVariableColumn( - const std::vector>& chunks) { + const FieldMeta& field_meta, + const std::vector>& chunks) + : ChunkedColumnBase(field_meta) { for (auto& chunk : chunks) { AddChunk(chunk); } @@ -397,7 +401,9 @@ class ChunkedArrayColumn : public ChunkedColumnBase { } explicit ChunkedArrayColumn( - const std::vector>& chunks) { + const FieldMeta& field_meta, + const std::vector>& chunks) + : ChunkedColumnBase(field_meta) { for (auto& chunk : chunks) { AddChunk(chunk); } diff --git a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp index 8becdddc7d..9a3fc55b7c 100644 --- a/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp +++ b/internal/core/src/segcore/ChunkedSegmentSealedImpl.cpp @@ -531,7 +531,7 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id, // DEFAULT_MMAP_VRCOL_BLOCK_SIZE); auto var_column = std::make_shared>( - chunks); + field_meta, chunks); // var_column->Seal(std::move(indices)); column = std::move(var_column); break; @@ -539,21 +539,22 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id, case milvus::DataType::JSON: { auto var_column = std::make_shared>( - chunks); + field_meta, chunks); // var_column->Seal(std::move(indices)); column = std::move(var_column); break; } case milvus::DataType::ARRAY: { - auto arr_column = std::make_shared(chunks); + auto arr_column = + std::make_shared(field_meta, chunks); // arr_column->Seal(std::move(indices), // std::move(element_indices)); column = std::move(arr_column); break; } case milvus::DataType::VECTOR_SPARSE_FLOAT: { - auto sparse_column = - std::make_shared(chunks); + auto sparse_column = std::make_shared( + field_meta, chunks); // sparse_column->Seal(std::move(indices)); column = std::move(sparse_column); break; @@ -564,7 +565,7 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id, } } } else { - column = std::make_shared(chunks); + column = std::make_shared(field_meta, chunks); } // column->SetValidData(std::move(valid_data)); diff --git a/internal/core/src/storage/ChunkCache.cpp b/internal/core/src/storage/ChunkCache.cpp index b2ddb14d63..5e1e98d600 100644 --- a/internal/core/src/storage/ChunkCache.cpp +++ b/internal/core/src/storage/ChunkCache.cpp @@ -106,7 +106,7 @@ ChunkCache::Read(const std::string& filepath, data_type); } else { std::vector> chunks{chunk}; - column = std::make_shared(chunks); + column = std::make_shared(field_meta, chunks); } if (mmap_enabled && mmap_rss_not_need) { auto ok = madvise(reinterpret_cast(