Пример #1
0
 /**
  * Добавляет простое выражение в текущую группу выражений
  * @param string $leftCond
  * @param string $operator
  * @param string $rightCond
  * @throws RuntimeException если не удалось добавить выражение
  * @return $this
  */
 public function expr($leftCond, $operator, $rightCond)
 {
     if (!$this->currentExpressionGroup) {
         throw new RuntimeException($this->translate('Cannot add expression. Expression group is not started.'));
     }
     $this->currentExpressionGroup->addExpression($leftCond, $operator, $rightCond);
     return $this;
 }
Пример #2
0
 /**
  * Строит запрос для группы выражений
  * @param IExpressionGroup $exprGroup
  * @return string
  */
 private function buildExpressionGroup(IExpressionGroup $exprGroup)
 {
     $result = [];
     foreach ($exprGroup->getExpressions() as $expression) {
         list($leftCond, $operator, $rightCond) = $expression;
         $leftCond = $this->protectExpressionValue($leftCond);
         $rightCond = $this->protectExpressionValue($rightCond);
         $result[] = $leftCond . ' ' . $operator . ' ' . $rightCond;
     }
     foreach ($exprGroup->getGroups() as $subGroup) {
         $result[] = '(' . $this->buildExpressionGroup($subGroup) . ')';
     }
     if (!count($result)) {
         return '1';
         // WHERE 1, if no expressions
     }
     return implode(' ' . $exprGroup->getMode() . ' ', $result);
 }