MDL-25708 recordsets - fix upgradelib and dml stuff
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Sun, 2 Jan 2011 16:12:17 +0000 (17:12 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 25 Jan 2011 18:59:00 +0000 (19:59 +0100)
lib/db/upgradelib.php
lib/dml/moodle_database.php
lib/dml/oci_native_moodle_database.php
lib/dml/pdo_moodle_database.php

index 0653ef7..acfd2d9 100644 (file)
@@ -38,15 +38,14 @@ function upgrade_fix_category_depths() {
     $sql = "SELECT c.id
               FROM {course_categories} c
              WHERE c.parent > 0 AND c.parent NOT IN (SELECT pc.id FROM {course_categories} pc)";
-    if ($rs = $DB->get_recordset_sql($sql)) {
-        foreach ($rs as $cat) {
-            $cat->depth  = 1;
-            $cat->path   = '/'.$cat->id;
-            $cat->parent = 0;
-            $DB->update_record('course_categories', $cat);
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql);
+    foreach ($rs as $cat) {
+        $cat->depth  = 1;
+        $cat->path   = '/'.$cat->id;
+        $cat->parent = 0;
+        $DB->update_record('course_categories', $cat);
     }
+    $rs->close();
 
     // now add path and depth to top level categories
     $sql = "UPDATE {course_categories}
@@ -60,14 +59,13 @@ function upgrade_fix_category_depths() {
         $sql = "SELECT c.id, pc.path
                   FROM {course_categories} c, {course_categories} pc
                  WHERE c.parent=pc.id AND c.depth=0 AND pc.depth=?";
-        if ($rs = $DB->get_recordset_sql($sql, array($parentdepth))) {
-            foreach ($rs as $cat) {
-                $cat->depth = $parentdepth+1;
-                $cat->path  = $cat->path.'/'.$cat->id;
-                $DB->update_record('course_categories', $cat);
-            }
-            $rs->close();
+        $rs = $DB->get_recordset_sql($sql, array($parentdepth));
+        foreach ($rs as $cat) {
+            $cat->depth = $parentdepth+1;
+            $cat->path  = $cat->path.'/'.$cat->id;
+            $DB->update_record('course_categories', $cat);
         }
+        $rs->close();
         $parentdepth++;
         if ($parentdepth > 100) {
             //something must have gone wrong - nobody can have more than 100 levels of categories, right?
@@ -378,7 +376,9 @@ function upgrade_migrate_files_blog() {
 
     $count = $DB->count_records_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'");
 
-    if ($rs = $DB->get_recordset_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'")) {
+    $rs = $DB->get_recordset_select('post', "module='blog' AND attachment IS NOT NULL AND attachment <> '1'");
+
+    if ($rs->valid()) {
 
         upgrade_set_timeout(60*20); // set up timeout, may also abort execution
 
@@ -419,8 +419,8 @@ function upgrade_migrate_files_blog() {
             $DB->update_record('post', $entry);
             $pbar->update($i, $count, "Migrated blog attachments - $i/$count.");
         }
-        $rs->close();
     }
+    $rs->close();
 
     @rmdir("$CFG->dataroot/blog/attachments/");
     @rmdir("$CFG->dataroot/blog/");
@@ -539,13 +539,12 @@ function upgrade_fix_incorrect_mnethostids() {
 
     $params = array_merge($in_params, array($current_mnet_localhost_host->id));
 
-    if ($rs = $DB->get_recordset_sql($sql, $params)) {
-        foreach ($rs as $rec) {
-            $DB->set_field('user', 'mnethostid', $current_mnet_localhost_host->id, array('id' => $rec->id));
-            upgrade_set_timeout(60); /// Give upgrade at least 60 more seconds
-        }
-        $rs->close();
+    $rs = $DB->get_recordset_sql($sql, $params);
+    foreach ($rs as $rec) {
+        $DB->set_field('user', 'mnethostid', $current_mnet_localhost_host->id, array('id' => $rec->id));
+        upgrade_set_timeout(60); /// Give upgrade at least 60 more seconds
     }
+    $rs->close();
 
     // fix up any host records that have incorrect ids
     $DB->set_field_select('mnet_host', 'applicationid', $moodleapplicationid, 'id = ? or id = ?', array($current_mnet_localhost_host->id, $current_mnet_all_hosts_host->id));
@@ -642,4 +641,4 @@ function update_fix_automated_backup_config() {
 
     unset_config('backup_sche_gradebook_history');
     unset_config('disablescheduleddbackups');
-}
\ No newline at end of file
+}
index 3fa9b29..b21edf1 100644 (file)
@@ -1550,12 +1550,10 @@ abstract class moodle_database {
      * @throws dml_exception if error
      */
     public function record_exists_sql($sql, array $params=null) {
-        if ($mrs = $this->get_recordset_sql($sql, $params, 0, 1)) {
-            $return = $mrs->valid();
-            $mrs->close();
-            return $return;
-        }
-        return false;
+        $mrs = $this->get_recordset_sql($sql, $params, 0, 1);
+        $return = $mrs->valid();
+        $mrs->close();
+        return $return;
     }
 
     /**
index 7da5810..1ab255f 100644 (file)
@@ -968,15 +968,14 @@ class oci_native_moodle_database extends moodle_database {
         $strictness = (int)$strictness;
         if ($strictness == IGNORE_MULTIPLE) {
             // do not limit here - ORA does not like that
-            if (!$rs = $this->get_recordset_sql($sql, $params)) {
-                return false;
-            }
-            foreach ($rs as $result) {
-                $rs->close();
-                return $result;
+            $rs = $this->get_recordset_sql($sql, $params);
+            $result = false;
+            foreach ($rs as $rec) {
+                $result = $rec;
+                break;
             }
             $rs->close();
-            return false;
+            return $result;
         }
         return parent::get_record_sql($sql, $params, $strictness);
     }
index 9af6193..2cc8770 100644 (file)
@@ -287,7 +287,9 @@ abstract class pdo_moodle_database extends moodle_database {
      * @return array of values
      */
     public function get_fieldset_sql($sql, array $params=null) {
-        if(!$rs = $this->get_recordset_sql($sql, $params)) {
+        $rs = $this->get_recordset_sql($sql, $params);
+        if (!$rs->valid()) {
+            $rs->close(); // Not going to iterate (but exit), close rs
             return false;
         }
         $result = array();
@@ -312,7 +314,9 @@ abstract class pdo_moodle_database extends moodle_database {
      * @return array of objects, or empty array if no records were found, or false if an error occurred.
      */
     public function get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0) {
-        if(!$rs = $this->get_recordset_sql($sql, $params, $limitfrom, $limitnum)) {
+        $rs = $this->get_recordset_sql($sql, $params, $limitfrom, $limitnum);
+        if (!$rs->valid()) {
+            $rs->close(); // Not going to iterate (but exit), close rs
             return false;
         }
         $objects = array();