Files
milvus/pkg
marcelo-cjlandGitHub 52f10023a3 fix: change queryPreExecute merge logic from row-based to column-based (#47122)
issue: #46953 
- GenNullableFieldData only supported scalar types, causing error when
partial upsert after adding nullable vector fields

issue: #47160  
- pickFieldData used row index directly to access Contents array without
converting to data index, causing index out of range panic

relate: #45993


Row-based processing had two problems:
- Nullable vector handling was tightly coupled with other field types,
requiring complex special-case logic
- Update path was inefficient for nullable vectors: data had to be read
first then updated in-place. For example, changing a valid vector to
null requires shifting subsequent data since null values are not stored,
which is very inefficient.

Column-based processing solves both:
- Each field type is processed independently, nullable vector logic is
cleanly separated from other types
- Nullable vectors are appended directly without read-then-update,
avoiding expensive data shifting operations - Iterate over fields
instead of rows when merging upsert and existing data

key changes:
- Remove nullable vector special handling: nullableVectorMergeContext,
buildNullableVectorIdxMap, rebuildNullableVectorFieldData, etc.
- Use generic column utilities: AppendFieldDataByColumn,
UpdateFieldDataByColumn
- Add vector type support to GenNullableFieldData
- Add unit test for nullable vector upsert scenarios

---------

Signed-off-by: marcelo-cjl <marcelo.chen@zilliz.com>
2026-02-10 18:10:41 +08:00
..