fix: Null expr does not work for json field (#40456)

issue: https://github.com/milvus-io/milvus/issues/40455

Signed-off-by: sunby <sunbingyi1992@gmail.com>
This commit is contained in:
Bingyi Sun 2025-03-14 16:06:08 +08:00 committed by GitHub
parent 001fc992df
commit 8fbacf3583
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 14 deletions

View File

@ -54,9 +54,7 @@ class ChunkedColumnBase : public ColumnBase {
ChunkedColumnBase() = default; ChunkedColumnBase() = default;
// memory mode ctor // memory mode ctor
explicit ChunkedColumnBase(const FieldMeta& field_meta) { explicit ChunkedColumnBase(const FieldMeta& field_meta) {
if (field_meta.is_nullable()) { nullable_ = field_meta.is_nullable();
nullable_ = true;
}
} }
virtual ~ChunkedColumnBase() = default; virtual ~ChunkedColumnBase() = default;
@ -248,7 +246,9 @@ class ChunkedColumn : public ChunkedColumnBase {
: ChunkedColumnBase(field_meta) { : ChunkedColumnBase(field_meta) {
} }
explicit ChunkedColumn(const std::vector<std::shared_ptr<Chunk>>& chunks) { explicit ChunkedColumn(const FieldMeta& field_meta,
const std::vector<std::shared_ptr<Chunk>>& chunks)
: ChunkedColumnBase(field_meta) {
for (auto& chunk : chunks) { for (auto& chunk : chunks) {
AddChunk(chunk); AddChunk(chunk);
} }
@ -272,7 +272,9 @@ class ChunkedSparseFloatColumn : public ChunkedColumnBase {
} }
explicit ChunkedSparseFloatColumn( explicit ChunkedSparseFloatColumn(
const std::vector<std::shared_ptr<Chunk>>& chunks) { const FieldMeta& field_meta,
const std::vector<std::shared_ptr<Chunk>>& chunks)
: ChunkedColumnBase(field_meta) {
for (auto& chunk : chunks) { for (auto& chunk : chunks) {
AddChunk(chunk); AddChunk(chunk);
} }
@ -317,7 +319,9 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
} }
explicit ChunkedVariableColumn( explicit ChunkedVariableColumn(
const std::vector<std::shared_ptr<Chunk>>& chunks) { const FieldMeta& field_meta,
const std::vector<std::shared_ptr<Chunk>>& chunks)
: ChunkedColumnBase(field_meta) {
for (auto& chunk : chunks) { for (auto& chunk : chunks) {
AddChunk(chunk); AddChunk(chunk);
} }
@ -397,7 +401,9 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
} }
explicit ChunkedArrayColumn( explicit ChunkedArrayColumn(
const std::vector<std::shared_ptr<Chunk>>& chunks) { const FieldMeta& field_meta,
const std::vector<std::shared_ptr<Chunk>>& chunks)
: ChunkedColumnBase(field_meta) {
for (auto& chunk : chunks) { for (auto& chunk : chunks) {
AddChunk(chunk); AddChunk(chunk);
} }

View File

@ -531,7 +531,7 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id,
// DEFAULT_MMAP_VRCOL_BLOCK_SIZE); // DEFAULT_MMAP_VRCOL_BLOCK_SIZE);
auto var_column = auto var_column =
std::make_shared<ChunkedVariableColumn<std::string>>( std::make_shared<ChunkedVariableColumn<std::string>>(
chunks); field_meta, chunks);
// var_column->Seal(std::move(indices)); // var_column->Seal(std::move(indices));
column = std::move(var_column); column = std::move(var_column);
break; break;
@ -539,21 +539,22 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id,
case milvus::DataType::JSON: { case milvus::DataType::JSON: {
auto var_column = auto var_column =
std::make_shared<ChunkedVariableColumn<milvus::Json>>( std::make_shared<ChunkedVariableColumn<milvus::Json>>(
chunks); field_meta, chunks);
// var_column->Seal(std::move(indices)); // var_column->Seal(std::move(indices));
column = std::move(var_column); column = std::move(var_column);
break; break;
} }
case milvus::DataType::ARRAY: { case milvus::DataType::ARRAY: {
auto arr_column = std::make_shared<ChunkedArrayColumn>(chunks); auto arr_column =
std::make_shared<ChunkedArrayColumn>(field_meta, chunks);
// arr_column->Seal(std::move(indices), // arr_column->Seal(std::move(indices),
// std::move(element_indices)); // std::move(element_indices));
column = std::move(arr_column); column = std::move(arr_column);
break; break;
} }
case milvus::DataType::VECTOR_SPARSE_FLOAT: { case milvus::DataType::VECTOR_SPARSE_FLOAT: {
auto sparse_column = auto sparse_column = std::make_shared<ChunkedSparseFloatColumn>(
std::make_shared<ChunkedSparseFloatColumn>(chunks); field_meta, chunks);
// sparse_column->Seal(std::move(indices)); // sparse_column->Seal(std::move(indices));
column = std::move(sparse_column); column = std::move(sparse_column);
break; break;
@ -564,7 +565,7 @@ ChunkedSegmentSealedImpl::MapFieldData(const FieldId field_id,
} }
} }
} else { } else {
column = std::make_shared<ChunkedColumn>(chunks); column = std::make_shared<ChunkedColumn>(field_meta, chunks);
} }
// column->SetValidData(std::move(valid_data)); // column->SetValidData(std::move(valid_data));

View File

@ -106,7 +106,7 @@ ChunkCache::Read(const std::string& filepath,
data_type); data_type);
} else { } else {
std::vector<std::shared_ptr<Chunk>> chunks{chunk}; std::vector<std::shared_ptr<Chunk>> chunks{chunk};
column = std::make_shared<ChunkedColumn>(chunks); column = std::make_shared<ChunkedColumn>(field_meta, chunks);
} }
if (mmap_enabled && mmap_rss_not_need) { if (mmap_enabled && mmap_rss_not_need) {
auto ok = madvise(reinterpret_cast<void*>( auto ok = madvise(reinterpret_cast<void*>(