summaryrefslogtreecommitdiffstats
path: root/system/database/DB_result.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/database/DB_result.php')
-rwxr-xr-x[-rw-r--r--]system/database/DB_result.php167
1 files changed, 115 insertions, 52 deletions
diff --git a/system/database/DB_result.php b/system/database/DB_result.php
index b9e64feeb..fb4268c21 100644..100755
--- a/system/database/DB_result.php
+++ b/system/database/DB_result.php
@@ -2,11 +2,11 @@
/**
* CodeIgniter
*
- * An open source application development framework for PHP 4.3.2 or newer
+ * An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
- * @copyright Copyright (c) 2008 - 2010, EllisLab, Inc.
+ * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
@@ -28,13 +28,14 @@
*/
class CI_DB_result {
- var $conn_id = NULL;
- var $result_id = NULL;
- var $result_array = array();
- var $result_object = array();
- var $current_row = 0;
- var $num_rows = 0;
- var $row_data = NULL;
+ var $conn_id = NULL;
+ var $result_id = NULL;
+ var $result_array = array();
+ var $result_object = array();
+ var $custom_result_object = array();
+ var $current_row = 0;
+ var $num_rows = 0;
+ var $row_data = NULL;
/**
@@ -42,30 +43,67 @@ class CI_DB_result {
*
* @access public
* @param string can be "object" or "array"
- * @return mixed either a result object or array
- */
+ * @return mixed either a result object or array
+ */
function result($type = 'object')
- {
- return ($type == 'object') ? $this->result_object() : $this->result_array();
+ {
+ if ($type == 'array') return $this->result_array();
+ else if ($type == 'object') return $this->result_object();
+ else return $this->custom_result_object($type);
}
// --------------------------------------------------------------------
+ /**
+ * Custom query result.
+ *
+ * @param class_name A string that represents the type of object you want back
+ * @return array of objects
+ */
+ function custom_result_object($class_name)
+ {
+ if (array_key_exists($class_name, $this->custom_result_object))
+ {
+ return $this->custom_result_object[$class_name];
+ }
+
+ if ($this->result_id === FALSE OR $this->num_rows() == 0)
+ {
+ return array();
+ }
+
+ // add the data to the object
+ $this->_data_seek(0);
+ $result_object = array();
+ while ($row = $this->_fetch_object())
+ {
+ $object = new $class_name();
+ foreach($row as $key => $value)
+ {
+ $object->$key = $value;
+ }
+ $result_object[] = $object;
+ }
+
+ // return the array
+ return $this->custom_result_object[$class_name] = $result_object;
+ }
+
/**
* Query result. "object" version.
*
* @access public
* @return object
- */
+ */
function result_object()
{
if (count($this->result_object) > 0)
{
return $this->result_object;
}
-
- // In the event that query caching is on the result_id variable
- // will return FALSE since there isn't a valid SQL resource so
+
+ // In the event that query caching is on the result_id variable
+ // will return FALSE since there isn't a valid SQL resource so
// we'll simply return an empty array.
if ($this->result_id === FALSE OR $this->num_rows() == 0)
{
@@ -77,10 +115,10 @@ class CI_DB_result {
{
$this->result_object[] = $row;
}
-
+
return $this->result_object;
}
-
+
// --------------------------------------------------------------------
/**
@@ -88,7 +126,7 @@ class CI_DB_result {
*
* @access public
* @return array
- */
+ */
function result_array()
{
if (count($this->result_array) > 0)
@@ -96,8 +134,8 @@ class CI_DB_result {
return $this->result_array;
}
- // In the event that query caching is on the result_id variable
- // will return FALSE since there isn't a valid SQL resource so
+ // In the event that query caching is on the result_id variable
+ // will return FALSE since there isn't a valid SQL resource so
// we'll simply return an empty array.
if ($this->result_id === FALSE OR $this->num_rows() == 0)
{
@@ -109,7 +147,7 @@ class CI_DB_result {
{
$this->result_array[] = $row;
}
-
+
return $this->result_array;
}
@@ -121,8 +159,8 @@ class CI_DB_result {
* @access public
* @param string
* @param string can be "object" or "array"
- * @return mixed either a result object or array
- */
+ * @return mixed either a result object or array
+ */
function row($n = 0, $type = 'object')
{
if ( ! is_numeric($n))
@@ -132,17 +170,19 @@ class CI_DB_result {
{
$this->row_data = $this->row_array(0);
}
-
+
// array_key_exists() instead of isset() to allow for MySQL NULL values
if (array_key_exists($n, $this->row_data))
{
return $this->row_data[$n];
}
- // reset the $n variable if the result was not achieved
+ // reset the $n variable if the result was not achieved
$n = 0;
}
-
- return ($type == 'object') ? $this->row_object($n) : $this->row_array($n);
+
+ if ($type == 'object') return $this->row_object($n);
+ else if ($type == 'array') return $this->row_array($n);
+ else return $this->custom_row_object($n, $type);
}
// --------------------------------------------------------------------
@@ -152,7 +192,7 @@ class CI_DB_result {
*
* @access public
* @return object
- */
+ */
function set_row($key, $value = NULL)
{
// We cache the row data for subsequent uses
@@ -160,17 +200,17 @@ class CI_DB_result {
{
$this->row_data = $this->row_array(0);
}
-
+
if (is_array($key))
{
foreach ($key as $k => $v)
{
$this->row_data[$k] = $v;
}
-
+
return;
}
-
+
if ($key != '' AND ! is_null($value))
{
$this->row_data[$key] = $value;
@@ -179,16 +219,39 @@ class CI_DB_result {
// --------------------------------------------------------------------
- /**
+ /**
+ * Returns a single result row - custom object version
+ *
+ * @access public
+ * @return object
+ */
+ function custom_row_object($n, $type)
+ {
+ $result = $this->custom_result_object($type);
+
+ if (count($result) == 0)
+ {
+ return $result;
+ }
+
+ if ($n != $this->current_row AND isset($result[$n]))
+ {
+ $this->current_row = $n;
+ }
+
+ return $result[$this->current_row];
+ }
+
+ /**
* Returns a single result row - object version
*
* @access public
* @return object
- */
+ */
function row_object($n = 0)
{
$result = $this->result_object();
-
+
if (count($result) == 0)
{
return $result;
@@ -209,7 +272,7 @@ class CI_DB_result {
*
* @access public
* @return array
- */
+ */
function row_array($n = 0)
{
$result = $this->result_array();
@@ -218,16 +281,16 @@ class CI_DB_result {
{
return $result;
}
-
+
if ($n != $this->current_row AND isset($result[$n]))
{
$this->current_row = $n;
}
-
+
return $result[$this->current_row];
}
-
+
// --------------------------------------------------------------------
/**
@@ -235,7 +298,7 @@ class CI_DB_result {
*
* @access public
* @return object
- */
+ */
function first_row($type = 'object')
{
$result = $this->result($type);
@@ -246,7 +309,7 @@ class CI_DB_result {
}
return $result[0];
}
-
+
// --------------------------------------------------------------------
/**
@@ -254,7 +317,7 @@ class CI_DB_result {
*
* @access public
* @return object
- */
+ */
function last_row($type = 'object')
{
$result = $this->result($type);
@@ -264,7 +327,7 @@ class CI_DB_result {
return $result;
}
return $result[count($result) -1];
- }
+ }
// --------------------------------------------------------------------
@@ -273,7 +336,7 @@ class CI_DB_result {
*
* @access public
* @return object
- */
+ */
function next_row($type = 'object')
{
$result = $this->result($type);
@@ -287,10 +350,10 @@ class CI_DB_result {
{
++$this->current_row;
}
-
+
return $result[$this->current_row];
}
-
+
// --------------------------------------------------------------------
/**
@@ -298,7 +361,7 @@ class CI_DB_result {
*
* @access public
* @return object
- */
+ */
function previous_row($type = 'object')
{
$result = $this->result($type);
@@ -329,14 +392,14 @@ class CI_DB_result {
function num_rows() { return $this->num_rows; }
function num_fields() { return 0; }
function list_fields() { return array(); }
- function field_data() { return array(); }
+ function field_data() { return array(); }
function free_result() { return TRUE; }
function _data_seek() { return TRUE; }
- function _fetch_assoc() { return array(); }
+ function _fetch_assoc() { return array(); }
function _fetch_object() { return array(); }
-
+
}
// END DB_result class
/* End of file DB_result.php */
-/* Location: ./system/database/DB_result.php */ \ No newline at end of file
+/* Location: ./system/database/DB_result.php */