You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
760 B
32 lines
760 B
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
|
|
}
|