Pinq\Queries\Builders\SourceInterpreter::interpretSource PHP Method

interpretSource() public method

public interpretSource ( Expression $expression )
$expression Pinq\Expressions\Expression
    public function interpretSource(O\Expression $expression)
    {
        $isQueryScope = false;
        $queryableQueryResolver = new O\DynamicExpressionWalker([O\TraversalExpression::getType() => function (O\TraversalExpression $expression, O\ExpressionWalker $self) use(&$isQueryScope) {
            $expression = $expression->updateValue($self->walk($expression->getValue()));
            if ($isQueryScope) {
                return $expression;
            } else {
                return $self->walk(O\Expression::value($expression->evaluate($this->evaluationContext)));
            }
        }, O\ValueExpression::getType() => function (O\ValueExpression $expression) use(&$isQueryScope) {
            if ($expression->getValue() instanceof IQueryable) {
                $isQueryScope = true;
            }
            return $expression;
        }]);
        $expression = $queryableQueryResolver->walk($expression);
        if ($isQueryScope) {
            $this->scopeInterpreter->interpretScope($expression);
            $this->interpretation->interpretQueryScope($this->getId('source-scope'), $this->scopeInterpreter->getInterpretation());
        } else {
            $this->interpretation->interpretArrayOrIterator($this->getId('source-iterator'), $expression->evaluate($this->evaluationContext));
        }
    }