| 143 | } |
| 144 | |
| 145 | std::unique_ptr<ExpressionEvaluator> ExpressionMapper::getFunctionEvaluator( |
| 146 | std::shared_ptr<Expression> expression) { |
| 147 | evaluator_vector_t childrenEvaluators; |
| 148 | if (expression->getNumChildren() == 2 && |
| 149 | expression->getChild(1)->expressionType == ExpressionType::LAMBDA) { |
| 150 | childrenEvaluators.push_back(getEvaluator(expression->getChild(0))); |
| 151 | auto result = |
| 152 | std::make_unique<ListLambdaEvaluator>(expression, std::move(childrenEvaluators)); |
| 153 | auto recursiveExprMapper = ExpressionMapper(schema, result.get()); |
| 154 | auto& lambdaExpr = expression->getChild(1)->constCast<LambdaExpression>(); |
| 155 | result->setLambdaRootEvaluator( |
| 156 | recursiveExprMapper.getEvaluator(lambdaExpr.getFunctionExpr())); |
| 157 | return result; |
| 158 | } |
| 159 | childrenEvaluators = getEvaluators(expression->getChildren()); |
| 160 | return std::make_unique<FunctionExpressionEvaluator>(std::move(expression), |
| 161 | std::move(childrenEvaluators)); |
| 162 | } |
| 163 | |
| 164 | std::unique_ptr<ExpressionEvaluator> ExpressionMapper::getNodeEvaluator( |
| 165 | std::shared_ptr<Expression> expression) { |
nothing calls this directly
no test coverage detected