diff --git a/weed/mq/schema/schema.go b/weed/mq/schema/schema.go new file mode 100644 index 000000000..5cb7a8df1 --- /dev/null +++ b/weed/mq/schema/schema.go @@ -0,0 +1,32 @@ +package schema + +import ( + "fmt" + "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" +) + +type Schema struct { + RecordType *schema_pb.RecordType + indexedFields []*schema_pb.Field +} + +func NewSchema(recordType *schema_pb.RecordType) (*Schema, error) { + var indexedFields []*schema_pb.Field + var largestIndex int32 + for _, field := range recordType.Fields { + if field.Index > largestIndex { + largestIndex = field.Index + } + if field.Index < 0 { + return nil, fmt.Errorf("field %s index %d is negative", field.Name, field.Index) + } + } + indexedFields = make([]*schema_pb.Field, largestIndex+1) + for _, field := range recordType.Fields { + indexedFields[field.Index] = field + } + return &Schema{ + RecordType: recordType, + indexedFields: indexedFields, + }, nil +}