Passed
Push — amo/scrutinizer-new-engine ( 927449 )
by Andreas
10:16
created

NamedParametersTest::ticketProvider()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 84
Code Lines 61

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 61
c 1
b 0
f 1
dl 0
loc 84
rs 8.8509
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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