Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / dbal / tests / Doctrine / Tests / DBAL / Functional / NamedParametersTest.php
1 <?php
2
3 namespace Doctrine\Tests\DBAL\Functional\Ticket;
4
5 use Doctrine\DBAL\Connection;
6 use\PDO;
7
8 require_once __DIR__ . '/../../TestInit.php';
9
10
11 /**
12  * @group DDC-1372
13  */
14 class NamedParametersTest extends \Doctrine\Tests\DbalFunctionalTestCase
15 {
16
17     public function ticketProvider()
18     {
19         return array(
20             array(
21                 'SELECT * FROM ddc1372_foobar f WHERE f.foo = :foo AND f.bar IN (:bar)',
22                 array('foo'=>1,'bar'=> array(1, 2, 3)),
23                 array('foo'=>PDO::PARAM_INT,'bar'=> Connection::PARAM_INT_ARRAY,),
24                 array(
25                     array('id'=>1,'foo'=>1,'bar'=>1),
26                     array('id'=>2,'foo'=>1,'bar'=>2),
27                     array('id'=>3,'foo'=>1,'bar'=>3),
28                 )
29             ),
30
31             array(
32                 'SELECT * FROM ddc1372_foobar f WHERE f.foo = :foo AND f.bar IN (:bar)',
33                 array('foo'=>1,'bar'=> array(1, 2, 3)),
34                 array('bar'=> Connection::PARAM_INT_ARRAY,'foo'=>PDO::PARAM_INT),
35                 array(
36                     array('id'=>1,'foo'=>1,'bar'=>1),
37                     array('id'=>2,'foo'=>1,'bar'=>2),
38                     array('id'=>3,'foo'=>1,'bar'=>3),
39                 )
40             ),
41
42             array(
43                 'SELECT * FROM ddc1372_foobar f WHERE f.bar IN (:bar) AND f.foo = :foo',
44                 array('foo'=>1,'bar'=> array(1, 2, 3)),
45                 array('bar'=> Connection::PARAM_INT_ARRAY,'foo'=>PDO::PARAM_INT),
46                 array(
47                     array('id'=>1,'foo'=>1,'bar'=>1),
48                     array('id'=>2,'foo'=>1,'bar'=>2),
49                     array('id'=>3,'foo'=>1,'bar'=>3),
50                 )
51             ),
52
53             array(
54                 'SELECT * FROM ddc1372_foobar f WHERE f.bar IN (:bar) AND f.foo = :foo',
55                 array('foo'=>1,'bar'=> array('1', '2', '3')),
56                 array('bar'=> Connection::PARAM_STR_ARRAY,'foo'=>PDO::PARAM_INT),
57                 array(
58                     array('id'=>1,'foo'=>1,'bar'=>1),
59                     array('id'=>2,'foo'=>1,'bar'=>2),
60                     array('id'=>3,'foo'=>1,'bar'=>3),
61                 )
62             ),
63
64             array(
65                 'SELECT * FROM ddc1372_foobar f WHERE f.bar IN (:bar) AND f.foo IN (:foo)',
66                 array('foo'=>array('1'),'bar'=> array(1, 2, 3,4)),
67                 array('bar'=> Connection::PARAM_STR_ARRAY,'foo'=>Connection::PARAM_INT_ARRAY),
68                 array(
69                     array('id'=>1,'foo'=>1,'bar'=>1),
70                     array('id'=>2,'foo'=>1,'bar'=>2),
71                     array('id'=>3,'foo'=>1,'bar'=>3),
72                     array('id'=>4,'foo'=>1,'bar'=>4),
73                 )
74             ),
75
76             array(
77                 'SELECT * FROM ddc1372_foobar f WHERE f.bar IN (:bar) AND f.foo IN (:foo)',
78                 array('foo'=>1,'bar'=> 2),
79                 array('bar'=>PDO::PARAM_INT,'foo'=>PDO::PARAM_INT),
80                 array(
81                     array('id'=>2,'foo'=>1,'bar'=>2),
82                 )
83             ),
84
85             array(
86                 'SELECT * FROM ddc1372_foobar f WHERE f.bar = :arg AND f.foo <> :arg',
87                 array('arg'=>'1'),
88                 array('arg'=>PDO::PARAM_STR),
89                 array(
90                     array('id'=>5,'foo'=>2,'bar'=>1),
91                 )
92             ),
93
94             array(
95                 'SELECT * FROM ddc1372_foobar f WHERE f.bar NOT IN (:arg) AND f.foo IN (:arg)',
96                 array('arg'=>array(1, 2)),
97                 array('arg'=>Connection::PARAM_INT_ARRAY),
98                 array(
99                     array('id'=>3,'foo'=>1,'bar'=>3),
100                     array('id'=>4,'foo'=>1,'bar'=>4),
101                 )
102             ),
103
104         );
105     }
106
107     public function setUp()
108     {
109         parent::setUp();
110
111         if (!$this->_conn->getSchemaManager()->tablesExist("ddc1372_foobar")) {
112             try {
113                 $table = new \Doctrine\DBAL\Schema\Table("ddc1372_foobar");
114                 $table->addColumn('id', 'integer');
115                 $table->addColumn('foo','string');
116                 $table->addColumn('bar','string');
117                 $table->setPrimaryKey(array('id'));
118
119
120                 $sm = $this->_conn->getSchemaManager();
121                 $sm->createTable($table);
122
123                 $this->_conn->insert('ddc1372_foobar', array(
124                         'id'    => 1, 'foo'   => 1,  'bar'   => 1
125                 ));
126                 $this->_conn->insert('ddc1372_foobar', array(
127                         'id'    => 2, 'foo'   => 1,  'bar'   => 2
128                 ));
129                 $this->_conn->insert('ddc1372_foobar', array(
130                         'id'    => 3, 'foo'   => 1,  'bar'   => 3
131                 ));
132                 $this->_conn->insert('ddc1372_foobar', array(
133                         'id'    => 4, 'foo'   => 1,  'bar'   => 4
134                 ));
135                 $this->_conn->insert('ddc1372_foobar', array(
136                         'id'    => 5, 'foo'   => 2,  'bar'   => 1
137                 ));
138                 $this->_conn->insert('ddc1372_foobar', array(
139                         'id'    => 6, 'foo'   => 2,  'bar'   => 2
140                 ));
141             } catch(\Exception $e) {
142                 $this->fail($e->getMessage());
143             }
144         }
145     }
146
147     /**
148      * @dataProvider ticketProvider
149      * @param string $query
150      * @param array $params
151      * @param array $types
152      * @param array $expected
153      */
154     public function testTicket($query,$params,$types,$expected)
155     {
156         $stmt   = $this->_conn->executeQuery($query, $params, $types);
157         $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
158
159         foreach ($result as $k => $v) {
160             $result[$k] = array_change_key_case($v, CASE_LOWER);
161         }
162
163         $this->assertEquals($result, $expected);
164     }
165
166 }