feat: parser returns parse errors when applicable
Signed-off-by: Calum Murray <cmurray@redhat.com>
This commit is contained in:
parent
d814553c4e
commit
9a191207f0
|
|
@ -6,6 +6,7 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
|
|
@ -175,9 +176,13 @@ func (v *expressionVisitor) VisitLikeExpression(ctx *gen.LikeExpressionContext)
|
|||
if patternContext.DQUOTED_STRING_LITERAL() != nil {
|
||||
// Parse double quoted string
|
||||
pattern = dQuotedStringToString(patternContext.DQUOTED_STRING_LITERAL().GetText())
|
||||
} else {
|
||||
} else if patternContext.SQUOTED_STRING_LITERAL() != nil {
|
||||
// Parse single quoted string
|
||||
pattern = sQuotedStringToString(patternContext.SQUOTED_STRING_LITERAL().GetText())
|
||||
} else {
|
||||
// not a string, return an error
|
||||
v.parsingErrors = append(v.parsingErrors, fmt.Errorf("failed to parse LIKE expression: the pattern was not a string literal"))
|
||||
return noopExpression{}
|
||||
}
|
||||
|
||||
likeExpression, err := expression.NewLikeExpression(v.Visit(ctx.Expression()).(cesql.Expression), pattern)
|
||||
|
|
|
|||
|
|
@ -6,13 +6,12 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
|
||||
"github.com/cloudevents/sdk-go/sql/v2"
|
||||
v2 "github.com/cloudevents/sdk-go/sql/v2"
|
||||
sqlerrors "github.com/cloudevents/sdk-go/sql/v2/errors"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/gen"
|
||||
)
|
||||
|
||||
|
|
@ -39,10 +38,10 @@ func (p *Parser) Parse(input string) (v2.Expression, error) {
|
|||
result := antlrParser.Cesql().Accept(&visitor)
|
||||
|
||||
if result == nil {
|
||||
return nil, mergeErrs(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
return nil, sqlerrors.NewParseError(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
}
|
||||
|
||||
return result.(v2.Expression), mergeErrs(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
return result.(v2.Expression), sqlerrors.NewParseError(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
}
|
||||
|
||||
type errorListener struct {
|
||||
|
|
@ -54,19 +53,6 @@ func (d *errorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol
|
|||
d.errs = append(d.errs, fmt.Errorf("syntax error: %v", e.GetMessage()))
|
||||
}
|
||||
|
||||
func mergeErrs(errs []error) error {
|
||||
if len(errs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var errStrings []string
|
||||
for _, err := range errs {
|
||||
errStrings = append(errStrings, err.Error())
|
||||
}
|
||||
|
||||
return errors.New(strings.Join(errStrings, ","))
|
||||
}
|
||||
|
||||
var defaultParser = Parser{}
|
||||
|
||||
func Parse(input string) (v2.Expression, error) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue