Skip to content

Commit af5d5df

Browse files
authored
Merge pull request #8482 from kenjis/test-add-getFieldData-type
test: add tests for getFieldData() type
2 parents 93e281a + c4de4f9 commit af5d5df

6 files changed

Lines changed: 847 additions & 7 deletions

File tree

tests/system/Database/Live/AbstractGetFieldDataTest.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,64 @@ protected function createTableForDefault()
9898
$this->forge->createTable($this->table);
9999
}
100100

101+
protected function createTableForType()
102+
{
103+
$this->forge->dropTable($this->table, true);
104+
105+
// missing types:
106+
// TINYINT,MEDIUMINT,BIT,YEAR,BINARY,VARBINARY,TINYTEXT,LONGTEXT,
107+
// JSON,Spatial data types
108+
// `id` must be INTEGER else SQLite3 error on not null for autoincrement field.
109+
$fields = [
110+
'id' => ['type' => 'INTEGER', 'constraint' => 20, 'auto_increment' => true],
111+
'type_varchar' => ['type' => 'VARCHAR', 'constraint' => 40, 'null' => true],
112+
'type_char' => ['type' => 'CHAR', 'constraint' => 10, 'null' => true],
113+
// TEXT should not be used on SQLSRV. It is deprecated.
114+
'type_text' => ['type' => 'TEXT', 'null' => true],
115+
'type_smallint' => ['type' => 'SMALLINT', 'null' => true],
116+
'type_integer' => ['type' => 'INTEGER', 'null' => true],
117+
'type_float' => ['type' => 'FLOAT', 'null' => true],
118+
'type_numeric' => ['type' => 'NUMERIC', 'constraint' => '18,2', 'null' => true],
119+
'type_date' => ['type' => 'DATE', 'null' => true],
120+
'type_time' => ['type' => 'TIME', 'null' => true],
121+
// On SQLSRV `datetime2` is recommended.
122+
'type_datetime' => ['type' => 'DATETIME', 'null' => true],
123+
'type_timestamp' => ['type' => 'TIMESTAMP', 'null' => true],
124+
'type_bigint' => ['type' => 'BIGINT', 'null' => true],
125+
'type_real' => ['type' => 'REAL', 'null' => true],
126+
'type_enum' => ['type' => 'ENUM', 'constraint' => ['appel', 'pears'], 'null' => true],
127+
'type_set' => ['type' => 'SET', 'constraint' => ['one', 'two'], 'null' => true],
128+
'type_mediumtext' => ['type' => 'MEDIUMTEXT', 'null' => true],
129+
'type_double' => ['type' => 'DOUBLE', 'null' => true],
130+
'type_decimal' => ['type' => 'DECIMAL', 'constraint' => '18,4', 'null' => true],
131+
'type_blob' => ['type' => 'BLOB', 'null' => true],
132+
'type_boolean' => ['type' => 'BOOLEAN', 'null' => true],
133+
];
134+
135+
if ($this->db->DBDriver === 'Postgre') {
136+
unset(
137+
$fields['type_enum'],
138+
$fields['type_set'],
139+
$fields['type_mediumtext'],
140+
$fields['type_double'],
141+
$fields['type_blob']
142+
);
143+
}
144+
145+
if ($this->db->DBDriver === 'SQLSRV') {
146+
unset(
147+
$fields['type_set'],
148+
$fields['type_mediumtext'],
149+
$fields['type_double'],
150+
$fields['type_blob']
151+
);
152+
}
153+
154+
$this->forge->addField($fields);
155+
$this->forge->addKey('id', true);
156+
$this->forge->createTable($this->table);
157+
}
158+
101159
abstract public function testGetFieldDataDefault(): void;
102160

103161
protected function assertSameFieldData(array $expected, array $actual)

tests/system/Database/Live/MySQLi/GetFieldDataTest.php

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,183 @@ public function testGetFieldDataDefault(): void
112112
];
113113
$this->assertSameFieldData($expected, $fields);
114114
}
115+
116+
public function testGetFieldDataType(): void
117+
{
118+
$this->createTableForType();
119+
120+
$fields = $this->db->getFieldData($this->table);
121+
122+
$expected = [
123+
0 => (object) [
124+
'name' => 'id',
125+
'type' => 'int',
126+
'max_length' => $this->isOldMySQL() ? 20 : null,
127+
'nullable' => false,
128+
'default' => null,
129+
'primary_key' => 1,
130+
],
131+
1 => (object) [
132+
'name' => 'type_varchar',
133+
'type' => 'varchar',
134+
'max_length' => 40,
135+
'nullable' => true,
136+
'default' => null,
137+
'primary_key' => 0,
138+
],
139+
2 => (object) [
140+
'name' => 'type_char',
141+
'type' => 'char',
142+
'max_length' => 10,
143+
'nullable' => true,
144+
'default' => null,
145+
'primary_key' => 0,
146+
],
147+
3 => (object) [
148+
'name' => 'type_text',
149+
'type' => 'text',
150+
'max_length' => null,
151+
'nullable' => true,
152+
'default' => null,
153+
'primary_key' => 0,
154+
],
155+
4 => (object) [
156+
'name' => 'type_smallint',
157+
'type' => 'smallint',
158+
'max_length' => $this->isOldMySQL() ? 6 : null,
159+
'nullable' => true,
160+
'default' => null,
161+
'primary_key' => 0,
162+
],
163+
5 => (object) [
164+
'name' => 'type_integer',
165+
'type' => 'int',
166+
'max_length' => $this->isOldMySQL() ? 11 : null,
167+
'nullable' => true,
168+
'default' => null,
169+
'primary_key' => 0,
170+
],
171+
6 => (object) [
172+
'name' => 'type_float',
173+
'type' => 'float',
174+
'max_length' => null,
175+
'nullable' => true,
176+
'default' => null,
177+
'primary_key' => 0,
178+
],
179+
7 => (object) [
180+
'name' => 'type_numeric',
181+
'type' => 'decimal',
182+
'max_length' => 18,
183+
'nullable' => true,
184+
'default' => null,
185+
'primary_key' => 0,
186+
],
187+
8 => (object) [
188+
'name' => 'type_date',
189+
'type' => 'date',
190+
'max_length' => null,
191+
'nullable' => true,
192+
'default' => null,
193+
'primary_key' => 0,
194+
],
195+
9 => (object) [
196+
'name' => 'type_time',
197+
'type' => 'time',
198+
'max_length' => null,
199+
'nullable' => true,
200+
'default' => null,
201+
'primary_key' => 0,
202+
],
203+
10 => (object) [
204+
'name' => 'type_datetime',
205+
'type' => 'datetime',
206+
'max_length' => null,
207+
'nullable' => true,
208+
'default' => null,
209+
'primary_key' => 0,
210+
],
211+
11 => (object) [
212+
'name' => 'type_timestamp',
213+
'type' => 'timestamp',
214+
'max_length' => null,
215+
'nullable' => true,
216+
'default' => null,
217+
'primary_key' => 0,
218+
],
219+
12 => (object) [
220+
'name' => 'type_bigint',
221+
'type' => 'bigint',
222+
'max_length' => $this->isOldMySQL() ? 20 : null,
223+
'nullable' => true,
224+
'default' => null,
225+
'primary_key' => 0,
226+
],
227+
13 => (object) [
228+
'name' => 'type_real',
229+
'type' => 'double',
230+
'max_length' => null,
231+
'nullable' => true,
232+
'default' => null,
233+
'primary_key' => 0,
234+
],
235+
14 => (object) [
236+
'name' => 'type_enum',
237+
'type' => 'enum',
238+
'max_length' => null,
239+
'nullable' => true,
240+
'default' => null,
241+
'primary_key' => 0,
242+
],
243+
15 => (object) [
244+
'name' => 'type_set',
245+
'type' => 'set',
246+
'max_length' => null,
247+
'nullable' => true,
248+
'default' => null,
249+
'primary_key' => 0,
250+
],
251+
16 => (object) [
252+
'name' => 'type_mediumtext',
253+
'type' => 'mediumtext',
254+
'max_length' => null,
255+
'nullable' => true,
256+
'default' => null,
257+
'primary_key' => 0,
258+
],
259+
17 => (object) [
260+
'name' => 'type_double',
261+
'type' => 'double',
262+
'max_length' => null,
263+
'nullable' => true,
264+
'default' => null,
265+
'primary_key' => 0,
266+
],
267+
18 => (object) [
268+
'name' => 'type_decimal',
269+
'type' => 'decimal',
270+
'max_length' => 18,
271+
'nullable' => true,
272+
'default' => null,
273+
'primary_key' => 0,
274+
],
275+
19 => (object) [
276+
'name' => 'type_blob',
277+
'type' => 'blob',
278+
'max_length' => null,
279+
'nullable' => true,
280+
'default' => null,
281+
'primary_key' => 0,
282+
],
283+
20 => (object) [
284+
'name' => 'type_boolean',
285+
'type' => 'tinyint',
286+
'max_length' => 1,
287+
'nullable' => true,
288+
'default' => null,
289+
'primary_key' => 0,
290+
],
291+
];
292+
$this->assertSameFieldData($expected, $fields);
293+
}
115294
}

0 commit comments

Comments
 (0)