|
@@ -6,7 +6,8 @@ import (
|
|
|
|
|
|
// Operator error.
|
|
|
var (
|
|
|
- ErrInvalidOperator = errors.New("invalid operator")
|
|
|
+ ErrInvalidOperator = errors.New("invalid operator")
|
|
|
+ ErrInvalidOperatorForType = errors.New("invalid operator for type")
|
|
|
)
|
|
|
|
|
|
var (
|
|
@@ -36,93 +37,73 @@ var (
|
|
|
"not like": "NOT LIKE",
|
|
|
}
|
|
|
|
|
|
- arrayOperators = []string{"IN", "NOT IN"}
|
|
|
- boolOperators = []string{"==", "!="}
|
|
|
- numberOperators = []string{"==", "!=", ">", ">=", "<", "<="}
|
|
|
- stringOperators = []string{"==", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE"}
|
|
|
+ arrayOperators = map[string]bool{"IN": true, "NOT IN": true}
|
|
|
+ boolOperators = map[string]bool{"==": true, "!=": true}
|
|
|
+ numberOperators = map[string]bool{"==": true, "!=": true, ">": true, ">=": true, "<": true, "<=": true}
|
|
|
+ stringOperators = map[string]bool{"==": true, "!=": true, ">": true, ">=": true, "<": true, "<=": true, "LIKE": true, "NOT LIKE": true}
|
|
|
)
|
|
|
|
|
|
// 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
|
|
|
+ _, err := ParseArrayOperator(op)
|
|
|
+ return err == nil
|
|
|
}
|
|
|
|
|
|
// 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
|
|
|
+ _, err := ParseBoolOperator(op)
|
|
|
+ return err == nil
|
|
|
}
|
|
|
|
|
|
// 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
|
|
|
+ _, err := ParseNumberOperator(op)
|
|
|
+ return err == nil
|
|
|
}
|
|
|
|
|
|
// 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
|
|
|
+ _, err := ParseStringOperator(op)
|
|
|
+ return err == nil
|
|
|
}
|
|
|
|
|
|
// ParseArrayOperator returns the valid AQL operator for an array operator.
|
|
|
// It returns an error if the operator cannot be mapped to AQL or does not support arrays.
|
|
|
func ParseArrayOperator(op string) (string, error) {
|
|
|
- if !IsArrayOperator(op) {
|
|
|
- return "", ErrInvalidOperator
|
|
|
+ op, err := ParseOperator(op)
|
|
|
+ if err != nil {
|
|
|
+ return op, err
|
|
|
+ }
|
|
|
+ if !arrayOperators[op] {
|
|
|
+ return op, ErrInvalidOperatorForType
|
|
|
}
|
|
|
- return ParseOperator(op)
|
|
|
+ return op, nil
|
|
|
}
|
|
|
|
|
|
// ParseBoolOperator returns the valid AQL operator for a Boolean operator.
|
|
|
// It returns an error if the operator cannot be mapped to AQL or does not support Booleans.
|
|
|
func ParseBoolOperator(op string) (string, error) {
|
|
|
- if !IsBoolOperator(op) {
|
|
|
- return "", ErrInvalidOperator
|
|
|
+ op, err := ParseOperator(op)
|
|
|
+ if err != nil {
|
|
|
+ return op, err
|
|
|
+ }
|
|
|
+ if !boolOperators[op] {
|
|
|
+ return op, ErrInvalidOperatorForType
|
|
|
}
|
|
|
- return ParseOperator(op)
|
|
|
+ return op, nil
|
|
|
}
|
|
|
|
|
|
// ParseNumberOperator returns the valid AQL operator for a numeric operator.
|
|
|
// It returns an error if the operator cannot be mapped to AQL or does not support numbers.
|
|
|
func ParseNumberOperator(op string) (string, error) {
|
|
|
- if !IsNumberOperator(op) {
|
|
|
- return "", ErrInvalidOperator
|
|
|
+ op, err := ParseOperator(op)
|
|
|
+ if err != nil {
|
|
|
+ return op, err
|
|
|
+ }
|
|
|
+ if !numberOperators[op] {
|
|
|
+ return op, ErrInvalidOperatorForType
|
|
|
}
|
|
|
- return ParseOperator(op)
|
|
|
+ return op, nil
|
|
|
}
|
|
|
|
|
|
// ParseOperator returns the valid AQL operator for an arbitrary operator string.
|
|
@@ -139,8 +120,12 @@ func ParseOperator(op string) (string, error) {
|
|
|
// ParseStringOperator returns the valid AQL operator for a string operator.
|
|
|
// It returns an error if the operator cannot be mapped to AQL or does not support strings.
|
|
|
func ParseStringOperator(op string) (string, error) {
|
|
|
- if !IsStringOperator(op) {
|
|
|
- return "", ErrInvalidOperator
|
|
|
+ op, err := ParseOperator(op)
|
|
|
+ if err != nil {
|
|
|
+ return op, err
|
|
|
+ }
|
|
|
+ if !stringOperators[op] {
|
|
|
+ return op, ErrInvalidOperatorForType
|
|
|
}
|
|
|
- return ParseOperator(op)
|
|
|
+ return op, nil
|
|
|
}
|