MDL-37718 release low level recordsets as soon as possible
authorPetr Škoda <commits@skodak.org>
Sat, 26 Jan 2013 16:20:43 +0000 (17:20 +0100)
committerPetr Škoda <commits@skodak.org>
Sat, 26 Jan 2013 16:20:43 +0000 (17:20 +0100)
lib/dml/mssql_native_moodle_recordset.php
lib/dml/mysqli_native_moodle_recordset.php
lib/dml/oci_native_moodle_recordset.php
lib/dml/pgsql_native_moodle_recordset.php
lib/dml/sqlsrv_native_moodle_recordset.php

index 2c7b711..1bc800b 100644 (file)
@@ -41,9 +41,16 @@ class mssql_native_moodle_recordset extends moodle_recordset {
     }
 
     private function fetch_next() {
-        if ($row = mssql_fetch_assoc($this->rsrc)) {
-            $row = array_change_key_case($row, CASE_LOWER);
+        if (!$this->rsrc) {
+            return false;
         }
+        if (!$row = mssql_fetch_assoc($this->rsrc)) {
+            mssql_free_result($this->rsrc);
+            $this->rsrc = null;
+            return false;
+        }
+
+        $row = array_change_key_case($row, CASE_LOWER);
         return $row;
     }
 
index 230ef8c..522eac5 100644 (file)
@@ -49,9 +49,16 @@ class mysqli_native_moodle_recordset extends moodle_recordset {
     }
 
     private function fetch_next() {
-        if ($row = $this->result->fetch_assoc()) {
-            $row = array_change_key_case($row, CASE_LOWER);
+        if (!$this->result) {
+            return false;
         }
+        if (!$row = $this->result->fetch_assoc()) {
+            $this->result->close();
+            $this->result = null;
+            return false;
+        }
+
+        $row = array_change_key_case($row, CASE_LOWER);
         return $row;
     }
 
index e21e231..55ba1af 100644 (file)
@@ -41,11 +41,18 @@ class oci_native_moodle_recordset extends moodle_recordset {
     }
 
     private function fetch_next() {
-        if ($row = oci_fetch_array($this->stmt, OCI_ASSOC + OCI_RETURN_NULLS + OCI_RETURN_LOBS)) {
-            $row = array_change_key_case($row, CASE_LOWER);
-            unset($row['oracle_rownum']);
-            array_walk($row, array('oci_native_moodle_database', 'onespace2empty'));
+        if (!$this->stmt) {
+            return false;
         }
+        if (!$row = oci_fetch_array($this->stmt, OCI_ASSOC + OCI_RETURN_NULLS + OCI_RETURN_LOBS)) {
+            oci_free_statement($this->stmt);
+            $this->stmt = null;
+            return false;
+        }
+
+        $row = array_change_key_case($row, CASE_LOWER);
+        unset($row['oracle_rownum']);
+        array_walk($row, array('oci_native_moodle_database', 'onespace2empty'));
         return $row;
     }
 
index 76fe53e..fd1f905 100644 (file)
@@ -62,7 +62,14 @@ class pgsql_native_moodle_recordset extends moodle_recordset {
     }
 
     private function fetch_next() {
-        $row = pg_fetch_assoc($this->result);
+        if (!$this->result) {
+            return false;
+        }
+        if (!$row = pg_fetch_assoc($this->result)) {
+            pg_free_result($this->result);
+            $this->result = null;
+            return false;
+        }
 
         if ($this->blobs) {
             foreach ($this->blobs as $blob) {
index 6ca88aa..e397e2e 100644 (file)
@@ -41,10 +41,17 @@ class sqlsrv_native_moodle_recordset extends moodle_recordset {
     }
 
     private function fetch_next() {
-        if ($row = sqlsrv_fetch_array($this->rsrc, SQLSRV_FETCH_ASSOC)) {
-            unset($row['sqlsrvrownumber']);
-            $row = array_change_key_case($row, CASE_LOWER);
+        if (!$this->rsrc) {
+            return false;
         }
+        if (!$row = sqlsrv_fetch_array($this->rsrc, SQLSRV_FETCH_ASSOC)) {
+            sqlsrv_free_stmt($this->rsrc);
+            $this->rsrc = null;
+            return false;
+        }
+
+        unset($row['sqlsrvrownumber']);
+        $row = array_change_key_case($row, CASE_LOWER);
         return $row;
     }