/**
  * {@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));
 }
 /**
  * {@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)
 {
     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(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);
 }
 /**
  * {@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);
 }