<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * TSM database result.   See [Results](/database/results) for usage and examples.
 *
 * @package    PTA
 * @subpackage TSM
 * @category   Query/Result
 * @author     Deon George
 * @copyright  (c) 2010 phpTSMadmin Development Team
 * @license    http://phptsmadmin.sf.net/license.html
 */
class Database_TSM_Result extends Database_Result {

	protected $_internal_row = 0;
	private $_rows;

	public function __construct($result, $sql, $as_object = FALSE, array $params = NULL)
	{
		parent::__construct($result, $sql, $as_object, $params);

		foreach ($result as $line) {
			if (! trim($line)) {
				$this->_internal_row++;
				continue;
			}

			list($k,$v) = explode(':',$line,2);

			$this->_rows[$this->_internal_row][trim($k)] = trim($v);
		}

		$this->_total_rows = $this->_internal_row;
		$this->_internal_row = 0;
	}

	public function __destruct()
	{
		return;
	}

	public function seek($offset)
	{
		if ($this->offsetExists($offset))
		{
			// Set the current row to the offset
			$this->_current_row = $this->_internal_row = $offset;

			return TRUE;
		}
		else
		{
			return FALSE;
		}
	}

	public function current()
	{
		if ($this->_current_row !== $this->_internal_row AND ! $this->seek($this->_current_row))
			return FALSE;

		// Increment internal row for optimization assuming rows are fetched in order
		$this->_internal_row++;

		if ($this->_as_object === TRUE)
		{
			// Return an stdClass
			return $this;
		}
		elseif (is_string($this->_as_object))
		{
			// Return an object of given class name
			$o = new $this->_as_object;

			return $o->_load_values($this->_rows[$this->_current_row++]);
		}
		else
		{
			// Return an array of the row
			return $this->_rows[$this->_current_row++];
		}
	}

} // End Database_TSM_Result
?>
