コード例 #1
0
 public function providerParseExpressionWithVariables()
 {
     $variables = array(1 => 'test', 2 => 'test2', 3 => 5, 4 => 10);
     $field = new FieldExpression('field');
     $variable = new ScalarExpression('test');
     $variable2 = new ScalarExpression('test2');
     $maxFieldFunction = new FunctionExpression(FunctionExpression::FUNCTION_MAX);
     $maxFieldFunction->addArgument($variable2);
     $minFieldFunction = new FunctionExpression(FunctionExpression::FUNCTION_MIN, 'mf');
     $minFieldFunction->addArgument($field);
     $minFieldFunction->addArgument($variable);
     $minFieldFunction2 = new FunctionExpression(FunctionExpression::FUNCTION_MIN, 'mf');
     $minFieldFunction2->addArgument($field);
     $minFieldFunction2->addArgument($variable);
     $minFieldFunction2->addArgument($maxFieldFunction);
     $simpleMathematic = new MathematicalExpression();
     $simpleMathematic->addExpression(new ScalarExpression(5));
     $simpleMathematic->addExpression(new ScalarExpression(10), '+');
     $mediumMathematic = new MathematicalExpression();
     $mediumMathematic->addExpression(new ScalarExpression(5));
     $mediumMathematic->addExpression($simpleMathematic, '/');
     $minFunction = new FunctionExpression(FunctionExpression::FUNCTION_MIN);
     $minFunction->addArgument(new ScalarExpression(5));
     $maxFunction = new FunctionExpression(FunctionExpression::FUNCTION_MAX);
     $maxFunction->addArgument($simpleMathematic);
     $functionMathematic = new MathematicalExpression();
     $functionMathematic->addExpression($minFunction);
     $functionMathematic->addExpression($maxFunction);
     return array(array(new ScalarExpression('This is a test sentence'), '"This is a %1% sentence"', $variables), array(new ScalarExpression('test'), '%1%', $variables), array($maxFieldFunction, 'MAX(%2%)', $variables), array($minFieldFunction, 'MIN({field}, %1%) AS mf', $variables), array($minFieldFunction2, 'MIN({field}, %1%, MAX(%2%)) AS mf', $variables), array($simpleMathematic, '%3% + %4%', $variables), array($mediumMathematic, '%3% / (%3% + %4%)', $variables), array($functionMathematic, 'MIN(%3%) + MAX(%3% + %4%)', $variables));
 }
コード例 #2
0
 /**
  * Parses the provided function call into a database function expression
  * @param string $function String of the function expression
  * @return boolean|zibo\library\database\manipulation\expression\FunctionExpression false if the
  *         provided function expression could not be parsed, the function expression object otherwise.
  */
 private function parseFunction($function)
 {
     if (!preg_match(self::REGEX_FUNCTION, $function, $matches)) {
         return false;
     }
     $name = trim($matches[1]);
     if (!$name) {
         return false;
     }
     $arguments = $matches[3];
     $alias = null;
     if (isset($matches[6])) {
         $alias = $matches[6];
     }
     $function = new FunctionExpression($name, $alias);
     if (strpos($arguments, 'DISTINCT ') === 0) {
         $function->setDistinct(true);
         $arguments = substr($arguments, 9);
     }
     $argumentTokens = $this->fieldTokenizer->tokenize($arguments);
     foreach ($argumentTokens as $argument) {
         $argument = $this->parseExpression($argument);
         $function->addArgument($argument);
     }
     return $function;
 }
コード例 #3
0
 /**
  * Create the SQL of a function expression
  * @param zibo\library\database\manipulation\expression\FunctionExpression $function
  * @return string SQL of the function expression
  */
 protected function parseFunctionExpression(FunctionExpression $function)
 {
     $sql = $function->getName() . '(';
     if ($function->isDistinct()) {
         $sql .= 'DISTINCT ';
     }
     $arguments = $function->getArguments();
     if ($arguments) {
         $argumentSql = '';
         foreach ($arguments as $expression) {
             $argumentSql .= ($argumentSql ? ', ' : '') . $this->parseExpression($expression);
         }
         $sql .= $argumentSql;
     }
     return $sql . ')';
 }
コード例 #4
0
 /**
  * Processes the relations and the localization of the arguments used in a function expression
  * @param zibo\library\database\manipulation\expression\FunctionExpression $expression Function expression to process
  * @param boolean $inCondition Flag to see whether this expression is used in a condition or else where
  * @return zibo\library\database\manipulation\expression\FunctionExpression Processed function expression
  */
 private function processFunctionExpression(FunctionExpression $expression, $inCondition)
 {
     $function = new FunctionExpression($expression->getName(), $expression->getAlias());
     $function->setDistinct($expression->isDistinct());
     $arguments = $expression->getArguments();
     foreach ($arguments as $argument) {
         $argument = $this->processExpression($argument, $inCondition);
         $function->addArgument($argument);
     }
     return $function;
 }