github.com/altipla-consulting/ravendb-go-client@v0.1.3/facet_builder.go (about) 1 package ravendb 2 3 import "strings" 4 5 func isRqlKeyword(s string) bool { 6 s = strings.ToLower(s) 7 switch s { 8 case "as", "select", "where", "load", "group", "order", "include", "update": 9 return true 10 } 11 return false 12 } 13 14 type FacetBuilder struct { 15 _range *GenericRangeFacet 16 _default *Facet 17 } 18 19 func NewFacetBuilder() *FacetBuilder { 20 return &FacetBuilder{} 21 } 22 23 func (b *FacetBuilder) ByRanges(rng *RangeBuilder, ranges ...*RangeBuilder) *FacetBuilder { 24 if rng == nil { 25 //throw new IllegalArgumentError("Range cannot be null") 26 panic("Range cannot be null") 27 } 28 29 if b._range == nil { 30 b._range = NewGenericRangeFacet(nil) 31 } 32 33 b._range.addRange(rng) 34 35 for _, rng := range ranges { 36 b._range.addRange(rng) 37 } 38 39 return b 40 } 41 42 func (b *FacetBuilder) ByField(fieldName string) *FacetBuilder { 43 if b._default == nil { 44 b._default = NewFacet() 45 } 46 47 if isRqlKeyword(fieldName) { 48 fieldName = "'" + fieldName + "'" 49 } 50 51 b._default.FieldName = fieldName 52 53 return b 54 } 55 56 func (b *FacetBuilder) AllResults() *FacetBuilder { 57 if b._default == nil { 58 b._default = NewFacet() 59 } 60 61 b._default.FieldName = "" 62 return b 63 } 64 65 func (b *FacetBuilder) WithOptions(options *FacetOptions) *FacetBuilder { 66 b.GetFacet().SetOptions(options) 67 return b 68 } 69 70 func (b *FacetBuilder) WithDisplayName(displayName string) *FacetBuilder { 71 b.GetFacet().SetDisplayFieldName(displayName) 72 return b 73 } 74 75 func (b *FacetBuilder) SumOn(path string) *FacetBuilder { 76 b.GetFacet().GetAggregations()[FacetAggregationSum] = path 77 return b 78 } 79 80 func (b *FacetBuilder) MinOn(path string) *FacetBuilder { 81 b.GetFacet().GetAggregations()[FacetAggregationMin] = path 82 return b 83 } 84 85 func (b *FacetBuilder) MaxOn(path string) *FacetBuilder { 86 b.GetFacet().GetAggregations()[FacetAggregationMax] = path 87 return b 88 } 89 90 func (b *FacetBuilder) AverageOn(path string) *FacetBuilder { 91 b.GetFacet().GetAggregations()[FacetAggregationAverage] = path 92 return b 93 } 94 95 func (b *FacetBuilder) GetFacet() FacetBase { 96 if b._default != nil { 97 return b._default 98 } 99 100 return b._range 101 }