upgrade to codeigniter 1.7.2 for f12
[www-register-wizard.git] / database / DB_result.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * CodeIgniter
4  *
5  * An open source application development framework for PHP 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008 - 2009, EllisLab, Inc.
10  * @license             http://codeigniter.com/user_guide/license.html
11  * @link                http://codeigniter.com
12  * @since               Version 1.0
13  * @filesource
14  */
15
16 // ------------------------------------------------------------------------
17
18 /**
19  * Database Result Class
20  *
21  * This is the platform-independent result class.
22  * This class will not be called directly. Rather, the adapter
23  * class for the specific database will extend and instantiate it.
24  *
25  * @category    Database
26  * @author              ExpressionEngine Dev Team
27  * @link                http://codeigniter.com/user_guide/database/
28  */
29 class CI_DB_result {
30
31         var $conn_id            = NULL;
32         var $result_id          = NULL;
33         var $result_array       = array();
34         var $result_object      = array();
35         var $current_row        = 0;
36         var $num_rows           = 0;
37         var $row_data           = NULL;
38
39
40         /**
41          * Query result.  Acts as a wrapper function for the following functions.
42          *
43          * @access      public
44          * @param       string  can be "object" or "array"
45          * @return      mixed   either a result object or array 
46          */     
47         function result($type = 'object')
48         {       
49                 return ($type == 'object') ? $this->result_object() : $this->result_array();
50         }
51
52         // --------------------------------------------------------------------
53
54         /**
55          * Query result.  "object" version.
56          *
57          * @access      public
58          * @return      object
59          */     
60         function result_object()
61         {
62                 if (count($this->result_object) > 0)
63                 {
64                         return $this->result_object;
65                 }
66                 
67                 // In the event that query caching is on the result_id variable 
68                 // will return FALSE since there isn't a valid SQL resource so 
69                 // we'll simply return an empty array.
70                 if ($this->result_id === FALSE OR $this->num_rows() == 0)
71                 {
72                         return array();
73                 }
74
75                 $this->_data_seek(0);
76                 while ($row = $this->_fetch_object())
77                 {
78                         $this->result_object[] = $row;
79                 }
80                 
81                 return $this->result_object;
82         }
83         
84         // --------------------------------------------------------------------
85
86         /**
87          * Query result.  "array" version.
88          *
89          * @access      public
90          * @return      array
91          */     
92         function result_array()
93         {
94                 if (count($this->result_array) > 0)
95                 {
96                         return $this->result_array;
97                 }
98
99                 // In the event that query caching is on the result_id variable 
100                 // will return FALSE since there isn't a valid SQL resource so 
101                 // we'll simply return an empty array.
102                 if ($this->result_id === FALSE OR $this->num_rows() == 0)
103                 {
104                         return array();
105                 }
106
107                 $this->_data_seek(0);
108                 while ($row = $this->_fetch_assoc())
109                 {
110                         $this->result_array[] = $row;
111                 }
112                 
113                 return $this->result_array;
114         }
115
116         // --------------------------------------------------------------------
117
118         /**
119          * Query result.  Acts as a wrapper function for the following functions.
120          *
121          * @access      public
122          * @param       string
123          * @param       string  can be "object" or "array"
124          * @return      mixed   either a result object or array 
125          */     
126         function row($n = 0, $type = 'object')
127         {
128                 if ( ! is_numeric($n))
129                 {
130                         // We cache the row data for subsequent uses
131                         if ( ! is_array($this->row_data))
132                         {
133                                 $this->row_data = $this->row_array(0);
134                         }
135                 
136                         // array_key_exists() instead of isset() to allow for MySQL NULL values
137                         if (array_key_exists($n, $this->row_data))
138                         {
139                                 return $this->row_data[$n];
140                         }
141                         // reset the $n variable if the result was not achieved                 
142                         $n = 0;
143                 }
144                 
145                 return ($type == 'object') ? $this->row_object($n) : $this->row_array($n);
146         }
147
148         // --------------------------------------------------------------------
149
150         /**
151          * Assigns an item into a particular column slot
152          *
153          * @access      public
154          * @return      object
155          */     
156         function set_row($key, $value = NULL)
157         {
158                 // We cache the row data for subsequent uses
159                 if ( ! is_array($this->row_data))
160                 {
161                         $this->row_data = $this->row_array(0);
162                 }
163         
164                 if (is_array($key))
165                 {
166                         foreach ($key as $k => $v)
167                         {
168                                 $this->row_data[$k] = $v;
169                         }
170                         
171                         return;
172                 }
173         
174                 if ($key != '' AND ! is_null($value))
175                 {
176                         $this->row_data[$key] = $value;
177                 }
178         }
179
180         // --------------------------------------------------------------------
181
182         /**
183          * Returns a single result row - object version
184          *
185          * @access      public
186          * @return      object
187          */     
188         function row_object($n = 0)
189         {
190                 $result = $this->result_object();
191                 
192                 if (count($result) == 0)
193                 {
194                         return $result;
195                 }
196
197                 if ($n != $this->current_row AND isset($result[$n]))
198                 {
199                         $this->current_row = $n;
200                 }
201
202                 return $result[$this->current_row];
203         }
204
205         // --------------------------------------------------------------------
206
207         /**
208          * Returns a single result row - array version
209          *
210          * @access      public
211          * @return      array
212          */     
213         function row_array($n = 0)
214         {
215                 $result = $this->result_array();
216
217                 if (count($result) == 0)
218                 {
219                         return $result;
220                 }
221                         
222                 if ($n != $this->current_row AND isset($result[$n]))
223                 {
224                         $this->current_row = $n;
225                 }
226                 
227                 return $result[$this->current_row];
228         }
229
230                 
231         // --------------------------------------------------------------------
232
233         /**
234          * Returns the "first" row
235          *
236          * @access      public
237          * @return      object
238          */     
239         function first_row($type = 'object')
240         {
241                 $result = $this->result($type);
242
243                 if (count($result) == 0)
244                 {
245                         return $result;
246                 }
247                 return $result[0];
248         }
249         
250         // --------------------------------------------------------------------
251
252         /**
253          * Returns the "last" row
254          *
255          * @access      public
256          * @return      object
257          */     
258         function last_row($type = 'object')
259         {
260                 $result = $this->result($type);
261
262                 if (count($result) == 0)
263                 {
264                         return $result;
265                 }
266                 return $result[count($result) -1];
267         }       
268
269         // --------------------------------------------------------------------
270
271         /**
272          * Returns the "next" row
273          *
274          * @access      public
275          * @return      object
276          */     
277         function next_row($type = 'object')
278         {
279                 $result = $this->result($type);
280
281                 if (count($result) == 0)
282                 {
283                         return $result;
284                 }
285
286                 if (isset($result[$this->current_row + 1]))
287                 {
288                         ++$this->current_row;
289                 }
290                                 
291                 return $result[$this->current_row];
292         }
293         
294         // --------------------------------------------------------------------
295
296         /**
297          * Returns the "previous" row
298          *
299          * @access      public
300          * @return      object
301          */     
302         function previous_row($type = 'object')
303         {
304                 $result = $this->result($type);
305
306                 if (count($result) == 0)
307                 {
308                         return $result;
309                 }
310
311                 if (isset($result[$this->current_row - 1]))
312                 {
313                         --$this->current_row;
314                 }
315                 return $result[$this->current_row];
316         }
317
318         // --------------------------------------------------------------------
319
320         /**
321          * The following functions are normally overloaded by the identically named
322          * methods in the platform-specific driver -- except when query caching
323          * is used.  When caching is enabled we do not load the other driver.
324          * These functions are primarily here to prevent undefined function errors
325          * when a cached result object is in use.  They are not otherwise fully
326          * operational due to the unavailability of the database resource IDs with
327          * cached results.
328          */
329         function num_rows() { return $this->num_rows; }
330         function num_fields() { return 0; }
331         function list_fields() { return array(); }
332         function field_data() { return array(); }       
333         function free_result() { return TRUE; }
334         function _data_seek() { return TRUE; }
335         function _fetch_assoc() { return array(); }     
336         function _fetch_object() { return array(); }
337         
338 }
339 // END DB_result class
340
341 /* End of file DB_result.php */
342 /* Location: ./system/database/DB_result.php */