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)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user