Author: Elliot Levin (elliotlevin@hotmail.com)
Ejemplo n.º 1
0
 /**
  * Evaluates the join segment values and filter upon the supplied traversable.
  *
  * @param ITraversable                       $traversable
  * @param Common\Join\Options                $join
  * @param Queries\IResolvedParameterRegistry $resolvedParameters
  *
  * @return \Pinq\Interfaces\IJoiningToTraversable
  */
 public static function evaluateJoinOptions(ITraversable $traversable, Common\Join\Options $join, Queries\IResolvedParameterRegistry $resolvedParameters)
 {
     $values = self::evaluateSource($join->getSource(), $resolvedParameters);
     $joiningTraversable = $join->isGroupJoin() ? $traversable->groupJoin($values) : $traversable->join($values);
     if ($join->hasFilter()) {
         $filter = $join->getFilter();
         if ($filter instanceof Common\Join\Filter\Custom) {
             $joiningTraversable = $joiningTraversable->on($resolvedParameters[$filter->getOnFunction()->getCallableId()]);
         } elseif ($filter instanceof Common\Join\Filter\Equality) {
             $joiningTraversable = $joiningTraversable->onEquality($resolvedParameters[$filter->getOuterKeyFunction()->getCallableId()], $resolvedParameters[$filter->getInnerKeyFunction()->getCallableId()]);
         }
     }
     if ($join->hasDefault()) {
         $joiningTraversable = $joiningTraversable->withDefault($resolvedParameters[$join->getDefaultValueId()], $resolvedParameters[$join->getDefaultKeyId()]);
     }
     return $joiningTraversable;
 }
Ejemplo n.º 2
0
 public function updateJoinOptions(Queries\Common\Join\Options $options)
 {
     $filter = $options->getFilter();
     if ($filter instanceof Queries\Common\Join\Filter\Custom) {
         $filter = $filter->update($this->expressionProcessor->processFunction($filter->getOnFunction()));
     } elseif ($filter instanceof Queries\Common\Join\Filter\Equality) {
         $filter = $filter->update($this->expressionProcessor->processFunction($filter->getOuterKeyFunction()), $this->expressionProcessor->processFunction($filter->getInnerKeyFunction()));
     }
     return $options->update($options->getSource(), $options->isGroupJoin(), $filter, $options->hasDefault());
 }
Ejemplo n.º 3
0
 public function appendJoinOptions(Queries\Common\Join\Options $joinOptions)
 {
     $this->appendSource($joinOptions->getSource());
     if ($joinOptions->isGroupJoin()) {
         $this->append(' into groups');
     }
     if ($joinOptions->hasFilter()) {
         $this->append(' filtered according to: ');
         $filter = $joinOptions->getFilter();
         if ($filter instanceof Queries\Common\Join\Filter\Custom) {
             $this->appendFunction($filter->getOnFunction());
         } elseif ($filter instanceof Queries\Common\Join\Filter\Equality) {
             $this->appendFunction($filter->getOuterKeyFunction());
             $this->append(' equaling ');
             $this->appendFunction($filter->getInnerKeyFunction());
         }
     }
     if ($joinOptions->hasDefault()) {
         $this->append(' with default values');
     }
 }
Ejemplo n.º 4
0
 public function getParameters()
 {
     return array_merge($this->options->getParameters(), $this->mutatorFunction->getParameterIds());
 }