summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2021-12-10 10:33:21 +0000
committerPaul Buetow <pbuetow@mimecast.com>2021-12-10 10:33:21 +0000
commit3bd45f7db96730e086ee63604856f015374b94d3 (patch)
tree75cb00b440d89b2e67deb63a2512ecaf9435f4ae /internal
parentdd5aa7c52870f4d22d9347a1d87ccaf244df16e5 (diff)
Refactor
Diffstat (limited to 'internal')
-rw-r--r--internal/mapr/setcondition.go53
1 files changed, 30 insertions, 23 deletions
diff --git a/internal/mapr/setcondition.go b/internal/mapr/setcondition.go
index 92b21f4..208b079 100644
--- a/internal/mapr/setcondition.go
+++ b/internal/mapr/setcondition.go
@@ -6,6 +6,7 @@ import (
"strconv"
"strings"
+ "github.com/mimecast/dtail/internal/io/dlog"
"github.com/mimecast/dtail/internal/mapr/funcs"
)
@@ -28,35 +29,18 @@ func (sc *setCondition) String() string {
sc.lString, sc.rString, sc.rType.String(), sc.functionStack)
}
+// TODO: Add integration tests for the set conditions.
func makeSetConditions(tokens []token) (set []setCondition, err error) {
+
parse := func(tokens []token) (setCondition, []token, error) {
var sc setCondition
- if len(tokens) < 3 {
- return sc, nil, errors.New(invalidQuery + "Not enough arguments in 'set' clause")
- }
-
- setOp := strings.ToLower(tokens[1].str)
- switch setOp {
- case "=":
- default:
- return sc, nil, errors.New(invalidQuery + "Unknown operation in 'set' " +
- "clause: " + setOp)
- }
- if !tokens[0].isBareword {
- return sc, nil, errors.New(invalidQuery + "Expected bareword at 'set' " +
- "clause's lValue: " + tokens[0].str)
- }
- sc.lString = tokens[0].str
- if !strings.HasPrefix(sc.lString, "$") {
- return sc, nil, errors.New(invalidQuery + "Expected field variable name " +
- "(starting with $) at 'set' clause's lValue: " + tokens[0].str)
+ if err := initSetConditions(&sc, tokens); err != nil {
+ return sc, nil, err
}
- sc.rType = Field
- rString := tokens[2].str
// Seems like a function call?
- if strings.HasSuffix(rString, ")") {
+ if strings.HasSuffix(sc.rString, ")") {
functionStack, functionArg, err := funcs.NewFunctionStack(tokens[2].str)
if err != nil {
return sc, nil, err
@@ -67,7 +51,6 @@ func makeSetConditions(tokens []token) (set []setCondition, err error) {
return sc, tokens[3:], nil
}
- sc.rString = rString
if f, err := strconv.ParseFloat(sc.rString, 64); err == nil {
sc.rFloat = f
sc.rType = Float
@@ -85,8 +68,32 @@ func makeSetConditions(tokens []token) (set []setCondition, err error) {
if err != nil {
return nil, err
}
+ dlog.Client.Trace(sc)
set = append(set, sc)
tokens = tokensConsumeOptional(tokens, ",")
}
return
}
+
+func initSetConditions(sc *setCondition, tokens []token) error {
+ if len(tokens) < 3 {
+ return errors.New(invalidQuery + "Not enough arguments in 'set' clause")
+ }
+
+ sc.lString = tokens[0].str
+ sc.rType = Field
+ sc.rString = tokens[2].str
+
+ switch {
+ case tokens[1].str != "=":
+ return errors.New(invalidQuery + "Unknown operation in 'set' clause: " + tokens[1].str)
+ case !tokens[0].isBareword:
+ return errors.New(invalidQuery + "Expected bareword at 'set' clause's lValue: " +
+ tokens[0].str)
+ case !strings.HasPrefix(sc.lString, "$"):
+ return errors.New(invalidQuery + "Expected field variable name (starting with $) " +
+ "at 'set' clause's lValue: " + tokens[0].str)
+ }
+
+ return nil
+}