in banyand/measure/block.go [581:651]
func (bc *blockCursor) copyTo(r *model.MeasureResult, storedIndexValue map[common.SeriesID]map[string]*modelv1.TagValue,
tagProjection []model.TagProjection,
) {
r.SID = bc.bm.seriesID
r.Timestamps = append(r.Timestamps, bc.timestamps[bc.idx])
r.Versions = append(r.Versions, bc.versions[bc.idx])
var indexValue map[string]*modelv1.TagValue
if storedIndexValue != nil {
indexValue = storedIndexValue[r.SID]
}
if len(r.TagFamilies) == 0 {
for _, tp := range tagProjection {
tf := model.TagFamily{
Name: tp.Family,
}
for _, n := range tp.Names {
t := model.Tag{
Name: n,
}
tf.Tags = append(tf.Tags, t)
}
r.TagFamilies = append(r.TagFamilies, tf)
}
}
for i := range r.TagFamilies {
tfName := r.TagFamilies[i].Name
var cf *columnFamily
for j := range r.TagFamilies[i].Tags {
tagName := r.TagFamilies[i].Tags[j].Name
if indexValue != nil && indexValue[tagName] != nil {
r.TagFamilies[i].Tags[j].Values = append(r.TagFamilies[i].Tags[j].Values, indexValue[tagName])
continue
}
if cf == nil {
for i := range bc.tagFamilies {
if bc.tagFamilies[i].name == tfName {
cf = &bc.tagFamilies[i]
break
}
}
}
if cf == nil {
r.TagFamilies[i].Tags[j].Values = append(r.TagFamilies[i].Tags[j].Values, pbv1.NullTagValue)
continue
}
var foundTag bool
for _, c := range cf.columns {
if c.name == tagName {
r.TagFamilies[i].Tags[j].Values = append(r.TagFamilies[i].Tags[j].Values, mustDecodeTagValue(c.valueType, c.values[bc.idx]))
foundTag = true
break
}
}
if !foundTag {
r.TagFamilies[i].Tags[j].Values = append(r.TagFamilies[i].Tags[j].Values, pbv1.NullTagValue)
}
}
}
if len(r.Fields) == 0 {
for _, n := range bc.fieldProjection {
f := model.Field{
Name: n,
}
r.Fields = append(r.Fields, f)
}
}
for i, c := range bc.fields.columns {
r.Fields[i].Values = append(r.Fields[i].Values, mustDecodeFieldValue(c.valueType, c.values[bc.idx]))
}
}