예제 #1
0
 /**
  * {@inheritDoc}
  */
 public function visitOperator(AST\Operator $element, &$handle = null, $eldnah = null)
 {
     $xcallable = $this->getOperator($element->getName());
     $arguments = array_map(function ($argument) use(&$handle, $eldnah) {
         return $argument->accept($this, $handle, $eldnah);
     }, $element->getArguments());
     return $xcallable->distributeArguments($arguments);
 }
예제 #2
0
 /**
  * {@inheritDoc}
  */
 public function visitOperator(AST\Operator $element, &$handle = null, $eldnah = null)
 {
     $parameters = [];
     $operator = $element->getName();
     $sql = parent::visitOperator($element, $parameters, $eldnah);
     if (in_array($operator, ['and', 'or', 'not'])) {
         return $sql;
     }
     if ($this->hasOperator($operator)) {
         return sprintf('(new \\PommProject\\Foundation\\Where(%s, [%s]))', $sql, implode(', ', $parameters));
     }
     return sprintf('(new \\PommProject\\Foundation\\Where("%s", [%s]))', $sql, implode(', ', $parameters));
 }
예제 #3
0
 /**
  * {@inheritDoc}
  */
 public function visitOperator(AST\Operator $element, &$handle = null, $eldnah = null)
 {
     try {
         $xcallable = $this->getOperator($element->getName());
     } catch (OperatorNotFoundException $e) {
         if (!$this->allowStarOperator) {
             throw $e;
         }
         $xcallable = $this->getStarOperator($element);
     }
     $parameters = [];
     $arguments = array_map(function ($argument) use(&$parameters) {
         return $argument->accept($this, $parameters);
     }, $element->getArguments());
     $sql = $xcallable->distributeArguments($arguments);
     if ($sql instanceof Where) {
         return $sql;
     }
     return new Where($sql, $parameters);
 }
예제 #4
0
 /**
  * {@inheritDoc}
  */
 public function visitOperator(AST\Operator $element, &$handle = null, $eldnah = null)
 {
     $operatorName = $element->getName();
     // the operator does not exist at all, throw an error before doing anything else.
     if (!$this->hasInlineOperator($operatorName) && !$this->hasOperator($operatorName)) {
         throw new OperatorNotFoundException($operatorName, sprintf('Operator "%s" does not exist.', $operatorName));
     }
     // expand the arguments
     $arguments = array_map(function ($argument) use(&$handle, $eldnah) {
         return $argument->accept($this, $handle, $eldnah);
     }, $element->getArguments());
     // and either inline the operator call
     if ($this->hasInlineOperator($operatorName)) {
         $callable = $this->getInlineOperator($operatorName);
         return call_user_func_array($callable, $arguments);
     }
     $inlinedArguments = empty($arguments) ? '' : ', ' . implode(', ', $arguments);
     // or defer it.
     return sprintf('call_user_func($operators["%s"]%s)', $operatorName, $inlinedArguments);
 }
예제 #5
0
파일: Asserter.php 프로젝트: K-Phoen/Ruler
 /**
  * Visit an operator
  *
  * @param   \Hoa\Visitor\Element  $element    Element to visit.
  * @param   mixed                 &$handle    Handle (reference).
  * @param   mixed                 $eldnah     Handle (not reference).
  * @return  mixed
  */
 protected function visitOperator(Ruler\Model\Operator $element, &$handle = null, $eldnah = null)
 {
     $name = $element->getName();
     $arguments = [];
     foreach ($element->getArguments() as $argument) {
         $value = $argument->accept($this, $handle, $eldnah);
         $arguments[] = $value;
         if ($element::LAZY_BREAK === $element->shouldBreakLazyEvaluation($value)) {
             break;
         }
     }
     if (false === $this->operatorExists($name)) {
         throw new Ruler\Exception\Asserter('Operator %s does not exist.', 0, $name);
     }
     return $this->getOperator($name)->distributeArguments($arguments);
 }
예제 #6
0
 /**
  * Return a "*" or "catch all" operator.
  *
  * @param Visitor\Element $element The node representing the operator.
  *
  * @return \Hoa\Core\Consistency\Xcallable
  */
 protected function getStarOperator(AST\Operator $element)
 {
     return xcallable(function () use($element) {
         return sprintf('%s(%s)', $element->getName(), implode(', ', func_get_args()));
     });
 }