Skip to content

Commit

Permalink
feat: use bson.D as base query
Browse files Browse the repository at this point in the history
  • Loading branch information
aaydin-tr committed Jan 16, 2024
1 parent 880dd76 commit 26dcb96
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ type operation struct {

type filter struct {
kyte Kyte
query bson.M
query bson.D
operations []operation
}

Expand Down Expand Up @@ -70,7 +70,7 @@ func Filter(opts ...FilterOption) *filter {

return &filter{
kyte: *kyte,
query: bson.M{},
query: bson.D{},
}
}

Expand Down Expand Up @@ -187,18 +187,19 @@ func (f *filter) And(filter *filter) *filter {
filter.kyte.checkField = f.kyte.checkField
filter.kyte.setSourceAndPrepareFields(f.kyte.source)
}

query, err := filter.Build()
if err != nil {
f.kyte.setError(err)
return f
}

if f.query[and] == nil {
f.query[and] = bson.A{query}
} else {
f.query[and] = append(f.query[and].(bson.A), query)
andQuery := bson.A{}
for _, q := range query {
andQuery = append(andQuery, bson.M{q.Key: q.Value})
}

f.query = append(f.query, bson.E{Key: and, Value: andQuery})
return f
}

Expand Down Expand Up @@ -227,11 +228,12 @@ func (f *filter) Or(filter *filter) *filter {
return f
}

if f.query[or] == nil {
f.query[or] = bson.A{query}
} else {
f.query[or] = append(f.query[or].(bson.A), query)
orQuery := bson.A{}
for _, q := range query {
orQuery = append(orQuery, bson.M{q.Key: q.Value})
}

f.query = append(f.query, bson.E{Key: or, Value: orQuery})
return f
}

Expand All @@ -246,7 +248,7 @@ func (f *filter) set(operator string, field any, value any) *filter {
/*
Build returns the query as bson.M. If there is an error, it will return nil and the first error.
*/
func (f *filter) Build() (bson.M, error) {
func (f *filter) Build() (bson.D, error) {
for _, opt := range f.operations {
fieldName, err := f.kyte.validateQueryFieldAndValue(opt.field, opt.value)
if err != nil {
Expand All @@ -264,10 +266,8 @@ func (f *filter) Build() (bson.M, error) {
opt.value = bson.A{opt.value}
}

f.query[fieldName] = bson.M{opt.operator: opt.value}
} else {
f.query[fieldName] = bson.M{opt.operator: opt.value}
}
f.query = append(f.query, bson.E{Key: fieldName, Value: bson.M{opt.operator: opt.value}})
}

if f.kyte.hasErrors() {
Expand Down

0 comments on commit 26dcb96

Please sign in to comment.