MCPcopy Create free account
hub / github.com/LissaGreense/GO4SQL / getExpression

Method getExpression

parser/parser.go:709–753  ·  view source on GitHub ↗

getExpression - Return proper structure of ast.Expression and validate the syntax Available expressions: - ast.OperationExpression - ast.BooleanExpression - ast.ConditionExpression - ast.ContainExpression

()

Source from the content-addressed store, hash-verified

707// - ast.ConditionExpression
708// - ast.ContainExpression
709func (parser *Parser) getExpression() (bool, ast.Expression, error) {
710
711 if parser.currentToken.Type == token.IDENT ||
712 parser.currentToken.Type == token.LITERAL ||
713 parser.currentToken.Type == token.NULL ||
714 parser.currentToken.Type == token.APOSTROPHE ||
715 parser.currentToken.Type == token.TRUE ||
716 parser.currentToken.Type == token.FALSE {
717
718 leftSide, isAnonymitifier, err := parser.getExpressionLeftSideValue()
719 if err != nil {
720 return false, nil, err
721 }
722
723 isValidExpression := false
724 var expression ast.Expression
725
726 if parser.currentToken.Type == token.EQUAL || parser.currentToken.Type == token.NOT {
727 isValidExpression, expression, err = parser.getConditionalExpression(leftSide, isAnonymitifier)
728 } else if parser.currentToken.Type == token.IN || parser.currentToken.Type == token.NOTIN {
729 isValidExpression, expression, err = parser.getContainExpression(leftSide, isAnonymitifier)
730 } else if leftSide.Type == token.TRUE || leftSide.Type == token.FALSE {
731 expression = &ast.BooleanExpression{Boolean: leftSide}
732 isValidExpression = true
733 err = nil
734 }
735
736 if err != nil {
737 return false, nil, err
738 }
739
740 if (parser.currentToken.Type == token.AND || parser.currentToken.Type == token.OR) && isValidExpression {
741 isValidExpression, expression, err = parser.getOperationExpression(expression)
742 }
743
744 if err != nil {
745 return false, nil, err
746 }
747
748 if isValidExpression {
749 return true, expression, nil
750 }
751 }
752 return false, nil, nil
753}
754
755func (parser *Parser) getExpressionLeftSideValue() (token.Token, bool, error) {
756 var leftSide token.Token

Callers 3

parseWhereCommandMethod · 0.95
parseJoinCommandMethod · 0.95

Calls 4

getContainExpressionMethod · 0.95

Tested by

no test coverage detected