/**
  * {@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)
 {
     return Clause::join($this->prefix, $transformer->transform($expression->getArg(0), $config), $this->suffix);
 }
 /**
  * {@inheritdoc}
  */
 public function __invoke(SQLTransformer $transformer, Expression $expression, Configuration $config)
 {
     return Clause::implode(', ', $transformer->transformAll($expression->getArgs(), $config));
 }
 /**
  * {@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);
 }