3 namespace Doctrine\Tests\ORM\Query;
5 use Doctrine\Common\Cache\ArrayCache;
6 use Doctrine\Common\Collections\ArrayCollection;
8 use Doctrine\ORM\Query\Parameter;
10 class QueryTest extends \Doctrine\Tests\OrmTestCase
12 protected $_em = null;
14 protected function setUp()
16 $this->_em = $this->_getTestEntityManager();
19 public function testGetParameters()
21 $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
23 $parameters = new ArrayCollection();
25 $this->assertEquals($parameters, $query->getParameters());
28 public function testGetParameters_HasSomeAlready()
30 $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
31 $query->setParameter(2, 84);
33 $parameters = new ArrayCollection();
34 $parameters->add(new Parameter(2, 84));
36 $this->assertEquals($parameters, $query->getParameters());
39 public function testSetParameters()
41 $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
43 $parameters = new ArrayCollection();
44 $parameters->add(new Parameter(1, 'foo'));
45 $parameters->add(new Parameter(2, 'bar'));
47 $query->setParameters($parameters);
49 $this->assertEquals($parameters, $query->getParameters());
52 public function testFree()
54 $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
55 $query->setParameter(2, 84, \PDO::PARAM_INT);
59 $this->assertEquals(0, count($query->getParameters()));
62 public function testClone()
64 $dql = "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1";
66 $query = $this->_em->createQuery($dql);
67 $query->setParameter(2, 84, \PDO::PARAM_INT);
68 $query->setHint('foo', 'bar');
70 $cloned = clone $query;
72 $this->assertEquals($dql, $cloned->getDql());
73 $this->assertEquals(0, count($cloned->getParameters()));
74 $this->assertFalse($cloned->getHint('foo'));
77 public function testFluentQueryInterface()
79 $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
80 $q2 = $q->expireQueryCache(true)
81 ->setQueryCacheLifetime(3600)
82 ->setQueryCacheDriver(null)
83 ->expireResultCache(true)
84 ->setHint('foo', 'bar')
85 ->setHint('bar', 'baz')
86 ->setParameter(1, 'bar')
87 ->setParameters(new ArrayCollection(array(new Parameter(2, 'baz'))))
88 ->setResultCacheDriver(null)
89 ->setResultCacheId('foo')
94 $this->assertSame($q2, $q);
100 public function testHints()
102 $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
103 $q->setHint('foo', 'bar')->setHint('bar', 'baz');
105 $this->assertEquals('bar', $q->getHint('foo'));
106 $this->assertEquals('baz', $q->getHint('bar'));
107 $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz'), $q->getHints());
113 public function testQueryDefaultResultCache()
115 $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
116 $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
117 $q->useResultCache(true);
118 $this->assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver());
122 * @expectedException Doctrine\ORM\Query\QueryException
124 public function testIterateWithNoDistinctAndWrongSelectClause()
126 $q = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
131 * @expectedException Doctrine\ORM\Query\QueryException
133 public function testIterateWithNoDistinctAndWithValidSelectClause()
135 $q = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
139 public function testIterateWithDistinct()
141 $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
148 public function testCollectionParameters()
157 ->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)")
158 ->setParameter('cities', $cities);
160 $parameters = $query->getParameters();
161 $parameter = $parameters->first();
163 $this->assertEquals('cities', $parameter->getName());
164 $this->assertEquals($cities, $parameter->getValue());