Initial repo created
[timetracker.git] / WEB-INF / lib / pear / MDB2 / Iterator.php
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  */
54 class 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  */
211 class 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 ?>