Skip to content

Commit 76b2454

Browse files
committed
Make transaction tests not conflict with the 'test' table
1 parent e7ee85a commit 76b2454

File tree

3 files changed

+97
-107
lines changed

3 files changed

+97
-107
lines changed

ext/mysqli/tests/test_setup/test_helpers.inc

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,56 @@ function default_mysqli_real_connect(mysqli $link, int $flags = 0): bool {
145145
}
146146

147147
function mysqli_check_skip_test(): void {
148-
$link = @default_mysqli_connect_ex();
148+
/* Disable exceptions */
149+
mysqli_report(MYSQLI_REPORT_OFF);
150+
$link = default_mysqli_connect_ex();
151+
// Re-enable exceptions
152+
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
153+
if (!is_object($link)) {
154+
die(sprintf("skip Can't connect to MySQL Server - [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
155+
}
156+
mysqli_close($link);
157+
}
158+
159+
function have_innodb(mysqli $link): bool {
160+
if (($res = $link->query("SHOW VARIABLES LIKE 'have_innodb'"))
161+
&& ($row = $res->fetch_row())
162+
&& !empty($row)
163+
) {
164+
return !($row[1] == 'DISABLED' || $row[1] == 'NO');
165+
}
166+
// MySQL 5.6.1+
167+
if ($res = $link->query('SHOW ENGINES')) {
168+
while ($row = $res->fetch_assoc()) {
169+
if (!isset($row['Engine']) || !isset($row['Support'])) {
170+
return false;
171+
}
172+
173+
if (($row['Engine'] == 'InnoDB')
174+
&& (($row['Support'] == 'YES') || ($row['Support'] == 'DEFAULT'))
175+
) {
176+
return true;
177+
}
178+
}
179+
}
180+
return false;
181+
}
182+
function mysqli_check_innodb_support_skip_test(): void {
183+
/* Disable exceptions */
184+
mysqli_report(MYSQLI_REPORT_OFF);
185+
$link = default_mysqli_connect_ex();
149186
if (!is_object($link)) {
187+
// Re-enable exceptions
188+
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
150189
die(sprintf("skip Can't connect to MySQL Server - [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
151190
}
191+
$status = have_innodb($link);
192+
// Re-enable exceptions
193+
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
152194
mysqli_close($link);
195+
if (!$status) {
196+
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
197+
}
153198
}
154199

155200
function tear_down_table_on_default_connection(string $table) {

ext/mysqli/tests/transactions/014.phpt

Lines changed: 27 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,59 @@
11
--TEST--
2-
mysqli autocommit/commit/rollback
2+
mysqli autocommit/commit/rollback with innodb with CACHE
33
--EXTENSIONS--
44
mysqli
5-
--CONFLICTS--
6-
mysqli_transactions
75
--SKIPIF--
86
<?php
9-
require_once dirname(__DIR__) . "/connect.inc";
10-
if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
11-
die(sprintf("skip Can't connect to MySQL Server - [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
12-
}
13-
14-
if (!have_innodb($link)) {
15-
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
16-
}
7+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
8+
mysqli_check_innodb_support_skip_test();
179
?>
1810
--FILE--
1911
<?php
20-
require_once dirname(__DIR__) . "/connect.inc";
21-
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
22-
23-
if (!mysqli_autocommit($link, TRUE))
24-
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
25-
26-
if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
27-
printf("[002] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
28-
29-
if (!mysqli_query($link, "CREATE TABLE test(a int, b varchar(10)) engine=InnoDB"))
30-
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
12+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
3113

32-
if (!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
33-
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
14+
$link = default_mysqli_connect();
3415

35-
if (!mysqli_autocommit($link, FALSE))
36-
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
16+
mysqli_autocommit($link, true);
17+
mysqli_query($link,"CREATE TABLE test_transactions_14(a int, b varchar(10)) Engine=InnoDB");
18+
mysqli_query($link, "INSERT INTO test_transactions_14 VALUES (1, 'foobar')");
19+
mysqli_autocommit($link, false);
3720

38-
if (!mysqli_query($link, "DELETE FROM test"))
39-
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
21+
/* Modify data in DB */
22+
mysqli_query($link, "DELETE FROM test_transactions_14");
23+
mysqli_query($link, "INSERT INTO test_transactions_14 VALUES (2, 'egon')");
4024

41-
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
42-
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
43-
44-
if (!mysqli_rollback($link))
45-
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
46-
47-
if (!$result = mysqli_query($link, "SELECT * FROM test"))
48-
printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
25+
/* Attempt to rollback */
26+
mysqli_rollback($link);
4927

28+
/* Check if rollback was successful */
29+
$result = mysqli_query($link, "SELECT * FROM test_transactions_14");
5030
printf("Num_of_rows=%d\n", mysqli_num_rows($result));
51-
if (!$row = mysqli_fetch_row($result))
52-
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
53-
31+
$row = mysqli_fetch_row($result);
5432
mysqli_free_result($result);
5533

5634
var_dump($row);
5735

58-
if (!mysqli_query($link, "DELETE FROM test"))
59-
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
60-
61-
if (!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
62-
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
63-
64-
if (!mysqli_commit($link))
65-
printf("[012] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
66-
67-
if (!$result = mysqli_query($link, "SELECT * FROM test"))
68-
printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
36+
/* Modify data in DB */
37+
mysqli_query($link, "DELETE FROM test_transactions_14");
38+
mysqli_query($link, "INSERT INTO test_transactions_14 VALUES (2, 'egon')");
6939

70-
if (!$row = mysqli_fetch_row($result))
71-
printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
40+
/* Commit modifications */
41+
mysqli_commit($link);
7242

43+
/* Check if commit was successful */
44+
$result = mysqli_query($link, "SELECT * FROM test_transactions_14");
45+
$row = mysqli_fetch_row($result);
7346
mysqli_free_result($result);
7447

7548
var_dump($row);
7649

77-
mysqli_query($link, "DROP TABLE IF EXISTS test");
7850
mysqli_close($link);
7951
print "done!";
8052
?>
8153
--CLEAN--
8254
<?php
83-
require_once dirname(__DIR__) . "/clean_table.inc";
55+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
56+
tear_down_table_on_default_connection('test_transactions_14');
8457
?>
8558
--EXPECT--
8659
Num_of_rows=1

ext/mysqli/tests/transactions/015.phpt

Lines changed: 24 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,57 @@
11
--TEST--
2-
mysqli autocommit/commit/rollback with innodb
2+
mysqli autocommit/commit/rollback with innodb with SQL_NO_CACHE
33
--EXTENSIONS--
44
mysqli
5-
--CONFLICTS--
6-
mysqli_transactions
75
--SKIPIF--
86
<?php
9-
require_once dirname(__DIR__) . "/connect.inc";
10-
if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
11-
die(sprintf("skip Can't connect to MySQL Server - [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
12-
}
13-
14-
if (!have_innodb($link)) {
15-
die(sprintf("skip Needs InnoDB support, [%d] %s", $link->errno, $link->error));
16-
}
7+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
8+
mysqli_check_innodb_support_skip_test();
179
?>
1810
--FILE--
1911
<?php
20-
require_once dirname(__DIR__) . "/connect.inc";
21-
22-
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
23-
if (!$link)
24-
printf("[001] Cannot connect, [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
12+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
2513

26-
if (!mysqli_select_db($link, $db))
27-
printf("[002] Cannot select DB '%s', [%d] %s\n", $db,
28-
mysqli_errno($link), mysqli_error($link));
14+
$link = default_mysqli_connect();
2915

30-
if (!mysqli_autocommit($link, TRUE))
31-
printf("[003] Cannot turn on autocommit mode, [%d] %s\n",
32-
mysqli_errno($link), mysqli_error($link));
16+
mysqli_autocommit($link, true);
17+
mysqli_query($link,"CREATE TABLE test_transactions_15(a int, b varchar(10)) Engine=InnoDB");
18+
mysqli_query($link, "INSERT INTO test_transactions_15 VALUES (1, 'foobar')");
19+
mysqli_autocommit($link, false);
3320

34-
if (!mysqli_query($link,"DROP TABLE IF EXISTS test") ||
35-
!mysqli_query($link,"CREATE TABLE test(a int, b varchar(10)) Engine=InnoDB") ||
36-
!mysqli_query($link, "INSERT INTO test VALUES (1, 'foobar')"))
37-
printf("[004] Cannot create test data, [%d] %s\n",
38-
mysqli_errno($link), mysqli_error($link));
21+
/* Modify data in DB */
22+
mysqli_query($link, "DELETE FROM test_transactions_15");
23+
mysqli_query($link, "INSERT INTO test_transactions_15 VALUES (2, 'egon')");
3924

40-
if (!mysqli_autocommit($link, FALSE))
41-
printf("[005] Cannot turn off autocommit mode, [%d] %s\n",
42-
mysqli_errno($link), mysqli_error($link));
25+
/* Attempt to rollback */
26+
mysqli_rollback($link);
4327

44-
if (!mysqli_query($link, "DELETE FROM test") ||
45-
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
46-
printf("[006] Cannot modify test data, [%d] %s\n",
47-
mysqli_errno($link), mysqli_error($link));
48-
49-
if (!mysqli_rollback($link))
50-
printf("[007] Cannot call rollback, [%d] %s\n",
51-
mysqli_errno($link), mysqli_error($link));
52-
53-
$result = mysqli_query($link, "SELECT SQL_NO_CACHE * FROM test");
54-
if (!$result)
55-
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
28+
/* Check if rollback was successful */
29+
$result = mysqli_query($link, "SELECT SQL_NO_CACHE * FROM test_transactions_15");
5630
$row = mysqli_fetch_row($result);
5731
mysqli_free_result($result);
58-
5932
var_dump($row);
6033

61-
if (!mysqli_query($link, "DELETE FROM test") ||
62-
!mysqli_query($link, "INSERT INTO test VALUES (2, 'egon')"))
63-
printf("[009] Cannot modify test data, [%d] %s\n",
64-
mysqli_errno($link), mysqli_error($link));
34+
/* Modify data in DB */
35+
mysqli_query($link, "DELETE FROM test_transactions_15");
36+
mysqli_query($link, "INSERT INTO test_transactions_15 VALUES (2, 'egon')");
6537

38+
/* Commit modifications */
6639
mysqli_commit($link);
6740

68-
$result = mysqli_query($link, "SELECT * FROM test");
69-
if (!$result)
70-
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
41+
/* Check if commit was successful */
42+
$result = mysqli_query($link, "SELECT * FROM test_transactions_15");
7143
$row = mysqli_fetch_row($result);
7244
mysqli_free_result($result);
7345

7446
var_dump($row);
7547

76-
mysqli_query($link, "DROP TABLE IF EXISTS test");
7748
mysqli_close($link);
7849
print "done!";
7950
?>
8051
--CLEAN--
8152
<?php
82-
require_once dirname(__DIR__) . "/clean_table.inc";
53+
require_once dirname(__DIR__) . "/test_setup/test_helpers.inc";
54+
tear_down_table_on_default_connection('test_transactions_15');
8355
?>
8456
--EXPECT--
8557
array(2) {

0 commit comments

Comments
 (0)