diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php index ed3485386..d73983c36 100644 --- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php @@ -808,10 +808,23 @@ class BasicEntityPersister return array(array(), array()); } - $valueVisitor = new SqlValueVisitor($this->_class); + $valueVisitor = new SqlValueVisitor(); $valueVisitor->dispatch($expression); - return $valueVisitor->getParamsAndTypes(); + list($values, $types) = $valueVisitor->getParamsAndTypes(); + + $sqlValues = array(); + foreach ($values as $value) { + $sqlValues[] = $this->getValue($value); + } + + $sqlTypes = array(); + foreach ($types as $type) { + list($field, $value) = $type; + $sqlTypes[] = $this->getType($field, $value); + } + + return array($sqlValues, $sqlTypes); } /** diff --git a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php index 043be12b8..aa4d68d39 100644 --- a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php @@ -46,19 +46,6 @@ class SqlValueVisitor extends ExpressionVisitor */ private $types = array(); - /** - * @var \Doctrine\ORM\Mapping\ClassMetadata - */ - private $class; - - /** - * @param \Doctrine\ORM\Mapping\ClassMetadata - */ - public function __construct(ClassMetadata $class) - { - $this->class = $class; - } - /** * Convert a comparison expression into the target query language output * @@ -70,9 +57,9 @@ class SqlValueVisitor extends ExpressionVisitor { $value = $comparison->getValue()->getValue(); $field = $comparison->getField(); - + $this->values[] = $value; - $this->types[] = $this->getType($field, $value); + $this->types[] = array($field, $value); } /** @@ -110,17 +97,4 @@ class SqlValueVisitor extends ExpressionVisitor { return array($this->values, $this->types); } - - private function getType($field, $value) - { - $type = isset($this->class->fieldMappings[$field]) - ? Type::getType($this->class->fieldMappings[$field]['type'])->getBindingType() - : \PDO::PARAM_STR; - - if (is_array($value)) { - $type += Connection::ARRAY_PARAM_OFFSET; - } - - return $type; - } } diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php new file mode 100644 index 000000000..8631e529d --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php @@ -0,0 +1,87 @@ +. + */ + +namespace Doctrine\Tests\ORM\Functional; + +use Doctrine\Tests\Models\Generic\DateTimeModel; +use Doctrine\Common\Collections\Criteria; + +/** + * @author Josiah + */ +class EntityRepositoryCriteriaTest extends \Doctrine\Tests\OrmFunctionalTestCase +{ + protected function setUp() + { + $this->useModelSet('generic'); + parent::setUp(); + } + + public function tearDown() + { + if ($this->_em) { + $this->_em->getConfiguration()->setEntityNamespaces(array()); + } + parent::tearDown(); + } + + public function loadFixture() + { + $today = new DateTimeModel(); + $today->datetime = + $today->date = + $today->time = + new \DateTime('today'); + $this->_em->persist($today); + + $tomorrow = new DateTimeModel(); + $tomorrow->datetime = + $tomorrow->date = + $tomorrow->time = + new \DateTime('tomorrow'); + $this->_em->persist($tomorrow); + + $yesterday = new DateTimeModel(); + $yesterday->datetime = + $yesterday->date = + $yesterday->time = + new \DateTime('yesterday'); + $this->_em->persist($yesterday); + + $this->_em->flush(); + + unset($today); + unset($tomorrow); + unset($yesterday); + + $this->_em->clear(); + } + + public function testLteDateComparison() + { + $this->loadFixture(); + + $repository = $this->_em->getRepository('Doctrine\Tests\Models\Generic\DateTimeModel'); + $dates = $repository->matching(new Criteria( + Criteria::expr()->lte('datetime', new \DateTime('today')) + )); + + $this->assertEquals(2, count($dates)); + } +}