1
1
<?php
2
2
3
- use Amp \Mysql \Connection ;
4
3
use Amp \Mysql \DataTypes ;
4
+ use Amp \Mysql \ResultSet ;
5
5
use PHPUnit \Framework \TestCase ;
6
+ use function Amp \Mysql \connect ;
6
7
7
8
class ConnectionTest extends TestCase {
8
9
function testConnect () {
9
10
$ complete = false ;
10
11
\Amp \Loop::run (function () use (&$ complete ) {
11
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
12
- yield $ db-> connect ();
12
+ /** @var \Amp\Mysql\ Connection $db */
13
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
13
14
14
15
/* use an alternative charset... Default is utf8mb4_general_ci */
15
- $ db ->setCharset ("latin1_general_ci " );
16
+ yield $ db ->setCharset ("latin1_general_ci " );
16
17
17
18
$ db ->close ();
18
19
$ complete = true ;
@@ -22,38 +23,35 @@ function testConnect() {
22
23
23
24
function testQuery () {
24
25
\Amp \Loop::run (function () {
25
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
26
- $ db-> connect ();
26
+ /** @var \Amp\Mysql\ Connection $db */
27
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
27
28
29
+ /** @var \Amp\Mysql\ResultSet $resultset */
28
30
$ resultset = yield $ db ->query ("SELECT 1 AS a " );
29
- $ this ->assertEquals (yield $ resultset ->rowCount (), 1 );
30
- $ this ->assertEquals (yield $ resultset ->fetch (), ["a " => 1 , 0 => 1 ]);
31
- $ resultset = yield $ db ->query ("SELECT 1 AS a " );
32
- $ this ->assertEquals (yield $ resultset ->fetchRow (), [0 => 1 ]);
33
- $ resultset = yield $ db ->query ("SELECT 1 AS a " );
34
- $ this ->assertEquals (yield $ resultset ->fetchObject (), (object ) ["a " => 1 ]);
35
31
36
- $ this ->assertEquals (yield $ resultset ->fetchAll (), [["a " => 1 , 0 => 1 ]]);
37
- $ this ->assertEquals (yield $ resultset ->fetchRows (), [[0 => 1 ]]);
38
- $ this ->assertEquals (yield $ resultset ->fetchObjects (), [(object ) ["a " => 1 ]]);
32
+ for ($ i = 0 ; yield $ resultset ->advance (); ++$ i ) {
33
+ $ this ->assertEquals (["a " => 1 ], $ resultset ->getCurrent ());
34
+ }
35
+
36
+ $ this ->assertSame (1 , $ i );
39
37
});
40
38
}
41
39
42
40
function testQueryFetchRow () {
43
41
\Amp \Loop::run (function () {
44
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
45
- $ db-> connect ();
42
+ /** @var \Amp\Mysql\ Connection $db */
43
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
46
44
47
45
$ db ->query ('DROP TABLE tmp ' );
48
46
$ db ->query ('CREATE TABLE tmp (a int) ' );
49
47
$ db ->query ('INSERT INTO tmp VALUES (1), (2), (3) ' );
50
48
49
+ /** @var \Amp\Mysql\ResultSet $resultset */
51
50
$ resultset = yield $ db ->query ('SELECT a FROM tmp ' );
52
51
53
52
$ got = [];
54
-
55
- while ($ row = yield $ resultset ->fetchRow ()) {
56
- $ got [] = $ row ;
53
+ while (yield $ resultset ->advance (ResultSet::FETCH_ARRAY )) {
54
+ $ got [] = $ resultset ->getCurrent ();
57
55
}
58
56
59
57
$ this ->assertEquals ($ got , [[1 ], [2 ], [3 ]]);
@@ -62,25 +60,26 @@ function testQueryFetchRow() {
62
60
63
61
function testMultiStmt () {
64
62
\Amp \Loop::run (function () {
65
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
66
- $ db-> connect ();
63
+ /** @var \Amp\Mysql\ Connection $db */
64
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
67
65
68
66
$ db ->query ("CREATE DATABASE IF NOT EXISTS alt " );
69
67
$ db ->useDb ("alt " );
70
68
71
69
$ db ->query ("DROP TABLE tmp " ); // just in case it would exist...
72
70
$ db ->query ("CREATE TABLE tmp SELECT 1 AS a, 2 AS b " );
73
71
72
+ /** @var \Amp\Mysql\ResultSet $resultset */
74
73
$ resultset = yield $ db ->query ("INSERT INTO tmp VALUES (5, 6), (8, 9); SELECT a FROM tmp; SELECT b FROM tmp WHERE a = 5; SELECT b AS d, a + 1 AS c FROM tmp WHERE b < 7 " );
75
- $ this ->assertEquals ((yield $ resultset ->rowCount ()), 0 );
76
74
77
- $ resultset = yield $ resultset ->next ();
78
- $ this ->assertEquals ((yield $ resultset ->rowCount ()), 3 );
79
75
80
- $ resultset = yield $ resultset ->next ();
81
- $ this ->assertEquals (yield $ resultset ->fetchRow (), [6 ]);
76
+ $ got = [];
77
+ while (yield $ resultset ->advance (ResultSet::FETCH_ARRAY )) {
78
+ $ got [] = $ resultset ->getCurrent ();
79
+ }
80
+
81
+ $ this ->assertEquals ($ got , [[1 ], [5 ], [8 ], [6 ], [2 , 2 ], [6 , 6 ]]);
82
82
83
- $ resultset = yield $ resultset ->next ();
84
83
$ fields = yield $ resultset ->getFields ();
85
84
$ this ->assertEquals (count ($ fields ), 2 );
86
85
$ this ->assertEquals ($ fields [0 ]["original_name " ], "b " );
@@ -95,12 +94,16 @@ function testMultiStmt() {
95
94
96
95
function testPrepared () {
97
96
\Amp \Loop::run (function () {
98
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
99
- $ db-> connect ();
97
+ /** @var \Amp\Mysql\ Connection $db */
98
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
100
99
101
100
$ db ->query ("CREATE TEMPORARY TABLE tmp SELECT 1 AS a, 2 AS b " );
102
101
$ db ->query ("INSERT INTO tmp VALUES (5, 6), (8, 9), (10, 11), (12, 13) " );
103
102
103
+ /**
104
+ * @var \Amp\Mysql\Statement $stmt
105
+ * @var \Amp\Mysql\ResultSet $result
106
+ */
104
107
$ stmt = yield $ db ->prepare ("SELECT * FROM tmp WHERE a = ? OR b = :num " );
105
108
$ base = [
106
109
"catalog " => "def " ,
@@ -114,31 +117,58 @@ function testPrepared() {
114
117
"decimals " => 0 ,
115
118
];
116
119
$ this ->assertEquals (yield $ stmt ->getFields (), [$ base + ["name " => "a " , "original_name " => "a " ], $ base + ["name " => "b " , "original_name " => "b " ]]);
117
- $ result = (yield $ stmt ->execute ([5 , "num " => 9 ]));
118
- $ this ->assertEquals (yield $ result ->rowCount (), 2 );
120
+ $ stmt ->bind ("num " , 9 );
121
+ $ result = yield $ stmt ->execute (5 );
122
+ $ got = [];
123
+ while (yield $ result ->advance (ResultSet::FETCH_ARRAY )) {
124
+ $ got [] = $ result ->getCurrent ();
125
+ }
126
+ $ this ->assertCount (2 , $ got );
119
127
120
- $ result = yield $ db ->prepare ("SELECT * FROM tmp WHERE a = ? OR b = ? " , [5 , 8 ]);
121
- $ this ->assertEquals ((yield $ result ->rowCount ()), 1 );
128
+ /** @var \Amp\Mysql\Statement $stmt */
129
+ $ stmt = yield $ db ->prepare ("SELECT * FROM tmp WHERE a = ? OR b = ? " );
130
+ $ result = yield $ stmt ->execute (5 , 8 );
131
+ $ got = [];
132
+ while (yield $ result ->advance (ResultSet::FETCH_ARRAY )) {
133
+ $ got [] = $ result ->getCurrent ();
134
+ }
135
+ $ this ->assertCount (1 , $ got );
122
136
123
- $ result = yield $ db ->prepare ("SELECT * FROM tmp WHERE a = :a OR b = ? OR a = :a " , ["a " => [5 , 10 ], 9 ]);
124
- $ this ->assertEquals ((yield $ result ->rowCount ()), 3 );
137
+ /** @var \Amp\Mysql\Statement $stmt */
138
+ $ stmt = yield $ db ->prepare ("SELECT * FROM tmp WHERE a = :a OR b = ? " );
139
+ $ stmt ->bind ("a " , 5 );
140
+ $ result = yield $ stmt ->execute (9 );
141
+ $ got = [];
142
+ while (yield $ result ->advance (ResultSet::FETCH_ARRAY )) {
143
+ $ got [] = $ result ->getCurrent ();
144
+ }
145
+ $ this ->assertCount (2 , $ got );
125
146
126
147
$ stmt = yield $ db ->prepare ("INSERT INTO tmp VALUES (:foo, :bar) " );
127
148
$ stmt ->bind ("foo " , 5 );
128
- $ result = yield $ stmt ->execute (["bar " => 9 ]);
129
- $ this ->assertEquals ($ result ->affectedRows , 1 );
149
+ $ stmt ->bind ("bar " , 9 );
150
+ /** @var \Amp\Mysql\CommandResult $result */
151
+ $ result = yield $ stmt ->execute ();
152
+ $ this ->assertSame (1 , $ result ->affectedRows ());
130
153
});
131
154
}
132
155
133
156
function testPreparedWithNegativeValue () {
134
157
\Amp \Loop::run (function () {
135
- $ db = new Connection ( " host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
136
- $ db-> connect ();
158
+ /** @var \Amp\Mysql\ Connection $db */
159
+ $ db = yield connect (" host= " . DB_HOST . " ;user= " . DB_USER . " ;pass= " . DB_PASS . " ;db=connectiontest " );
137
160
161
+ /** @var \Amp\Mysql\Statement $stmt */
138
162
$ db ->query ("DROP TABLE tmp " ); // just in case it would exist...
139
- yield $ db ->prepare ("CREATE TABLE tmp SELECT ? AS a " , [-1 ]);
140
- $ result = yield $ db ->prepare ("SELECT a FROM tmp " , []);
141
- $ this ->assertEquals (yield $ result ->fetchRow (), [-1 ]);
163
+ $ stmt = yield $ db ->prepare ("CREATE TABLE tmp SELECT ? AS a " );
164
+ yield $ stmt ->execute (-1 );
165
+
166
+ /** @var \Amp\Mysql\ResultSet $result */
167
+ $ stmt = yield $ db ->prepare ("SELECT a FROM tmp " );
168
+ $ result = yield $ stmt ->execute ();
169
+ yield $ result ->advance (ResultSet::FETCH_ARRAY );
170
+
171
+ $ this ->assertEquals ($ result ->getCurrent (), [-1 ]);
142
172
});
143
173
}
144
174
}
0 commit comments