123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package arango
- import (
- "errors"
- )
- // Operator error.
- var (
- ErrInvalidOperator = errors.New("invalid operator")
- )
- var (
- operators = map[string]string{
- // Idempotent
- "==": "==",
- "!=": "!=",
- ">": ">",
- ">=": ">=",
- "<": "<",
- "<=": "<=",
- "IN": "IN",
- "NOT IN": "NOT IN",
- "LIKE": "LIKE",
- "NOT LIKE": "NOT LIKE",
- // Compatible with Filter.Operator in github.com/recipeer/go/qs
- "eq": "==",
- "neq": "!=",
- "gt": ">",
- "gte": ">=",
- "lt": "<",
- "lte": "<=",
- "in": "IN",
- "not in": "NOT IN",
- "like": "LIKE",
- "not like": "NOT LIKE",
- }
- arrayOperators = []string{"IN", "NOT IN"}
- boolOperators = []string{"==", "!="}
- numberOperators = []string{"==", "!=", ">", ">=", "<", "<="}
- stringOperators = []string{"==", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE"}
- )
- // IsArrayOperator returns true if the given operator can be used with an array value.
- func IsArrayOperator(op string) bool {
- op, _ = ParseOperator(op)
- if op == "" {
- return false
- }
- for _, arrOp := range arrayOperators {
- if arrOp == op {
- return true
- }
- }
- return false
- }
- // IsBoolOperator returns true if the given operator can be used with a Boolean value.
- func IsBoolOperator(op string) bool {
- op, _ = ParseOperator(op)
- if op == "" {
- return false
- }
- for _, boolOp := range boolOperators {
- if boolOp == op {
- return true
- }
- }
- return false
- }
- // IsNumberOperator returns true if the given operator can be used with a numeric value.
- func IsNumberOperator(op string) bool {
- op, _ = ParseOperator(op)
- if op == "" {
- return false
- }
- for _, numOp := range numberOperators {
- if numOp == op {
- return true
- }
- }
- return false
- }
- // IsStringOperator returns true if the given operator can be used with a string value.
- func IsStringOperator(op string) bool {
- op, _ = ParseOperator(op)
- if op == "" {
- return false
- }
- for _, strOp := range stringOperators {
- if strOp == op {
- return true
- }
- }
- return false
- }
- // ParseOperator returns the valid AQL operator for an arbitrary operator string.
- // This supports different inputs, such as Filter.Operator in github.com/recipeer/go/qs
- //
- // If the input operator cannot be mapped to AQL, this function returns ErrInvalidOperator.
- func ParseOperator(op string) (string, error) {
- if operators[op] == "" {
- return "", ErrInvalidOperator
- }
- return operators[op], nil
- }
|