Split compose applier

v2
Nikita Tokarchuk 6 years ago
parent bf089314f0
commit c9f3a59969
  1. 46
      mongox/query/compose.go

@ -14,7 +14,9 @@ func Compose(filters ...interface{}) *Query {
ok := false
ok = ok || applyBson(q, f)
ok = ok || applyLimits(q, f)
ok = ok || applyLimit(q, f)
ok = ok || applySort(q, f)
ok = ok || applySkip(q, f)
if !ok {
panic(errors.InternalErrorf("unknown filter %v", f))
@ -27,29 +29,43 @@ func Compose(filters ...interface{}) *Query {
// applyBson is a fallback for a custom bson.M
func applyBson(q *Query, f interface{}) bool {
switch f := f.(type) {
case bson.M:
if f, ok := f.(bson.M); ok {
q.And(f)
default:
return false
return true
}
return true
return false
}
// applyLimits extends query with contol functions
func applyLimits(q *Query, f interface{}) bool {
// applyLimits extends query with a limiter
func applyLimit(q *Query, f interface{}) bool {
switch f := f.(type) {
case Limiter:
if f, ok := f.(Limiter); ok {
q.limiter = f
case Sorter:
q.sorter = f
case Skipper:
q.skipper = f
default:
return true
}
return false
}
// applySort extends query with a sort rule
func applySort(q *Query, f interface{}) bool {
if f, ok := f.(Sorter); ok {
q.sorter = f
return true
}
return false
}
// applySkip extends query with a skip number
func applySkip(q *Query, f interface{}) bool {
if f, ok := f.(Skipper); ok {
q.skipper = f
return true
}
return false
}

Loading…
Cancel
Save