/** * @param Expression $expression * @param mixed $element * @param Configuration $config * * @return mixed */ private function resolveExpression(Expression $expression, $element, Configuration $config) { if (!isset($this->resolvers[$expression->getExp()])) { throw new \InvalidArgumentException(sprintf('Unknown or unsupported expression type "%s"', get_class($expression))); } return call_user_func($this->resolvers[$expression->getExp()], $this, $expression, $element, $config); }
/** * @param Expression $expression * @param Configuration $configuration * * @return Clause */ private function transformExpression(Expression $expression, Configuration $configuration) { if (!isset($this->expressionTransformers[$expression->getExp()])) { throw new \InvalidArgumentException(sprintf('Unknown or unsupported expression type "%s"', $expression->getExp())); } return call_user_func($this->expressionTransformers[$expression->getExp()], $this, $expression, $configuration); }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { $name = $expression->getArg(0); if (!$name->isValue()) { throw new \InvalidArgumentException(sprintf('Field name should be a value')); } return new Clause($config->getNameResolver()->resolve($name->getValue())); }
/** * {@inheritdoc} */ public function __invoke(FilterTransformer $transformer, Expression $expression, $element, Configuration $config) { $name = $expression->getArg(0); if (!$name->isValue()) { throw new \InvalidArgumentException(sprintf('Field name should be a value, expression "%s" given', $name->getExp())); } $name = $config->getNameResolver()->resolve($name->getValue()); return $this->propertyAccessor->getValue($element, $name); }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { $left = $expression->getArg(0); $right = $expression->getArg(1); if (!$right->isValue()) { throw new \InvalidArgumentException('Only constant values allowed as right operands of contains expression'); } return Clause::join($transformer->transform($left, $config), ' LIKE ', $transformer->transform(Expression\Expr::value('%' . $right->getValue() . '%'), $config)); }
public function provideExpressionTestCases() { return ['value' => [Expression::value('foo'), function () { return Expression\Expr::value('foo'); }], 'values' => [Expression::exp('array', [Expression::value('foo'), Expression::value('bar'), Expression::value('baz')]), function () { return Expression\Expr::values(['foo', 'bar', 'baz']); }], 'field' => [Expression::exp('field', [Expression::value('foo')]), function () { return Expression\Expr::field('foo'); }], 'all' => [Expression::exp('all', [Expression::exp('foo'), Expression::exp('bar')]), function () { return Expression\Expr::all([Expression::exp('foo'), Expression::exp('bar')]); }], 'any' => [Expression::exp('any', [Expression::exp('foo'), Expression::exp('bar')]), function () { return Expression\Expr::any([Expression::exp('foo'), Expression::exp('bar')]); }], 'all with single expression' => [Expression::exp('foo'), function () { return Expression\Expr::all([Expression::exp('foo')]); }], 'any with single expression' => [Expression::exp('foo'), function () { return Expression\Expr::any([Expression::exp('foo')]); }], 'not' => [Expression::exp('not', [Expression::exp('foo')]), function () { return Expression\Expr::not(Expression::exp('foo')); }], 'eq' => [Expression::exp('eq', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::eq(Expression::exp('foo'), Expression::value('bar')); }], 'neq' => [Expression::exp('neq', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::neq(Expression::exp('foo'), Expression::value('bar')); }], 'gt' => [Expression::exp('gt', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::gt(Expression::exp('foo'), Expression::value('bar')); }], 'ge' => [Expression::exp('ge', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::ge(Expression::exp('foo'), Expression::value('bar')); }], 'lt' => [Expression::exp('lt', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::lt(Expression::exp('foo'), Expression::value('bar')); }], 'le' => [Expression::exp('le', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::le(Expression::exp('foo'), Expression::value('bar')); }], 'in' => [Expression::exp('in', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::in(Expression::exp('foo'), Expression::value('bar')); }], 'not_in' => [Expression::exp('not_in', [Expression::exp('foo'), Expression::value('bar')]), function () { return Expression\Expr::notIn(Expression::exp('foo'), Expression::value('bar')); }], 'is_null' => [Expression::exp('is_null', [Expression::exp('foo')]), function () { return Expression\Expr::isNull(Expression::exp('foo')); }], 'is_not_null' => [Expression::exp('is_not_null', [Expression::exp('foo')]), function () { return Expression\Expr::isNotNull(Expression::exp('foo')); }], 'is_empty' => [Expression::exp('is_empty', [Expression::exp('foo')]), function () { return Expression\Expr::isEmpty(Expression::exp('foo')); }], 'is_not_empty' => [Expression::exp('is_not_empty', [Expression::exp('foo')]), function () { return Expression\Expr::isNotEmpty(Expression::exp('foo')); }]]; }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { return Clause::join($this->prefix, $transformer->transform($expression->getArg(0), $config), $this->suffix); }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { return $transformer->transform(Expression\Expr::all([Expression\Expr::isNotNull($expression->getArg(0)), Expression\Expr::neq($expression->getArg(0), Expression\Expr::value(''))]), $config); }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { return Clause::implode(', ', $transformer->transformAll($expression->getArgs(), $config)); }
public function testContainsWithField() { $this->expectException(\InvalidArgumentException::class); $this->transformer->transform(Expression::exp('contains', [Expression::exp('field', [Expression::value('first')]), Expression::exp('field', [Expression::value('last')])]), $this->config); }
/** * {@inheritdoc} */ public function __invoke(FilterTransformer $transformer, Expression $expression, $element, Configuration $config) { $left = $transformer->resolve($expression->getArg(0), $element, $config); $right = $transformer->resolve($expression->getArg(1), $element, $config); return call_user_func($this->callback, $left, $right); }
public function provideHydrationTestCases() { return ['value' => ['exp' => Expression::value(41), 'data' => ['value' => 41, 'type' => null]], 'value with type' => ['exp' => Expression::value(41, 'integer'), 'data' => ['value' => 41, 'type' => 'integer']], 'expression' => ['exp' => Expression::exp('foo'), 'data' => ['exp' => 'foo', 'args' => []]], 'expression with arguments' => ['exp' => Expression::exp('foo', [Expression::exp('bar')]), 'data' => ['exp' => 'foo', 'args' => [['exp' => 'bar', 'args' => []]]]], 'expression with value' => ['exp' => Expression::exp('foo', [Expression::value('bar')]), 'data' => ['exp' => 'foo', 'args' => [['value' => 'bar', 'type' => null]]]]]; }
/** * {@inheritdoc} */ public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config) { $left = $transformer->transform($expression->getArg(0), $config); $right = $transformer->transform($expression->getArg(1), $config); return Clause::join($left, $this->operator, $right); }
/** * @param Expression $expression * * @return Expression */ public static function isNotEmpty(Expression $expression) { return Expression::exp('is_not_empty', [$expression]); }