コード例 #1
0
 public function optimizeQuery(O\Expression $queryExpression)
 {
     //Converts all values requests (->asArray(), ->asIterator(), ->asCollection(), ->asTraversable())
     //to ->asTrueIterator() such that the true underlying values are retrieved
     //and hence can be cached as a Traversable instance such that any queries
     //on scoped values can be evaluated in memory using the traversable implementation.
     if ($queryExpression instanceof O\MethodCallExpression) {
         $nameExpression = $queryExpression->getName();
         if ($nameExpression instanceof O\ValueExpression) {
             switch (strtolower($nameExpression->getValue())) {
                 case 'asarray':
                 case 'asiterator':
                 case 'ascollection':
                 case 'astraversable':
                     return $queryExpression->update($queryExpression->getValue(), O\Expression::value('getTrueIterator'), $queryExpression->getArguments());
             }
         }
     }
     return $queryExpression;
 }
コード例 #2
0
 /**
  * Updates the matched expression with it's resolved value from
  * the supplied registry.
  *
  * @param IFunction $function
  * @param O\Expression $expression
  * @param Parameters\ResolvedParameterRegistry $parameters
  *
  * @return O\Expression
  */
 public function inline(IFunction $function, O\Expression $expression, Parameters\ResolvedParameterRegistry $parameters)
 {
     /** @var O\InvocationExpression $expression */
     return O\Expression::functionCall(O\Expression::value($this->getResolvedValue($parameters, $expression->getValue())), $expression->getArguments());
 }