From: poltawski Date: Sat, 27 Jun 2009 14:46:44 +0000 (+0000) Subject: dmllib/pdo MDL-19641 - Fixup PDO (SQLlite) support X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=d5377019e46b2a3d08693a56a085446d7a68b672;p=moodle.git dmllib/pdo MDL-19641 - Fixup PDO (SQLlite) support By changing the behaviour of the recordset to match the native recordset we fix the major compatbility problems Before: Can't get a working install to run tests After: 353 passes, 10 fails and 0 exceptions. (and moodle can install on my iphone) --- diff --git a/lib/dml/pdo_moodle_recordset.php b/lib/dml/pdo_moodle_recordset.php index 7ae8650410..c109821265 100644 --- a/lib/dml/pdo_moodle_recordset.php +++ b/lib/dml/pdo_moodle_recordset.php @@ -21,7 +21,7 @@ * * @package moodlecore * @subpackage DML - * @copyright 2008 Andrei Bautu + * @copyright 2008 Petr Skoda (http://skodak.org) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -33,40 +33,51 @@ require_once($CFG->libdir.'/dml/moodle_recordset.php'); class pdo_moodle_recordset extends moodle_recordset { private $sth; - protected $fields; - protected $rowCount = -1; + protected $current; public function __construct($sth) { $this->sth = $sth; $this->sth->setFetchMode(PDO::FETCH_ASSOC); + $this->current = $this->fetch_next(); + } + + public function __destruct() { + $this->close(); + } + + private function fetch_next() { + if ($row = $this->sth->fetch()) { + $row = array_change_key_case($row, CASE_LOWER); + } + return $row; } public function current() { - return (object)$this->fields; + return (object)$this->current; } public function key() { /// return first column value as key - return reset($this->fields); + if (!$this->current) { + return false; + } + $key = reset($this->current); + return $key; } public function next() { - $this->fields = $this->sth->fetch(); - if ($this->fields) { - ++$this->rowCount; - } - return $this->fields !== false; + $this->current = $this->fetch_next(); } public function valid() { - if($this->rowCount < 0) { - $this->rewind(); - } - return $this->fields !== FALSE; + return !empty($this->current); } public function close() { - $this->sth->closeCursor(); - $this->sth = null; + if ($this->sth) { + $this->sth->closeCursor(); + $this->sth = null; + } + $this->current = null; } }