From d719d59f25e70d3a73ea0f65a70af83ac0c6fc7b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Petr=20S=CC=8Ckoda?= Date: Wed, 26 Sep 2012 10:51:03 +0200 Subject: [PATCH] MDL-35506 add more transaction error tests --- lib/dml/tests/dml_test.php | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/lib/dml/tests/dml_test.php b/lib/dml/tests/dml_test.php index 1260e03149e..6faf7522b5b 100644 --- a/lib/dml/tests/dml_test.php +++ b/lib/dml/tests/dml_test.php @@ -4199,6 +4199,7 @@ class dml_testcase extends database_driver_testcase { $table->add_index('course', XMLDB_INDEX_UNIQUE, array('course')); $dbman->create_table($table); + // Test error on SQL_QUERY_INSERT. $transaction = $DB->start_delegated_transaction(); $this->assertEquals(0, $DB->count_records($tablename)); $DB->insert_record($tablename, (object)array('course'=>1)); @@ -4213,6 +4214,59 @@ class dml_testcase extends database_driver_testcase { $transaction->allow_commit(); $this->assertEquals(2, $DB->count_records($tablename)); $this->assertFalse($DB->is_transaction_started()); + + // Test error on SQL_QUERY_SELECT. + $DB->delete_records($tablename); + $transaction = $DB->start_delegated_transaction(); + $this->assertEquals(0, $DB->count_records($tablename)); + $DB->insert_record($tablename, (object)array('course'=>1)); + $this->assertEquals(1, $DB->count_records($tablename)); + try { + $DB->get_records_sql('s e l e c t'); + } catch (Exception $e) { + // This must be ignored and it must not roll back the whole transaction. + } + $DB->insert_record($tablename, (object)array('course'=>2)); + $this->assertEquals(2, $DB->count_records($tablename)); + $transaction->allow_commit(); + $this->assertEquals(2, $DB->count_records($tablename)); + $this->assertFalse($DB->is_transaction_started()); + + // Test error on structure SQL_QUERY_UPDATE. + $DB->delete_records($tablename); + $transaction = $DB->start_delegated_transaction(); + $this->assertEquals(0, $DB->count_records($tablename)); + $DB->insert_record($tablename, (object)array('course'=>1)); + $this->assertEquals(1, $DB->count_records($tablename)); + try { + $DB->execute('xxxx'); + } catch (Exception $e) { + // This must be ignored and it must not roll back the whole transaction. + } + $DB->insert_record($tablename, (object)array('course'=>2)); + $this->assertEquals(2, $DB->count_records($tablename)); + $transaction->allow_commit(); + $this->assertEquals(2, $DB->count_records($tablename)); + $this->assertFalse($DB->is_transaction_started()); + + // Test error on structure SQL_QUERY_STRUCTURE. + $DB->delete_records($tablename); + $transaction = $DB->start_delegated_transaction(); + $this->assertEquals(0, $DB->count_records($tablename)); + $DB->insert_record($tablename, (object)array('course'=>1)); + $this->assertEquals(1, $DB->count_records($tablename)); + try { + $DB->change_database_structure('xxxx'); + } catch (Exception $e) { + // This must be ignored and it must not roll back the whole transaction. + } + $DB->insert_record($tablename, (object)array('course'=>2)); + $this->assertEquals(2, $DB->count_records($tablename)); + $transaction->allow_commit(); + $this->assertEquals(2, $DB->count_records($tablename)); + $this->assertFalse($DB->is_transaction_started()); + + // NOTE: SQL_QUERY_STRUCTURE is intentionally not tested here because it should never fail. } function test_onelevel_rollback() { -- 2.11.4.GIT