CommandTest.php 7.16 KB
Newer Older
w  
Qiang Xue committed
1 2
<?php

Qiang Xue committed
3
namespace yiiunit\framework\db;
Qiang Xue committed
4

Qiang Xue committed
5 6 7 8
use yii\db\Connection;
use yii\db\Command;
use yii\db\Query;
use yii\db\DataReader;
w  
Qiang Xue committed
9

Alexander Makarov committed
10
class CommandTest extends DatabaseTestCase
w  
Qiang Xue committed
11
{
Qiang Xue committed
12 13 14 15 16 17
	protected function setUp()
	{
		parent::setUp();
		$this->mockApplication();
	}

w  
Qiang Xue committed
18 19
	function testConstruct()
	{
Qiang Xue committed
20 21
		$db = $this->getConnection(false);

Qiang Xue committed
22
		// null
Qiang Xue committed
23
		$command = $db->createCommand();
Qiang Xue committed
24
		$this->assertEquals(null, $command->sql);
w  
Qiang Xue committed
25

Qiang Xue committed
26
		// string
Qiang Xue committed
27
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
28
		$command = $db->createCommand($sql);
w  
Qiang Xue committed
29 30 31 32 33
		$this->assertEquals($sql, $command->sql);
	}

	function testGetSetSql()
	{
Qiang Xue committed
34
		$db = $this->getConnection(false);
w  
Qiang Xue committed
35

Qiang Xue committed
36
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
37 38
		$command = $db->createCommand($sql);
		$this->assertEquals($sql, $command->sql);
w  
Qiang Xue committed
39

Qiang Xue committed
40
		$sql2 = 'SELECT * FROM tbl_order';
Qiang Xue committed
41 42
		$command->sql = $sql2;
		$this->assertEquals($sql2, $command->sql);
w  
Qiang Xue committed
43 44
	}

45 46 47 48 49 50 51 52 53
	function testAutoQuoting()
	{
		$db = $this->getConnection(false);

		$sql = 'SELECT [[id]], [[t.name]] FROM {{tbl_customer}} t';
		$command = $db->createCommand($sql);
		$this->assertEquals("SELECT `id`, `t`.`name` FROM `tbl_customer` t", $command->sql);
	}

Qiang Xue committed
54
	function testPrepareCancel()
w  
Qiang Xue committed
55
	{
Qiang Xue committed
56
		$db = $this->getConnection(false);
w  
Qiang Xue committed
57

Qiang Xue committed
58
		$command = $db->createCommand('SELECT * FROM tbl_customer');
Qiang Xue committed
59 60 61 62 63
		$this->assertEquals(null, $command->pdoStatement);
		$command->prepare();
		$this->assertNotEquals(null, $command->pdoStatement);
		$command->cancel();
		$this->assertEquals(null, $command->pdoStatement);
w  
Qiang Xue committed
64 65 66 67
	}

	function testExecute()
	{
Qiang Xue committed
68
		$db = $this->getConnection();
w  
Qiang Xue committed
69

Qiang Xue committed
70
		$sql = 'INSERT INTO tbl_customer(email, name , address) VALUES (\'user4@example.com\', \'user4\', \'address4\')';
Qiang Xue committed
71 72
		$command = $db->createCommand($sql);
		$this->assertEquals(1, $command->execute());
w  
Qiang Xue committed
73

Qiang Xue committed
74
		$sql = 'SELECT COUNT(*) FROM tbl_customer WHERE name =\'user4\'';
Qiang Xue committed
75 76
		$command = $db->createCommand($sql);
		$this->assertEquals(1, $command->queryScalar());
w  
Qiang Xue committed
77

Qiang Xue committed
78 79 80
		$command = $db->createCommand('bad SQL');
		$this->setExpectedException('\yii\db\Exception');
		$command->execute();
w  
Qiang Xue committed
81 82
	}

Qiang Xue committed
83
	function testQuery()
w  
Qiang Xue committed
84
	{
Qiang Xue committed
85
		$db = $this->getConnection();
w  
Qiang Xue committed
86

Qiang Xue committed
87
		// query
Qiang Xue committed
88
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
89 90
		$reader = $db->createCommand($sql)->query();
		$this->assertTrue($reader instanceof DataReader);
w  
Qiang Xue committed
91

Qiang Xue committed
92
		// queryAll
Qiang Xue committed
93 94
		$rows = $db->createCommand('SELECT * FROM tbl_customer')->queryAll();
		$this->assertEquals(3, count($rows));
Qiang Xue committed
95 96
		$row = $rows[2];
		$this->assertEquals(3, $row['id']);
Qiang Xue committed
97
		$this->assertEquals('user3', $row['name']);
w  
Qiang Xue committed
98

Qiang Xue committed
99
		$rows = $db->createCommand('SELECT * FROM tbl_customer WHERE id=10')->queryAll();
Qiang Xue committed
100
		$this->assertEquals(array(), $rows);
w  
Qiang Xue committed
101

Qiang Xue committed
102
		// queryRow
Qiang Xue committed
103
		$sql = 'SELECT * FROM tbl_customer ORDER BY id';
Qiang Xue committed
104 105
		$row = $db->createCommand($sql)->queryRow();
		$this->assertEquals(1, $row['id']);
Qiang Xue committed
106
		$this->assertEquals('user1', $row['name']);
w  
Qiang Xue committed
107

Qiang Xue committed
108
		$sql = 'SELECT * FROM tbl_customer ORDER BY id';
Qiang Xue committed
109
		$command = $db->createCommand($sql);
w  
Qiang Xue committed
110
		$command->prepare();
Qiang Xue committed
111 112
		$row = $command->queryRow();
		$this->assertEquals(1, $row['id']);
Qiang Xue committed
113
		$this->assertEquals('user1', $row['name']);
w  
Qiang Xue committed
114

Qiang Xue committed
115
		$sql = 'SELECT * FROM tbl_customer WHERE id=10';
Qiang Xue committed
116 117
		$command = $db->createCommand($sql);
		$this->assertFalse($command->queryRow());
w  
Qiang Xue committed
118

Qiang Xue committed
119
		// queryColumn
Qiang Xue committed
120
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
121
		$column = $db->createCommand($sql)->queryColumn();
Qiang Xue committed
122
		$this->assertEquals(range(1, 3), $column);
w  
Qiang Xue committed
123

Qiang Xue committed
124
		$command = $db->createCommand('SELECT id FROM tbl_customer WHERE id=10');
Qiang Xue committed
125
		$this->assertEquals(array(), $command->queryColumn());
w  
Qiang Xue committed
126

Qiang Xue committed
127
		// queryScalar
Qiang Xue committed
128
		$sql = 'SELECT * FROM tbl_customer ORDER BY id';
Qiang Xue committed
129
		$this->assertEquals($db->createCommand($sql)->queryScalar(), 1);
w  
Qiang Xue committed
130

Qiang Xue committed
131
		$sql = 'SELECT id FROM tbl_customer ORDER BY id';
Qiang Xue committed
132
		$command = $db->createCommand($sql);
w  
Qiang Xue committed
133
		$command->prepare();
Qiang Xue committed
134 135
		$this->assertEquals(1, $command->queryScalar());

Qiang Xue committed
136
		$command = $db->createCommand('SELECT id FROM tbl_customer WHERE id=10');
Qiang Xue committed
137
		$this->assertFalse($command->queryScalar());
w  
Qiang Xue committed
138

Qiang Xue committed
139 140
		$command = $db->createCommand('bad SQL');
		$this->setExpectedException('\yii\db\Exception');
w  
Qiang Xue committed
141 142 143
		$command->query();
	}

Qiang Xue committed
144
	function testBindParamValue()
w  
Qiang Xue committed
145
	{
Qiang Xue committed
146
		$db = $this->getConnection();
w  
Qiang Xue committed
147

Qiang Xue committed
148
		// bindParam
resurtm committed
149
		$sql = 'INSERT INTO tbl_customer(email, name, address) VALUES (:email, :name, :address)';
Qiang Xue committed
150 151 152 153 154 155 156
		$command = $db->createCommand($sql);
		$email = 'user4@example.com';
		$name = 'user4';
		$address = 'address4';
		$command->bindParam(':email', $email);
		$command->bindParam(':name', $name);
		$command->bindParam(':address', $address);
w  
Qiang Xue committed
157 158
		$command->execute();

Qiang Xue committed
159
		$sql = 'SELECT name FROM tbl_customer WHERE email=:email';
Qiang Xue committed
160
		$command = $db->createCommand($sql);
Qiang Xue committed
161 162
		$command->bindParam(':email', $email);
		$this->assertEquals($name, $command->queryScalar());
w  
Qiang Xue committed
163

Qiang Xue committed
164
		$sql = 'INSERT INTO tbl_type (int_col, char_col, float_col, blob_col, numeric_col, bool_col) VALUES (:int_col, :char_col, :float_col, :blob_col, :numeric_col, :bool_col)';
Qiang Xue committed
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
		$command = $db->createCommand($sql);
		$intCol = 123;
		$charCol = 'abc';
		$floatCol = 1.23;
		$blobCol = "\x10\x11\x12";
		$numericCol = '1.23';
		$boolCol = false;
		$command->bindParam(':int_col', $intCol);
		$command->bindParam(':char_col', $charCol);
		$command->bindParam(':float_col', $floatCol);
		$command->bindParam(':blob_col', $blobCol);
		$command->bindParam(':numeric_col', $numericCol);
		$command->bindParam(':bool_col', $boolCol);
		$this->assertEquals(1, $command->execute());

Qiang Xue committed
180
		$sql = 'SELECT * FROM tbl_type';
Qiang Xue committed
181 182 183 184 185 186 187 188
		$row = $db->createCommand($sql)->queryRow();
		$this->assertEquals($intCol, $row['int_col']);
		$this->assertEquals($charCol, $row['char_col']);
		$this->assertEquals($floatCol, $row['float_col']);
		$this->assertEquals($blobCol, $row['blob_col']);
		$this->assertEquals($numericCol, $row['numeric_col']);

		// bindValue
Qiang Xue committed
189
		$sql = 'INSERT INTO tbl_customer(email, name, address) VALUES (:email, \'user5\', \'address5\')';
Qiang Xue committed
190
		$command = $db->createCommand($sql);
Qiang Xue committed
191
		$command->bindValue(':email', 'user5@example.com');
Qiang Xue committed
192
		$command->execute();
w  
Qiang Xue committed
193

Qiang Xue committed
194
		$sql = 'SELECT email FROM tbl_customer WHERE name=:name';
Qiang Xue committed
195
		$command = $db->createCommand($sql);
Qiang Xue committed
196 197
		$command->bindValue(':name', 'user5');
		$this->assertEquals('user5@example.com', $command->queryScalar());
w  
Qiang Xue committed
198 199
	}

Qiang Xue committed
200
	function testFetchMode()
w  
Qiang Xue committed
201
	{
Qiang Xue committed
202
		$db = $this->getConnection();
w  
Qiang Xue committed
203

Qiang Xue committed
204
		// default: FETCH_ASSOC
Qiang Xue committed
205
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
206
		$command = $db->createCommand($sql);
w  
Qiang Xue committed
207
		$result = $command->queryRow();
Qiang Xue committed
208
		$this->assertTrue(is_array($result) && isset($result['id']));
w  
Qiang Xue committed
209

Qiang Xue committed
210
		// FETCH_OBJ, customized via fetchMode property
Qiang Xue committed
211
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
212 213
		$command = $db->createCommand($sql);
		$command->fetchMode = \PDO::FETCH_OBJ;
w  
Qiang Xue committed
214 215
		$result = $command->queryRow();
		$this->assertTrue(is_object($result));
Qiang Xue committed
216 217

		// FETCH_NUM, customized in query method
Qiang Xue committed
218
		$sql = 'SELECT * FROM tbl_customer';
Qiang Xue committed
219 220 221
		$command = $db->createCommand($sql);
		$result = $command->queryRow(array(), \PDO::FETCH_NUM);
		$this->assertTrue(is_array($result) && isset($result[0]));
w  
Qiang Xue committed
222
	}
Qiang Xue committed
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297

	function testInsert()
	{

	}

	function testUpdate()
	{

	}

	function testDelete()
	{

	}

	function testCreateTable()
	{

	}

	function testRenameTable()
	{

	}

	function testDropTable()
	{

	}

	function testTruncateTable()
	{

	}

	function testAddColumn()
	{

	}

	function testDropColumn()
	{

	}

	function testRenameColumn()
	{

	}

	function testAlterColumn()
	{

	}

	function testAddForeignKey()
	{

	}

	function testDropForeignKey()
	{

	}

	function testCreateIndex()
	{

	}

	function testDropIndex()
	{

	}
Zander Baldwin committed
298
}