home *** CD-ROM | disk | FTP | other *** search
- <?php
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
- /**
- * Contains the DB_QueryTool_Result class
- *
- * PHP versions 4 and 5
- *
- * LICENSE: Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "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 FREEBSD PROJECT 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.
- *
- * @category Database
- * @package DB_QueryTool
- * @author Wolfram Kriesing <wk@visionp.de>
- * @author Paolo Panto <wk@visionp.de>
- * @author Lorenzo Alberton <l dot alberton at quipo dot it>
- * @copyright 2003-2007 Wolfram Kriesing, Paolo Panto, Lorenzo Alberton
- * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
- * @version CVS: $Id: Result.php,v 1.14 2007/11/27 07:45:01 quipo Exp $
- * @link http://pear.php.net/package/DB_QueryTool
- */
-
- /**
- * DB_QueryTool_Result class
- *
- * This result actually contains the 'data' itself, the number of rows
- * returned and some additional info
- * using ZE2 you can also get retrieve data from the result doing the following:
- * <DB_QueryTool_Common-instance>->getAll()->getCount()
- * or
- * <DB_QueryTool_Common-instance>->getAll()->getData()
- *
- * @category Database
- * @package DB_QueryTool
- * @author Wolfram Kriesing <wk@visionp.de>
- * @author Paolo Panto <wk@visionp.de>
- * @author Lorenzo Alberton <l dot alberton at quipo dot it>
- * @copyright 2003-2007 Wolfram Kriesing, Paolo Panto, Lorenzo Alberton
- * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
- * @link http://pear.php.net/package/DB_QueryTool
- */
- class DB_QueryTool_Result
- {
- // {{{ class vars
-
- /**
- * @var array
- */
- var $_data = array();
-
- /**
- * @var array
- */
- var $_dataKeys = array();
-
- /**
- * @var integer
- */
- var $_count = 0;
-
- /**
- * the counter for the methods getFirst, getNext
- * @var array
- */
- var $_counter = null;
-
- // }}}
- // {{{ DB_QueryTool_Result()
-
- /**
- * create a new instance of result with the data returned by the query
- *
- * @param array $data the data returned by the result
- *
- * @version 2002/07/11
- * @author Wolfram Kriesing <wolfram@kriesing.de>
- * @access public
- */
- function DB_QueryTool_Result($data)
- {
- if (!count($data)) {
- $this->_count = 0;
- } else {
- list($firstElement) = $data;
- if (is_array($firstElement)) { // is the array a collection of rows?
- $this->_count = sizeof($data);
- } else {
- if (sizeof($data) > 0) {
- $this->_count = 1;
- } else {
- $this->_count = 0;
- }
- }
- }
- $this->_data = $data;
- }
-
- // }}}
- // {{{ numRows
-
- /**
- * return the number of rows returned. This is an alias for getCount().
- *
- * @return integer
- * @access public
- */
- function numRows()
- {
- return $this->_count;
- }
-
- // }}}
- // {{{ getCount()
-
- /**
- * return the number of rows returned
- *
- * @return integer the number of rows returned
- * @version 2002/07/11
- * @author Wolfram Kriesing <wolfram@kriesing.de>
- * @access public
- */
- function getCount()
- {
- return $this->_count;
- }
-
- // }}}
- // {{{ getData()
-
- /**
- * get all the data returned
- *
- * @param string $key key of the data to retrieve
- *
- * @return array|PEAR_Error
- * @version 2002/07/11
- * @author Wolfram Kriesing <wolfram@kriesing.de>
- * @access public
- */
- function getData($key = null)
- {
- if (is_null($key)) {
- return $this->_data;
- }
- if ($this->_data[$key]) {
- return $this->_data[$key];
- }
- return new PEAR_Error("there is no element with the key '$key'!");
- }
-
- // }}}
- // {{{ getFirst()
-
- /**
- * get the first result set
- * we are not using next, current, and reset, since those ignore keys
- * which are empty or 0
- *
- * @return mixed
- * @version 2002/07/11
- * @author Wolfram Kriesing <wolfram@kriesing.de>
- * @access public
- */
- function getFirst()
- {
- if ($this->getCount() > 0) {
- $this->_dataKeys = array_keys($this->_data);
- $this->_counter = 0;
- return $this->_data[$this->_dataKeys[$this->_counter]];
- }
- return new PEAR_Error('There are no elements!');
- }
-
- // }}}
- // {{{ getNext()
-
- /**
- * Get next result set. If getFirst() has never been called before,
- * it calls that method.
- *
- * @return mixed
- * @access public
- */
- function getNext()
- {
- if (!$this->initDone()) {
- return $this->getFirst();
- }
- if ($this->hasMore()) {
- $this->_counter++;
- return $this->_data[$this->_dataKeys[$this->_counter]];
- }
- return new PEAR_Error('there are no more elements!');
- }
-
- // }}}
- // {{{ hasMore()
-
- /**
- * check if there are other rows
- *
- * @return boolean
- * @access public
- */
- function hasMore()
- {
- if ($this->_counter+1 < $this->getCount()) {
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ fetchRow
-
- /**
- * This function emulates PEAR::DB fetchRow() method.
- * With this method, DB_QueryTool can transparently replace PEAR_DB
- *
- * @return void
- * @todo implement fetchmode support?
- * @access public
- */
- function fetchRow()
- {
- $arr = $this->getNext();
- if (!PEAR::isError($arr)) {
- return $arr;
- }
- return false;
- }
-
- // }}}
- // {{{ initDone
-
- /**
- * Helper method. Check if $this->_dataKeys has been initialized
- *
- * @return boolean
- * @access private
- */
- function initDone()
- {
- return (
- isset($this->_dataKeys) &&
- is_array($this->_dataKeys) &&
- count($this->_dataKeys)
- );
- }
-
- // }}}
-
- //@TODO
- //function getPrevious()
- //function getLast()
- }
- ?>