From 3b5f6e6c2aa770e9183d1069fef5f4e06a10563a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0koda?= Date: Sun, 1 Jul 2012 21:35:37 +0200 Subject: [PATCH] MDL-34130 test recordset data is static We do not want recordset results to be affected by subsequent update or delete queries. --- lib/dml/tests/dml_test.php | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/lib/dml/tests/dml_test.php b/lib/dml/tests/dml_test.php index 652d0222b44..90994452396 100644 --- a/lib/dml/tests/dml_test.php +++ b/lib/dml/tests/dml_test.php @@ -1011,6 +1011,58 @@ class dml_testcase extends database_driver_testcase { // * where_clause() is used internally and is tested in test_get_records() } + public function test_get_recordset_static() { + $DB = $this->tdb; + $dbman = $DB->get_manager(); + + $table = $this->get_test_table(); + $tablename = $table->getName(); + + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + $dbman->create_table($table); + + $DB->insert_record($tablename, array('course' => 1)); + $DB->insert_record($tablename, array('course' => 2)); + $DB->insert_record($tablename, array('course' => 3)); + $DB->insert_record($tablename, array('course' => 4)); + + $rs = $DB->get_recordset($tablename, array(), 'id'); + + $DB->set_field($tablename, 'course', 666, array('course'=>1)); + $DB->delete_records($tablename, array('course'=>2)); + + $i = 0; + foreach($rs as $record) { + $i++; + $this->assertEquals($i, $record->course); + } + $rs->close(); + $this->assertEquals(4, $i); + + // Now repeat with limits because it may use different code. + $DB->delete_records($tablename, array()); + + $DB->insert_record($tablename, array('course' => 1)); + $DB->insert_record($tablename, array('course' => 2)); + $DB->insert_record($tablename, array('course' => 3)); + $DB->insert_record($tablename, array('course' => 4)); + + $rs = $DB->get_recordset($tablename, array(), 'id', '*', 0, 3); + + $DB->set_field($tablename, 'course', 666, array('course'=>1)); + $DB->delete_records($tablename, array('course'=>2)); + + $i = 0; + foreach($rs as $record) { + $i++; + $this->assertEquals($i, $record->course); + } + $rs->close(); + $this->assertEquals(3, $i); + } + public function test_get_recordset_iterator_keys() { $DB = $this->tdb; $dbman = $DB->get_manager();