This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch bug/empty-trace
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit 0bdac0f9c398df1b5050be50bc99bcf31d7216a2
Author: Gao Hongtao <[email protected]>
AuthorDate: Mon Nov 17 13:57:00 2025 +0000

    Enhance tag marshaling by skipping empty value arrays in marshalTagRow 
function to improve efficiency and prevent unnecessary processing.
---
 banyand/internal/sidx/tag.go |  3 +++
 banyand/trace/query.go       | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/banyand/internal/sidx/tag.go b/banyand/internal/sidx/tag.go
index b4c1d510..8de4f4d3 100644
--- a/banyand/internal/sidx/tag.go
+++ b/banyand/internal/sidx/tag.go
@@ -202,6 +202,9 @@ func marshalTagRow(dst []byte, tr *tagRow, valueType 
pbv1.ValueType) []byte {
                                dst = append(dst, tr.valueArr[i]...)
                                continue
                        }
+                       if len(tr.valueArr[i]) == 0 {
+                               continue
+                       }
                        dst = internalencoding.MarshalVarArray(dst, 
tr.valueArr[i])
                }
                return dst
diff --git a/banyand/trace/query.go b/banyand/trace/query.go
index 5528f8a2..5b60ed01 100644
--- a/banyand/trace/query.go
+++ b/banyand/trace/query.go
@@ -531,10 +531,19 @@ func mustDecodeTagValueAndArray(valueType pbv1.ValueType, 
value []byte, valueArr
        }
        switch valueType {
        case pbv1.ValueTypeInt64:
+               if value == nil {
+                       return pbv1.NullTagValue
+               }
                return int64TagValue(convert.BytesToInt64(value))
        case pbv1.ValueTypeStr:
+               if value == nil {
+                       return pbv1.NullTagValue
+               }
                return strTagValue(string(value))
        case pbv1.ValueTypeBinaryData:
+               if value == nil {
+                       return pbv1.NullTagValue
+               }
                return binaryDataTagValue(value)
        case pbv1.ValueTypeInt64Arr:
                var values []int64
@@ -568,6 +577,9 @@ func mustDecodeTagValueAndArray(valueType pbv1.ValueType, 
value []byte, valueArr
                }
                return strArrTagValue(values)
        case pbv1.ValueTypeTimestamp:
+               if value == nil {
+                       return pbv1.NullTagValue
+               }
                // Convert 64-bit nanoseconds since epoch back to protobuf 
timestamp
                epochNanos := convert.BytesToInt64(value)
                seconds := epochNanos / 1e9

Reply via email to