<?php

namespace SilverStripe\ORM\Connect;

use PDOStatement;
use PDO;

/**
 * A result-set from a PDO database.
 */
class PDOQuery extends Query {
	/**
	 * The internal MySQL handle that points to the result set.
	 * @var PDOStatement
	 */
	protected $statement = null;

	protected $results = null;

	/**
	 * Hook the result-set given into a Query class, suitable for use by SilverStripe.
	 * @param PDOStatement $statement The internal PDOStatement containing the results
	 */
	public function __construct(PDOStatement $statement) {
		$this->statement = $statement;
		// Since no more than one PDOStatement for any one connection can be safely
		// traversed, each statement simply requests all rows at once for safety.
		// This could be re-engineered to call fetchAll on an as-needed basis
		$this->results = $statement->fetchAll(PDO::FETCH_ASSOC);
		$statement->closeCursor();
	}

	public function seek($row) {
		$this->rowNum = $row - 1;
		return $this->nextRecord();
	}

	public function numRecords() {
		return count($this->results);
	}

	public function nextRecord() {
		$index = $this->rowNum + 1;

		if (isset($this->results[$index])) {
			return $this->results[$index];
		} else {
			return false;
		}
	}

}