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.

70 lines
2.6 KiB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
9 months ago
  1. package schema
  2. import (
  3. "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
  4. "sort"
  5. )
  6. var (
  7. TypeBoolean = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BOOLEAN}}
  8. TypeInteger = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_INTEGER}}
  9. TypeLong = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_LONG}}
  10. TypeFloat = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_FLOAT}}
  11. TypeDouble = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_DOUBLE}}
  12. TypeBytes = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_BYTES}}
  13. TypeString = &schema_pb.Type{Kind: &schema_pb.Type_ScalarType{schema_pb.ScalarType_STRING}}
  14. )
  15. type RecordTypeBuilder struct {
  16. recordType *schema_pb.RecordType
  17. }
  18. func NewRecordTypeBuilder() *RecordTypeBuilder {
  19. return &RecordTypeBuilder{recordType: &schema_pb.RecordType{}}
  20. }
  21. func (rtb *RecordTypeBuilder) Build() *schema_pb.RecordType {
  22. // be consistent with parquet.node.go `func (g Group) Fields() []Field`
  23. sort.Slice(rtb.recordType.Fields, func(i, j int) bool {
  24. return rtb.recordType.Fields[i].Name < rtb.recordType.Fields[j].Name
  25. })
  26. return rtb.recordType
  27. }
  28. func (rtb *RecordTypeBuilder) SetField(name string, scalarType *schema_pb.Type) *RecordTypeBuilder {
  29. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  30. Name: name,
  31. Type: scalarType,
  32. })
  33. return rtb
  34. }
  35. func (rtb *RecordTypeBuilder) SetLongField(name string) *RecordTypeBuilder {
  36. return rtb.SetField(name, TypeLong)
  37. }
  38. func (rtb *RecordTypeBuilder) SetFloatField(name string) *RecordTypeBuilder {
  39. return rtb.SetField(name, TypeFloat)
  40. }
  41. func (rtb *RecordTypeBuilder) SetStringField(name string) *RecordTypeBuilder {
  42. return rtb.SetField(name, TypeString)
  43. }
  44. func (rtb *RecordTypeBuilder) SetRecordField(name string, recordTypeBuilder *RecordTypeBuilder) *RecordTypeBuilder {
  45. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  46. Name: name,
  47. Type: &schema_pb.Type{Kind: &schema_pb.Type_RecordType{RecordType: recordTypeBuilder.Build()}},
  48. })
  49. return rtb
  50. }
  51. func (rtb *RecordTypeBuilder) SetListField(name string, elementType *schema_pb.Type) *RecordTypeBuilder {
  52. rtb.recordType.Fields = append(rtb.recordType.Fields, &schema_pb.Field{
  53. Name: name,
  54. Type: &schema_pb.Type{Kind: &schema_pb.Type_ListType{ListType: &schema_pb.ListType{ElementType: elementType}}},
  55. })
  56. return rtb
  57. }
  58. func ListOf(elementType *schema_pb.Type) *schema_pb.Type {
  59. return &schema_pb.Type{Kind: &schema_pb.Type_ListType{ListType: &schema_pb.ListType{ElementType: elementType}}}
  60. }