2 // This file is part of Moodle - http://moodle.org/
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.
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/>.
18 * Native postgresql recordset.
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');
30 * pgsql specific moodle recordset class
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
{
39 /** @var current row as array.*/
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() {
64 private function fetch_next() {
68 if (!$row = pg_fetch_assoc($this->result
)) {
69 pg_free_result($this->result
);
75 foreach ($this->blobs
as $blob) {
76 $row[$blob] = $row[$blob] !== null ?
pg_unescape_bytea($row[$blob]) : null;
83 public function current() {
84 return (object)$this->current
;
87 public function key() {
88 // return first column value as key
89 if (!$this->current
) {
92 $key = reset($this->current
);
96 public function next() {
97 $this->current
= $this->fetch_next();
100 public function valid() {
101 return !empty($this->current
);
104 public function close() {
106 pg_free_result($this->result
);
107 $this->result
= null;
109 $this->current
= null;