• 表达式语法(Expression Syntax)

    表达式语法(Expression Syntax)

    在 TiDB 中,以下规则是表达式的语法,你可以在 parser/parser.y 中找到定义。TiDB 的语法解析是基于 yacc 的。

    1. Expression:
    2. singleAtIdentifier assignmentEq Expression
    3. | Expression logOr Expression
    4. | Expression "XOR" Expression
    5. | Expression logAnd Expression
    6. | "NOT" Expression
    7. | Factor IsOrNotOp trueKwd
    8. | Factor IsOrNotOp falseKwd
    9. | Factor IsOrNotOp "UNKNOWN"
    10. | Factor
    11. Factor:
    12. Factor IsOrNotOp "NULL"
    13. | Factor CompareOp PredicateExpr
    14. | Factor CompareOp singleAtIdentifier assignmentEq PredicateExpr
    15. | Factor CompareOp AnyOrAll SubSelect
    16. | PredicateExpr
    17. PredicateExpr:
    18. PrimaryFactor InOrNotOp '(' ExpressionList ')'
    19. | PrimaryFactor InOrNotOp SubSelect
    20. | PrimaryFactor BetweenOrNotOp PrimaryFactor "AND" PredicateExpr
    21. | PrimaryFactor LikeOrNotOp PrimaryExpression LikeEscapeOpt
    22. | PrimaryFactor RegexpOrNotOp PrimaryExpression
    23. | PrimaryFactor
    24. PrimaryFactor:
    25. PrimaryFactor '|' PrimaryFactor
    26. | PrimaryFactor '&' PrimaryFactor
    27. | PrimaryFactor "<<" PrimaryFactor
    28. | PrimaryFactor ">>" PrimaryFactor
    29. | PrimaryFactor '+' PrimaryFactor
    30. | PrimaryFactor '-' PrimaryFactor
    31. | PrimaryFactor '*' PrimaryFactor
    32. | PrimaryFactor '/' PrimaryFactor
    33. | PrimaryFactor '%' PrimaryFactor
    34. | PrimaryFactor "DIV" PrimaryFactor
    35. | PrimaryFactor "MOD" PrimaryFactor
    36. | PrimaryFactor '^' PrimaryFactor
    37. | PrimaryExpression
    38. PrimaryExpression:
    39. Operand
    40. | FunctionCallKeyword
    41. | FunctionCallNonKeyword
    42. | FunctionCallAgg
    43. | FunctionCallGeneric
    44. | Identifier jss stringLit
    45. | Identifier juss stringLit
    46. | SubSelect
    47. | '!' PrimaryExpression
    48. | '~' PrimaryExpression
    49. | '-' PrimaryExpression
    50. | '+' PrimaryExpression
    51. | "BINARY" PrimaryExpression
    52. | PrimaryExpression "COLLATE" StringName