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)); } }
public function interpretOperation($segmentId, $operationType, ISourceInterpretation $sourceInterpretation) { /* @var $sourceInterpretation ISourceParser */ $this->segments[] = new Segments\Operation($operationType, $sourceInterpretation->getSource()); }
public function interpretRemoveRange($operationId, ISourceInterpretation $sourceInterpretation) { /** @var $sourceInterpretation ISourceParser */ $this->operation = new Operations\RemoveValues($sourceInterpretation->getSource()); }
public function interpretJoinOptions($isGroupJoin, ISourceInterpretation $sourceInterpretation, $defaultKeyId, $defaultValueId, array $defaultValueKeyPair = null) { /* @var $sourceInterpretation ISourceParser */ $hasDefault = $defaultValueKeyPair !== null; $this->joinOptions = new Join\Options($sourceInterpretation->getSource(), $isGroupJoin, $this->joinFilter, $hasDefault, $hasDefault ? $defaultValueId : null, $hasDefault ? $defaultKeyId : null); }