Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Query / QueryTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Query;
4
5 use Doctrine\Common\Cache\ArrayCache;
6 use Doctrine\Common\Collections\ArrayCollection;
7
8 use Doctrine\ORM\Query\Parameter;
9
10 class QueryTest extends \Doctrine\Tests\OrmTestCase
11 {
12     protected $_em = null;
13
14     protected function setUp()
15     {
16         $this->_em = $this->_getTestEntityManager();
17     }
18
19     public function testGetParameters()
20     {
21         $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
22
23         $parameters = new ArrayCollection();
24
25         $this->assertEquals($parameters, $query->getParameters());
26     }
27
28     public function testGetParameters_HasSomeAlready()
29     {
30         $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
31         $query->setParameter(2, 84);
32
33         $parameters = new ArrayCollection();
34         $parameters->add(new Parameter(2, 84));
35
36         $this->assertEquals($parameters, $query->getParameters());
37     }
38
39     public function testSetParameters()
40     {
41         $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1");
42
43         $parameters = new ArrayCollection();
44         $parameters->add(new Parameter(1, 'foo'));
45         $parameters->add(new Parameter(2, 'bar'));
46
47         $query->setParameters($parameters);
48
49         $this->assertEquals($parameters, $query->getParameters());
50     }
51
52     public function testFree()
53     {
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);
56
57         $query->free();
58
59         $this->assertEquals(0, count($query->getParameters()));
60     }
61
62     public function testClone()
63     {
64         $dql = "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1";
65
66         $query = $this->_em->createQuery($dql);
67         $query->setParameter(2, 84, \PDO::PARAM_INT);
68         $query->setHint('foo', 'bar');
69
70         $cloned = clone $query;
71
72         $this->assertEquals($dql, $cloned->getDql());
73         $this->assertEquals(0, count($cloned->getParameters()));
74         $this->assertFalse($cloned->getHint('foo'));
75     }
76
77     public function testFluentQueryInterface()
78     {
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')
90           ->setDql('foo')
91           ->setFirstResult(10)
92           ->setMaxResults(10);
93
94         $this->assertSame($q2, $q);
95     }
96
97     /**
98      * @group DDC-968
99      */
100     public function testHints()
101     {
102         $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
103         $q->setHint('foo', 'bar')->setHint('bar', 'baz');
104
105         $this->assertEquals('bar', $q->getHint('foo'));
106         $this->assertEquals('baz', $q->getHint('bar'));
107         $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz'), $q->getHints());
108     }
109
110     /**
111      * @group DDC-1588
112      */
113     public function testQueryDefaultResultCache()
114     {
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());
119     }
120
121     /**
122      * @expectedException Doctrine\ORM\Query\QueryException
123      **/
124     public function testIterateWithNoDistinctAndWrongSelectClause()
125     {
126         $q = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
127         $q->iterate();
128     }
129
130     /**
131      * @expectedException Doctrine\ORM\Query\QueryException
132      **/
133     public function testIterateWithNoDistinctAndWithValidSelectClause()
134     {
135         $q = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
136         $q->iterate();
137     }
138
139     public function testIterateWithDistinct()
140     {
141         $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a");
142         $q->iterate();
143     }
144
145     /**
146      * @group DDC-1697
147      */
148     public function testCollectionParameters()
149     {
150         $cities = array(
151             0 => "Paris",
152             3 => "Canne",
153             9 => "St Julien"
154         );
155
156         $query  = $this->_em
157                 ->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)")
158                 ->setParameter('cities', $cities);
159
160         $parameters = $query->getParameters();
161         $parameter  = $parameters->first();
162
163         $this->assertEquals('cities', $parameter->getName());
164         $this->assertEquals($cities, $parameter->getValue());
165     }
166 }