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.

73 lines
2.7 KiB

10 months ago
  1. package schema
  2. import (
  3. "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
  4. )
  5. var (
  6. TypeBoolean = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BOOLEAN}}
  7. TypeInteger = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_INTEGER}}
  8. TypeLong = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_LONG}}
  9. TypeFloat = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_FLOAT}}
  10. TypeDouble = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_DOUBLE}}
  11. TypeBytes = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BYTES}}
  12. TypeString = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_STRING}}
  13. )
  14. type RecordTypeBuilder struct {
  15. recordType *schema_pb.RecordType
  16. }
  17. func NewRecordTypeBuilder() *RecordTypeBuilder {
  18. return &RecordTypeBuilder{recordType: &schema_pb.RecordType{}}
  19. }
  20. func (rtb *RecordTypeBuilder) Build() *schema_pb.RecordType {
  21. return rtb.recordType
  22. }
  23. func (rtb *RecordTypeBuilder) addField(name string, scalarType *schema_pb.Type) *RecordTypeBuilder {
  24. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  25. Name: name,
  26. Type: scalarType,
  27. })
  28. return rtb
  29. }
  30. func (rtb *RecordTypeBuilder) AddBoolField(name string) *RecordTypeBuilder {
  31. return rtb.addField(name, TypeBoolean)
  32. }
  33. func (rtb *RecordTypeBuilder) AddIntegerField(name string) *RecordTypeBuilder {
  34. return rtb.addField(name, TypeInteger)
  35. }
  36. func (rtb *RecordTypeBuilder) AddLongField(name string) *RecordTypeBuilder {
  37. return rtb.addField(name, TypeLong)
  38. }
  39. func (rtb *RecordTypeBuilder) AddFloatField(name string) *RecordTypeBuilder {
  40. return rtb.addField(name, TypeFloat)
  41. }
  42. func (rtb *RecordTypeBuilder) AddDoubleField(name string) *RecordTypeBuilder {
  43. return rtb.addField(name, TypeDouble)
  44. }
  45. func (rtb *RecordTypeBuilder) AddBytesField(name string) *RecordTypeBuilder {
  46. return rtb.addField(name, TypeBytes)
  47. }
  48. func (rtb *RecordTypeBuilder) AddStringField(name string) *RecordTypeBuilder {
  49. return rtb.addField(name, TypeString)
  50. }
  51. func (rtb *RecordTypeBuilder) AddRecordField(name string, recordTypeBuilder *RecordTypeBuilder) *RecordTypeBuilder {
  52. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  53. Name: name,
  54. Type: &schema_pb.Type{Kind: &schema_pb.Type_RecordType{RecordType: recordTypeBuilder.recordType}},
  55. })
  56. return rtb
  57. }
  58. func (rtb *RecordTypeBuilder) AddListField(name string, elementType *schema_pb.Type) *RecordTypeBuilder {
  59. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  60. Name: name,
  61. Type: &schema_pb.Type{Kind: &schema_pb.Type_ListType{ListType: &schema_pb.ListType{ElementType: elementType}}},
  62. })
  63. return rtb
  64. }