feat: parser returns parse errors when applicable

Signed-off-by: Calum Murray <cmurray@redhat.com>
This commit is contained in:
Calum Murray 2024-06-13 15:37:59 -04:00
parent d814553c4e
commit 9a191207f0
No known key found for this signature in database
GPG Key ID: D9837BD1D90C1512
2 changed files with 10 additions and 19 deletions

View File

@ -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)

View File

@ -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) {