mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-05-22 15:53:36 +00:00
Split compose applier
This commit is contained in:
+33
-17
@@ -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 false
|
||||
return true
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user