source: branches/version-2_13-dev/data/module/MDB2/Iterator.php @ 23022

Revision 23022, 7.1 KB checked in by Seasoft, 11 years ago (diff)

#2322 (セッションのGC処理がエラーとなる)

  • Property svn:eol-style set to LF
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
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?>
Note: See TracBrowser for help on using the repository browser.