github.com/go-generalize/volcago@v1.7.0/generator/testfiles/not_auto/query_chain_gen.go (about) 1 // Code generated by volcago. DO NOT EDIT. 2 // generated version: devel 3 package model 4 5 import ( 6 "time" 7 8 "cloud.google.com/go/firestore" 9 "github.com/go-utils/dedupe" 10 "golang.org/x/xerrors" 11 "google.golang.org/genproto/googleapis/type/latlng" 12 ) 13 14 // QueryChainer - query chainer 15 type QueryChainer struct { 16 QueryGroup []*Query 17 OrderByDirection firestore.Direction 18 Filter Filter 19 cursor Cursor 20 err error 21 } 22 23 // NewQueryChainer - constructor 24 func NewQueryChainer() *QueryChainer { 25 return new(QueryChainer) 26 } 27 28 // Equal - `==` 29 func (qc *QueryChainer) Equal(v interface{}) *QueryChainer { 30 q, err := newQuery(v, OpTypeEqual) 31 if err != nil { 32 qc.err = err 33 return qc 34 } 35 qc.QueryGroup = append(qc.QueryGroup, q) 36 return qc 37 } 38 39 // NotEqual - `!=` 40 func (qc *QueryChainer) NotEqual(v interface{}) *QueryChainer { 41 q, err := newQuery(v, OpTypeNotEqual) 42 if err != nil { 43 qc.err = err 44 return qc 45 } 46 qc.QueryGroup = append(qc.QueryGroup, q) 47 return qc 48 } 49 50 // LessThan - `<` 51 func (qc *QueryChainer) LessThan(v interface{}) *QueryChainer { 52 q, err := newQuery(v, OpTypeLessThan) 53 if err != nil { 54 qc.err = err 55 return qc 56 } 57 qc.QueryGroup = append(qc.QueryGroup, q) 58 return qc 59 } 60 61 // LessThanOrEqual - `<=` 62 func (qc *QueryChainer) LessThanOrEqual(v interface{}) *QueryChainer { 63 q, err := newQuery(v, OpTypeLessThanOrEqual) 64 if err != nil { 65 qc.err = err 66 return qc 67 } 68 qc.QueryGroup = append(qc.QueryGroup, q) 69 return qc 70 } 71 72 // GreaterThan - `>` 73 func (qc *QueryChainer) GreaterThan(v interface{}) *QueryChainer { 74 q, err := newQuery(v, OpTypeGreaterThan) 75 if err != nil { 76 qc.err = err 77 return qc 78 } 79 qc.QueryGroup = append(qc.QueryGroup, q) 80 return qc 81 } 82 83 // GreaterThanOrEqual - `>=` 84 func (qc *QueryChainer) GreaterThanOrEqual(v interface{}) *QueryChainer { 85 q, err := newQuery(v, OpTypeGreaterThanOrEqual) 86 if err != nil { 87 qc.err = err 88 return qc 89 } 90 qc.QueryGroup = append(qc.QueryGroup, q) 91 return qc 92 } 93 94 // In - `in` 95 func (qc *QueryChainer) In(v interface{}) *QueryChainer { 96 q, err := newQuery(v, OpTypeIn) 97 if err != nil { 98 qc.err = err 99 return qc 100 } 101 qc.QueryGroup = append(qc.QueryGroup, q) 102 return qc 103 } 104 105 // NotIn - `not-in` 106 func (qc *QueryChainer) NotIn(v interface{}) *QueryChainer { 107 q, err := newQuery(v, OpTypeNotIn) 108 if err != nil { 109 qc.err = err 110 return qc 111 } 112 qc.QueryGroup = append(qc.QueryGroup, q) 113 return qc 114 } 115 116 // ArrayContains - `array-contains` 117 func (qc *QueryChainer) ArrayContains(v interface{}) *QueryChainer { 118 q, err := newQuery(v, OpTypeArrayContains) 119 if err != nil { 120 qc.err = err 121 return qc 122 } 123 qc.QueryGroup = append(qc.QueryGroup, q) 124 return qc 125 } 126 127 // ArrayContainsAny - `array-contains-any` 128 func (qc *QueryChainer) ArrayContainsAny(v interface{}) *QueryChainer { 129 q, err := newQuery(v, OpTypeArrayContainsAny) 130 if err != nil { 131 qc.err = err 132 return qc 133 } 134 qc.QueryGroup = append(qc.QueryGroup, q) 135 return qc 136 } 137 138 // Asc - `Asc` 139 func (qc *QueryChainer) Asc() *QueryChainer { 140 qc.OrderByDirection = firestore.Asc 141 return qc 142 } 143 144 // Desc - `Desc` 145 func (qc *QueryChainer) Desc() *QueryChainer { 146 qc.OrderByDirection = firestore.Desc 147 return qc 148 } 149 150 // Error - error 151 func (qc *QueryChainer) Error() error { 152 return qc.err 153 } 154 155 // Cursor - query cursor 156 type Cursor struct { 157 isStartAt, isStartAfter bool 158 isEndAt, isEndBefore bool 159 values []interface{} 160 } 161 162 // StartAt - start at 163 func (qc *QueryChainer) StartAt(v ...interface{}) *QueryChainer { 164 qc.cursor.isStartAt = true 165 qc.cursor.values = v 166 return qc 167 } 168 169 // StartAt - start after 170 func (qc *QueryChainer) StartAfter(v ...interface{}) *QueryChainer { 171 qc.cursor.isStartAfter = true 172 qc.cursor.values = v 173 return qc 174 } 175 176 // EndAt - end at 177 func (qc *QueryChainer) EndAt(v ...interface{}) *QueryChainer { 178 qc.cursor.isEndAt = true 179 qc.cursor.values = v 180 return qc 181 } 182 183 // EndBefore - end before 184 func (qc *QueryChainer) EndBefore(v ...interface{}) *QueryChainer { 185 qc.cursor.isEndBefore = true 186 qc.cursor.values = v 187 return qc 188 } 189 190 // BuildCursor - build query for cursor 191 func (qc *QueryChainer) BuildCursorQuery(q firestore.Query) firestore.Query { 192 if qc.OrderByDirection == 0 || len(qc.cursor.values) == 0 { 193 return q 194 } 195 196 if qc.cursor.isStartAt { 197 return q.StartAt(qc.cursor.values...) 198 } 199 200 if qc.cursor.isStartAfter { 201 return q.StartAfter(qc.cursor.values...) 202 } 203 204 if qc.cursor.isEndAt { 205 return q.EndAt(qc.cursor.values...) 206 } 207 208 if qc.cursor.isEndBefore { 209 return q.EndBefore(qc.cursor.values...) 210 } 211 212 return q 213 } 214 215 // Filter - filters of extra indexer 216 type Filter struct { 217 FilterTypes []FilterType 218 Value interface{} 219 } 220 221 // Filters - using `xim` 222 func (qc *QueryChainer) Filters(v interface{}, filterTypes ...FilterType) *QueryChainer { 223 qc.Filter.Value = v 224 if len(filterTypes) == 0 { 225 qc.Filter.FilterTypes = append(qc.Filter.FilterTypes, FilterTypeAdd) 226 return qc 227 } 228 qc.Filter.FilterTypes = filterTypes 229 return qc 230 } 231 232 // Query - query 233 type Query struct { 234 Operator OpType 235 Value interface{} 236 } 237 238 func newQuery(v interface{}, opType OpType) (*Query, error) { 239 dupErr := func(err error) (*Query, error) { 240 return nil, xerrors.Errorf("failed to deduplication: %w", err) 241 } 242 switch x := v.(type) { 243 case []bool: 244 if err := dedupe.Do(&x); err != nil { 245 return dupErr(err) 246 } 247 v = x 248 case []string: 249 if err := dedupe.Do(&x); err != nil { 250 return dupErr(err) 251 } 252 v = x 253 case []int: 254 if err := dedupe.Do(&x); err != nil { 255 return dupErr(err) 256 } 257 v = x 258 case []int64: 259 if err := dedupe.Do(&x); err != nil { 260 return dupErr(err) 261 } 262 v = x 263 case []float64: 264 if err := dedupe.Do(&x); err != nil { 265 return dupErr(err) 266 } 267 v = x 268 case bool, 269 string, 270 int, 271 int64, 272 float64, 273 *latlng.LatLng, 274 []*latlng.LatLng, 275 *firestore.DocumentRef, 276 []*firestore.DocumentRef, 277 map[string]bool, 278 map[string]string, 279 map[string]int, 280 map[string]int64, 281 map[string]float64: 282 // ok 283 case time.Time: 284 v = SetLastThreeToZero(x) 285 case *time.Time: 286 t := SetLastThreeToZero(*x) 287 v = &t 288 case []time.Time: 289 after := make([]time.Time, len(x)) 290 for n, t := range x { 291 after[n] = SetLastThreeToZero(t) 292 } 293 v = after 294 default: 295 return nil, xerrors.Errorf("unsupported types: %#v", v) 296 } 297 298 q := &Query{ 299 Operator: opType, 300 Value: v, 301 } 302 return q, nil 303 } 304 305 // IsSlice - slice judgment 306 func IsSlice(v interface{}) bool { 307 switch v.(type) { 308 case []bool, []string, []int, []int64, []float64, 309 []*latlng.LatLng, []*firestore.DocumentRef: 310 return true 311 } 312 return false 313 } 314 315 // IsSlice - slice judgment 316 func (q *Query) IsSlice() bool { 317 return IsSlice(q.Value) 318 }