? includes/database/pgsql/query.inc.new
? sites/mysql7.lupe
? sites/default/files
? sites/default/settings.php
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.37
diff -u -p -r1.37 database_test.test
--- modules/simpletest/tests/database_test.test	11 Jan 2009 10:57:20 -0000	1.37
+++ modules/simpletest/tests/database_test.test	20 Jan 2009 03:40:17 -0000
@@ -2047,19 +2047,35 @@ class DatabaseInvalidDataTestCase extend
           'job' => 'Singer',
         ))
         ->execute();
-        $this->assertTrue(FALSE, t('Insert succeedded when it should not have.'));
+      $this->fail(t('Insert succeedded when it should not have.'));
     }
     catch (Exception $e) {
-      // Check the first record was inserted.
-      $result = db_query('SELECT name FROM {test} WHERE age = :age', array(':age' => 63));
-      $this->assertIdentical($result->fetchField(), 'Elvis', t('First record inserted as expected.'));
+      // Check if the first record was inserted.
+      $name = db_query('SELECT name FROM {test} WHERE age = :age', array(':age' => 63))->fetchField();
+
+      if ($name == 'Elvis') {
+        if (!Database::getActiveConnection()->supportsTransactions()) {
+          // This is an expected fail.
+          // Database engines that don't support transactions can leave partial
+          // inserts in place when an error occurs. This is the case for MySQL
+          // when running on a MyISAM table.
+          $this->pass(t("The whole transaction has not been rolled-back when a duplicate key insert occurs, this is expected because the database doesn't support transactions"));
+        }
+        else {
+          $this->fail(t('The whole transaction is rolled back when a duplicate key insert occurs.'));
+        }
+      }
+      else {
+        $this->pass(t('The whole transaction is rolled back when a duplicate key insert occurs.'));
+      }
 
       // Ensure the other values were not inserted.
       $record = db_select('test')
         ->fields('test', array('name', 'age'))
         ->condition('age', array(17, 75),'IN')
         ->execute()->fetchObject();
-      $this->assertFalse($record, t('Insert aborted as expected.'));
+
+      $this->assertFalse($record, t('The rest of the insert aborted as expected.'));
     }
   }
 
