1<?php 2// +----------------------------------------------------------------------+ 3// | PHP version 5 | 4// +----------------------------------------------------------------------+ 5// | Copyright (c) 1998-2006 Manuel Lemos, Tomas V.V.Cox, | 6// | Stig. S. Bakken, Lukas Smith | 7// | All rights reserved. | 8// +----------------------------------------------------------------------+ 9// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB | 10// | API as well as database abstraction for PHP applications. | 11// | This LICENSE is in the BSD license style. | 12// | | 13// | Redistribution and use in source and binary forms, with or without | 14// | modification, are permitted provided that the following conditions | 15// | are met: | 16// | | 17// | Redistributions of source code must retain the above copyright | 18// | notice, this list of conditions and the following disclaimer. | 19// | | 20// | Redistributions in binary form must reproduce the above copyright | 21// | notice, this list of conditions and the following disclaimer in the | 22// | documentation and/or other materials provided with the distribution. | 23// | | 24// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, | 25// | Lukas Smith nor the names of his contributors may be used to endorse | 26// | or promote products derived from this software without specific prior| 27// | written permission. | 28// | | 29// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 30// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 31// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 32// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | 33// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | 34// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | 35// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS| 36// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | 37// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 38// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY| 39// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 40// | POSSIBILITY OF SUCH DAMAGE. | 41// +----------------------------------------------------------------------+ 42// | Author: Lukas Smith <smith@pooteeweet.org> | 43// +----------------------------------------------------------------------+ 44// 45// $Id: Iterator.php 327310 2012-08-27 15:16:18Z danielc $ 46 47/** 48 * PHP5 Iterator 49 * 50 * @package MDB2 51 * @category Database 52 * @author Lukas Smith <smith@pooteeweet.org> 53 */ 54class MDB2_Iterator implements Iterator 55{ 56 protected $fetchmode; 57 /** 58 * @var MDB2_Result_Common 59 */ 60 protected $result; 61 protected $row; 62 63 // {{{ constructor 64 65 /** 66 * Constructor 67 */ 68 public function __construct(MDB2_Result_Common $result, $fetchmode = MDB2_FETCHMODE_DEFAULT) 69 { 70 $this->result = $result; 71 $this->fetchmode = $fetchmode; 72 } 73 // }}} 74 75 // {{{ seek() 76 77 /** 78 * Seek forward to a specific row in a result set 79 * 80 * @param int number of the row where the data can be found 81 * 82 * @return void 83 * @access public 84 */ 85 public function seek($rownum) 86 { 87 $this->row = null; 88 if ($this->result) { 89 $this->result->seek($rownum); 90 } 91 } 92 // }}} 93 94 // {{{ next() 95 96 /** 97 * Fetch next row of data 98 * 99 * @return void 100 * @access public 101 */ 102 public function next() 103 { 104 $this->row = null; 105 } 106 // }}} 107 108 // {{{ current() 109 110 /** 111 * return a row of data 112 * 113 * @return void 114 * @access public 115 */ 116 public function current() 117 { 118 if (null === $this->row) { 119 $row = $this->result->fetchRow($this->fetchmode); 120 if (MDB2::isError($row)) { 121 $row = false; 122 } 123 $this->row = $row; 124 } 125 return $this->row; 126 } 127 // }}} 128 129 // {{{ valid() 130 131 /** 132 * Check if the end of the result set has been reached 133 * 134 * @return bool true/false, false is also returned on failure 135 * @access public 136 */ 137 public function valid() 138 { 139 return (bool)$this->current(); 140 } 141 // }}} 142 143 // {{{ free() 144 145 /** 146 * Free the internal resources associated with result. 147 * 148 * @return bool|MDB2_Error true on success, false|MDB2_Error if result is invalid 149 * @access public 150 */ 151 public function free() 152 { 153 if ($this->result) { 154 return $this->result->free(); 155 } 156 $this->result = false; 157 $this->row = null; 158 return false; 159 } 160 // }}} 161 162 // {{{ key() 163 164 /** 165 * Returns the row number 166 * 167 * @return int|bool|MDB2_Error true on success, false|MDB2_Error if result is invalid 168 * @access public 169 */ 170 public function key() 171 { 172 if ($this->result) { 173 return $this->result->rowCount(); 174 } 175 return false; 176 } 177 // }}} 178 179 // {{{ rewind() 180 181 /** 182 * Seek to the first row in a result set 183 * 184 * @return void 185 * @access public 186 */ 187 public function rewind() 188 { 189 } 190 // }}} 191 192 // {{{ destructor 193 194 /** 195 * Destructor 196 */ 197 public function __destruct() 198 { 199 $this->free(); 200 } 201 // }}} 202} 203 204/** 205 * PHP5 buffered Iterator 206 * 207 * @package MDB2 208 * @category Database 209 * @author Lukas Smith <smith@pooteeweet.org> 210 */ 211class MDB2_BufferedIterator extends MDB2_Iterator implements SeekableIterator 212{ 213 // {{{ valid() 214 215 /** 216 * Check if the end of the result set has been reached 217 * 218 * @return bool|MDB2_Error true on success, false|MDB2_Error if result is invalid 219 * @access public 220 */ 221 public function valid() 222 { 223 if ($this->result) { 224 return $this->result->valid(); 225 } 226 return false; 227 } 228 // }}} 229 230 // {{{count() 231 232 /** 233 * Returns the number of rows in a result object 234 * 235 * @return int|MDB2_Error number of rows, false|MDB2_Error if result is invalid 236 * @access public 237 */ 238 public function count() 239 { 240 if ($this->result) { 241 return $this->result->numRows(); 242 } 243 return false; 244 } 245 // }}} 246 247 // {{{ rewind() 248 249 /** 250 * Seek to the first row in a result set 251 * 252 * @return void 253 * @access public 254 */ 255 public function rewind() 256 { 257 $this->seek(0); 258 } 259 // }}} 260} 261 262?> 263