diff options
author | Wez Furlong <wez@php.net> | 2005-07-09 04:28:45 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2005-07-09 04:28:45 +0000 |
commit | 007f571beb5c0c0102c69ffd3af6fb76164ba9ca (patch) | |
tree | d7be27cb14907b3d2048fc067d87fac9aec0b9c7 | |
parent | ba66cac1cf1756da2434e8587f91af33d4d98d86 (diff) | |
download | php-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.phpt | 14 | ||||
-rw-r--r-- | ext/pdo/tests/pdo_test.inc | 9 |
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; + } } |