diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2021-12-10 10:33:21 +0000 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2021-12-10 10:33:21 +0000 |
| commit | 3bd45f7db96730e086ee63604856f015374b94d3 (patch) | |
| tree | 75cb00b440d89b2e67deb63a2512ecaf9435f4ae /internal | |
| parent | dd5aa7c52870f4d22d9347a1d87ccaf244df16e5 (diff) | |
Refactor
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/mapr/setcondition.go | 53 |
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 +} |
