Skip to content
Browse files

Merge branch 'MDL-29198_21' of git://github.com/stronk7/moodle into M…

…OODLE_21_STABLE
  • Loading branch information...
2 parents 3cabe2d + 7a8a938 commit 5f856fdfe91b5b99813a2283967bce4fc4907efc @nebgor nebgor committed Sep 5, 2011
Showing with 22 additions and 1 deletion.
  1. +3 −1 lib/dml/moodle_database.php
  2. +19 −0 lib/dml/simpletest/testdml.php
View
4 lib/dml/moodle_database.php
@@ -1600,7 +1600,9 @@ public function record_exists_sql($sql, array $params=null) {
* @throws dml_exception if error
*/
public function delete_records($table, array $conditions=null) {
- if (is_null($conditions)) {
+ // truncate is drop/create (DDL), not transactional safe,
+ // so we don't use the shortcut within them. MDL-29198
+ if (is_null($conditions) && empty($this->transactions)) {
return $this->execute("TRUNCATE TABLE {".$table."}");
}
list($select, $params) = $this->where_clause($table, $conditions);
View
19 lib/dml/simpletest/testdml.php
@@ -3994,6 +3994,25 @@ function test_concurent_transactions() {
$transaction->allow_commit();
$this->assertEqual(2, $DB2->count_records($tablename));
+ // let's try delete all is also working on (this checks MDL-29198)
+ // initially both connections see all the records in the table (2)
+ $this->assertEqual(2, $DB->count_records($tablename));
+ $this->assertEqual(2, $DB2->count_records($tablename));
+ $transaction = $DB->start_delegated_transaction();
+
+ // delete all from within transaction
+ $DB->delete_records($tablename);
+
+ // transactional $DB, sees 0 records now
+ $this->assertEqual(0, $DB->count_records($tablename));
+
+ // others ($DB2) get no changes yet
+ $this->assertEqual(2, $DB2->count_records($tablename));
+
+ // now commit and we should see changes
+ $transaction->allow_commit();
+ $this->assertEqual(0, $DB2->count_records($tablename));
+
$DB2->dispose();
}

0 comments on commit 5f856fd

Please sign in to comment.
Something went wrong with that request. Please try again.