Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Hydration / ResultSetMappingTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Hydration;
4
5 use Doctrine\ORM\Query\ResultSetMapping;
6 use Doctrine\ORM\Mapping\ClassMetadata;
7
8 require_once __DIR__ . '/../../TestInit.php';
9
10 /**
11  * Description of ResultSetMappingTest
12  *
13  * @author robo
14  */
15 class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
16 {
17     /**
18      * @var ResultSetMapping
19      */
20     private $_rsm;
21
22     /**
23      * @var \Doctrine\ORM\EntityManager
24      */
25     private $_em;
26
27     protected function setUp() {
28         parent::setUp();
29         $this->_rsm = new ResultSetMapping;
30         $this->_em = $this->_getTestEntityManager();
31     }
32
33     /**
34      * For SQL: SELECT id, status, username, name FROM cms_users
35      */
36     public function testBasicResultSetMapping()
37     {
38         $this->_rsm->addEntityResult(
39             'Doctrine\Tests\Models\CMS\CmsUser',
40             'u'
41         );
42         $this->_rsm->addFieldResult('u', 'id', 'id');
43         $this->_rsm->addFieldResult('u', 'status', 'status');
44         $this->_rsm->addFieldResult('u', 'username', 'username');
45         $this->_rsm->addFieldResult('u', 'name', 'name');
46
47         $this->assertFalse($this->_rsm->isScalarResult('id'));
48         $this->assertFalse($this->_rsm->isScalarResult('status'));
49         $this->assertFalse($this->_rsm->isScalarResult('username'));
50         $this->assertFalse($this->_rsm->isScalarResult('name'));
51
52         $this->assertTrue($this->_rsm->getClassName('u') == 'Doctrine\Tests\Models\CMS\CmsUser');
53         $class = $this->_rsm->getDeclaringClass('id');
54         $this->assertTrue($class == 'Doctrine\Tests\Models\CMS\CmsUser');
55
56         $this->assertEquals('u', $this->_rsm->getEntityAlias('id'));
57         $this->assertEquals('u', $this->_rsm->getEntityAlias('status'));
58         $this->assertEquals('u', $this->_rsm->getEntityAlias('username'));
59         $this->assertEquals('u', $this->_rsm->getEntityAlias('name'));
60
61         $this->assertEquals('id', $this->_rsm->getFieldName('id'));
62         $this->assertEquals('status', $this->_rsm->getFieldName('status'));
63         $this->assertEquals('username', $this->_rsm->getFieldName('username'));
64         $this->assertEquals('name', $this->_rsm->getFieldName('name'));
65     }
66
67     /**
68      * @group DDC-1057
69      *
70      * Fluent interface test, not a real result set mapping
71      */
72     public function testFluentInterface()
73     {
74         $rms = $this->_rsm;
75
76         $rms->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser','u')
77             ->addJoinedEntityResult('Doctrine\Tests\Models\CMS\CmsPhonenumber','p','u','phonenumbers')
78             ->addFieldResult('u', 'id', 'id')
79             ->addFieldResult('u', 'name', 'name')
80             ->setDiscriminatorColumn('name', 'name')
81             ->addIndexByColumn('id', 'id')
82             ->addIndexBy('username', 'username')
83             ->addIndexByScalar('sclr0')
84             ->addScalarResult('sclr0', 'numPhones')
85             ->addMetaResult('a', 'user_id', 'user_id');
86
87
88         $this->assertTrue($rms->hasIndexBy('id'));
89         $this->assertTrue($rms->isFieldResult('id'));
90         $this->assertTrue($rms->isFieldResult('name'));
91         $this->assertTrue($rms->isScalarResult('sclr0'));
92         $this->assertTrue($rms->isRelation('p'));
93         $this->assertTrue($rms->hasParentAlias('p'));
94         $this->assertTrue($rms->isMixedResult());
95     }
96
97     /**
98      * @group DDC-1663
99      */
100     public function testAddNamedNativeQueryResultSetMapping()
101     {
102         $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
103         $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
104
105         $cm->mapOneToOne(array(
106             'fieldName'     => 'email',
107             'targetEntity'  => 'Doctrine\Tests\Models\CMS\CmsEmail',
108             'cascade'       => array('persist'),
109             'inversedBy'    => 'user',
110             'orphanRemoval' => false,
111             'joinColumns'   => array(array(
112                     'nullable' => true,
113                     'referencedColumnName' => 'id',
114                 )
115             )
116         ));
117
118         $cm->addNamedNativeQuery(array(
119             'name'              => 'find-all',
120             'query'             => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id',
121             'resultSetMapping'  => 'find-all',
122         ));
123         $cm->addSqlResultSetMapping(array(
124             'name'      => 'find-all',
125             'entities'  => array(
126                 array(
127                     'entityClass'   => '__CLASS__',
128                     'fields'        => array(
129                         array(
130                             'name'  => 'id',
131                             'column'=> 'user_id'
132                         ),
133                         array(
134                             'name'  => 'name',
135                             'column'=> 'name'
136                         )
137                     )
138                 ),
139                 array(
140                     'entityClass'   => 'CmsEmail',
141                     'fields'        => array(
142                         array(
143                             'name'  => 'id',
144                             'column'=> 'email_id'
145                         ),
146                         array(
147                             'name'  => 'email',
148                             'column'=> 'email'
149                         )
150                     )
151                 )
152             ),
153             'columns'   => array(
154                 array(
155                     'name' => 'scalarColumn'
156                 )
157             )
158         ));
159
160         
161         $queryMapping = $cm->getNamedNativeQuery('find-all');
162
163         $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
164         $rsm->addNamedNativeQueryMapping($cm, $queryMapping);
165
166         $this->assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn'));
167
168         $this->assertEquals('c0', $rsm->getEntityAlias('user_id'));
169         $this->assertEquals('c0', $rsm->getEntityAlias('name'));
170         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getClassName('c0'));
171         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('name'));
172         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('user_id'));
173
174
175         $this->assertEquals('c1', $rsm->getEntityAlias('email_id'));
176         $this->assertEquals('c1', $rsm->getEntityAlias('email'));
177         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsEmail', $rsm->getClassName('c1'));
178         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsEmail', $rsm->getDeclaringClass('email'));
179         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsEmail', $rsm->getDeclaringClass('email_id'));
180     }
181
182         /**
183      * @group DDC-1663
184      */
185     public function testAddNamedNativeQueryResultSetMappingWithoutFields()
186     {
187         $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
188         $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
189
190         $cm->addNamedNativeQuery(array(
191             'name'              => 'find-all',
192             'query'             => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id',
193             'resultSetMapping'  => 'find-all',
194         ));
195         $cm->addSqlResultSetMapping(array(
196             'name'      => 'find-all',
197             'entities'  => array(
198                 array(
199                     'entityClass'   => '__CLASS__',
200                 )
201             ),
202             'columns'   => array(
203                 array(
204                     'name' => 'scalarColumn'
205                 )
206             )
207         ));
208
209
210         $queryMapping = $cm->getNamedNativeQuery('find-all');
211
212         $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
213         $rsm->addNamedNativeQueryMapping($cm, $queryMapping);
214
215         $this->assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn'));
216
217         $this->assertEquals('c0', $rsm->getEntityAlias('id'));
218         $this->assertEquals('c0', $rsm->getEntityAlias('name'));
219         $this->assertEquals('c0', $rsm->getEntityAlias('status'));
220         $this->assertEquals('c0', $rsm->getEntityAlias('username'));
221         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getClassName('c0'));
222         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('id'));
223         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('name'));
224         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('status'));
225         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('username'));
226     }
227
228     /**
229      * @group DDC-1663
230      */
231     public function testAddNamedNativeQueryResultClass()
232     {
233         $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
234         $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
235
236         $cm->addNamedNativeQuery(array(
237             'name'              => 'find-all',
238             'resultClass'       => '__CLASS__',
239             'query'             => 'SELECT * FROM cms_users',
240         ));
241
242         $queryMapping = $cm->getNamedNativeQuery('find-all');
243
244         $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
245         $rsm->addNamedNativeQueryMapping($cm, $queryMapping);
246
247
248         $this->assertEquals('c0', $rsm->getEntityAlias('id'));
249         $this->assertEquals('c0', $rsm->getEntityAlias('name'));
250         $this->assertEquals('c0', $rsm->getEntityAlias('status'));
251         $this->assertEquals('c0', $rsm->getEntityAlias('username'));
252         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getClassName('c0'));
253         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('id'));
254         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('name'));
255         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('status'));
256         $this->assertEquals('Doctrine\Tests\Models\CMS\CmsUser', $rsm->getDeclaringClass('username'));
257     }
258 }
259