Take two:
[www-register-wizard.git] / database / drivers / oci8 / oci8_result.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');\r
2 /**\r
3  * CodeIgniter\r
4  *\r
5  * An open source application development framework for PHP 4.3.2 or newer\r
6  *\r
7  * @package             CodeIgniter\r
8  * @author              ExpressionEngine Dev Team\r
9  * @copyright   Copyright (c) 2008, EllisLab, Inc.\r
10  * @license             http://codeigniter.com/user_guide/license.html\r
11  * @link                http://codeigniter.com\r
12  * @since               Version 1.0\r
13  * @filesource\r
14  */\r
15 \r
16 // ------------------------------------------------------------------------\r
17 \r
18 /**\r
19  * oci8 Result Class\r
20  *\r
21  * This class extends the parent result class: CI_DB_result\r
22  *\r
23  * @category    Database\r
24  * @author              ExpressionEngine Dev Team\r
25  * @link                http://codeigniter.com/user_guide/database/\r
26  */\r
27 class CI_DB_oci8_result extends CI_DB_result {\r
28 \r
29         var $stmt_id;\r
30         var $curs_id;\r
31         var $limit_used;\r
32 \r
33         /**\r
34          * Number of rows in the result set.\r
35          *\r
36          * Oracle doesn't have a graceful way to retun the number of rows\r
37          * so we have to use what amounts to a hack.\r
38          * \r
39          *\r
40          * @access  public\r
41          * @return  integer\r
42          */\r
43         function num_rows()\r
44         {\r
45                 $rowcount = count($this->result_array());\r
46                 @ociexecute($this->stmt_id);\r
47 \r
48                 if ($this->curs_id)\r
49                 {\r
50                         @ociexecute($this->curs_id);\r
51                 }\r
52 \r
53                 return $rowcount;\r
54         }\r
55 \r
56         // --------------------------------------------------------------------\r
57 \r
58         /**\r
59          * Number of fields in the result set\r
60          *\r
61          * @access  public\r
62          * @return  integer\r
63          */\r
64         function num_fields()\r
65         {\r
66                 $count = @ocinumcols($this->stmt_id);\r
67 \r
68                 // if we used a limit we subtract it\r
69                 if ($this->limit_used)\r
70                 {\r
71                         $count = $count - 1;\r
72                 }\r
73 \r
74                 return $count;\r
75         }\r
76 \r
77         // --------------------------------------------------------------------\r
78 \r
79         /**\r
80          * Fetch Field Names\r
81          *\r
82          * Generates an array of column names\r
83          *\r
84          * @access      public\r
85          * @return      array\r
86          */\r
87         function list_fields()\r
88         {\r
89                 $field_names = array();\r
90                 $fieldCount = $this->num_fields();\r
91                 for ($c = 1; $c <= $fieldCount; $c++)\r
92                 {\r
93                         $field_names[] = ocicolumnname($this->stmt_id, $c);\r
94                 }\r
95                 return $field_names;\r
96         }\r
97 \r
98         // --------------------------------------------------------------------\r
99 \r
100         /**\r
101          * Field data\r
102          *\r
103          * Generates an array of objects containing field meta-data\r
104          *\r
105          * @access  public\r
106          * @return  array\r
107          */\r
108         function field_data()\r
109         {\r
110                 $retval = array();\r
111                 $fieldCount = $this->num_fields();\r
112                 for ($c = 1; $c <= $fieldCount; $c++)\r
113                 {\r
114                         $F                        = new stdClass();\r
115                         $F->name                = ocicolumnname($this->stmt_id, $c);\r
116                         $F->type                = ocicolumntype($this->stmt_id, $c);\r
117                         $F->max_length  = ocicolumnsize($this->stmt_id, $c);\r
118 \r
119                         $retval[] = $F;\r
120                 }\r
121 \r
122                 return $retval;\r
123         }\r
124 \r
125         // --------------------------------------------------------------------\r
126 \r
127         /**\r
128          * Free the result\r
129          *\r
130          * @return      null\r
131          */             \r
132         function free_result()\r
133         {\r
134                 if (is_resource($this->result_id))\r
135                 {\r
136                         ocifreestatement($this->result_id);                     \r
137                         $this->result_id = FALSE;\r
138                 }\r
139         }\r
140 \r
141         // --------------------------------------------------------------------\r
142 \r
143         /**\r
144          * Result - associative array\r
145          *\r
146          * Returns the result set as an array\r
147          *\r
148          * @access  private\r
149          * @return  array\r
150          */\r
151         function _fetch_assoc(&$row)\r
152         {\r
153                 $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;\r
154         \r
155                 return ocifetchinto($id, $row, OCI_ASSOC + OCI_RETURN_NULLS);   \r
156         }\r
157 \r
158         // --------------------------------------------------------------------\r
159 \r
160         /**\r
161          * Result - object\r
162          *\r
163          * Returns the result set as an object\r
164          *\r
165          * @access  private\r
166          * @return  object\r
167          */\r
168         function _fetch_object()\r
169         {       \r
170                 $result = array();\r
171 \r
172                 // If PHP 5 is being used we can fetch an result object\r
173                 if (function_exists('oci_fetch_object'))\r
174                 {\r
175                         $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;\r
176                         \r
177                         return @oci_fetch_object($id);\r
178                 }\r
179                 \r
180                 // If PHP 4 is being used we have to build our own result\r
181                 foreach ($this->result_array() as $key => $val)\r
182                 {\r
183                         $obj = new stdClass();\r
184                         if (is_array($val))\r
185                         {\r
186                                 foreach ($val as $k => $v)\r
187                                 {\r
188                                         $obj->$k = $v;\r
189                                 }\r
190                         }\r
191                         else\r
192                         {\r
193                                 $obj->$key = $val;\r
194                         }\r
195                         \r
196                         $result[] = $obj;\r
197                 }\r
198 \r
199                 return $result;\r
200         }\r
201 \r
202         // --------------------------------------------------------------------\r
203 \r
204         /**\r
205          * Query result.  "array" version.\r
206          *\r
207          * @access  public\r
208          * @return  array\r
209          */\r
210         function result_array()\r
211         {\r
212                 if (count($this->result_array) > 0)\r
213                 {\r
214                         return $this->result_array;\r
215                 }\r
216 \r
217                 // oracle's fetch functions do not return arrays.\r
218                 // The information is returned in reference parameters\r
219                 $row = NULL;\r
220                 while ($this->_fetch_assoc($row))\r
221                 {\r
222                         $this->result_array[] = $row;\r
223                 }\r
224 \r
225                 return $this->result_array;\r
226         }\r
227 \r
228         // --------------------------------------------------------------------\r
229 \r
230         /**\r
231          * Data Seek\r
232          *\r
233          * Moves the internal pointer to the desired offset.  We call\r
234          * this internally before fetching results to make sure the\r
235          * result set starts at zero\r
236          *\r
237          * @access      private\r
238          * @return      array\r
239          */\r
240         function _data_seek($n = 0)\r
241         {\r
242                 return FALSE; // Not needed\r
243         }\r
244 \r
245 }\r
246 \r
247 \r
248 /* End of file oci8_result.php */\r
249 /* Location: ./system/database/drivers/oci8/oci8_result.php */