github.com/altipla-consulting/ravendb-go-client@v0.1.3/range_builder.go (about) 1 package ravendb 2 3 // RangeBuilder helps build a string query for range requests 4 type RangeBuilder struct { 5 path string 6 7 lessBound interface{} 8 greaterBound interface{} 9 lessInclusive bool 10 greaterInclusive bool 11 12 lessSet bool 13 greaterSet bool 14 15 err error 16 } 17 18 func NewRangeBuilder(path string) *RangeBuilder { 19 return &RangeBuilder{ 20 path: path, 21 } 22 } 23 24 func (b *RangeBuilder) createClone() *RangeBuilder { 25 builder := *b 26 return &builder 27 } 28 29 func (b *RangeBuilder) IsLessThan(value interface{}) *RangeBuilder { 30 if b.err != nil { 31 return b 32 } 33 if b.lessSet { 34 b.err = newIllegalStateError("Less bound was already set") 35 return b 36 } 37 38 clone := b.createClone() 39 clone.lessBound = value 40 clone.lessInclusive = false 41 clone.lessSet = true 42 return clone 43 } 44 45 func (b *RangeBuilder) IsLessThanOrEqualTo(value interface{}) *RangeBuilder { 46 if b.err != nil { 47 return b 48 } 49 if b.lessSet { 50 b.err = newIllegalStateError("Less bound was already set") 51 return b 52 } 53 54 clone := b.createClone() 55 clone.lessBound = value 56 clone.lessInclusive = true 57 clone.lessSet = true 58 return clone 59 } 60 61 func (b *RangeBuilder) IsGreaterThan(value interface{}) *RangeBuilder { 62 if b.err != nil { 63 return b 64 } 65 if b.greaterSet { 66 b.err = newIllegalStateError("Greater bound was already set") 67 return b 68 } 69 70 clone := b.createClone() 71 clone.greaterBound = value 72 clone.greaterInclusive = false 73 clone.greaterSet = true 74 return clone 75 } 76 77 func (b *RangeBuilder) IsGreaterThanOrEqualTo(value interface{}) *RangeBuilder { 78 if b.err != nil { 79 return b 80 } 81 if b.greaterSet { 82 b.err = newIllegalStateError("Greater bound was already set") 83 return b 84 } 85 86 clone := b.createClone() 87 clone.greaterBound = value 88 clone.greaterInclusive = true 89 clone.greaterSet = true 90 return clone 91 } 92 93 func (b *RangeBuilder) GetStringRepresentation(addQueryParameter func(interface{}) string) (string, error) { 94 var less string 95 var greater string 96 97 if b.err != nil { 98 return "", b.err 99 } 100 101 if !b.lessSet && !b.greaterSet { 102 return "", newIllegalStateError("Bounds were not set") 103 } 104 105 if b.lessSet { 106 lessParamName := addQueryParameter(b.lessBound) 107 tmp := " < " 108 if b.lessInclusive { 109 tmp = " <= " 110 } 111 less = b.path + tmp + "$" + lessParamName 112 } 113 114 if b.greaterSet { 115 tmp := " > " 116 if b.greaterInclusive { 117 tmp = " >= " 118 } 119 greaterParamName := addQueryParameter(b.greaterBound) 120 greater = b.path + tmp + "$" + greaterParamName 121 } 122 123 if less != "" && greater != "" { 124 return greater + " and " + less, nil 125 } 126 127 if less != "" { 128 return less, nil 129 } 130 return greater, nil 131 } 132 133 func (b *RangeBuilder) Err() error { 134 return b.err 135 }