129: Index multivalued attributes. #128
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
@ -349,9 +350,24 @@ func (k Keeper) ProcessAttributes(ctx sdk.Context, record types.RecordType) erro
|
||||
{
|
||||
// #nosec G705
|
||||
for key := range record.Attributes {
|
||||
indexKey := GetAttributesIndexKey(key, record.Attributes[key])
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
attr := record.Attributes[key]
|
||||
rt := reflect.TypeOf(attr)
|
||||
switch rt.Kind() {
|
||||
case reflect.Slice:
|
||||
av := attr.([]interface{})
|
||||
for i := range av {
|
||||
indexKey := GetAttributesIndexKey(key, av[i])
|
||||
k.Logger(ctx).Error(fmt.Sprintf("attr indexKey: %s", indexKey))
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
default:
|
||||
indexKey := GetAttributesIndexKey(key, attr)
|
||||
k.Logger(ctx).Error(fmt.Sprintf("attr indexKey: %s", indexKey))
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user