This repository has been archived on 2026-10-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
aql/operator.go
T

111 lines
2.4 KiB
Go
Raw Normal View History

2023-10-12 23:50:45 +01:00
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
}