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  }