Passed
Pull Request — master (#311)
by William
12:43
created

TableTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 203
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 153
c 1
b 0
f 0
dl 0
loc 203
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testGetForeignKeys() 0 4 1
B getForeignKeysProvider() 0 85 1
B getFieldsProvider() 0 88 1
A testGetFields() 0 4 1
1
<?php
2
3
namespace PhpMyAdmin\SqlParser\Tests\Utils;
4
5
use PhpMyAdmin\SqlParser\Parser;
6
use PhpMyAdmin\SqlParser\Tests\TestCase;
7
use PhpMyAdmin\SqlParser\Utils\Table;
8
9
class TableTest extends TestCase
10
{
11
    /**
12
     * @dataProvider getForeignKeysProvider
13
     *
14
     * @param mixed $query
15
     */
16
    public function testGetForeignKeys($query, array $expected)
17
    {
18
        $parser = new Parser($query);
19
        $this->assertEquals($expected, Table::getForeignKeys($parser->statements[0]));
20
    }
21
22
    public function getForeignKeysProvider()
23
    {
24
        return array(
25
            array(
26
                'CREATE USER test',
27
                array(),
28
            ),
29
            array(
30
                'CREATE TABLE `payment` (
31
                  `payment_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
32
                  `customer_id` smallint(5) unsigned NOT NULL,
33
                  `staff_id` tinyint(3) unsigned NOT NULL,
34
                  `rental_id` int(11) DEFAULT NULL,
35
                  `amount` decimal(5,2) NOT NULL,
36
                  `payment_date` datetime NOT NULL,
37
                  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
38
                  PRIMARY KEY (`payment_id`),
39
                  KEY `idx_fk_staff_id` (`staff_id`),
40
                  KEY `idx_fk_customer_id` (`customer_id`),
41
                  KEY `fk_payment_rental` (`rental_id`),
42
                  CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,
43
                  CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE SET NULL ON UPDATE CASCADE,
44
                  CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE
45
                ) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8',
46
                array(
47
                    array(
48
                        'constraint' => 'fk_payment_customer',
49
                        'index_list' => array('customer_id'),
50
                        'ref_db_name' => null,
51
                        'ref_table_name' => 'customer',
52
                        'ref_index_list' => array('customer_id'),
53
                        'on_update' => 'CASCADE',
54
                    ),
55
                    array(
56
                        'constraint' => 'fk_payment_rental',
57
                        'index_list' => array('rental_id'),
58
                        'ref_db_name' => null,
59
                        'ref_table_name' => 'rental',
60
                        'ref_index_list' => array('rental_id'),
61
                        'on_delete' => 'SET_NULL',
62
                        'on_update' => 'CASCADE',
63
                    ),
64
                    array(
65
                        'constraint' => 'fk_payment_staff',
66
                        'index_list' => array('staff_id'),
67
                        'ref_db_name' => null,
68
                        'ref_table_name' => 'staff',
69
                        'ref_index_list' => array('staff_id'),
70
                        'on_update' => 'CASCADE',
71
                    ),
72
                ),
73
            ),
74
            array(
75
                'CREATE TABLE `actor` (
76
                  `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
77
                  `first_name` varchar(45) NOT NULL,
78
                  `last_name` varchar(45) NOT NULL,
79
                  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
80
                  PRIMARY KEY (`actor_id`),
81
                  KEY `idx_actor_last_name` (`last_name`)
82
                ) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8',
83
                array(),
84
            ),
85
            array(
86
                'CREATE TABLE `address` (
87
                  `address_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
88
                  `address` varchar(50) NOT NULL,
89
                  `address2` varchar(50) DEFAULT NULL,
90
                  `district` varchar(20) NOT NULL,
91
                  `city_id` smallint(5) unsigned NOT NULL,
92
                  `postal_code` varchar(10) DEFAULT NULL,
93
                  `phone` varchar(20) NOT NULL,
94
                  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
95
                  PRIMARY KEY (`address_id`),
96
                  KEY `idx_fk_city_id` (`city_id`),
97
                  CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON UPDATE CASCADE
98
                ) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8',
99
                array(
100
                    array(
101
                        'constraint' => 'fk_address_city',
102
                        'index_list' => array('city_id'),
103
                        'ref_db_name' => null,
104
                        'ref_table_name' => 'city',
105
                        'ref_index_list' => array('city_id'),
106
                        'on_update' => 'CASCADE',
107
                    ),
108
                ),
109
            )
110
        );
111
    }
112
113
    /**
114
     * @dataProvider getFieldsProvider
115
     *
116
     * @param mixed $query
117
     */
118
    public function testGetFields($query, array $expected)
119
    {
120
        $parser = new Parser($query);
121
        $this->assertEquals($expected, Table::getFields($parser->statements[0]));
122
    }
123
124
    public function getFieldsProvider()
125
    {
126
        return array(
127
            array(
128
                'CREATE USER test',
129
                array(),
130
            ),
131
            array(
132
                'CREATE TABLE `address` (
133
                  `address_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
134
                  `address` varchar(50) NOT NULL,
135
                  `address2` varchar(50) DEFAULT NULL,
136
                  `district` varchar(20) NOT NULL,
137
                  `city_id` smallint(5) unsigned NOT NULL,
138
                  `postal_code` varchar(10) DEFAULT NULL,
139
                  `phone` varchar(20) NOT NULL,
140
                  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
141
                  PRIMARY KEY (`address_id`),
142
                  KEY `idx_fk_city_id` (`city_id`),
143
                  CONSTRAINT `fk_address_city` FOREIGN KEY (`city_id`) REFERENCES `city` (`city_id`) ON UPDATE CASCADE
144
                ) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8',
145
                array(
146
                    'address_id' => array(
147
                        'type' => 'SMALLINT',
148
                        'timestamp_not_null' => false,
149
                    ),
150
                    'address' => array(
151
                        'type' => 'VARCHAR',
152
                        'timestamp_not_null' => false,
153
                    ),
154
                    'address2' => array(
155
                        'type' => 'VARCHAR',
156
                        'timestamp_not_null' => false,
157
                        'default_value' => 'NULL',
158
                    ),
159
                    'district' => array(
160
                        'type' => 'VARCHAR',
161
                        'timestamp_not_null' => false,
162
                    ),
163
                    'city_id' => array(
164
                        'type' => 'SMALLINT',
165
                        'timestamp_not_null' => false,
166
                    ),
167
                    'postal_code' => array(
168
                        'type' => 'VARCHAR',
169
                        'timestamp_not_null' => false,
170
                        'default_value' => 'NULL',
171
                    ),
172
                    'phone' => array(
173
                        'type' => 'VARCHAR',
174
                        'timestamp_not_null' => false,
175
                    ),
176
                    'last_update' => array(
177
                        'type' => 'TIMESTAMP',
178
                        'timestamp_not_null' => true,
179
                        'default_value' => 'CURRENT_TIMESTAMP',
180
                        'default_current_timestamp' => true,
181
                        'on_update_current_timestamp' => true,
182
                    ),
183
                ),
184
            ),
185
            array(
186
                'CREATE TABLE table1 (
187
                    a INT NOT NULL,
188
                    b VARCHAR(32),
189
                    c INT AS (a mod 10) VIRTUAL,
190
                    d VARCHAR(5) AS (left(b,5)) PERSISTENT
191
                )',
192
                array(
193
                    'a' => array(
194
                        'type' => 'INT',
195
                        'timestamp_not_null' => false,
196
                    ),
197
                    'b' => array(
198
                        'type' => 'VARCHAR',
199
                        'timestamp_not_null' => false,
200
                    ),
201
                    'c' => array(
202
                        'type' => 'INT',
203
                        'timestamp_not_null' => false,
204
                        'generated' => true,
205
                        'expr' => '(a mod 10)',
206
                    ),
207
                    'd' => array(
208
                        'type' => 'VARCHAR',
209
                        'timestamp_not_null' => false,
210
                        'generated' => true,
211
                        'expr' => '(left(b,5))',
212
                    ),
213
                ),
214
            )
215
        );
216
    }
217
}
218