()
| 33 | } |
| 34 | |
| 35 | func (p *Parser) getNextPrecedence() int { |
| 36 | switch { |
| 37 | case p.matchKeyword(KeywordOr): |
| 38 | return PrecedenceOr |
| 39 | case p.matchKeyword(KeywordAnd): |
| 40 | return PrecedenceAnd |
| 41 | case p.matchKeyword(KeywordIs): |
| 42 | return PrecedenceIs |
| 43 | case p.matchKeyword(KeywordNot): |
| 44 | return PrecedenceNot |
| 45 | case p.matchTokenKind(TokenKindDot): |
| 46 | return PrecedenceDot |
| 47 | case p.matchTokenKind(TokenKindDash): |
| 48 | return PrecedenceDoubleColon |
| 49 | case p.matchTokenKind(TokenKindSingleEQ), p.matchTokenKind(TokenKindLT), p.matchTokenKind(TokenKindLE), |
| 50 | p.matchTokenKind(TokenKindGE), p.matchTokenKind(TokenKindGT), p.matchTokenKind(TokenKindDoubleEQ), |
| 51 | p.matchTokenKind(TokenKindNE), p.matchTokenKind("<>"): |
| 52 | return PrecedenceCompare |
| 53 | case p.matchTokenKind(TokenKindConcat): |
| 54 | return PrecedenceConcat |
| 55 | case p.matchTokenKind(TokenKindPlus), p.matchTokenKind(TokenKindMinus): |
| 56 | return PrecedenceAddSub |
| 57 | case p.matchTokenKind(TokenKindMul), p.matchTokenKind(TokenKindDiv), p.matchTokenKind(TokenKindMod): |
| 58 | return PrecedenceMulDivMod |
| 59 | case p.matchTokenKind(TokenKindArrow): |
| 60 | return PrecedenceArrow |
| 61 | case p.matchTokenKind(TokenKindLParen), p.matchTokenKind(TokenKindLBracket): |
| 62 | return PrecedenceBracket |
| 63 | case p.matchTokenKind(TokenKindDash): |
| 64 | return PrecedenceDoubleColon |
| 65 | case p.matchTokenKind(TokenKindDot): |
| 66 | return PrecedenceDot |
| 67 | case p.matchKeyword(KeywordBetween), p.matchKeyword(KeywordLike), p.matchKeyword(KeywordIlike): |
| 68 | return PrecedenceBetweenLike |
| 69 | case p.matchKeyword(KeywordIn): |
| 70 | return precedenceIn |
| 71 | case p.matchKeyword(KeywordGlobal): |
| 72 | return PrecedenceGlobal |
| 73 | case p.matchTokenKind(TokenKindQuestionMark): |
| 74 | return PrecedenceQuery |
| 75 | default: |
| 76 | return PrecedenceUnknown |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | func (p *Parser) parseInfix(expr Expr, precedence int) (Expr, error) { |
| 81 | switch { |
no test coverage detected