From: Wez Furlong Date: Sat, 9 Jul 2005 04:28:45 +0000 (+0000) Subject: for the transactions test case, detect working transactions before attempting to... X-Git-Tag: php-5.1.0b3~67 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=007f571beb5c0c0102c69ffd3af6fb76164ba9ca;p=php 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. --- 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-- 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; + } }