Parse primary expression: (expr) | function_call | property_access | value | case_expr
(tokens: &[Token])
| 2066 | |
| 2067 | /// Parse primary expression: (expr) | function_call | property_access | value | case_expr |
| 2068 | fn primary_expression(tokens: &[Token]) -> IResult<&[Token], Expression> { |
| 2069 | alt(( |
| 2070 | // NOT EXISTS subquery must be checked before EXISTS to avoid conflicts |
| 2071 | map(not_exists_subquery, Expression::NotExistsSubquery), |
| 2072 | // EXISTS subquery must be checked before general parenthesized expressions |
| 2073 | map(exists_subquery, Expression::ExistsSubquery), |
| 2074 | // Try pattern expression first (for WHERE clause patterns) |
| 2075 | map(pattern_expression, Expression::Pattern), |
| 2076 | // Try subquery first, then fall back to parenthesized expression |
| 2077 | map( |
| 2078 | alt(( |
| 2079 | map(subquery_expression, Expression::Subquery), |
| 2080 | map( |
| 2081 | tuple(( |
| 2082 | expect_token(Token::LeftParen), |
| 2083 | expression, |
| 2084 | expect_token(Token::RightParen), |
| 2085 | )), |
| 2086 | |(_, expr, _)| expr, |
| 2087 | ), |
| 2088 | )), |
| 2089 | |expr| expr, |
| 2090 | ), |
| 2091 | map(case_expression, Expression::Case), |
| 2092 | map(cast_expression, Expression::Cast), |
| 2093 | map(path_constructor, Expression::PathConstructor), |
| 2094 | map(array_expression, Expression::Literal), |
| 2095 | map(trim_function_call, Expression::FunctionCall), // Special TRIM FROM syntax |
| 2096 | map(function_call, Expression::FunctionCall), |
| 2097 | map(property_access, Expression::PropertyAccess), |
| 2098 | map(property_access_continued, Expression::PropertyAccess), |
| 2099 | map(property_access_token, Expression::PropertyAccess), |
| 2100 | map(parameter, Expression::Parameter), |
| 2101 | map(variable, Expression::Variable), |
| 2102 | map(literal, Expression::Literal), |
| 2103 | ))(tokens) |
| 2104 | } |
| 2105 | |
| 2106 | /// Parse expression list: expr1, expr2, expr3, ... |
| 2107 | fn expression_list(tokens: &[Token]) -> IResult<&[Token], Vec<Expression>> { |
no test coverage detected