| 577 | } |
| 578 | |
| 579 | std::unique_ptr<ParsedExpression> Transformer::transformOcQuantifier( |
| 580 | CypherParser::OC_QuantifierContext& ctx) { |
| 581 | auto variable = transformVariable(*ctx.oC_FilterExpression()->oC_IdInColl()->oC_Variable()); |
| 582 | auto whereExpr = transformWhere(*ctx.oC_FilterExpression()->oC_Where()); |
| 583 | auto lambdaRaw = variable + "->" + whereExpr->toString(); |
| 584 | auto lambdaExpr = std::make_unique<ParsedLambdaExpression>(std::vector<std::string>{variable}, |
| 585 | std::move(whereExpr), lambdaRaw); |
| 586 | std::string quantifierName; |
| 587 | if (ctx.ALL()) { |
| 588 | quantifierName = "ALL"; |
| 589 | } else if (ctx.ANY()) { |
| 590 | quantifierName = "ANY"; |
| 591 | } else if (ctx.NONE()) { |
| 592 | quantifierName = "NONE"; |
| 593 | } else if (ctx.SINGLE()) { |
| 594 | quantifierName = "SINGLE"; |
| 595 | } |
| 596 | auto listExpr = transformExpression(*ctx.oC_FilterExpression()->oC_IdInColl()->oC_Expression()); |
| 597 | return std::make_unique<ParsedFunctionExpression>(quantifierName, std::move(listExpr), |
| 598 | std::move(lambdaExpr), ctx.getText()); |
| 599 | } |
| 600 | |
| 601 | std::unique_ptr<ParsedExpression> Transformer::createPropertyExpression( |
| 602 | CypherParser::OC_PropertyKeyNameContext& ctx, std::unique_ptr<ParsedExpression> child) { |