. */ namespace Doctrine\ORM\Persisters; use Doctrine\Common\Collections\Expr\ExpressionVisitor; use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\Common\Collections\Expr\Value; use Doctrine\Common\Collections\Expr\CompositeExpression; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Connection; /** * Extract the values from a criteria/expression * * @author Benjamin Eberlei */ class SqlValueVisitor extends ExpressionVisitor { /** * @var array */ private $values = array(); /** * @var array */ private $types = array(); /** * Type Callback * * Called by this visitor to determine the type of a value * * @var callable */ private $typeCallback; /** * Value Callback * * Called by this visitor to generate a sql value from the given value * * Callback is passed two parameters: * - `Field` name of the field in a comparison * - `Value` value in a comparison * * @var callable */ private $valueCallback; /** * @param callable $typeCallback Type Resolution Callback * @param callable $valueCallback Value Resolution Callback */ public function __construct($typeCallback, $valueCallback) { $this->typeCallback = $typeCallback; $this->valueCallback = $valueCallback; } /** * Convert a comparison expression into the target query language output * * @param \Doctrine\Common\Collections\Expr\Comparison $comparison * * @return mixed */ public function walkComparison(Comparison $comparison) { $typeCallback = $this->typeCallback; $valueCallback = $this->valueCallback; $value = $comparison->getValue()->getValue(); $field = $comparison->getField(); $this->values[] = $valueCallback($value); $this->types[] = $typeCallback($field, $value); } /** * Convert a composite expression into the target query language output * * @param \Doctrine\Common\Collections\Expr\CompositeExpression $expr * * @return mixed */ public function walkCompositeExpression(CompositeExpression $expr) { foreach ($expr->getExpressionList() as $child) { $this->dispatch($child); } } /** * Convert a value expression into the target query language part. * * @param \Doctrine\Common\Collections\Expr\Value $value * * @return mixed */ public function walkValue(Value $value) { return; } /** * Return the Parameters and Types necessary for matching the last visited expression. * * @return array */ public function getParamsAndTypes() { return array($this->values, $this->types); } }