263 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | PHP version 5                                                        |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox,                 |
 | 
						|
// | Stig. S. Bakken, Lukas Smith                                         |
 | 
						|
// | All rights reserved.                                                 |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB  |
 | 
						|
// | API as well as database abstraction for PHP applications.            |
 | 
						|
// | This LICENSE is in the BSD license style.                            |
 | 
						|
// |                                                                      |
 | 
						|
// | Redistribution and use in source and binary forms, with or without   |
 | 
						|
// | modification, are permitted provided that the following conditions   |
 | 
						|
// | are met:                                                             |
 | 
						|
// |                                                                      |
 | 
						|
// | Redistributions of source code must retain the above copyright       |
 | 
						|
// | notice, this list of conditions and the following disclaimer.        |
 | 
						|
// |                                                                      |
 | 
						|
// | Redistributions in binary form must reproduce the above copyright    |
 | 
						|
// | notice, this list of conditions and the following disclaimer in the  |
 | 
						|
// | documentation and/or other materials provided with the distribution. |
 | 
						|
// |                                                                      |
 | 
						|
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,    |
 | 
						|
// | Lukas Smith nor the names of his contributors may be used to endorse |
 | 
						|
// | or promote products derived from this software without specific prior|
 | 
						|
// | written permission.                                                  |
 | 
						|
// |                                                                      |
 | 
						|
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
 | 
						|
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
 | 
						|
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
 | 
						|
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
 | 
						|
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          |
 | 
						|
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
 | 
						|
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
 | 
						|
// |  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  |
 | 
						|
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
 | 
						|
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
 | 
						|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          |
 | 
						|
// | POSSIBILITY OF SUCH DAMAGE.                                          |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Author: Lukas Smith <smith@pooteeweet.org>                           |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
//
 | 
						|
// $Id$
 | 
						|
 | 
						|
/**
 | 
						|
 * PHP5 Iterator
 | 
						|
 *
 | 
						|
 * @package  MDB2
 | 
						|
 * @category Database
 | 
						|
 * @author   Lukas Smith <smith@pooteeweet.org>
 | 
						|
 */
 | 
						|
class MDB2_Iterator implements Iterator
 | 
						|
{
 | 
						|
    protected $fetchmode;
 | 
						|
    /**
 | 
						|
     * @var MDB2_Result_Common
 | 
						|
     */
 | 
						|
    protected $result;
 | 
						|
    protected $row;
 | 
						|
 | 
						|
    // {{{ constructor
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor
 | 
						|
     */
 | 
						|
    public function __construct(MDB2_Result_Common $result, $fetchmode = MDB2_FETCHMODE_DEFAULT)
 | 
						|
    {
 | 
						|
        $this->result = $result;
 | 
						|
        $this->fetchmode = $fetchmode;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ seek()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Seek forward to a specific row in a result set
 | 
						|
     *
 | 
						|
     * @param int number of the row where the data can be found
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function seek($rownum)
 | 
						|
    {
 | 
						|
        $this->row = null;
 | 
						|
        if ($this->result) {
 | 
						|
            $this->result->seek($rownum);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ next()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Fetch next row of data
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function next()
 | 
						|
    {
 | 
						|
        $this->row = null;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ current()
 | 
						|
 | 
						|
    /**
 | 
						|
     * return a row of data
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function current()
 | 
						|
    {
 | 
						|
        if (null === $this->row) {
 | 
						|
            $row = $this->result->fetchRow($this->fetchmode);
 | 
						|
            if (MDB2::isError($row)) {
 | 
						|
                $row = false;
 | 
						|
            }
 | 
						|
            $this->row = $row;
 | 
						|
        }
 | 
						|
        return $this->row;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ valid()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check if the end of the result set has been reached
 | 
						|
     *
 | 
						|
     * @return bool true/false, false is also returned on failure
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function valid()
 | 
						|
    {
 | 
						|
        return (bool)$this->current();
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ free()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Free the internal resources associated with result.
 | 
						|
     *
 | 
						|
     * @return bool|MDB2_Error true on success, false|MDB2_Error if result is invalid
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function free()
 | 
						|
    {
 | 
						|
        if ($this->result) {
 | 
						|
            return $this->result->free();
 | 
						|
        }
 | 
						|
        $this->result = false;
 | 
						|
        $this->row = null;
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ key()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the row number
 | 
						|
     *
 | 
						|
     * @return int|bool|MDB2_Error true on success, false|MDB2_Error if result is invalid
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function key()
 | 
						|
    {
 | 
						|
        if ($this->result) {
 | 
						|
            return $this->result->rowCount();
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ rewind()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Seek to the first row in a result set
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function rewind()
 | 
						|
    {
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ destructor
 | 
						|
 | 
						|
    /**
 | 
						|
     * Destructor
 | 
						|
     */
 | 
						|
    public function __destruct()
 | 
						|
    {
 | 
						|
        $this->free();
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * PHP5 buffered Iterator
 | 
						|
 *
 | 
						|
 * @package  MDB2
 | 
						|
 * @category Database
 | 
						|
 * @author   Lukas Smith <smith@pooteeweet.org>
 | 
						|
 */
 | 
						|
class MDB2_BufferedIterator extends MDB2_Iterator implements SeekableIterator
 | 
						|
{
 | 
						|
    // {{{ valid()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check if the end of the result set has been reached
 | 
						|
     *
 | 
						|
     * @return bool|MDB2_Error true on success, false|MDB2_Error if result is invalid
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function valid()
 | 
						|
    {
 | 
						|
        if ($this->result) {
 | 
						|
            return $this->result->valid();
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{count()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the number of rows in a result object
 | 
						|
     *
 | 
						|
     * @return int|MDB2_Error number of rows, false|MDB2_Error if result is invalid
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function count()
 | 
						|
    {
 | 
						|
        if ($this->result) {
 | 
						|
            return $this->result->numRows();
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
 | 
						|
    // {{{ rewind()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Seek to the first row in a result set
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     * @access public
 | 
						|
     */
 | 
						|
    public function rewind()
 | 
						|
    {
 | 
						|
        $this->seek(0);
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
}
 | 
						|
 | 
						|
?>
 |