Skip to content

Commit ddbf5f9

Browse files
authored
fix: fix return empty array with STRUCT field [2.6] (#3074)
issue: milvus-io/milvus#42148 pr: #3073 Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
1 parent 0a6c993 commit ddbf5f9

File tree

1 file changed

+36
-24
lines changed

1 file changed

+36
-24
lines changed

pymilvus/client/entity_helper.py

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,57 +1017,69 @@ def check_append(field_data: Any, row_data: Dict):
10171017

10181018
def get_array_length(array_item: Any) -> int:
10191019
"""Get the length of an array field from its data."""
1020-
if hasattr(array_item, "string_data") and array_item.string_data:
1021-
return len(array_item.string_data.data)
1022-
if hasattr(array_item, "int_data") and array_item.int_data:
1023-
return len(array_item.int_data.data)
1024-
if hasattr(array_item, "long_data") and array_item.long_data:
1025-
return len(array_item.long_data.data)
1026-
if hasattr(array_item, "float_data") and array_item.float_data:
1027-
return len(array_item.float_data.data)
1028-
if hasattr(array_item, "double_data") and array_item.double_data:
1029-
return len(array_item.double_data.data)
1030-
if hasattr(array_item, "bool_data") and array_item.bool_data:
1031-
return len(array_item.bool_data.data)
1020+
if hasattr(array_item, "string_data") and hasattr(array_item.string_data, "data"):
1021+
length = len(array_item.string_data.data)
1022+
if length > 0:
1023+
return length
1024+
if hasattr(array_item, "int_data") and hasattr(array_item.int_data, "data"):
1025+
length = len(array_item.int_data.data)
1026+
if length > 0:
1027+
return length
1028+
if hasattr(array_item, "long_data") and hasattr(array_item.long_data, "data"):
1029+
length = len(array_item.long_data.data)
1030+
if length > 0:
1031+
return length
1032+
if hasattr(array_item, "float_data") and hasattr(array_item.float_data, "data"):
1033+
length = len(array_item.float_data.data)
1034+
if length > 0:
1035+
return length
1036+
if hasattr(array_item, "double_data") and hasattr(array_item.double_data, "data"):
1037+
length = len(array_item.double_data.data)
1038+
if length > 0:
1039+
return length
1040+
if hasattr(array_item, "bool_data") and hasattr(array_item.bool_data, "data"):
1041+
length = len(array_item.bool_data.data)
1042+
if length > 0:
1043+
return length
10321044
return 0
10331045

10341046

10351047
def get_array_value_at_index(array_item: Any, idx: int) -> Any:
10361048
"""Get the value at a specific index from an array field."""
10371049
if (
10381050
hasattr(array_item, "string_data")
1039-
and array_item.string_data
1040-
and idx < len(array_item.string_data.data)
1051+
and hasattr(array_item.string_data, "data")
1052+
and len(array_item.string_data.data) > idx
10411053
):
10421054
return array_item.string_data.data[idx]
10431055
if (
10441056
hasattr(array_item, "int_data")
1045-
and array_item.int_data
1046-
and idx < len(array_item.int_data.data)
1057+
and hasattr(array_item.int_data, "data")
1058+
and len(array_item.int_data.data) > idx
10471059
):
10481060
return array_item.int_data.data[idx]
10491061
if (
10501062
hasattr(array_item, "long_data")
1051-
and array_item.long_data
1052-
and idx < len(array_item.long_data.data)
1063+
and hasattr(array_item.long_data, "data")
1064+
and len(array_item.long_data.data) > idx
10531065
):
10541066
return array_item.long_data.data[idx]
10551067
if (
10561068
hasattr(array_item, "float_data")
1057-
and array_item.float_data
1058-
and idx < len(array_item.float_data.data)
1069+
and hasattr(array_item.float_data, "data")
1070+
and len(array_item.float_data.data) > idx
10591071
):
10601072
return array_item.float_data.data[idx]
10611073
if (
10621074
hasattr(array_item, "double_data")
1063-
and array_item.double_data
1064-
and idx < len(array_item.double_data.data)
1075+
and hasattr(array_item.double_data, "data")
1076+
and len(array_item.double_data.data) > idx
10651077
):
10661078
return array_item.double_data.data[idx]
10671079
if (
10681080
hasattr(array_item, "bool_data")
1069-
and array_item.bool_data
1070-
and idx < len(array_item.bool_data.data)
1081+
and hasattr(array_item.bool_data, "data")
1082+
and len(array_item.bool_data.data) > idx
10711083
):
10721084
return array_item.bool_data.data[idx]
10731085
return None

0 commit comments

Comments
 (0)