MDL-45536 atto_html: Update the textarea size when switching to HTML view
[moodle.git] / lib / dml / pgsql_native_moodle_recordset.php
blobfd1f905e3702c40b1a3bfa667ad61ae9d5c33bd9
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
17 /**
18 * Native postgresql recordset.
20 * @package core_dml
21 * @copyright 2008 Petr Skoda (http://skodak.org)
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 defined('MOODLE_INTERNAL') || die();
27 require_once(__DIR__.'/moodle_recordset.php');
29 /**
30 * pgsql specific moodle recordset class
32 * @package core_dml
33 * @copyright 2008 Petr Skoda (http://skodak.org)
34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36 class pgsql_native_moodle_recordset extends moodle_recordset {
38 protected $result;
39 /** @var current row as array.*/
40 protected $current;
41 protected $bytea_oid;
42 protected $blobs = array();
44 public function __construct($result, $bytea_oid) {
45 $this->result = $result;
46 $this->bytea_oid = $bytea_oid;
48 // find out if there are any blobs
49 $numrows = pg_num_fields($result);
50 for($i=0; $i<$numrows; $i++) {
51 $type_oid = pg_field_type_oid($result, $i);
52 if ($type_oid == $this->bytea_oid) {
53 $this->blobs[] = pg_field_name($result, $i);
57 $this->current = $this->fetch_next();
60 public function __destruct() {
61 $this->close();
64 private function fetch_next() {
65 if (!$this->result) {
66 return false;
68 if (!$row = pg_fetch_assoc($this->result)) {
69 pg_free_result($this->result);
70 $this->result = null;
71 return false;
74 if ($this->blobs) {
75 foreach ($this->blobs as $blob) {
76 $row[$blob] = $row[$blob] !== null ? pg_unescape_bytea($row[$blob]) : null;
80 return $row;
83 public function current() {
84 return (object)$this->current;
87 public function key() {
88 // return first column value as key
89 if (!$this->current) {
90 return false;
92 $key = reset($this->current);
93 return $key;
96 public function next() {
97 $this->current = $this->fetch_next();
100 public function valid() {
101 return !empty($this->current);
104 public function close() {
105 if ($this->result) {
106 pg_free_result($this->result);
107 $this->result = null;
109 $this->current = null;
110 $this->blobs = null;