Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC736Test.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional\Ticket;
4
5 use Doctrine\Tests\Models\ECommerce\ECommerceCart;
6 use Doctrine\Tests\Models\ECommerce\ECommerceCustomer;
7 use Doctrine\ORM\Query;
8 use Doctrine\ORM\Query\AST;
9
10 require_once __DIR__ . '/../../../TestInit.php';
11
12 class DDC736Test extends \Doctrine\Tests\OrmFunctionalTestCase
13 {
14     protected function setUp()
15     {
16         $this->useModelSet('ecommerce');
17         parent::setUp();
18     }
19
20     /**
21      * @group DDC-736
22      */
23     public function testReorderEntityFetchJoinForHydration()
24     {
25         $cust = new ECommerceCustomer;
26         $cust->setName('roman');
27
28         $cart = new ECommerceCart;
29         $cart->setPayment('cash');
30         $cart->setCustomer($cust);
31
32         $this->_em->persist($cust);
33         $this->_em->persist($cart);
34         $this->_em->flush();
35         $this->_em->clear();
36
37         $result = $this->_em->createQuery("select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c")
38             ->getSingleResult(/*\Doctrine\ORM\Query::HYDRATE_ARRAY*/);
39
40         $cart2 = $result[0];
41         unset($result[0]);
42
43         $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceCart', $cart2);
44         $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $cart2->getCustomer());
45         $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceCustomer', $cart2->getCustomer());
46         $this->assertEquals(array('name' => 'roman', 'payment' => 'cash'), $result);
47     }
48
49     /**
50      * @group DDC-736
51      * @group DDC-925
52      * @group DDC-915
53      */
54     public function testDqlTreeWalkerReordering()
55     {
56         $cust = new ECommerceCustomer;
57         $cust->setName('roman');
58
59         $cart = new ECommerceCart;
60         $cart->setPayment('cash');
61         $cart->setCustomer($cust);
62
63         $this->_em->persist($cust);
64         $this->_em->persist($cart);
65         $this->_em->flush();
66         $this->_em->clear();
67
68         $dql = "select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c";
69         $result = $this->_em->createQuery($dql)
70                             ->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\Tests\ORM\Functional\Ticket\DisableFetchJoinTreeWalker'))
71                             ->getResult();
72
73         /* @var $cart2 Doctrine\Tests\Models\ECommerce\ECommerceCart */
74         $cart2 = $result[0][0];
75         $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $cart2->getCustomer());
76     }
77 }
78
79 class DisableFetchJoinTreeWalker extends \Doctrine\ORM\Query\TreeWalkerAdapter
80 {
81     public function walkSelectStatement(AST\SelectStatement $AST)
82     {
83         $this->walkSelectClause($AST->selectClause);
84     }
85
86     /**
87      * @param \Doctrine\ORM\Query\AST\SelectClause $selectClause
88      */
89     public function walkSelectClause($selectClause)
90     {
91         foreach ($selectClause->selectExpressions AS $key => $selectExpr) {
92             /* @var $selectExpr \Doctrine\ORM\Query\AST\SelectExpression */
93             if ($selectExpr->expression == "c") {
94                 unset($selectClause->selectExpressions[$key]);
95                 break;
96             }
97         }
98     }
99 }
100