CodeIgniter installed
[living-lab-site.git] / system / database / drivers / oci8 / oci8_result.php
diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
new file mode 100755 (executable)
index 0000000..88531b4
--- /dev/null
@@ -0,0 +1,249 @@
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 5.1.6 or newer
+ *
+ * @package            CodeIgniter
+ * @author             ExpressionEngine Dev Team
+ * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @license            http://codeigniter.com/user_guide/license.html
+ * @link               http://codeigniter.com
+ * @since              Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * oci8 Result Class
+ *
+ * This class extends the parent result class: CI_DB_result
+ *
+ * @category   Database
+ * @author             ExpressionEngine Dev Team
+ * @link               http://codeigniter.com/user_guide/database/
+ */
+class CI_DB_oci8_result extends CI_DB_result {
+
+       var $stmt_id;
+       var $curs_id;
+       var $limit_used;
+
+       /**
+        * Number of rows in the result set.
+        *
+        * Oracle doesn't have a graceful way to retun the number of rows
+        * so we have to use what amounts to a hack.
+        *
+        *
+        * @access  public
+        * @return  integer
+        */
+       function num_rows()
+       {
+               $rowcount = count($this->result_array());
+               @ociexecute($this->stmt_id);
+
+               if ($this->curs_id)
+               {
+                       @ociexecute($this->curs_id);
+               }
+
+               return $rowcount;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Number of fields in the result set
+        *
+        * @access  public
+        * @return  integer
+        */
+       function num_fields()
+       {
+               $count = @ocinumcols($this->stmt_id);
+
+               // if we used a limit we subtract it
+               if ($this->limit_used)
+               {
+                       $count = $count - 1;
+               }
+
+               return $count;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Fetch Field Names
+        *
+        * Generates an array of column names
+        *
+        * @access      public
+        * @return      array
+        */
+       function list_fields()
+       {
+               $field_names = array();
+               $fieldCount = $this->num_fields();
+               for ($c = 1; $c <= $fieldCount; $c++)
+               {
+                       $field_names[] = ocicolumnname($this->stmt_id, $c);
+               }
+               return $field_names;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Field data
+        *
+        * Generates an array of objects containing field meta-data
+        *
+        * @access  public
+        * @return  array
+        */
+       function field_data()
+       {
+               $retval = array();
+               $fieldCount = $this->num_fields();
+               for ($c = 1; $c <= $fieldCount; $c++)
+               {
+                       $F                              = new stdClass();
+                       $F->name                = ocicolumnname($this->stmt_id, $c);
+                       $F->type                = ocicolumntype($this->stmt_id, $c);
+                       $F->max_length  = ocicolumnsize($this->stmt_id, $c);
+
+                       $retval[] = $F;
+               }
+
+               return $retval;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Free the result
+        *
+        * @return      null
+        */
+       function free_result()
+       {
+               if (is_resource($this->result_id))
+               {
+                       ocifreestatement($this->result_id);
+                       $this->result_id = FALSE;
+               }
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Result - associative array
+        *
+        * Returns the result set as an array
+        *
+        * @access  private
+        * @return  array
+        */
+       function _fetch_assoc(&$row)
+       {
+               $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
+
+               return ocifetchinto($id, $row, OCI_ASSOC + OCI_RETURN_NULLS);
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Result - object
+        *
+        * Returns the result set as an object
+        *
+        * @access  private
+        * @return  object
+        */
+       function _fetch_object()
+       {
+               $result = array();
+
+               // If PHP 5 is being used we can fetch an result object
+               if (function_exists('oci_fetch_object'))
+               {
+                       $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
+
+                       return @oci_fetch_object($id);
+               }
+
+               // If PHP 4 is being used we have to build our own result
+               foreach ($this->result_array() as $key => $val)
+               {
+                       $obj = new stdClass();
+                       if (is_array($val))
+                       {
+                               foreach ($val as $k => $v)
+                               {
+                                       $obj->$k = $v;
+                               }
+                       }
+                       else
+                       {
+                               $obj->$key = $val;
+                       }
+
+                       $result[] = $obj;
+               }
+
+               return $result;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Query result.  "array" version.
+        *
+        * @access  public
+        * @return  array
+        */
+       function result_array()
+       {
+               if (count($this->result_array) > 0)
+               {
+                       return $this->result_array;
+               }
+
+               // oracle's fetch functions do not return arrays.
+               // The information is returned in reference parameters
+               $row = NULL;
+               while ($this->_fetch_assoc($row))
+               {
+                       $this->result_array[] = $row;
+               }
+
+               return $this->result_array;
+       }
+
+       // --------------------------------------------------------------------
+
+       /**
+        * Data Seek
+        *
+        * Moves the internal pointer to the desired offset.  We call
+        * this internally before fetching results to make sure the
+        * result set starts at zero
+        *
+        * @access      private
+        * @return      array
+        */
+       function _data_seek($n = 0)
+       {
+               return FALSE; // Not needed
+       }
+
+}
+
+
+/* End of file oci8_result.php */
+/* Location: ./system/database/drivers/oci8/oci8_result.php */
\ No newline at end of file