chrislu
8 months ago
2 changed files with 99 additions and 0 deletions
@ -0,0 +1,73 @@ |
|||
package schema |
|||
|
|||
import ( |
|||
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" |
|||
) |
|||
|
|||
var ( |
|||
TypeBoolean = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BOOLEAN}} |
|||
TypeInteger = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_INTEGER}} |
|||
TypeLong = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_LONG}} |
|||
TypeFloat = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_FLOAT}} |
|||
TypeDouble = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_DOUBLE}} |
|||
TypeBytes = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BYTES}} |
|||
TypeString = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_STRING}} |
|||
) |
|||
|
|||
type RecordTypeBuilder struct { |
|||
recordType *schema_pb.RecordType |
|||
} |
|||
|
|||
func NewRecordTypeBuilder() *RecordTypeBuilder { |
|||
return &RecordTypeBuilder{recordType: &schema_pb.RecordType{}} |
|||
} |
|||
|
|||
func (rtb *RecordTypeBuilder) Build() *schema_pb.RecordType { |
|||
return rtb.recordType |
|||
} |
|||
|
|||
func (rtb *RecordTypeBuilder) addField(name string, scalarType *schema_pb.Type) *RecordTypeBuilder { |
|||
rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{ |
|||
Name: name, |
|||
Type: scalarType, |
|||
}) |
|||
return rtb |
|||
} |
|||
|
|||
func (rtb *RecordTypeBuilder) AddBoolField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeBoolean) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddIntegerField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeInteger) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddLongField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeLong) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddFloatField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeFloat) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddDoubleField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeDouble) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddBytesField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeBytes) |
|||
} |
|||
func (rtb *RecordTypeBuilder) AddStringField(name string) *RecordTypeBuilder { |
|||
return rtb.addField(name, TypeString) |
|||
} |
|||
|
|||
func (rtb *RecordTypeBuilder) AddRecordField(name string, recordTypeBuilder *RecordTypeBuilder) *RecordTypeBuilder { |
|||
rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{ |
|||
Name: name, |
|||
Type: &schema_pb.Type{Kind: &schema_pb.Type_RecordType{RecordType: recordTypeBuilder.recordType}}, |
|||
}) |
|||
return rtb |
|||
} |
|||
|
|||
func (rtb *RecordTypeBuilder) AddListField(name string, elementType *schema_pb.Type) *RecordTypeBuilder { |
|||
rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{ |
|||
Name: name, |
|||
Type: &schema_pb.Type{Kind: &schema_pb.Type_ListType{ListType: &schema_pb.ListType{ElementType: elementType}}}, |
|||
}) |
|||
return rtb |
|||
} |
@ -0,0 +1,26 @@ |
|||
package schema |
|||
|
|||
import ( |
|||
"fmt" |
|||
"testing" |
|||
) |
|||
|
|||
func TestSchemaBuilder(t *testing.T) { |
|||
rtb := NewRecordTypeBuilder() |
|||
rtb.AddStringField("ID"). |
|||
AddLongField("CreatedAt"). |
|||
AddLongField("ModifiedAt"). |
|||
AddStringField("User") |
|||
recordType := rtb.Build() |
|||
fmt.Printf("RecordType: %v\n", recordType) |
|||
|
|||
recordType2 := NewRecordTypeBuilder(). |
|||
AddLongField("ID"). |
|||
AddLongField("CreatedAt"). |
|||
AddRecordField("Person", NewRecordTypeBuilder(). |
|||
AddStringField("Name"). |
|||
AddListField("emails", TypeString)).Build() |
|||
|
|||
fmt.Printf("RecordType2: %v\n", recordType2) |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue