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  }