summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-07-09 04:28:45 +0000
committerWez Furlong <wez@php.net>2005-07-09 04:28:45 +0000
commit007f571beb5c0c0102c69ffd3af6fb76164ba9ca (patch)
treed7be27cb14907b3d2048fc067d87fac9aec0b9c7
parentba66cac1cf1756da2434e8587f91af33d4d98d86 (diff)
downloadphp-git-007f571beb5c0c0102c69ffd3af6fb76164ba9ca.tar.gz
for the transactions test case, detect working transactions before attempting to run the tests.
Additional ugliness required because mysql does stupid stuff like this: mysql> CREATE TABLE foo (id int) TYPE=innodb; Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql> SHOW CREATE TABLE foo; CREATE TABLE `foo` ( `id` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 In addition, BEGIN, COMMIT and ROLLBACK all succeed, even when no tables support transactions.
-rw-r--r--ext/pdo/tests/pdo_017.phpt14
-rw-r--r--ext/pdo/tests/pdo_test.inc9
2 files changed, 18 insertions, 5 deletions
diff --git a/ext/pdo/tests/pdo_017.phpt b/ext/pdo/tests/pdo_017.phpt
index 36bdb029c8..def132e569 100644
--- a/ext/pdo/tests/pdo_017.phpt
+++ b/ext/pdo/tests/pdo_017.phpt
@@ -7,15 +7,19 @@ $dir = getenv('REDIR_TEST_DIR');
if (false == $dir) die('skip no driver');
require_once $dir . 'pdo_test.inc';
PDOTest::skip();
-/* TODO:
+
$db = PDOTest::factory();
try {
$db->beginTransaction();
} catch (PDOException $e) {
- # check sqlstate to see if transactions
- # are not implemented; if so, skip
+ die('skip no working transactions: ' . $e->getMessage());
+}
+
+if ($db->getAttribute(PDO_ATTR_DRIVER_NAME) == 'mysql') {
+ if (false === PDOTest::detect_transactional_mysql_engine($db)) {
+ die('skip your mysql configuration does not support working transactions');
+ }
}
-*/
?>
--FILE--
<?php
@@ -23,7 +27,7 @@ require getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
$db = PDOTest::factory();
if ($db->getAttribute(PDO_ATTR_DRIVER_NAME) == 'mysql') {
- $suf = ' Type=InnoDB';
+ $suf = ' Type=' . PDOTest::detect_transactional_mysql_engine($db);
} else {
$suf = '';
}
diff --git a/ext/pdo/tests/pdo_test.inc b/ext/pdo/tests/pdo_test.inc
index 13ab1c1d5f..79b2a9d168 100644
--- a/ext/pdo/tests/pdo_test.inc
+++ b/ext/pdo/tests/pdo_test.inc
@@ -43,6 +43,15 @@ class PDOTest {
die("skip " . $e->getMessage());
}
}
+
+ static function detect_transactional_mysql_engine($db) {
+ foreach ($db->query('show engines') as $row) {
+ if ($row[1] == 'YES' && ($row[0] == 'INNOBASE' || $row[0] == 'BDB')) {
+ return $row[0];
+ }
+ }
+ return false;
+ }
}