3 namespace Doctrine\Tests\DBAL\Functional\Ticket;
5 use Doctrine\DBAL\Connection;
8 require_once __DIR__ . '/../../TestInit.php';
14 class NamedParametersTest extends \Doctrine\Tests\DbalFunctionalTestCase
17 public function ticketProvider()
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,),
25 array('id'=>1,'foo'=>1,'bar'=>1),
26 array('id'=>2,'foo'=>1,'bar'=>2),
27 array('id'=>3,'foo'=>1,'bar'=>3),
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),
36 array('id'=>1,'foo'=>1,'bar'=>1),
37 array('id'=>2,'foo'=>1,'bar'=>2),
38 array('id'=>3,'foo'=>1,'bar'=>3),
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),
47 array('id'=>1,'foo'=>1,'bar'=>1),
48 array('id'=>2,'foo'=>1,'bar'=>2),
49 array('id'=>3,'foo'=>1,'bar'=>3),
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),
58 array('id'=>1,'foo'=>1,'bar'=>1),
59 array('id'=>2,'foo'=>1,'bar'=>2),
60 array('id'=>3,'foo'=>1,'bar'=>3),
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),
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),
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),
81 array('id'=>2,'foo'=>1,'bar'=>2),
86 'SELECT * FROM ddc1372_foobar f WHERE f.bar = :arg AND f.foo <> :arg',
88 array('arg'=>PDO::PARAM_STR),
90 array('id'=>5,'foo'=>2,'bar'=>1),
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),
99 array('id'=>3,'foo'=>1,'bar'=>3),
100 array('id'=>4,'foo'=>1,'bar'=>4),
107 public function setUp()
111 if (!$this->_conn->getSchemaManager()->tablesExist("ddc1372_foobar")) {
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'));
120 $sm = $this->_conn->getSchemaManager();
121 $sm->createTable($table);
123 $this->_conn->insert('ddc1372_foobar', array(
124 'id' => 1, 'foo' => 1, 'bar' => 1
126 $this->_conn->insert('ddc1372_foobar', array(
127 'id' => 2, 'foo' => 1, 'bar' => 2
129 $this->_conn->insert('ddc1372_foobar', array(
130 'id' => 3, 'foo' => 1, 'bar' => 3
132 $this->_conn->insert('ddc1372_foobar', array(
133 'id' => 4, 'foo' => 1, 'bar' => 4
135 $this->_conn->insert('ddc1372_foobar', array(
136 'id' => 5, 'foo' => 2, 'bar' => 1
138 $this->_conn->insert('ddc1372_foobar', array(
139 'id' => 6, 'foo' => 2, 'bar' => 2
141 } catch(\Exception $e) {
142 $this->fail($e->getMessage());
148 * @dataProvider ticketProvider
149 * @param string $query
150 * @param array $params
151 * @param array $types
152 * @param array $expected
154 public function testTicket($query,$params,$types,$expected)
156 $stmt = $this->_conn->executeQuery($query, $params, $types);
157 $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
159 foreach ($result as $k => $v) {
160 $result[$k] = array_change_key_case($v, CASE_LOWER);
163 $this->assertEquals($result, $expected);