|
2 | 2 |
|
3 | 3 | $initialRowCount = 1000;
|
4 | 4 | $mysqli = null;
|
| 5 | +$dbName = null; |
5 | 6 |
|
6 |
| -setup(function ($args) use (&$mysqli, $initialRowCount) { |
| 7 | +pushArgs([ |
| 8 | + 'mysql_host' => '127.0.0.1', |
| 9 | + 'mysql_user' => null, |
| 10 | + 'mysql_password' => null, |
| 11 | + 'mysql_port' => 3306, |
| 12 | + 'mysql_database' => null, |
| 13 | +]); |
| 14 | + |
| 15 | +setup(function ($args) use (&$mysqli, $initialRowCount, &$dbName) { |
7 | 16 | if (!extension_loaded('mysqli')) {
|
8 | 17 | print('The mysqli extension is not loaded' . PHP_EOL);
|
9 | 18 | return;
|
|
22 | 31 | return;
|
23 | 32 | }
|
24 | 33 |
|
25 |
| - // drop database |
26 |
| - $mysqli->query("DROP DATABASE IF EXISTS `bench_test`"); |
27 |
| - // create database |
28 |
| - $mysqli->query("CREATE DATABASE IF NOT EXISTS `bench_test`"); |
29 |
| - $mysqli->select_db('bench_test'); |
30 |
| - $mysqli->query("CREATE TABLE IF NOT EXISTS `bench_test`.`test` (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255))"); |
| 34 | + $dbName = $args['mysql_database'] ?? 'bench_test'; |
| 35 | + |
| 36 | + // check if database exists |
| 37 | + $result = $mysqli->query("SELECT schema_name FROM information_schema.schemata WHERE schema_name = '$dbName'"); |
| 38 | + |
| 39 | + // if exists, delete all tables |
| 40 | + if ($result->num_rows > 0) { |
| 41 | + $result = $mysqli->query("SELECT table_name FROM information_schema.tables WHERE table_schema = '$dbName'"); |
| 42 | + while ($row = $result->fetch_assoc()) { |
| 43 | + $mysqli->query("DROP TABLE IF EXISTS `$dbName`.`{$row['table_name']}`"); |
| 44 | + } |
| 45 | + } else { |
| 46 | + $mysqli->query("CREATE DATABASE IF NOT EXISTS `$dbName`"); |
| 47 | + } |
| 48 | + |
| 49 | + $mysqli->select_db($dbName); |
| 50 | + $mysqli->query("CREATE TABLE IF NOT EXISTS `$dbName`.`test` (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255))"); |
31 | 51 |
|
32 | 52 | for ($i = 0; $i < $initialRowCount; $i++) {
|
33 | 53 | $values[] = "('test$i')";
|
34 | 54 | }
|
35 |
| - $mysqli->query("INSERT INTO `bench_test`.`test` (name) VALUES " . implode(',', $values)); |
| 55 | + $r = $mysqli->query("INSERT INTO `$dbName`.`test` (name) VALUES " . implode(',', $values)); |
| 56 | + if (!$r) { |
| 57 | + printf("Mysql Error (%s) %s\n", $mysqli->errno, $mysqli->error); |
| 58 | + } |
36 | 59 | });
|
37 | 60 |
|
38 |
| -teardown(function () use (&$mysqli) { |
| 61 | +teardown(function () use (&$mysqli, $dbName) { |
39 | 62 | if ($mysqli === null) {
|
40 | 63 | return;
|
41 | 64 | }
|
42 | 65 |
|
43 |
| - $mysqli->query("DROP DATABASE IF EXISTS `bench_test`"); |
| 66 | + $result = $mysqli->query("SELECT table_name FROM information_schema.tables WHERE table_schema = '$dbName'"); |
| 67 | + while ($row = $result->fetch_assoc()) { |
| 68 | + $mysqli->query("DROP TABLE IF EXISTS `$dbName`.`{$row['table_name']}`"); |
| 69 | + } |
44 | 70 | $mysqli->close();
|
45 | 71 | });
|
46 | 72 |
|
|
76 | 102 | $count = $count * $multiplier;
|
77 | 103 | $time = StopWatch::time();
|
78 | 104 | for ($i = 0; $i < $count; $i++) {
|
79 |
| - $mysqli->query("SELECT * FROM `bench_test`.`test`"); |
| 105 | + $mysqli->query("SELECT * FROM `test`"); |
80 | 106 | }
|
81 | 107 | extraStat('q/s', round($count / (StopWatch::time() - $time)));
|
82 | 108 | return $i;
|
|
88 | 114 |
|
89 | 115 | $count = $count * $multiplier;
|
90 | 116 | for ($i = 0; $i < $count; $i++) {
|
91 |
| - $result = $mysqli->query("SELECT * FROM `bench_test`.`test`"); |
| 117 | + $result = $mysqli->query("SELECT * FROM `test`"); |
92 | 118 | while ($row = $result->fetch_assoc()) {
|
93 | 119 | }
|
94 | 120 | $result->close();
|
|
103 | 129 | $count = $count * $multiplier;
|
104 | 130 | $time = StopWatch::time();
|
105 | 131 | for ($i = 0; $i < $count; $i++) {
|
106 |
| - $mysqli->query("INSERT INTO `bench_test`.`test` (name) VALUES ('test')"); |
| 132 | + $mysqli->query("INSERT INTO `test` (name) VALUES ('test')"); |
107 | 133 | }
|
108 | 134 | extraStat('q/s', round($count / (StopWatch::time() - $time)));
|
109 | 135 | return $i;
|
|
118 | 144 | for ($i = 0; $i < $count; $i++) {
|
119 | 145 | $values[] = "('test$i')";
|
120 | 146 | }
|
121 |
| - $mysqli->query("INSERT INTO `bench_test`.`test` (name) VALUES " . implode(',', $values)); |
| 147 | + $mysqli->query("INSERT INTO `test` (name) VALUES " . implode(',', $values)); |
122 | 148 | return $i;
|
123 | 149 | },
|
124 | 150 | 'update' => function ($multiplier = 1, $count = 1000) use (&$mysqli) {
|
|
129 | 155 | $count = $count * $multiplier;
|
130 | 156 | $time = StopWatch::time();
|
131 | 157 | for ($i = 0; $i < $count; $i++) {
|
132 |
| - $mysqli->query("UPDATE `bench_test`.`test` SET name = 'test' WHERE id = '$i'"); |
| 158 | + $mysqli->query("UPDATE `test` SET name = 'test' WHERE id = '$i'"); |
133 | 159 | }
|
134 | 160 | extraStat('q/s', round($count / (StopWatch::time() - $time)));
|
135 | 161 | return $i;
|
|
139 | 165 | return INF;
|
140 | 166 | }
|
141 | 167 |
|
142 |
| - $mysqli->query("CREATE INDEX idx ON `bench_test`.`test` (id)"); |
| 168 | + $mysqli->query("CREATE INDEX idx ON `test` (id)"); |
143 | 169 |
|
144 | 170 | $count = $count * $multiplier;
|
145 | 171 | $time = StopWatch::time();
|
146 | 172 | for ($i = 0; $i < $count; $i++) {
|
147 |
| - $mysqli->query("UPDATE `bench_test`.`test` SET name = 'test' WHERE id = '$i'"); |
| 173 | + $mysqli->query("UPDATE `test` SET name = 'test' WHERE id = '$i'"); |
148 | 174 | }
|
149 | 175 | extraStat('q/s', round($count / (StopWatch::time() - $time)));
|
150 | 176 |
|
151 |
| - $mysqli->query("DROP INDEX idx ON `bench_test`.`test`"); |
| 177 | + $mysqli->query("DROP INDEX idx ON `test`"); |
152 | 178 | return $i;
|
153 | 179 | },
|
154 | 180 | 'transaction_insert' => function ($multiplier = 1, $count = 1000) use (&$mysqli) {
|
|
160 | 186 | $time = StopWatch::time();
|
161 | 187 | for ($i = 0; $i < $count; $i++) {
|
162 | 188 | $mysqli->begin_transaction();
|
163 |
| - $mysqli->query("INSERT INTO `bench_test`.`test` (name) VALUES ('test')"); |
| 189 | + $mysqli->query("INSERT INTO `test` (name) VALUES ('test')"); |
164 | 190 | $mysqli->commit();
|
165 | 191 | }
|
166 | 192 | extraStat('t/s', round($count / (StopWatch::time() - $time)));
|
|
209 | 235 | return INF;
|
210 | 236 | }
|
211 | 237 |
|
212 |
| - $mysqli->query("CREATE INDEX idx_name ON `bench_test`.`test` (name)"); |
213 |
| - $mysqli->query("DROP INDEX idx_name ON `bench_test`.`test`"); |
| 238 | + $mysqli->query("CREATE INDEX idx_name ON `test` (name)"); |
| 239 | + $mysqli->query("DROP INDEX idx_name ON `test`"); |
214 | 240 | return 1;
|
215 | 241 | },
|
216 | 242 | 'delete' => function ($multiplier = 1, $count = 1000) use (&$mysqli) {
|
|
221 | 247 | $count = $count * $multiplier;
|
222 | 248 | $time = StopWatch::time();
|
223 | 249 | for ($i = 0; $i < $count; $i++) {
|
224 |
| - $mysqli->query("DELETE FROM `bench_test`.`test` WHERE id = '$i'"); |
| 250 | + $mysqli->query("DELETE FROM `test` WHERE id = '$i'"); |
225 | 251 | }
|
226 | 252 | extraStat('q/s', round($count / (StopWatch::time() - $time)));
|
227 | 253 | return $i;
|
|
0 commit comments