MDL-37718 release low level recordsets as soon as possible

This commit is contained in:
Petr Škoda
2013-01-26 17:20:43 +01:00
parent b3778a0dec
commit 9e6bfb5221
5 changed files with 47 additions and 12 deletions
+9 -2
View 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;
}
+9 -2
View 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;
}
+11 -4
View 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;
}
+8 -1
View 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) {
+10 -3
View 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;
}