From e09493c3273e20257d52c843afe142da896a4300 Mon Sep 17 00:00:00 2001 From: Danis Kirasirov <dbgbbu@gmail.com> Date: Tue, 23 Jan 2024 14:48:34 +0300 Subject: [PATCH] add ExprMapper interface --- pkg/expr/expr.go | 9 +++++++++ pkg/expr/mongo.go | 2 +- pkg/references/reference.go | 9 ++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/expr/expr.go b/pkg/expr/expr.go index 4c53a8a5..6892206e 100644 --- a/pkg/expr/expr.go +++ b/pkg/expr/expr.go @@ -31,6 +31,11 @@ func Eval(ctx context.Context, input string, env map[string]interface{}) (interf } for k, v := range env { + if mapper, ok := v.(ExprMapper); ok { + e[k] = mapper.ToExprMap() + continue + } + e[k] = v } @@ -79,3 +84,7 @@ func IsExpression(input string) bool { return false } + +type ExprMapper interface { + ToExprMap() map[string]interface{} +} \ No newline at end of file diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go index 9a8a7cd2..397043c2 100644 --- a/pkg/expr/mongo.go +++ b/pkg/expr/mongo.go @@ -213,7 +213,7 @@ func (c *compiler) UnaryNode(node *ast.UnaryNode) interface{} { return bson.M{c.identifier(nodeIn.Left): bson.M{"$nin": c.eval(nodeIn.Right)}} } - return bson.M{"$not": c.compile(node.Node)} + return bson.M{"$not": c.compile(node.Node)} default: panic(fmt.Sprintf("unknown operator (%v)", node.Operator)) } diff --git a/pkg/references/reference.go b/pkg/references/reference.go index ca37deb1..45c80dfd 100644 --- a/pkg/references/reference.go +++ b/pkg/references/reference.go @@ -25,6 +25,13 @@ func (r *Reference) MarshalBSON() ([]byte, error) { return bson.Marshal(d) } +func (r *Reference) ToExprMap() map[string]interface{} { + return map[string]interface{}{ + "collection_id": r.CollectionID, + "id": r.ID, + } +} + func ReferenceFromPB(refPB *pb.Reference) *Reference { if refPB == nil { return nil @@ -107,4 +114,4 @@ func EqualArrays(sr1, sr2 []*Reference) bool { func (r *Reference) IsValid() bool { return r != nil && r.ID != "" && r.CollectionID != "" && !r.Disabled -} \ No newline at end of file +} -- GitLab