summaryrefslogtreecommitdiffstats
path: root/system/database
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@server-speed.net>2011-01-28 22:51:06 +0100
committerFlorian Pritz <bluewind@server-speed.net>2011-01-28 22:58:52 +0100
commitce2b69675075444c9e40b72bcdd42ab7edbbe633 (patch)
tree2932f13b0db14fe53dc0622d888318db638a017f /system/database
parentb6b8a6587c399bfd89e13e92ce04ee8486688e6e (diff)
update to CI 2.0
Signed-off-by: Florian Pritz <bluewind@server-speed.net>
Diffstat (limited to 'system/database')
-rwxr-xr-x[-rw-r--r--]system/database/DB.php59
-rwxr-xr-x[-rw-r--r--]system/database/DB_active_rec.php703
-rwxr-xr-x[-rw-r--r--]system/database/DB_cache.php60
-rwxr-xr-x[-rw-r--r--]system/database/DB_driver.php374
-rwxr-xr-x[-rw-r--r--]system/database/DB_forge.php79
-rwxr-xr-x[-rw-r--r--]system/database/DB_result.php167
-rwxr-xr-x[-rw-r--r--]system/database/DB_utility.php113
-rwxr-xr-x[-rw-r--r--]system/database/drivers/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mssql/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mssql/mssql_driver.php131
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mssql/mssql_forge.php38
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mssql/mssql_result.php28
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mssql/mssql_utility.php41
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysql/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysql/mysql_driver.php218
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysql/mysql_forge.php57
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysql/mysql_result.php28
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysql/mysql_utility.php85
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysqli/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysqli/mysqli_driver.php193
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysqli/mysqli_forge.php34
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysqli/mysqli_result.php28
-rwxr-xr-x[-rw-r--r--]system/database/drivers/mysqli/mysqli_utility.php44
-rwxr-xr-x[-rw-r--r--]system/database/drivers/oci8/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/oci8/oci8_driver.php113
-rwxr-xr-x[-rw-r--r--]system/database/drivers/oci8/oci8_forge.php36
-rwxr-xr-x[-rw-r--r--]system/database/drivers/oci8/oci8_result.php34
-rwxr-xr-x[-rw-r--r--]system/database/drivers/oci8/oci8_utility.php39
-rwxr-xr-x[-rw-r--r--]system/database/drivers/odbc/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/odbc/odbc_driver.php119
-rwxr-xr-x[-rw-r--r--]system/database/drivers/odbc/odbc_forge.php42
-rwxr-xr-x[-rw-r--r--]system/database/drivers/odbc/odbc_result.php22
-rwxr-xr-x[-rw-r--r--]system/database/drivers/odbc/odbc_utility.php55
-rwxr-xr-x[-rw-r--r--]system/database/drivers/postgre/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/postgre/postgre_driver.php122
-rwxr-xr-x[-rw-r--r--]system/database/drivers/postgre/postgre_forge.php117
-rwxr-xr-x[-rw-r--r--]system/database/drivers/postgre/postgre_result.php22
-rwxr-xr-x[-rw-r--r--]system/database/drivers/postgre/postgre_utility.php40
-rwxr-xr-x[-rw-r--r--]system/database/drivers/sqlite/index.html0
-rwxr-xr-x[-rw-r--r--]system/database/drivers/sqlite/sqlite_driver.php130
-rwxr-xr-x[-rw-r--r--]system/database/drivers/sqlite/sqlite_forge.php36
-rwxr-xr-x[-rw-r--r--]system/database/drivers/sqlite/sqlite_result.php24
-rwxr-xr-x[-rw-r--r--]system/database/drivers/sqlite/sqlite_utility.php51
-rwxr-xr-x[-rw-r--r--]system/database/index.html0
44 files changed, 1905 insertions, 1577 deletions
diff --git a/system/database/DB.php b/system/database/DB.php
index f174687ca..fb0516ba4 100644..100755
--- a/system/database/DB.php
+++ b/system/database/DB.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
@@ -22,45 +22,45 @@
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/database/
*/
-function &DB($params = '', $active_record_override = FALSE)
+function &DB($params = '', $active_record_override = NULL)
{
// Load the DB config file if a DSN string wasn't passed
if (is_string($params) AND strpos($params, '://') === FALSE)
{
include(APPPATH.'config/database'.EXT);
-
+
if ( ! isset($db) OR count($db) == 0)
{
show_error('No database connection settings were found in the database config file.');
}
-
+
if ($params != '')
{
$active_group = $params;
}
-
+
if ( ! isset($active_group) OR ! isset($db[$active_group]))
{
show_error('You have specified an invalid database connection group.');
}
-
+
$params = $db[$active_group];
}
elseif (is_string($params))
{
-
+
/* parse the URL from the DSN string
- * Database settings can be passed as discreet
- * parameters or as a data source name in the first
- * parameter. DSNs must have this prototype:
- * $dsn = 'driver://username:password@hostname/database';
- */
-
+ * Database settings can be passed as discreet
+ * parameters or as a data source name in the first
+ * parameter. DSNs must have this prototype:
+ * $dsn = 'driver://username:password@hostname/database';
+ */
+
if (($dns = @parse_url($params)) === FALSE)
{
show_error('Invalid DB Connection String');
}
-
+
$params = array(
'dbdriver' => $dns['scheme'],
'hostname' => (isset($dns['host'])) ? rawurldecode($dns['host']) : '',
@@ -68,7 +68,7 @@ function &DB($params = '', $active_record_override = FALSE)
'password' => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '',
'database' => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : ''
);
-
+
// were additional config items set?
if (isset($dns['query']))
{
@@ -90,7 +90,7 @@ function &DB($params = '', $active_record_override = FALSE)
}
}
}
-
+
// No DB specified yet? Beat them senseless...
if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
{
@@ -101,18 +101,18 @@ function &DB($params = '', $active_record_override = FALSE)
// we need to dynamically create a class that extends proper parent class
// based on whether we're using the active record class or not.
// Kudos to Paul for discovering this clever use of eval()
-
- if ($active_record_override == TRUE)
+
+ if ($active_record_override !== NULL)
{
- $active_record = TRUE;
+ $active_record = $active_record_override;
}
-
+
require_once(BASEPATH.'database/DB_driver'.EXT);
if ( ! isset($active_record) OR $active_record == TRUE)
{
require_once(BASEPATH.'database/DB_active_rec'.EXT);
-
+
if ( ! class_exists('CI_DB'))
{
eval('class CI_DB extends CI_DB_active_record { }');
@@ -125,20 +125,25 @@ function &DB($params = '', $active_record_override = FALSE)
eval('class CI_DB extends CI_DB_driver { }');
}
}
-
+
require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT);
// Instantiate the DB adapter
$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
- $DB =& instantiate_class(new $driver($params));
-
+ $DB = new $driver($params);
+
if ($DB->autoinit == TRUE)
{
$DB->initialize();
}
-
+
+ if (isset($params['stricton']) && $params['stricton'] == TRUE)
+ {
+ $DB->query('SET SESSION sql_mode="STRICT_ALL_TABLES"');
+ }
+
return $DB;
-}
+}
diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php
index bf4d5117e..ce9d1c1af 100644..100755
--- a/system/database/DB_active_rec.php
+++ b/system/database/DB_active_rec.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
@@ -36,17 +36,18 @@ class CI_DB_active_record extends CI_DB_driver {
var $ar_like = array();
var $ar_groupby = array();
var $ar_having = array();
+ var $ar_keys = array();
var $ar_limit = FALSE;
var $ar_offset = FALSE;
var $ar_order = FALSE;
var $ar_orderby = array();
- var $ar_set = array();
+ var $ar_set = array();
var $ar_wherein = array();
var $ar_aliased_tables = array();
var $ar_store_array = array();
-
+
// Active Record Caching variables
- var $ar_caching = FALSE;
+ var $ar_caching = FALSE;
var $ar_cache_exists = array();
var $ar_cache_select = array();
var $ar_cache_from = array();
@@ -56,7 +57,7 @@ class CI_DB_active_record extends CI_DB_driver {
var $ar_cache_groupby = array();
var $ar_cache_having = array();
var $ar_cache_orderby = array();
- var $ar_cache_set = array();
+ var $ar_cache_set = array();
// --------------------------------------------------------------------
@@ -72,12 +73,12 @@ class CI_DB_active_record extends CI_DB_driver {
*/
function select($select = '*', $escape = NULL)
{
- // Set the global value if this was sepecified
+ // Set the global value if this was sepecified
if (is_bool($escape))
{
$this->_protect_identifiers = $escape;
}
-
+
if (is_string($select))
{
$select = explode(',', $select);
@@ -117,7 +118,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_max_min_avg_sum($select, $alias, 'MAX');
}
-
+
// --------------------------------------------------------------------
/**
@@ -178,7 +179,7 @@ class CI_DB_active_record extends CI_DB_driver {
* select_min()
* select_avg()
* select_sum()
- *
+ *
* @access public
* @param string the field
* @param string an alias
@@ -190,29 +191,29 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->display_error('db_invalid_query');
}
-
+
$type = strtoupper($type);
-
+
if ( ! in_array($type, array('MAX', 'MIN', 'AVG', 'SUM')))
{
show_error('Invalid function type: '.$type);
}
-
+
if ($alias == '')
{
$alias = $this->_create_alias_from_table(trim($select));
}
-
+
$sql = $type.'('.$this->_protect_identifiers(trim($select)).') AS '.$alias;
$this->ar_select[] = $sql;
-
+
if ($this->ar_caching === TRUE)
{
$this->ar_cache_select[] = $sql;
$this->ar_cache_exists[] = 'select';
}
-
+
return $this;
}
@@ -231,7 +232,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return end(explode('.', $item));
}
-
+
return $item;
}
@@ -251,7 +252,7 @@ class CI_DB_active_record extends CI_DB_driver {
$this->ar_distinct = (is_bool($val)) ? $val : TRUE;
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -275,12 +276,12 @@ class CI_DB_active_record extends CI_DB_driver {
$this->_track_aliases($v);
$this->ar_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE);
-
+
if ($this->ar_caching === TRUE)
{
$this->ar_cache_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE);
$this->ar_cache_exists[] = 'from';
- }
+ }
}
}
@@ -289,11 +290,11 @@ class CI_DB_active_record extends CI_DB_driver {
$val = trim($val);
// Extract any aliases that might exist. We use this information
- // in the _protect_identifiers to know whether to add a table prefix
+ // in the _protect_identifiers to know whether to add a table prefix
$this->_track_aliases($val);
-
+
$this->ar_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
-
+
if ($this->ar_caching === TRUE)
{
$this->ar_cache_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
@@ -319,7 +320,7 @@ class CI_DB_active_record extends CI_DB_driver {
* @return object
*/
function join($table, $cond, $type = '')
- {
+ {
if ($type != '')
{
$type = strtoupper(trim($type));
@@ -335,7 +336,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
// Extract any aliases that might exist. We use this information
- // in the _protect_identifiers to know whether to add a table prefix
+ // in the _protect_identifiers to know whether to add a table prefix
$this->_track_aliases($table);
// Strip apart the condition and protect the identifiers
@@ -343,10 +344,10 @@ class CI_DB_active_record extends CI_DB_driver {
{
$match[1] = $this->_protect_identifiers($match[1]);
$match[3] = $this->_protect_identifiers($match[3]);
-
- $cond = $match[1].$match[2].$match[3];
+
+ $cond = $match[1].$match[2].$match[3];
}
-
+
// Assemble the JOIN statement
$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).' ON '.$cond;
@@ -377,7 +378,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_where($key, $value, 'AND ', $escape);
}
-
+
// --------------------------------------------------------------------
/**
@@ -399,18 +400,6 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * orwhere() is an alias of or_where()
- * this function is here for backwards compatibility, as
- * orwhere() has been deprecated
- */
- function orwhere($key, $value = NULL, $escape = TRUE)
- {
- return $this->or_where($key, $value, $escape);
- }
-
- // --------------------------------------------------------------------
-
- /**
* Where
*
* Called by where() or orwhere()
@@ -427,7 +416,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$key = array($key => $value);
}
-
+
// If the escape value was not set will will base it on the global setting
if ( ! is_bool($escape))
{
@@ -443,13 +432,13 @@ class CI_DB_active_record extends CI_DB_driver {
// value appears not to have been set, assign the test to IS NULL
$k .= ' IS NULL';
}
-
+
if ( ! is_null($v))
{
if ($escape === TRUE)
{
$k = $this->_protect_identifiers($k, FALSE, $escape);
-
+
$v = ' '.$this->escape($v);
}
@@ -460,19 +449,19 @@ class CI_DB_active_record extends CI_DB_driver {
}
else
{
- $k = $this->_protect_identifiers($k, FALSE, $escape);
+ $k = $this->_protect_identifiers($k, FALSE, $escape);
}
$this->ar_where[] = $prefix.$k.$v;
-
+
if ($this->ar_caching === TRUE)
{
$this->ar_cache_where[] = $prefix.$k.$v;
$this->ar_cache_exists[] = 'where';
}
-
+
}
-
+
return $this;
}
@@ -493,7 +482,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_where_in($key, $values);
}
-
+
// --------------------------------------------------------------------
/**
@@ -529,7 +518,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_where_in($key, $values, TRUE);
}
-
+
// --------------------------------------------------------------------
/**
@@ -559,7 +548,7 @@ class CI_DB_active_record extends CI_DB_driver {
* @param string The field to search
* @param array The values searched on
* @param boolean If the statement would be IN or NOT IN
- * @param string
+ * @param string
* @return object
*/
function _where_in($key = NULL, $values = NULL, $not = FALSE, $type = 'AND ')
@@ -568,12 +557,12 @@ class CI_DB_active_record extends CI_DB_driver {
{
return;
}
-
+
if ( ! is_array($values))
{
$values = array($values);
}
-
+
$not = ($not) ? ' NOT' : '';
foreach ($values as $value)
@@ -582,7 +571,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
$prefix = (count($this->ar_where) == 0) ? '' : $type;
-
+
$where_in = $prefix . $this->_protect_identifiers($key) . $not . " IN (" . implode(", ", $this->ar_wherein) . ") ";
$this->ar_where[] = $where_in;
@@ -596,7 +585,7 @@ class CI_DB_active_record extends CI_DB_driver {
$this->ar_wherein = array();
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -632,7 +621,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_like($field, $match, 'AND ', $side, 'NOT');
}
-
+
// --------------------------------------------------------------------
/**
@@ -668,19 +657,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_like($field, $match, 'OR ', $side, 'NOT');
}
-
- // --------------------------------------------------------------------
- /**
- * orlike() is an alias of or_like()
- * this function is here for backwards compatibility, as
- * orlike() has been deprecated
- */
- function orlike($field, $match = '', $side = 'both')
- {
- return $this->or_like($field, $match, $side);
- }
-
// --------------------------------------------------------------------
/**
@@ -700,7 +677,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$field = array($field => $match);
}
-
+
foreach ($field as $k => $v)
{
$k = $this->_protect_identifiers($k);
@@ -721,24 +698,24 @@ class CI_DB_active_record extends CI_DB_driver {
{
$like_statement = $prefix." $k $not LIKE '%{$v}%'";
}
-
+
// some platforms require an escape sequence definition for LIKE wildcards
if ($this->_like_escape_str != '')
{
- $like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_char);
+ $like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_chr);
}
-
+
$this->ar_like[] = $like_statement;
if ($this->ar_caching === TRUE)
{
$this->ar_cache_like[] = $like_statement;
$this->ar_cache_exists[] = 'like';
}
-
+
}
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -754,15 +731,15 @@ class CI_DB_active_record extends CI_DB_driver {
{
$by = explode(',', $by);
}
-
+
foreach ($by as $val)
{
$val = trim($val);
-
+
if ($val != '')
{
$this->ar_groupby[] = $this->_protect_identifiers($val);
-
+
if ($this->ar_caching === TRUE)
{
$this->ar_cache_groupby[] = $this->_protect_identifiers($val);
@@ -776,18 +753,6 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * groupby() is an alias of group_by()
- * this function is here for backwards compatibility, as
- * groupby() has been deprecated
- */
- function groupby($by)
- {
- return $this->group_by($by);
- }
-
- // --------------------------------------------------------------------
-
- /**
* Sets the HAVING value
*
* Separates multiple calls with AND
@@ -805,18 +770,6 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * orhaving() is an alias of or_having()
- * this function is here for backwards compatibility, as
- * orhaving() has been deprecated
- */
-
- function orhaving($key, $value = '', $escape = TRUE)
- {
- return $this->or_having($key, $value, $escape);
- }
- // --------------------------------------------------------------------
-
- /**
* Sets the OR HAVING value
*
* Separates multiple calls with OR
@@ -830,7 +783,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $this->_having($key, $value, 'OR ', $escape);
}
-
+
// --------------------------------------------------------------------
/**
@@ -849,7 +802,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$key = array($key => $value);
}
-
+
foreach ($key as $k => $v)
{
$prefix = (count($this->ar_having) == 0) ? '' : $type;
@@ -868,7 +821,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$v = ' '.$this->escape_str($v);
}
-
+
$this->ar_having[] = $prefix.$k.$v;
if ($this->ar_caching === TRUE)
{
@@ -876,10 +829,10 @@ class CI_DB_active_record extends CI_DB_driver {
$this->ar_cache_exists[] = 'having';
}
}
-
+
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -901,8 +854,8 @@ class CI_DB_active_record extends CI_DB_driver {
{
$direction = (in_array(strtoupper(trim($direction)), array('ASC', 'DESC'), TRUE)) ? ' '.$direction : ' ASC';
}
-
-
+
+
if (strpos($orderby, ',') !== FALSE)
{
$temp = array();
@@ -913,19 +866,19 @@ class CI_DB_active_record extends CI_DB_driver {
{
$part = $this->_protect_identifiers(trim($part));
}
-
+
$temp[] = $part;
}
-
- $orderby = implode(', ', $temp);
+
+ $orderby = implode(', ', $temp);
}
else if ($direction != $this->_random_keyword)
{
$orderby = $this->_protect_identifiers($orderby);
}
-
+
$orderby_statement = $orderby.$direction;
-
+
$this->ar_orderby[] = $orderby_statement;
if ($this->ar_caching === TRUE)
{
@@ -935,19 +888,7 @@ class CI_DB_active_record extends CI_DB_driver {
return $this;
}
-
- // --------------------------------------------------------------------
- /**
- * orderby() is an alias of order_by()
- * this function is here for backwards compatibility, as
- * orderby() has been deprecated
- */
- function orderby($orderby, $direction = '')
- {
- return $this->order_by($orderby, $direction);
- }
-
// --------------------------------------------------------------------
/**
@@ -966,10 +907,10 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->ar_offset = $offset;
}
-
+
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -984,7 +925,7 @@ class CI_DB_active_record extends CI_DB_driver {
$this->ar_offset = $offset;
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -999,11 +940,11 @@ class CI_DB_active_record extends CI_DB_driver {
function set($key, $value = '', $escape = TRUE)
{
$key = $this->_object_to_array($key);
-
+
if ( ! is_array($key))
{
$key = array($key => $value);
- }
+ }
foreach ($key as $k => $v)
{
@@ -1016,10 +957,10 @@ class CI_DB_active_record extends CI_DB_driver {
$this->ar_set[$this->_protect_identifiers($k)] = $this->escape($v);
}
}
-
+
return $this;
}
-
+
// --------------------------------------------------------------------
/**
@@ -1041,12 +982,12 @@ class CI_DB_active_record extends CI_DB_driver {
$this->_track_aliases($table);
$this->from($table);
}
-
+
if ( ! is_null($limit))
{
$this->limit($limit, $offset);
}
-
+
$sql = $this->_compile_select();
$result = $this->query($sql);
@@ -1057,7 +998,7 @@ class CI_DB_active_record extends CI_DB_driver {
/**
* "Count All Results" query
*
- * Generates a platform-specific query string that counts all records
+ * Generates a platform-specific query string that counts all records
* returned by an Active Record query.
*
* @access public
@@ -1071,12 +1012,12 @@ class CI_DB_active_record extends CI_DB_driver {
$this->_track_aliases($table);
$this->from($table);
}
-
+
$sql = $this->_compile_select($this->_count_string . $this->_protect_identifiers('numrows'));
$query = $this->query($sql);
$this->_reset_select();
-
+
if ($query->num_rows() == 0)
{
return '0';
@@ -1110,12 +1051,12 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->where($where);
}
-
+
if ( ! is_null($limit))
{
$this->limit($limit, $offset);
}
-
+
$sql = $this->_compile_select();
$result = $this->query($sql);
@@ -1126,15 +1067,123 @@ class CI_DB_active_record extends CI_DB_driver {
// --------------------------------------------------------------------
/**
- * getwhere() is an alias of get_where()
- * this function is here for backwards compatibility, as
- * getwhere() has been deprecated
+ * Insert_Batch
+ *
+ * Compiles batch insert strings and runs the queries
+ *
+ * @access public
+ * @param string the table to retrieve the results from
+ * @param array an associative array of insert values
+ * @return object
*/
- function getwhere($table = '', $where = null, $limit = null, $offset = null)
+ function insert_batch($table = '', $set = NULL)
{
- return $this->get_where($table, $where, $limit, $offset);
+ if ( ! is_null($set))
+ {
+ $this->set_insert_batch($set);
+ }
+
+ if (count($this->ar_set) == 0)
+ {
+ if ($this->db_debug)
+ {
+ //No valid data array. Folds in cases where keys and values did not match up
+ return $this->display_error('db_must_use_set');
+ }
+ return FALSE;
+ }
+
+ if ($table == '')
+ {
+ if ( ! isset($this->ar_from[0]))
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_must_set_table');
+ }
+ return FALSE;
+ }
+
+ $table = $this->ar_from[0];
+ }
+
+ // Batch this baby
+ for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 100)
+ {
+
+ $sql = $this->_insert_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_keys, array_slice($this->ar_set, $i, 100));
+
+ //echo $sql;
+
+ $this->query($sql);
+ }
+
+ $this->_reset_write();
+
+
+ return TRUE;
}
-
+
+ // --------------------------------------------------------------------
+
+ /**
+ * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts
+ *
+ * @access public
+ * @param mixed
+ * @param string
+ * @param boolean
+ * @return object
+ */
+
+ function set_insert_batch($key, $value = '', $escape = TRUE)
+ {
+ $key = $this->_object_to_array_batch($key);
+
+ if ( ! is_array($key))
+ {
+ $key = array($key => $value);
+ }
+
+ $keys = array_keys(current($key));
+ sort($keys);
+
+ foreach ($key as $row)
+ {
+ if (count(array_diff($keys, array_keys($row))) > 0 OR count(array_diff(array_keys($row), $keys)) > 0)
+ {
+ // batch function above returns an error on an empty array
+ $this->ar_set[] = array();
+ return;
+ }
+
+ ksort($row); // puts $row in the same order as our keys
+
+ if ($escape === FALSE)
+ {
+ $this->ar_set[] = '('.implode(',', $row).')';
+ }
+ else
+ {
+ $clean = array();
+
+ foreach($row as $value)
+ {
+ $clean[] = $this->escape($value);
+ }
+
+ $this->ar_set[] = '('.implode(',', $clean).')';
+ }
+ }
+
+ foreach ($keys as $k)
+ {
+ $this->ar_keys[] = $this->_protect_identifiers($k);
+ }
+
+ return $this;
+ }
+
// --------------------------------------------------------------------
/**
@@ -1148,12 +1197,12 @@ class CI_DB_active_record extends CI_DB_driver {
* @return object
*/
function insert($table = '', $set = NULL)
- {
+ {
if ( ! is_null($set))
{
$this->set($set);
}
-
+
if (count($this->ar_set) == 0)
{
if ($this->db_debug)
@@ -1173,16 +1222,52 @@ class CI_DB_active_record extends CI_DB_driver {
}
return FALSE;
}
-
+
$table = $this->ar_from[0];
}
$sql = $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set));
-
+
$this->_reset_write();
- return $this->query($sql);
+ return $this->query($sql);
}
-
+
+ function replace($table = '', $set = NULL)
+ {
+ if ( ! is_null($set))
+ {
+ $this->set($set);
+ }
+
+ if (count($this->ar_set) == 0)
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_must_use_set');
+ }
+ return FALSE;
+ }
+
+ if ($table == '')
+ {
+ if ( ! isset($this->ar_from[0]))
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_must_set_table');
+ }
+ return FALSE;
+ }
+
+ $table = $this->ar_from[0];
+ }
+
+ $sql = $this->_replace($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set));
+
+ $this->_reset_write();
+ return $this->query($sql);
+ }
+
// --------------------------------------------------------------------
/**
@@ -1205,7 +1290,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->set($set);
}
-
+
if (count($this->ar_set) == 0)
{
if ($this->db_debug)
@@ -1225,10 +1310,10 @@ class CI_DB_active_record extends CI_DB_driver {
}
return FALSE;
}
-
+
$table = $this->ar_from[0];
}
-
+
if ($where != NULL)
{
$this->where($where);
@@ -1238,13 +1323,140 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->limit($limit);
}
-
+
$sql = $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit);
-
+
$this->_reset_write();
return $this->query($sql);
}
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Update_Batch
+ *
+ * Compiles an update string and runs the query
+ *
+ * @access public
+ * @param string the table to retrieve the results from
+ * @param array an associative array of update values
+ * @param string the where key
+ * @return object
+ */
+ function update_batch($table = '', $set = NULL, $index = NULL)
+ {
+ // Combine any cached components with the current statements
+ $this->_merge_cache();
+
+ if (is_null($index))
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_myst_use_index');
+ }
+
+ return FALSE;
+ }
+
+ if ( ! is_null($set))
+ {
+ $this->set_update_batch($set, $index);
+ }
+
+ if (count($this->ar_set) == 0)
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_must_use_set');
+ }
+
+ return FALSE;
+ }
+
+ if ($table == '')
+ {
+ if ( ! isset($this->ar_from[0]))
+ {
+ if ($this->db_debug)
+ {
+ return $this->display_error('db_must_set_table');
+ }
+ return FALSE;
+ }
+
+ $table = $this->ar_from[0];
+ }
+
+ // Batch this baby
+ for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 100)
+ {
+ $sql = $this->_update_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_slice($this->ar_set, $i, 100), $this->_protect_identifiers($index), $this->ar_where);
+
+ $this->query($sql);
+ }
+
+ $this->_reset_write();
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * The "set_update_batch" function. Allows key/value pairs to be set for batch updating
+ *
+ * @access public
+ * @param array
+ * @param string
+ * @param boolean
+ * @return object
+ */
+
+ function set_update_batch($key, $index = '', $escape = TRUE)
+ {
+ $key = $this->_object_to_array_batch($key);
+
+ if ( ! is_array($key))
+ {
+ // @todo error
+ }
+
+ foreach ($key as $k => $v)
+ {
+ $index_set = FALSE;
+ $clean = array();
+
+ foreach($v as $k2 => $v2)
+ {
+ if ($k2 == $index)
+ {
+ $index_set = TRUE;
+ }
+ else
+ {
+ $not[] = $k.'-'.$v;
+ }
+
+ if ($escape === FALSE)
+ {
+ $clean[$this->_protect_identifiers($k2)] = $v2;
+ }
+ else
+ {
+ $clean[$this->_protect_identifiers($k2)] = $this->escape($v2);
+ }
+ }
+
+ if ($index_set == FALSE)
+ {
+ return $this->display_error('db_batch_missing_index');
+ }
+
+ $this->ar_set[] = $clean;
+ }
+
+ return $this;
+ }
+
// --------------------------------------------------------------------
/**
@@ -1279,7 +1491,7 @@ class CI_DB_active_record extends CI_DB_driver {
$sql = $this->_delete($table);
$this->_reset_write();
-
+
return $this->query($sql);
}
@@ -1319,10 +1531,10 @@ class CI_DB_active_record extends CI_DB_driver {
$sql = $this->_truncate($table);
$this->_reset_write();
-
+
return $this->query($sql);
}
-
+
// --------------------------------------------------------------------
/**
@@ -1388,7 +1600,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
return FALSE;
- }
+ }
$sql = $this->_delete($table, $this->ar_where, $this->ar_like, $this->ar_limit);
@@ -1396,7 +1608,7 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->_reset_write();
}
-
+
return $this->query($sql);
}
@@ -1431,7 +1643,7 @@ class CI_DB_active_record extends CI_DB_driver {
* @access private
* @param string The table to inspect
* @return string
- */
+ */
function _track_aliases($table)
{
if (is_array($table))
@@ -1442,23 +1654,23 @@ class CI_DB_active_record extends CI_DB_driver {
}
return;
}
-
+
// Does the string contain a comma? If so, we need to separate
// the string into discreet statements
if (strpos($table, ',') !== FALSE)
{
return $this->_track_aliases(explode(',', $table));
}
-
+
// if a table alias is used we can recognize it by a space
if (strpos($table, " ") !== FALSE)
{
// if the alias is written with the AS keyword, remove it
$table = preg_replace('/ AS /i', ' ', $table);
-
+
// Grab the alias
$table = trim(strrchr($table, " "));
-
+
// Store the alias, if it doesn't already exist
if ( ! in_array($table, $this->ar_aliased_tables))
{
@@ -1484,7 +1696,7 @@ class CI_DB_active_record extends CI_DB_driver {
$this->_merge_cache();
// ----------------------------------------------------------------
-
+
// Write the "select" portion of the query
if ($select_override !== FALSE)
@@ -1494,13 +1706,13 @@ class CI_DB_active_record extends CI_DB_driver {
else
{
$sql = ( ! $this->ar_distinct) ? 'SELECT ' : 'SELECT DISTINCT ';
-
+
if (count($this->ar_select) == 0)
{
- $sql .= '*';
+ $sql .= '*';
}
else
- {
+ {
// Cycle through the "select" portion of the query and prep each column name.
// The reason we protect identifiers here rather then in the select() function
// is because until the user calls the from() function we don't know if there are aliases
@@ -1508,13 +1720,13 @@ class CI_DB_active_record extends CI_DB_driver {
{
$this->ar_select[$key] = $this->_protect_identifiers($val);
}
-
+
$sql .= implode(', ', $this->ar_select);
}
}
// ----------------------------------------------------------------
-
+
// Write the "FROM" portion of the query
if (count($this->ar_from) > 0)
@@ -1525,7 +1737,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
// ----------------------------------------------------------------
-
+
// Write the "JOIN" portion of the query
if (count($this->ar_join) > 0)
@@ -1536,7 +1748,7 @@ class CI_DB_active_record extends CI_DB_driver {
}
// ----------------------------------------------------------------
-
+
// Write the "WHERE" portion of the query
if (count($this->ar_where) > 0 OR count($this->ar_like) > 0)
@@ -1549,9 +1761,9 @@ class CI_DB_active_record extends CI_DB_driver {
$sql .= implode("\n", $this->ar_where);
// ----------------------------------------------------------------
-
+
// Write the "LIKE" portion of the query
-
+
if (count($this->ar_like) > 0)
{
if (count($this->ar_where) > 0)
@@ -1563,20 +1775,20 @@ class CI_DB_active_record extends CI_DB_driver {
}
// ----------------------------------------------------------------
-
+
// Write the "GROUP BY" portion of the query
-
+
if (count($this->ar_groupby) > 0)
{
$sql .= "\nGROUP BY ";
-
+
$sql .= implode(', ', $this->ar_groupby);
}
// ----------------------------------------------------------------
-
+
// Write the "HAVING" portion of the query
-
+
if (count($this->ar_having) > 0)
{
$sql .= "\nHAVING ";
@@ -1584,24 +1796,24 @@ class CI_DB_active_record extends CI_DB_driver {
}
// ----------------------------------------------------------------
-
+
// Write the "ORDER BY" portion of the query
if (count($this->ar_orderby) > 0)
{
$sql .= "\nORDER BY ";
$sql .= implode(', ', $this->ar_orderby);
-
+
if ($this->ar_order !== FALSE)
{
$sql .= ($this->ar_order == 'desc') ? ' DESC' : ' ASC';
- }
+ }
}
// ----------------------------------------------------------------
-
+
// Write the "LIMIT" portion of the query
-
+
if (is_numeric($this->ar_limit))
{
$sql .= "\n";
@@ -1628,20 +1840,60 @@ class CI_DB_active_record extends CI_DB_driver {
{
return $object;
}
-
+
$array = array();
foreach (get_object_vars($object) as $key => $val)
{
// There are some built in keys we need to ignore for this conversion
- if ( ! is_object($val) && ! is_array($val) && $key != '_parent_name' && $key != '_ci_scaffolding' && $key != '_ci_scaff_table')
+ if ( ! is_object($val) && ! is_array($val) && $key != '_parent_name')
{
$array[$key] = $val;
}
}
-
+
+ return $array;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Object to Array
+ *
+ * Takes an object as input and converts the class variables to array key/vals
+ *
+ * @access public
+ * @param object
+ * @return array
+ */
+ function _object_to_array_batch($object)
+ {
+ if ( ! is_object($object))
+ {
+ return $object;
+ }
+
+ $array = array();
+ $out = get_object_vars($object);
+ $fields = array_keys($out);
+
+ foreach ($fields as $val)
+ {
+ // There are some built in keys we need to ignore for this conversion
+ if ($val != '_parent_name')
+ {
+
+ $i = 0;
+ foreach ($out[$val] as $data)
+ {
+ $array[$i][$val] = $data;
+ $i++;
+ }
+ }
+ }
+
return $array;
}
-
+
// --------------------------------------------------------------------
/**
@@ -1651,7 +1903,7 @@ class CI_DB_active_record extends CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function start_cache()
{
$this->ar_caching = TRUE;
@@ -1666,7 +1918,7 @@ class CI_DB_active_record extends CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function stop_cache()
{
$this->ar_caching = FALSE;
@@ -1681,23 +1933,23 @@ class CI_DB_active_record extends CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function flush_cache()
- {
+ {
$this->_reset_run(
array(
- 'ar_cache_select' => array(),
- 'ar_cache_from' => array(),
+ 'ar_cache_select' => array(),
+ 'ar_cache_from' => array(),
'ar_cache_join' => array(),
- 'ar_cache_where' => array(),
- 'ar_cache_like' => array(),
- 'ar_cache_groupby' => array(),
- 'ar_cache_having' => array(),
- 'ar_cache_orderby' => array(),
+ 'ar_cache_where' => array(),
+ 'ar_cache_like' => array(),
+ 'ar_cache_groupby' => array(),
+ 'ar_cache_having' => array(),
+ 'ar_cache_orderby' => array(),
'ar_cache_set' => array(),
'ar_cache_exists' => array()
)
- );
+ );
}
// --------------------------------------------------------------------
@@ -1705,7 +1957,7 @@ class CI_DB_active_record extends CI_DB_driver {
/**
* Merge Cache
*
- * When called, this function merges any cached AR arrays with
+ * When called, this function merges any cached AR arrays with
* locally called ones.
*
* @access private
@@ -1770,50 +2022,51 @@ class CI_DB_active_record extends CI_DB_driver {
function _reset_select()
{
$ar_reset_items = array(
- 'ar_select' => array(),
- 'ar_from' => array(),
- 'ar_join' => array(),
- 'ar_where' => array(),
- 'ar_like' => array(),
- 'ar_groupby' => array(),
- 'ar_having' => array(),
- 'ar_orderby' => array(),
- 'ar_wherein' => array(),
+ 'ar_select' => array(),
+ 'ar_from' => array(),
+ 'ar_join' => array(),
+ 'ar_where' => array(),
+ 'ar_like' => array(),
+ 'ar_groupby' => array(),
+ 'ar_having' => array(),
+ 'ar_orderby' => array(),
+ 'ar_wherein' => array(),
'ar_aliased_tables' => array(),
- 'ar_distinct' => FALSE,
- 'ar_limit' => FALSE,
- 'ar_offset' => FALSE,
+ 'ar_distinct' => FALSE,
+ 'ar_limit' => FALSE,
+ 'ar_offset' => FALSE,
'ar_order' => FALSE,
);
-
+
$this->_reset_run($ar_reset_items);
}
-
+
// --------------------------------------------------------------------
/**
* Resets the active record "write" values.
*
- * Called by the insert() update() and delete() functions
+ * Called by the insert() update() insert_batch() update_batch() and delete() functions
*
* @access private
* @return void
*/
function _reset_write()
- {
+ {
$ar_reset_items = array(
- 'ar_set' => array(),
- 'ar_from' => array(),
- 'ar_where' => array(),
+ 'ar_set' => array(),
+ 'ar_from' => array(),
+ 'ar_where' => array(),
'ar_like' => array(),
- 'ar_orderby' => array(),
- 'ar_limit' => FALSE,
+ 'ar_orderby' => array(),
+ 'ar_keys' => array(),
+ 'ar_limit' => FALSE,
'ar_order' => FALSE
);
$this->_reset_run($ar_reset_items);
}
-
+
}
/* End of file DB_active_rec.php */
diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php
index d3968b315..3bf065ca5 100644..100755
--- a/system/database/DB_cache.php
+++ b/system/database/DB_cache.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
@@ -32,14 +32,14 @@ class CI_DB_Cache {
*
* Grabs the CI super object instance so we can access it.
*
- */
+ */
function CI_DB_Cache(&$db)
{
// Assign the main CI object to $this->CI
// and load the file helper since we use it a lot
$this->CI =& get_instance();
$this->db =& $db;
- $this->CI->load->helper('file');
+ $this->CI->load->helper('file');
}
// --------------------------------------------------------------------
@@ -50,7 +50,7 @@ class CI_DB_Cache {
* @access public
* @param string the path to the cache directory
* @return bool
- */
+ */
function check_path($path = '')
{
if ($path == '')
@@ -59,10 +59,10 @@ class CI_DB_Cache {
{
return $this->db->cache_off();
}
-
+
$path = $this->db->cachedir;
}
-
+
// Add a trailing slash to the path if needed
$path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
@@ -71,11 +71,11 @@ class CI_DB_Cache {
// If the path is wrong we'll turn off caching
return $this->db->cache_off();
}
-
+
$this->db->cachedir = $path;
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -95,18 +95,18 @@ class CI_DB_Cache {
}
$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
-
+
$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
-
- $filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql);
-
+
+ $filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql);
+
if (FALSE === ($cachedata = read_file($filepath)))
- {
+ {
return FALSE;
}
-
- return unserialize($cachedata);
- }
+
+ return unserialize($cachedata);
+ }
// --------------------------------------------------------------------
@@ -124,29 +124,29 @@ class CI_DB_Cache {
}
$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
-
+
$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
-
+
$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
-
+
$filename = md5($sql);
-
+
if ( ! @is_dir($dir_path))
{
if ( ! @mkdir($dir_path, DIR_WRITE_MODE))
{
return FALSE;
}
-
- @chmod($dir_path, DIR_WRITE_MODE);
+
+ @chmod($dir_path, DIR_WRITE_MODE);
}
-
+
if (write_file($dir_path.$filename, serialize($object)) === FALSE)
{
return FALSE;
}
-
- @chmod($dir_path.$filename, DIR_WRITE_MODE);
+
+ @chmod($dir_path.$filename, FILE_WRITE_MODE);
return TRUE;
}
@@ -159,19 +159,19 @@ class CI_DB_Cache {
* @return bool
*/
function delete($segment_one = '', $segment_two = '')
- {
+ {
if ($segment_one == '')
{
$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
}
-
+
if ($segment_two == '')
{
$segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
}
-
+
$dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
-
+
delete_files($dir_path, TRUE);
}
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index b2a3c2ebd..2d8f592e3 100644..100755
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.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
@@ -71,13 +71,13 @@ class CI_DB_driver {
var $limit_used;
-
+
/**
* Constructor. Accepts one parameter containing the database
* connection settings.
*
* @param array
- */
+ */
function CI_DB_driver($params)
{
if (is_array($params))
@@ -90,7 +90,7 @@ class CI_DB_driver {
log_message('debug', 'Database Driver Class Initialized');
}
-
+
// --------------------------------------------------------------------
/**
@@ -99,7 +99,7 @@ class CI_DB_driver {
* @access private Called by the constructor
* @param mixed
* @return void
- */
+ */
function initialize()
{
// If an existing connection resource is available
@@ -108,9 +108,9 @@ class CI_DB_driver {
{
return TRUE;
}
-
+
// ----------------------------------------------------------------
-
+
// Connect to the database and set the connection ID
$this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();
@@ -118,7 +118,7 @@ class CI_DB_driver {
if ( ! $this->conn_id)
{
log_message('error', 'Unable to connect to the database');
-
+
if ($this->db_debug)
{
$this->display_error('db_unable_to_connect');
@@ -134,12 +134,12 @@ class CI_DB_driver {
if ( ! $this->db_select())
{
log_message('error', 'Unable to select database: '.$this->database);
-
+
if ($this->db_debug)
{
$this->display_error('db_unable_to_select', $this->database);
}
- return FALSE;
+ return FALSE;
}
else
{
@@ -148,14 +148,14 @@ class CI_DB_driver {
{
return FALSE;
}
-
+
return TRUE;
}
}
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -171,26 +171,26 @@ class CI_DB_driver {
if ( ! $this->_db_set_charset($this->char_set, $this->dbcollat))
{
log_message('error', 'Unable to set database connection charset: '.$this->char_set);
-
+
if ($this->db_debug)
{
$this->display_error('db_unable_to_set_charset', $this->char_set);
}
-
+
return FALSE;
}
-
+
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
* The name of the platform in use (mysql, mssql, etc...)
*
* @access public
- * @return string
- */
+ * @return string
+ */
function platform()
{
return $this->dbdriver;
@@ -203,8 +203,8 @@ class CI_DB_driver {
* version of the database being used
*
* @access public
- * @return string
- */
+ * @return string
+ */
function version()
{
if (FALSE === ($sql = $this->_version()))
@@ -215,16 +215,22 @@ class CI_DB_driver {
}
return FALSE;
}
-
- if ($this->dbdriver == 'oci8')
+
+ // Some DBs have functions that return the version, and don't run special
+ // SQL queries per se. In these instances, just return the result.
+ $driver_version_exceptions = array('oci8', 'sqlite');
+
+ if (in_array($this->dbdriver, $driver_version_exceptions))
{
return $sql;
}
-
- $query = $this->query($sql);
- return $query->row('ver');
+ else
+ {
+ $query = $this->query($sql);
+ return $query->row('ver');
+ }
}
-
+
// --------------------------------------------------------------------
/**
@@ -239,8 +245,8 @@ class CI_DB_driver {
* @access public
* @param string An SQL query string
* @param array An array of binding data
- * @return mixed
- */
+ * @return mixed
+ */
function query($sql, $binds = FALSE, $return_object = TRUE)
{
if ($sql == '')
@@ -255,10 +261,10 @@ class CI_DB_driver {
// Verify table prefix and replace if necessary
if ( ($this->dbprefix != '' AND $this->swap_pre != '') AND ($this->dbprefix != $this->swap_pre) )
- {
+ {
$sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
}
-
+
// Is query caching enabled? If the query is a "read type"
// we will load the caching class and return the previously
// cached query if it exists
@@ -273,7 +279,7 @@ class CI_DB_driver {
}
}
}
-
+
// Compile binds if needed
if ($binds !== FALSE)
{
@@ -285,10 +291,10 @@ class CI_DB_driver {
{
$this->queries[] = $sql;
}
-
+
// Start the Query Timer
$time_start = list($sm, $ss) = explode(' ', microtime());
-
+
// Run the Query
if (FALSE === ($this->result_id = $this->simple_query($sql)))
{
@@ -296,7 +302,7 @@ class CI_DB_driver {
{
$this->query_times[] = 0;
}
-
+
// This will trigger a rollback if transactions are being used
$this->_trans_status = FALSE;
@@ -306,10 +312,10 @@ class CI_DB_driver {
// additional queries before displaying the error
$error_no = $this->_error_number();
$error_msg = $this->_error_message();
-
+
// We call this function in order to roll-back queries
// if transactions are enabled. If we don't call this here
- // the error message will trigger an exit, causing the
+ // the error message will trigger an exit, causing the
// transactions to remain in limbo.
$this->trans_complete();
@@ -323,10 +329,10 @@ class CI_DB_driver {
)
);
}
-
+
return FALSE;
}
-
+
// Stop and aggregate the query time results
$time_end = list($em, $es) = explode(' ', microtime());
$this->benchmark += ($em + $es) - ($sm + $ss);
@@ -335,10 +341,10 @@ class CI_DB_driver {
{
$this->query_times[] = ($em + $es) - ($sm + $ss);
}
-
+
// Increment the query counter
$this->query_count++;
-
+
// Was the query a "write" type?
// If so we'll simply return true
if ($this->is_write_type($sql) === TRUE)
@@ -349,10 +355,10 @@ class CI_DB_driver {
{
$this->CACHE->delete();
}
-
+
return TRUE;
}
-
+
// Return TRUE if we don't need to create a result object
// Currently only the Oracle driver uses this when stored
// procedures are used
@@ -360,11 +366,11 @@ class CI_DB_driver {
{
return TRUE;
}
-
- // Load and instantiate the result driver
-
- $driver = $this->load_rdriver();
- $RES = new $driver();
+
+ // Load and instantiate the result driver
+
+ $driver = $this->load_rdriver();
+ $RES = new $driver();
$RES->conn_id = $this->conn_id;
$RES->result_id = $this->result_id;
@@ -375,10 +381,10 @@ class CI_DB_driver {
$RES->limit_used = $this->limit_used;
$this->stmt_id = FALSE;
}
-
+
// oci8 vars must be set before calling this
$RES->num_rows = $RES->num_rows();
-
+
// Is query caching enabled? If so, we'll serialize the
// result object and save it to a cache file.
if ($this->cache_on == TRUE AND $this->_cache_init())
@@ -390,17 +396,17 @@ class CI_DB_driver {
// result object, so we'll have to compile the data
// and save it)
$CR = new CI_DB_result();
- $CR->num_rows = $RES->num_rows();
+ $CR->num_rows = $RES->num_rows();
$CR->result_object = $RES->result_object();
$CR->result_array = $RES->result_array();
-
+
// Reset these since cached objects can not utilize resource IDs.
$CR->conn_id = NULL;
$CR->result_id = NULL;
$this->CACHE->write($sql, $CR);
}
-
+
return $RES;
}
@@ -410,8 +416,8 @@ class CI_DB_driver {
* Load the result drivers
*
* @access public
- * @return string the name of the result class
- */
+ * @return string the name of the result class
+ */
function load_rdriver()
{
$driver = 'CI_DB_'.$this->dbdriver.'_result';
@@ -421,10 +427,10 @@ class CI_DB_driver {
include_once(BASEPATH.'database/DB_result'.EXT);
include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);
}
-
+
return $driver;
}
-
+
// --------------------------------------------------------------------
/**
@@ -435,8 +441,8 @@ class CI_DB_driver {
*
* @access public
* @param string the sql query
- * @return mixed
- */
+ * @return mixed
+ */
function simple_query($sql)
{
if ( ! $this->conn_id)
@@ -446,7 +452,7 @@ class CI_DB_driver {
return $this->_execute($sql);
}
-
+
// --------------------------------------------------------------------
/**
@@ -454,8 +460,8 @@ class CI_DB_driver {
* This permits transactions to be disabled at run-time.
*
* @access public
- * @return void
- */
+ * @return void
+ */
function trans_off()
{
$this->trans_enabled = FALSE;
@@ -471,23 +477,23 @@ class CI_DB_driver {
* a failure of one group will not affect any others
*
* @access public
- * @return void
- */
+ * @return void
+ */
function trans_strict($mode = TRUE)
{
$this->trans_strict = is_bool($mode) ? $mode : TRUE;
}
-
+
// --------------------------------------------------------------------
/**
* Start Transaction
*
* @access public
- * @return void
- */
+ * @return void
+ */
function trans_start($test_mode = FALSE)
- {
+ {
if ( ! $this->trans_enabled)
{
return FALSE;
@@ -499,7 +505,7 @@ class CI_DB_driver {
$this->_trans_depth += 1;
return;
}
-
+
$this->trans_begin($test_mode);
}
@@ -509,27 +515,27 @@ class CI_DB_driver {
* Complete Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_complete()
{
if ( ! $this->trans_enabled)
{
return FALSE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 1)
{
$this->_trans_depth -= 1;
return TRUE;
}
-
+
// The query() function will set this flag to FALSE in the event that a query failed
if ($this->_trans_status === FALSE)
{
$this->trans_rollback();
-
+
// If we are NOT running in strict mode, we will reset
// the _trans_status flag so that subsequent groups of transactions
// will be permitted.
@@ -541,7 +547,7 @@ class CI_DB_driver {
log_message('debug', 'DB Transaction Failure');
return FALSE;
}
-
+
$this->trans_commit();
return TRUE;
}
@@ -552,8 +558,8 @@ class CI_DB_driver {
* Lets you retrieve the transaction flag to determine if it has failed
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_status()
{
return $this->_trans_status;
@@ -567,20 +573,20 @@ class CI_DB_driver {
* @access public
* @param string the sql statement
* @param array an array of bind data
- * @return string
- */
+ * @return string
+ */
function compile_binds($sql, $binds)
{
if (strpos($sql, $this->bind_marker) === FALSE)
{
return $sql;
}
-
+
if ( ! is_array($binds))
{
$binds = array($binds);
}
-
+
// Get the sql segments around the bind markers
$segments = explode($this->bind_marker, $sql);
@@ -601,7 +607,7 @@ class CI_DB_driver {
return $result;
}
-
+
// --------------------------------------------------------------------
/**
@@ -609,8 +615,8 @@ class CI_DB_driver {
*
* @access public
* @param string An SQL query string
- * @return boolean
- */
+ * @return boolean
+ */
function is_write_type($sql)
{
if ( ! preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD DATA|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK)\s+/i', $sql))
@@ -619,7 +625,7 @@ class CI_DB_driver {
}
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -627,34 +633,34 @@ class CI_DB_driver {
*
* @access public
* @param integer The number of decimal places
- * @return integer
- */
+ * @return integer
+ */
function elapsed_time($decimals = 6)
{
return number_format($this->benchmark, $decimals);
}
-
+
// --------------------------------------------------------------------
/**
* Returns the total number of queries
*
* @access public
- * @return integer
- */
+ * @return integer
+ */
function total_queries()
{
return $this->query_count;
}
-
+
// --------------------------------------------------------------------
/**
* Returns the last query that was executed
*
* @access public
- * @return void
- */
+ * @return void
+ */
function last_query()
{
return end($this->queries);
@@ -670,8 +676,8 @@ class CI_DB_driver {
*
* @access public
* @param string
- * @return mixed
- */
+ * @return mixed
+ */
function escape($str)
{
if (is_string($str))
@@ -691,24 +697,24 @@ class CI_DB_driver {
}
// --------------------------------------------------------------------
-
+
/**
* Escape LIKE String
*
* Calls the individual driver for platform
* specific escaping for LIKE conditions
- *
+ *
* @access public
* @param string
* @return mixed
*/
- function escape_like_str($str)
- {
- return $this->escape_str($str, TRUE);
+ function escape_like_str($str)
+ {
+ return $this->escape_str($str, TRUE);
}
// --------------------------------------------------------------------
-
+
/**
* Primary
*
@@ -717,12 +723,12 @@ class CI_DB_driver {
*
* @access public
* @param string the table name
- * @return string
- */
+ * @return string
+ */
function primary($table = '')
- {
+ {
$fields = $this->list_fields($table);
-
+
if ( ! is_array($fields))
{
return FALSE;
@@ -737,8 +743,8 @@ class CI_DB_driver {
* Returns an array of table names
*
* @access public
- * @return array
- */
+ * @return array
+ */
function list_tables($constrain_by_prefix = FALSE)
{
// Is there a cached result?
@@ -746,7 +752,7 @@ class CI_DB_driver {
{
return $this->data_cache['table_names'];
}
-
+
if (FALSE === ($sql = $this->_list_tables($constrain_by_prefix)))
{
if ($this->db_debug)
@@ -758,7 +764,7 @@ class CI_DB_driver {
$retval = array();
$query = $this->query($sql);
-
+
if ($query->num_rows() > 0)
{
foreach($query->result_array() as $row)
@@ -777,7 +783,7 @@ class CI_DB_driver {
$this->data_cache['table_names'] = $retval;
return $this->data_cache['table_names'];
}
-
+
// --------------------------------------------------------------------
/**
@@ -786,10 +792,10 @@ class CI_DB_driver {
* @return boolean
*/
function table_exists($table_name)
- {
+ {
return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -797,7 +803,7 @@ class CI_DB_driver {
*
* @access public
* @param string the table name
- * @return array
+ * @return array
*/
function list_fields($table = '')
{
@@ -806,7 +812,7 @@ class CI_DB_driver {
{
return $this->data_cache['field_names'][$table];
}
-
+
if ($table == '')
{
if ($this->db_debug)
@@ -815,8 +821,8 @@ class CI_DB_driver {
}
return FALSE;
}
-
- if (FALSE === ($sql = $this->_list_columns($this->_protect_identifiers($table, TRUE, NULL, FALSE))))
+
+ if (FALSE === ($sql = $this->_list_columns($table)))
{
if ($this->db_debug)
{
@@ -824,9 +830,9 @@ class CI_DB_driver {
}
return FALSE;
}
-
+
$query = $this->query($sql);
-
+
$retval = array();
foreach($query->result_array() as $row)
{
@@ -837,9 +843,9 @@ class CI_DB_driver {
else
{
$retval[] = current($row);
- }
+ }
}
-
+
$this->data_cache['field_names'][$table] = $retval;
return $this->data_cache['field_names'][$table];
}
@@ -854,10 +860,10 @@ class CI_DB_driver {
* @return boolean
*/
function field_exists($field_name, $table_name)
- {
+ {
return ( ! in_array($field_name, $this->list_fields($table_name))) ? FALSE : TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -865,8 +871,8 @@ class CI_DB_driver {
*
* @access public
* @param string the table name
- * @return object
- */
+ * @return object
+ */
function field_data($table = '')
{
if ($table == '')
@@ -877,36 +883,36 @@ class CI_DB_driver {
}
return FALSE;
}
-
+
$query = $this->query($this->_field_data($this->_protect_identifiers($table, TRUE, NULL, FALSE)));
return $query->field_data();
- }
+ }
// --------------------------------------------------------------------
-
+
/**
* Generate an insert string
*
* @access public
* @param string the table upon which the query will be performed
* @param array an associative array data of key/values
- * @return string
- */
+ * @return string
+ */
function insert_string($table, $data)
{
$fields = array();
$values = array();
-
+
foreach($data as $key => $val)
{
$fields[] = $this->_escape_identifiers($key);
$values[] = $this->escape($val);
}
-
+
return $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values);
- }
-
+ }
+
// --------------------------------------------------------------------
/**
@@ -916,15 +922,15 @@ class CI_DB_driver {
* @param string the table upon which the query will be performed
* @param array an associative array data of key/values
* @param mixed the "where" statement
- * @return string
- */
+ * @return string
+ */
function update_string($table, $data, $where)
{
if ($where == '')
{
return false;
}
-
+
$fields = array();
foreach($data as $key => $val)
{
@@ -941,23 +947,23 @@ class CI_DB_driver {
foreach ($where as $key => $val)
{
$prefix = (count($dest) == 0) ? '' : ' AND ';
-
+
if ($val !== '')
{
if ( ! $this->_has_operator($key))
{
$key .= ' =';
}
-
+
$val = ' '.$this->escape($val);
}
-
+
$dest[] = $prefix.$key.$val;
}
- }
+ }
return $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $dest);
- }
+ }
// --------------------------------------------------------------------
@@ -987,17 +993,17 @@ class CI_DB_driver {
* @access public
* @param string the function name
* @param mixed any parameters needed by the function
- * @return mixed
- */
+ * @return mixed
+ */
function call_function($function)
{
$driver = ($this->dbdriver == 'postgre') ? 'pg_' : $this->dbdriver.'_';
-
+
if (FALSE === strpos($driver, $function))
{
$function = $driver.$function;
}
-
+
if ( ! function_exists($function))
{
if ($this->db_debug)
@@ -1022,7 +1028,7 @@ class CI_DB_driver {
* @access public
* @param string the path to the cache directory
* @return void
- */
+ */
function cache_set_path($path = '')
{
$this->cachedir = $path;
@@ -1035,7 +1041,7 @@ class CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function cache_on()
{
$this->cache_on = TRUE;
@@ -1049,13 +1055,13 @@ class CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function cache_off()
{
$this->cache_on = FALSE;
return FALSE;
}
-
+
// --------------------------------------------------------------------
@@ -1064,7 +1070,7 @@ class CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function cache_delete($segment_one = '', $segment_two = '')
{
if ( ! $this->_cache_init())
@@ -1081,7 +1087,7 @@ class CI_DB_driver {
*
* @access public
* @return void
- */
+ */
function cache_delete_all()
{
if ( ! $this->_cache_init())
@@ -1099,7 +1105,7 @@ class CI_DB_driver {
*
* @access private
* @return void
- */
+ */
function _cache_init()
{
if (is_object($this->CACHE) AND class_exists('CI_DB_Cache'))
@@ -1125,8 +1131,8 @@ class CI_DB_driver {
* Close DB Connection
*
* @access public
- * @return void
- */
+ * @return void
+ */
function close()
{
if (is_resource($this->conn_id) OR is_object($this->conn_id))
@@ -1135,7 +1141,7 @@ class CI_DB_driver {
}
$this->conn_id = FALSE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -1145,11 +1151,11 @@ class CI_DB_driver {
* @param string the error message
* @param string any "swap" values
* @param boolean whether to localize the message
- * @return string sends the application/error_db.php template
- */
+ * @return string sends the application/error_db.php template
+ */
function display_error($error = '', $swap = '', $native = FALSE)
{
- $LANG =& load_class('Language');
+ $LANG =& load_class('Lang', 'core');
$LANG->load('db');
$heading = $LANG->line('db_error_heading');
@@ -1162,8 +1168,26 @@ class CI_DB_driver {
{
$message = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error;
}
-
- $error =& load_class('Exceptions');
+
+ // Find the most likely culprit of the error by going through
+ // the backtrace until the source file is no longer in the
+ // database folder.
+
+ $trace = debug_backtrace();
+
+ foreach($trace as $call)
+ {
+ if (isset($call['file']) && strpos($call['file'], BASEPATH.'database') === FALSE)
+ {
+ // Found it - use a relative path for safety
+ $message[] = 'Filename: '.str_replace(array(BASEPATH, APPPATH), '', $call['file']);
+ $message[] = 'Line Number: '.$call['line'];
+
+ break;
+ }
+ }
+
+ $error =& load_class('Exceptions', 'core');
echo $error->show_error($heading, $message, 'error_db');
exit;
}
@@ -1190,7 +1214,7 @@ class CI_DB_driver {
* Protect Identifiers
*
* This function is used extensively by the Active Record class, and by
- * a couple functions in this class.
+ * a couple functions in this class.
* It takes a column or table name (optionally with an alias) and inserts
* the table prefix onto it. Some logic is necessary in order to deal with
* column names that include the path. Consider a query like this:
@@ -1212,7 +1236,7 @@ class CI_DB_driver {
* @param mixed
* @param bool
* @return string
- */
+ */
function _protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE)
{
if ( ! is_bool($protect_identifiers))
@@ -1234,7 +1258,7 @@ class CI_DB_driver {
// Convert tabs or multiple spaces into single spaces
$item = preg_replace('/[\t ]+/', ' ', $item);
-
+
// If the item has an alias declaration we remove it and set it aside.
// Basically we remove everything to the right of the first space
$alias = '';
@@ -1245,7 +1269,7 @@ class CI_DB_driver {
}
// This is basically a bug fix for queries that use MAX, MIN, etc.
- // If a parenthesis is found we know that we do not need to
+ // If a parenthesis is found we know that we do not need to
// escape the data or add a prefix. There's probably a more graceful
// way to deal with this, but I'm not thinking of it -- Rick
if (strpos($item, '(') !== FALSE)
@@ -1259,7 +1283,7 @@ class CI_DB_driver {
if (strpos($item, '.') !== FALSE)
{
$parts = explode('.', $item);
-
+
// Does the first segment of the exploded item match
// one of the aliases previously identified? If so,
// we have nothing more to do other than escape the item
@@ -1274,12 +1298,12 @@ class CI_DB_driver {
$parts[$key] = $this->_escape_identifiers($val);
}
}
-
+
$item = implode('.', $parts);
- }
+ }
return $item.$alias;
}
-
+
// Is there a table prefix defined in the config file? If not, no need to do anything
if ($this->dbprefix != '')
{
@@ -1302,7 +1326,7 @@ class CI_DB_driver {
{
$i = 0;
}
-
+
// This flag is set when the supplied $item does not contain a field name.
// This can happen when this function is being called from a JOIN.
if ($field_exists == FALSE)
@@ -1315,22 +1339,22 @@ class CI_DB_driver {
{
$parts[$i] = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $parts[$i]);
}
-
+
// We only add the table prefix if it does not already exist
if (substr($parts[$i], 0, strlen($this->dbprefix)) != $this->dbprefix)
{
$parts[$i] = $this->dbprefix.$parts[$i];
}
-
+
// Put the parts back together
$item = implode('.', $parts);
}
-
+
if ($protect_identifiers === TRUE)
{
$item = $this->_escape_identifiers($item);
}
-
+
return $item.$alias;
}
@@ -1347,14 +1371,14 @@ class CI_DB_driver {
if ($prefix_single == TRUE AND substr($item, 0, strlen($this->dbprefix)) != $this->dbprefix)
{
$item = $this->dbprefix.$item;
- }
+ }
}
if ($protect_identifiers === TRUE AND ! in_array($item, $this->_reserved_identifiers))
{
$item = $this->_escape_identifiers($item);
}
-
+
return $item.$alias;
}
diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php
index c5931db27..27f2c372d 100644..100755
--- a/system/database/DB_forge.php
+++ b/system/database/DB_forge.php
@@ -2,11 +2,11 @@
/**
* Code Igniter
*
- * 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
@@ -24,9 +24,9 @@
*/
class CI_DB_forge {
- var $fields = array();
+ var $fields = array();
var $keys = array();
- var $primary_keys = array();
+ var $primary_keys = array();
var $db_char_set = '';
/**
@@ -34,7 +34,7 @@ class CI_DB_forge {
*
* Grabs the CI super object instance so we can access it.
*
- */
+ */
function CI_DB_forge()
{
// Assign the main database object to $this->db
@@ -55,12 +55,12 @@ class CI_DB_forge {
function create_database($db_name)
{
$sql = $this->_create_database($db_name);
-
+
if (is_bool($sql))
{
return $sql;
}
-
+
return $this->db->query($sql);
}
@@ -76,12 +76,12 @@ class CI_DB_forge {
function drop_database($db_name)
{
$sql = $this->_drop_database($db_name);
-
+
if (is_bool($sql))
{
return $sql;
}
-
+
return $this->db->query($sql);
}
@@ -103,15 +103,15 @@ class CI_DB_forge {
{
$this->add_key($one, $primary);
}
-
+
return;
}
-
+
if ($key == '')
{
show_error('Key information is required for that operation.');
}
-
+
if ($primary === TRUE)
{
$this->primary_keys[] = $key;
@@ -137,7 +137,7 @@ class CI_DB_forge {
{
show_error('Field information is required.');
}
-
+
if (is_string($field))
{
if ($field == 'id')
@@ -157,16 +157,16 @@ class CI_DB_forge {
{
show_error('Field information is required for that operation.');
}
-
+
$this->fields[] = $field;
}
}
-
+
if (is_array($field))
{
$this->fields = array_merge($this->fields, $field);
}
-
+
}
// --------------------------------------------------------------------
@@ -179,19 +179,19 @@ class CI_DB_forge {
* @return bool
*/
function create_table($table = '', $if_not_exists = FALSE)
- {
+ {
if ($table == '')
{
show_error('A table name is required for that operation.');
}
-
+
if (count($this->fields) == 0)
- {
+ {
show_error('Field information is required.');
}
$sql = $this->_create_table($this->db->dbprefix.$table, $this->fields, $this->primary_keys, $this->keys, $if_not_exists);
-
+
$this->_reset();
return $this->db->query($sql);
}
@@ -208,12 +208,12 @@ class CI_DB_forge {
function drop_table($table_name)
{
$sql = $this->_drop_table($this->db->dbprefix.$table_name);
-
+
if (is_bool($sql))
{
return $sql;
}
-
+
return $this->db->query($sql);
}
@@ -233,7 +233,7 @@ class CI_DB_forge {
{
show_error('A table name is required for that operation.');
}
-
+
$sql = $this->_rename_table($table_name, $new_table_name);
return $this->db->query($sql);
}
@@ -261,24 +261,25 @@ class CI_DB_forge {
foreach ($field as $k => $v)
{
- $this->add_field(array($k => $field[$k]));
+ $this->add_field(array($k => $field[$k]));
if (count($this->fields) == 0)
- {
+ {
show_error('Field information is required.');
}
-
+
$sql = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->fields, $after_field);
$this->_reset();
-
+
if ($this->db->query($sql) === FALSE)
{
return FALSE;
}
}
-
+
return TRUE;
+
}
// --------------------------------------------------------------------
@@ -293,7 +294,7 @@ class CI_DB_forge {
*/
function drop_column($table = '', $column_name = '')
{
-
+
if ($table == '')
{
show_error('A table name is required for that operation.');
@@ -305,7 +306,7 @@ class CI_DB_forge {
}
$sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name);
-
+
return $this->db->query($sql);
}
@@ -332,23 +333,29 @@ class CI_DB_forge {
foreach ($field as $k => $v)
{
+ // If no name provided, use the current name
+ if ( ! isset($field[$k]['name']))
+ {
+ $field[$k]['name'] = $k;
+ }
+
$this->add_field(array($k => $field[$k]));
if (count($this->fields) == 0)
- {
+ {
show_error('Field information is required.');
}
-
+
$sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
$this->_reset();
-
+
if ($this->db->query($sql) === FALSE)
{
return FALSE;
}
}
-
+
return TRUE;
}
@@ -364,9 +371,9 @@ class CI_DB_forge {
*/
function _reset()
{
- $this->fields = array();
+ $this->fields = array();
$this->keys = array();
- $this->primary_keys = array();
+ $this->primary_keys = array();
}
}
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 */
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index 94e7a0bda..a5f174f0a 100644..100755
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -2,11 +2,11 @@
/**
* Code Igniter
*
- * 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
@@ -25,20 +25,20 @@
class CI_DB_utility extends CI_DB_forge {
var $db;
- var $data_cache = array();
+ var $data_cache = array();
/**
* Constructor
*
* Grabs the CI super object instance so we can access it.
*
- */
+ */
function CI_DB_utility()
{
// Assign the main database object to $this->db
$CI =& get_instance();
$this->db =& $CI->db;
-
+
log_message('debug', "Database Utility Class Initialized");
}
@@ -51,13 +51,13 @@ class CI_DB_utility extends CI_DB_forge {
* @return bool
*/
function list_databases()
- {
+ {
// Is there a cached result?
if (isset($this->data_cache['db_names']))
{
return $this->data_cache['db_names'];
}
-
+
$query = $this->db->query($this->_list_databases());
$dbs = array();
if ($query->num_rows() > 0)
@@ -67,7 +67,7 @@ class CI_DB_utility extends CI_DB_forge {
$dbs[] = current($row);
}
}
-
+
$this->data_cache['db_names'] = $dbs;
return $this->data_cache['db_names'];
}
@@ -75,6 +75,31 @@ class CI_DB_utility extends CI_DB_forge {
// --------------------------------------------------------------------
/**
+ * Determine if a particular database exists
+ *
+ * @access public
+ * @param string
+ * @return boolean
+ */
+ function database_exists($database_name)
+ {
+ // Some databases won't have access to the list_databases() function, so
+ // this is intended to allow them to override with their own functions as
+ // defined in $driver_utility.php
+ if (method_exists($this, '_database_exists'))
+ {
+ return $this->_database_exists($database_name);
+ }
+ else
+ {
+ return ( ! in_array($database_name, $this->list_databases())) ? FALSE : TRUE;
+ }
+ }
+
+
+ // --------------------------------------------------------------------
+
+ /**
* Optimize Table
*
* @access public
@@ -84,15 +109,15 @@ class CI_DB_utility extends CI_DB_forge {
function optimize_table($table_name)
{
$sql = $this->_optimize_table($table_name);
-
+
if (is_bool($sql))
{
show_error('db_must_use_set');
}
-
+
$query = $this->db->query($sql);
$res = $query->result_array();
-
+
// Note: Due to a bug in current() that affects some versions
// of PHP we can not pass function call directly into it
return current($res);
@@ -112,14 +137,14 @@ class CI_DB_utility extends CI_DB_forge {
foreach ($this->db->list_tables() as $table_name)
{
$sql = $this->_optimize_table($table_name);
-
+
if (is_bool($sql))
{
return $sql;
}
-
+
$query = $this->db->query($sql);
-
+
// Build the result array...
// Note: Due to a bug in current() that affects some versions
// of PHP we can not pass function call directly into it
@@ -128,7 +153,7 @@ class CI_DB_utility extends CI_DB_forge {
$key = str_replace($this->db->database.'.', '', current($res));
$keys = array_keys($res);
unset($res[$keys[0]]);
-
+
$result[$key] = $res;
}
@@ -147,20 +172,20 @@ class CI_DB_utility extends CI_DB_forge {
function repair_table($table_name)
{
$sql = $this->_repair_table($table_name);
-
+
if (is_bool($sql))
{
return $sql;
}
-
+
$query = $this->db->query($sql);
-
+
// Note: Due to a bug in current() that affects some versions
// of PHP we can not pass function call directly into it
$res = $query->result_array();
return current($res);
}
-
+
// --------------------------------------------------------------------
/**
@@ -178,25 +203,25 @@ class CI_DB_utility extends CI_DB_forge {
if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
{
show_error('You must submit a valid result object');
- }
-
+ }
+
$out = '';
-
+
// First generate the headings from the table column names
foreach ($query->list_fields() as $name)
{
$out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
}
-
+
$out = rtrim($out);
$out .= $newline;
-
+
// Next blast through the result array and build out the rows
foreach ($query->result_array() as $row)
{
foreach ($row as $item)
{
- $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
+ $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
}
$out = rtrim($out);
$out .= $newline;
@@ -204,7 +229,7 @@ class CI_DB_utility extends CI_DB_forge {
return $out;
}
-
+
// --------------------------------------------------------------------
/**
@@ -221,7 +246,7 @@ class CI_DB_utility extends CI_DB_forge {
{
show_error('You must submit a valid result object');
}
-
+
// Set our default values
foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val)
{
@@ -230,10 +255,10 @@ class CI_DB_utility extends CI_DB_forge {
$params[$key] = $val;
}
}
-
+
// Create variables for convenience
extract($params);
-
+
// Load the xml helper
$CI =& get_instance();
$CI->load->helper('xml');
@@ -243,7 +268,7 @@ class CI_DB_utility extends CI_DB_forge {
foreach ($query->result_array() as $row)
{
$xml .= $tab."<{$element}>".$newline;
-
+
foreach ($row as $key => $val)
{
$xml .= $tab.$tab."<{$key}>".xml_convert($val)."</{$key}>".$newline;
@@ -251,7 +276,7 @@ class CI_DB_utility extends CI_DB_forge {
$xml .= $tab."</{$element}>".$newline;
}
$xml .= "</$root>".$newline;
-
+
return $xml;
}
@@ -272,9 +297,9 @@ class CI_DB_utility extends CI_DB_forge {
{
$params = array('tables' => $params);
}
-
+
// ------------------------------------------------------
-
+
// Set up our default preferences
$prefs = array(
'tables' => array(),
@@ -300,13 +325,13 @@ class CI_DB_utility extends CI_DB_forge {
// ------------------------------------------------------
- // Are we backing up a complete database or individual tables?
+ // Are we backing up a complete database or individual tables?
// If no table names were submitted we'll fetch the entire table list
if (count($prefs['tables']) == 0)
{
$prefs['tables'] = $this->db->list_tables();
}
-
+
// ------------------------------------------------------
// Validate the format
@@ -320,13 +345,13 @@ class CI_DB_utility extends CI_DB_forge {
// Is the encoder supported? If not, we'll either issue an
// error or use plain text depending on the debug settings
if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode'))
- OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
+ OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
{
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_compression');
}
-
+
$prefs['format'] = 'txt';
}
@@ -340,7 +365,7 @@ class CI_DB_utility extends CI_DB_forge {
}
// ------------------------------------------------------
-
+
// Was a Gzip file requested?
if ($prefs['format'] == 'gzip')
{
@@ -348,7 +373,7 @@ class CI_DB_utility extends CI_DB_forge {
}
// ------------------------------------------------------
-
+
// Was a text file requested?
if ($prefs['format'] == 'txt')
{
@@ -357,7 +382,7 @@ class CI_DB_utility extends CI_DB_forge {
// ------------------------------------------------------
- // Was a Zip file requested?
+ // Was a Zip file requested?
if ($prefs['format'] == 'zip')
{
// If they included the .zip file extension we'll remove it
@@ -365,7 +390,7 @@ class CI_DB_utility extends CI_DB_forge {
{
$prefs['filename'] = str_replace('.zip', '', $prefs['filename']);
}
-
+
// Tack on the ".sql" file extension if needed
if ( ! preg_match("|.+?\.sql$|", $prefs['filename']))
{
@@ -373,13 +398,13 @@ class CI_DB_utility extends CI_DB_forge {
}
// Load the Zip class and output it
-
+
$CI =& get_instance();
$CI->load->library('zip');
- $CI->zip->add_data($prefs['filename'], $this->_backup($prefs));
+ $CI->zip->add_data($prefs['filename'], $this->_backup($prefs));
return $CI->zip->get_zip();
}
-
+
}
}
diff --git a/system/database/drivers/index.html b/system/database/drivers/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/index.html
+++ b/system/database/drivers/index.html
diff --git a/system/database/drivers/mssql/index.html b/system/database/drivers/mssql/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/mssql/index.html
+++ b/system/database/drivers/mssql/index.html
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php
index f301ba533..5a69132cd 100644..100755
--- a/system/database/drivers/mssql/mssql_driver.php
+++ b/system/database/drivers/mssql/mssql_driver.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
@@ -31,14 +31,14 @@
class CI_DB_mssql_driver extends CI_DB {
var $dbdriver = 'mssql';
-
+
// The character used for escaping
var $_escape_char = '';
// clause and character used for LIKE escape sequences
var $_like_escape_str = " ESCAPE '%s' ";
var $_like_escape_chr = '!';
-
+
/**
* The syntax to count rows is slightly different across different
* database engines, so this string appears in each driver and is
@@ -52,7 +52,7 @@ class CI_DB_mssql_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
{
if ($this->port != '')
@@ -62,7 +62,7 @@ class CI_DB_mssql_driver extends CI_DB {
return @mssql_connect($this->hostname, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
/**
@@ -70,7 +70,7 @@ class CI_DB_mssql_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
if ($this->port != '')
@@ -80,9 +80,9 @@ class CI_DB_mssql_driver extends CI_DB {
return @mssql_pconnect($this->hostname, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
-
+
/**
* Reconnect
*
@@ -98,13 +98,13 @@ class CI_DB_mssql_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Select the database
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
// Note: The brackets are required in the event that the DB name
@@ -113,7 +113,7 @@ class CI_DB_mssql_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Set client character set
*
@@ -129,20 +129,20 @@ class CI_DB_mssql_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Execute the query
*
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
$sql = $this->_prep_query($sql);
return @mssql_query($sql, $this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -153,7 +153,7 @@ class CI_DB_mssql_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
return $sql;
@@ -165,15 +165,15 @@ class CI_DB_mssql_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -195,8 +195,8 @@ class CI_DB_mssql_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -220,8 +220,8 @@ class CI_DB_mssql_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -238,7 +238,7 @@ class CI_DB_mssql_driver extends CI_DB {
$this->simple_query('ROLLBACK TRAN');
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -254,19 +254,16 @@ class CI_DB_mssql_driver extends CI_DB {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
-
- // Access the CI object
- $CI =& get_instance();
-
+ }
+
+ return $str;
+ }
+
// Escape single quotes
- $str = str_replace("'", "''", $CI->input->_remove_invisible_characters($str));
-
+ $str = str_replace("'", "''", remove_invisible_characters($str));
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
@@ -274,10 +271,10 @@ class CI_DB_mssql_driver extends CI_DB {
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -290,7 +287,7 @@ class CI_DB_mssql_driver extends CI_DB {
{
return @mssql_rows_affected($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -315,7 +312,7 @@ class CI_DB_mssql_driver extends CI_DB {
/**
* Parse major version
*
- * Grabs the major version number from the
+ * Grabs the major version number from the
* database server version string passed in.
*
* @access private
@@ -385,14 +382,14 @@ class CI_DB_mssql_driver extends CI_DB {
function _list_tables($prefix_limit = FALSE)
{
$sql = "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
-
+
// for future compatibility
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
- //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char);
+ //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);
return FALSE; // not currently supported
}
-
+
return $sql;
}
@@ -409,7 +406,7 @@ class CI_DB_mssql_driver extends CI_DB {
*/
function _list_columns($table = '')
{
- return "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '".$table."'";
+ return "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '".$table."'";
}
// --------------------------------------------------------------------
@@ -425,7 +422,7 @@ class CI_DB_mssql_driver extends CI_DB {
*/
function _field_data($table)
{
- return "SELECT TOP 1 * FROM ".$table;
+ return "SELECT TOP 1 * FROM ".$table;
}
// --------------------------------------------------------------------
@@ -440,7 +437,7 @@ class CI_DB_mssql_driver extends CI_DB {
{
return mssql_get_last_message();
}
-
+
// --------------------------------------------------------------------
/**
@@ -477,26 +474,26 @@ class CI_DB_mssql_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -515,12 +512,12 @@ class CI_DB_mssql_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return implode(', ', $tables);
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -533,10 +530,10 @@ class CI_DB_mssql_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
-
+
// --------------------------------------------------------------------
/**
@@ -558,21 +555,21 @@ class CI_DB_mssql_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -585,12 +582,12 @@ class CI_DB_mssql_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return "TRUNCATE ".$table;
}
-
+
// --------------------------------------------------------------------
/**
@@ -603,7 +600,7 @@ class CI_DB_mssql_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -621,7 +618,7 @@ class CI_DB_mssql_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -641,8 +638,8 @@ class CI_DB_mssql_driver extends CI_DB {
function _limit($sql, $limit, $offset)
{
$i = $limit + $offset;
-
- return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql);
+
+ return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql);
}
// --------------------------------------------------------------------
@@ -657,7 +654,7 @@ class CI_DB_mssql_driver extends CI_DB {
function _close($conn_id)
{
@mssql_close($conn_id);
- }
+ }
}
diff --git a/system/database/drivers/mssql/mssql_forge.php b/system/database/drivers/mssql/mssql_forge.php
index f6a17811f..70b20ecf8 100644..100755
--- a/system/database/drivers/mssql/mssql_forge.php
+++ b/system/database/drivers/mssql/mssql_forge.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
@@ -79,12 +79,12 @@ class CI_DB_mssql_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$current_field_count = 0;
@@ -100,41 +100,41 @@ class CI_DB_mssql_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
-
+
$sql .= ' '.$attributes['TYPE'];
-
+
if (array_key_exists('CONSTRAINT', $attributes))
{
$sql .= '('.$attributes['CONSTRAINT'].')';
}
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
{
$sql .= ' NULL';
}
else
{
- $sql .= ' NOT NULL';
+ $sql .= ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
@@ -147,24 +147,24 @@ class CI_DB_mssql_forge extends CI_DB_forge {
$primary_keys = $this->db->_protect_identifiers($primary_keys);
$sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
}
-
+
if (is_array($keys) && count($keys) > 0)
{
foreach ($keys as $key)
{
if (is_array($key))
{
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key = array($this->db->_protect_identifiers($key));
}
-
+
$sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")";
}
}
-
+
$sql .= "\n)";
return $sql;
@@ -218,9 +218,9 @@ class CI_DB_mssql_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
-
+
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/mssql/mssql_result.php b/system/database/drivers/mssql/mssql_result.php
index e7b338045..2897ca5a5 100644..100755
--- a/system/database/drivers/mssql/mssql_result.php
+++ b/system/database/drivers/mssql/mssql_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
@@ -25,7 +25,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_mssql_result extends CI_DB_result {
-
+
/**
* Number of rows in the result set
*
@@ -36,7 +36,7 @@ class CI_DB_mssql_result extends CI_DB_result {
{
return @mssql_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -67,7 +67,7 @@ class CI_DB_mssql_result extends CI_DB_result {
{
$field_names[] = $field->name;
}
-
+
return $field_names;
}
@@ -85,17 +85,17 @@ class CI_DB_mssql_result extends CI_DB_result {
{
$retval = array();
while ($field = mssql_fetch_field($this->result_id))
- {
- $F = new stdClass();
- $F->name = $field->name;
- $F->type = $field->type;
+ {
+ $F = new stdClass();
+ $F->name = $field->name;
+ $F->type = $field->type;
$F->max_length = $field->max_length;
$F->primary_key = 0;
$F->default = '';
-
+
$retval[] = $F;
}
-
+
return $retval;
}
@@ -105,7 +105,7 @@ class CI_DB_mssql_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_resource($this->result_id))
@@ -131,7 +131,7 @@ class CI_DB_mssql_result extends CI_DB_result {
{
return mssql_data_seek($this->result_id, $n);
}
-
+
// --------------------------------------------------------------------
/**
@@ -146,7 +146,7 @@ class CI_DB_mssql_result extends CI_DB_result {
{
return mssql_fetch_assoc($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
diff --git a/system/database/drivers/mssql/mssql_utility.php b/system/database/drivers/mssql/mssql_utility.php
index da887b815..48ecbc72a 100644..100755
--- a/system/database/drivers/mssql/mssql_utility.php
+++ b/system/database/drivers/mssql/mssql_utility.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
@@ -52,7 +52,7 @@ class CI_DB_mssql_utility extends CI_DB_utility {
}
// --------------------------------------------------------------------
-
+
/**
* Repair table query
*
@@ -82,42 +82,7 @@ class CI_DB_mssql_utility extends CI_DB_utility {
return $this->db->display_error('db_unsuported_feature');
}
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _create_database($name)
- {
- return "CREATE DATABASE ".$name;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- return "DROP DATABASE ".$name;
- }
-
}
-
/* End of file mssql_utility.php */
/* Location: ./system/database/drivers/mssql/mssql_utility.php */ \ No newline at end of file
diff --git a/system/database/drivers/mysql/index.html b/system/database/drivers/mysql/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/mysql/index.html
+++ b/system/database/drivers/mysql/index.html
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index 85a6ef4a0..df18c912e 100644..100755
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.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
@@ -43,9 +43,9 @@ class CI_DB_mysql_driver extends CI_DB {
* Whether to use the MySQL "delete hack" which allows the number
* of affected rows to be shown. Uses a preg_replace when enabled,
* adding a bit more processing to all queries.
- */
+ */
var $delete_hack = TRUE;
-
+
/**
* The syntax to count rows is slightly different across different
* database engines, so this string appears in each driver and is
@@ -59,17 +59,17 @@ class CI_DB_mysql_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
{
if ($this->port != '')
{
$this->hostname .= ':'.$this->port;
}
-
+
return @mysql_connect($this->hostname, $this->username, $this->password, TRUE);
}
-
+
// --------------------------------------------------------------------
/**
@@ -77,7 +77,7 @@ class CI_DB_mysql_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
if ($this->port != '')
@@ -87,7 +87,7 @@ class CI_DB_mysql_driver extends CI_DB {
return @mysql_pconnect($this->hostname, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
/**
@@ -108,13 +108,13 @@ class CI_DB_mysql_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Select the database
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
return @mysql_select_db($this->database, $this->conn_id);
@@ -136,7 +136,7 @@ class CI_DB_mysql_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -156,13 +156,13 @@ class CI_DB_mysql_driver extends CI_DB {
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
$sql = $this->_prep_query($sql);
return @mysql_query($sql, $this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -173,7 +173,7 @@ class CI_DB_mysql_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
// "DELETE FROM TABLE" returns 0 affected rows This hack modifies
@@ -185,7 +185,7 @@ class CI_DB_mysql_driver extends CI_DB {
$sql = preg_replace("/^\s*DELETE\s+FROM\s+(\S+)\s*$/", "DELETE FROM \\1 WHERE 1=1", $sql);
}
}
-
+
return $sql;
}
@@ -195,15 +195,15 @@ class CI_DB_mysql_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -214,7 +214,7 @@ class CI_DB_mysql_driver extends CI_DB {
// If the $test_mode flag is set to TRUE transactions will be rolled back
// even if the queries produce a successful result.
$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
-
+
$this->simple_query('SET AUTOCOMMIT=0');
$this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK
return TRUE;
@@ -226,8 +226,8 @@ class CI_DB_mysql_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -252,8 +252,8 @@ class CI_DB_mysql_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -271,7 +271,7 @@ class CI_DB_mysql_driver extends CI_DB {
$this->simple_query('SET AUTOCOMMIT=1');
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -282,17 +282,17 @@ class CI_DB_mysql_driver extends CI_DB {
* @param bool whether or not the string will be used in a LIKE condition
* @return string
*/
- function escape_str($str, $like = FALSE)
- {
+ function escape_str($str, $like = FALSE)
+ {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
+ }
+
+ return $str;
+ }
if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
{
@@ -306,16 +306,16 @@ class CI_DB_mysql_driver extends CI_DB {
{
$str = addslashes($str);
}
-
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -328,7 +328,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
return @mysql_affected_rows($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -360,7 +360,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
return 0;
}
-
+
$query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE));
if ($query->num_rows() == 0)
@@ -385,7 +385,7 @@ class CI_DB_mysql_driver extends CI_DB {
*/
function _list_tables($prefix_limit = FALSE)
{
- $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char;
+ $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char;
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
@@ -394,7 +394,7 @@ class CI_DB_mysql_driver extends CI_DB {
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -408,7 +408,7 @@ class CI_DB_mysql_driver extends CI_DB {
*/
function _list_columns($table = '')
{
- return "SHOW COLUMNS FROM ".$table;
+ return "SHOW COLUMNS FROM ".$this->_protect_identifiers($table, TRUE, NULL, FALSE);
}
// --------------------------------------------------------------------
@@ -439,7 +439,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
return mysql_error($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -475,26 +475,26 @@ class CI_DB_mysql_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -513,12 +513,12 @@ class CI_DB_mysql_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return '('.implode(', ', $tables).')';
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -531,12 +531,50 @@ class CI_DB_mysql_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
-
+
// --------------------------------------------------------------------
+
+ /**
+ * Replace statement
+ *
+ * Generates a platform-specific replace string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the insert keys
+ * @param array the insert values
+ * @return string
+ */
+ function _replace($table, $keys, $values)
+ {
+ return "REPLACE INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Insert_batch statement
+ *
+ * Generates a platform-specific insert string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the insert keys
+ * @param array the insert values
+ * @return string
+ */
+ function _insert_batch($table, $keys, $values)
+ {
+ return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values);
+ }
+
+ // --------------------------------------------------------------------
+
+
/**
* Update statement
*
@@ -556,22 +594,76 @@ class CI_DB_mysql_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
+ return $sql;
+ }
+
+ // --------------------------------------------------------------------
+
+
+ /**
+ * Update_Batch statement
+ *
+ * Generates a platform-specific batch update string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the update data
+ * @param array the where clause
+ * @return string
+ */
+ function _update_batch($table, $values, $index, $where = NULL)
+ {
+ $ids = array();
+ $where = ($where != '' AND count($where) >=1) ? implode(" ", $where).' AND ' : '';
+
+ foreach($values as $key => $val)
+ {
+ $ids[] = $val[$index];
+
+ foreach(array_keys($val) as $field)
+ {
+ if ($field != $index)
+ {
+ $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+ }
+ }
+ }
+
+ $sql = "UPDATE ".$table." SET ";
+ $cases = '';
+
+ foreach($final as $k => $v)
+ {
+ $cases .= $k.' = CASE '."\n";
+ foreach ($v as $row)
+ {
+ $cases .= $row."\n";
+ }
+
+ $cases .= 'ELSE '.$k.' END, ';
+ }
+
+ $sql .= substr($cases, 0, -2);
+
+ $sql .= ' WHERE '.$where.$index.' IN ('.implode(',', $ids).')';
+
return $sql;
}
// --------------------------------------------------------------------
+
/**
* Truncate statement
*
@@ -582,12 +674,12 @@ class CI_DB_mysql_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return "TRUNCATE ".$table;
}
-
+
// --------------------------------------------------------------------
/**
@@ -600,7 +692,7 @@ class CI_DB_mysql_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -618,7 +710,7 @@ class CI_DB_mysql_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -636,7 +728,7 @@ class CI_DB_mysql_driver extends CI_DB {
* @return string
*/
function _limit($sql, $limit, $offset)
- {
+ {
if ($offset == 0)
{
$offset = '';
@@ -645,7 +737,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
$offset .= ", ";
}
-
+
return $sql."LIMIT ".$offset.$limit;
}
@@ -662,7 +754,7 @@ class CI_DB_mysql_driver extends CI_DB {
{
@mysql_close($conn_id);
}
-
+
}
diff --git a/system/database/drivers/mysql/mysql_forge.php b/system/database/drivers/mysql/mysql_forge.php
index ccacf99f8..529ec980d 100644..100755
--- a/system/database/drivers/mysql/mysql_forge.php
+++ b/system/database/drivers/mysql/mysql_forge.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
@@ -23,7 +23,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_mysql_forge extends CI_DB_forge {
-
+
/**
* Create database
*
@@ -76,52 +76,67 @@ class CI_DB_mysql_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
if (array_key_exists('NAME', $attributes))
{
$sql .= ' '.$this->db->_protect_identifiers($attributes['NAME']).' ';
}
-
+
if (array_key_exists('TYPE', $attributes))
{
$sql .= ' '.$attributes['TYPE'];
+
+ if (array_key_exists('CONSTRAINT', $attributes))
+ {
+ switch ($attributes['TYPE'])
+ {
+ case 'decimal':
+ case 'float':
+ case 'numeric':
+ $sql .= '('.implode(',', $attributes['CONSTRAINT']).')';
+ break;
+
+ case 'enum':
+ case 'set':
+ $sql .= '("'.implode('","', $attributes['CONSTRAINT']).'")';
+ break;
+
+ default:
+ $sql .= '('.$attributes['CONSTRAINT'].')';
+ }
+ }
}
-
- if (array_key_exists('CONSTRAINT', $attributes))
- {
- $sql .= '('.$attributes['CONSTRAINT'].')';
- }
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes))
{
$sql .= ($attributes['NULL'] === TRUE) ? ' NULL' : ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
$sql .= ',';
}
}
-
+
return $sql;
}
@@ -141,12 +156,12 @@ class CI_DB_mysql_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$sql .= $this->_process_fields($fields);
@@ -165,14 +180,14 @@ class CI_DB_mysql_forge extends CI_DB_forge {
if (is_array($key))
{
$key_name = $this->db->_protect_identifiers(implode('_', $key));
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key_name = $this->db->_protect_identifiers($key);
$key = array($key_name);
}
-
+
$sql .= ",\n\tKEY {$key_name} (" . implode(', ', $key) . ")";
}
}
@@ -226,7 +241,7 @@ class CI_DB_mysql_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
}
diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php
index acc586626..507389603 100644..100755
--- a/system/database/drivers/mysql/mysql_result.php
+++ b/system/database/drivers/mysql/mysql_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
@@ -36,7 +36,7 @@ class CI_DB_mysql_result extends CI_DB_result {
{
return @mysql_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -49,7 +49,7 @@ class CI_DB_mysql_result extends CI_DB_result {
{
return @mysql_num_fields($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -67,7 +67,7 @@ class CI_DB_mysql_result extends CI_DB_result {
{
$field_names[] = $field->name;
}
-
+
return $field_names;
}
@@ -85,27 +85,27 @@ class CI_DB_mysql_result extends CI_DB_result {
{
$retval = array();
while ($field = mysql_fetch_field($this->result_id))
- {
+ {
$F = new stdClass();
- $F->name = $field->name;
- $F->type = $field->type;
+ $F->name = $field->name;
+ $F->type = $field->type;
$F->default = $field->def;
$F->max_length = $field->max_length;
$F->primary_key = $field->primary_key;
-
+
$retval[] = $F;
}
-
+
return $retval;
}
-
+
// --------------------------------------------------------------------
/**
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_resource($this->result_id))
@@ -146,7 +146,7 @@ class CI_DB_mysql_result extends CI_DB_result {
{
return mysql_fetch_assoc($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -161,7 +161,7 @@ class CI_DB_mysql_result extends CI_DB_result {
{
return mysql_fetch_object($this->result_id);
}
-
+
}
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index 3277b0ff7..e9747c540 100644..100755
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.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
@@ -84,7 +84,7 @@ class CI_DB_mysql_utility extends CI_DB_utility {
// Extract the prefs for simplicity
extract($params);
-
+
// Build the output
$output = '';
foreach ((array)$tables as $table)
@@ -97,31 +97,31 @@ class CI_DB_mysql_utility extends CI_DB_utility {
// Get the table schema
$query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.'.$table);
-
+
// No result means the table name was invalid
if ($query === FALSE)
{
continue;
}
-
+
// Write out the table schema
$output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
- if ($add_drop == TRUE)
- {
+ if ($add_drop == TRUE)
+ {
$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
}
-
+
$i = 0;
$result = $query->result_array();
foreach ($result[0] as $val)
{
if ($i++ % 2)
- {
+ {
$output .= $val.';'.$newline.$newline;
}
}
-
+
// If inserts are not needed we're done...
if ($add_insert == FALSE)
{
@@ -130,16 +130,16 @@ class CI_DB_mysql_utility extends CI_DB_utility {
// Grab all the data from the current table
$query = $this->db->query("SELECT * FROM $table");
-
+
if ($query->num_rows() == 0)
{
continue;
}
-
+
// Fetch the field names and determine if the field is an
// integer type. We use this info to decide whether to
// surround the data with quotes or not
-
+
$i = 0;
$field_str = '';
$is_int = array();
@@ -148,24 +148,24 @@ class CI_DB_mysql_utility extends CI_DB_utility {
// Most versions of MySQL store timestamp as a string
$is_int[$i] = (in_array(
strtolower(mysql_field_type($query->result_id, $i)),
- array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
+ array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
TRUE)
) ? TRUE : FALSE;
-
+
// Create a string of field names
$field_str .= '`'.$field->name.'`, ';
$i++;
}
-
+
// Trim off the end comma
$field_str = preg_replace( "/, $/" , "" , $field_str);
-
-
+
+
// Build the insert string
foreach ($query->result_array() as $row)
{
$val_str = '';
-
+
$i = 0;
foreach ($row as $v)
{
@@ -184,61 +184,26 @@ class CI_DB_mysql_utility extends CI_DB_utility {
else
{
$val_str .= $v;
- }
- }
-
+ }
+ }
+
// Append a comma
$val_str .= ', ';
$i++;
}
-
+
// Remove the comma at the end of the string
$val_str = preg_replace( "/, $/" , "" , $val_str);
-
+
// Build the INSERT string
$output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
}
-
+
$output .= $newline.$newline;
}
return $output;
}
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _create_database($name)
- {
- return "CREATE DATABASE ".$name;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- return "DROP DATABASE ".$name;
- }
-
}
/* End of file mysql_utility.php */
diff --git a/system/database/drivers/mysqli/index.html b/system/database/drivers/mysqli/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/mysqli/index.html
+++ b/system/database/drivers/mysqli/index.html
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index 5d7200fbd..8942100d4 100644..100755
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.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
@@ -31,7 +31,7 @@
class CI_DB_mysqli_driver extends CI_DB {
var $dbdriver = 'mysqli';
-
+
// The character used for escaping
var $_escape_char = '`';
@@ -51,7 +51,7 @@ class CI_DB_mysqli_driver extends CI_DB {
* Whether to use the MySQL "delete hack" which allows the number
* of affected rows to be shown. Uses a preg_replace when enabled,
* adding a bit more processing to all queries.
- */
+ */
var $delete_hack = TRUE;
// --------------------------------------------------------------------
@@ -61,12 +61,12 @@ class CI_DB_mysqli_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
{
if ($this->port != '')
{
- return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
+ return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
}
else
{
@@ -82,12 +82,12 @@ class CI_DB_mysqli_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
return $this->db_connect();
}
-
+
// --------------------------------------------------------------------
/**
@@ -114,7 +114,7 @@ class CI_DB_mysqli_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
return @mysqli_select_db($this->conn_id, $this->database);
@@ -136,7 +136,7 @@ class CI_DB_mysqli_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -156,14 +156,14 @@ class CI_DB_mysqli_driver extends CI_DB {
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
- $sql = $this->_prep_query($sql);
+ $sql = $this->_prep_query($sql);
$result = @mysqli_query($this->conn_id, $sql);
return $result;
}
-
+
// --------------------------------------------------------------------
/**
@@ -174,7 +174,7 @@ class CI_DB_mysqli_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
// "DELETE FROM TABLE" returns 0 affected rows This hack modifies
@@ -186,7 +186,7 @@ class CI_DB_mysqli_driver extends CI_DB {
$sql = preg_replace("/^\s*DELETE\s+FROM\s+(\S+)\s*$/", "DELETE FROM \\1 WHERE 1=1", $sql);
}
}
-
+
return $sql;
}
@@ -196,15 +196,15 @@ class CI_DB_mysqli_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -227,8 +227,8 @@ class CI_DB_mysqli_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -253,8 +253,8 @@ class CI_DB_mysqli_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -283,17 +283,17 @@ class CI_DB_mysqli_driver extends CI_DB {
* @param bool whether or not the string will be used in a LIKE condition
* @return string
*/
- function escape_str($str, $like = FALSE)
+ function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
+ }
+
+ return $str;
+ }
if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id))
{
@@ -307,16 +307,16 @@ class CI_DB_mysqli_driver extends CI_DB {
{
$str = addslashes($str);
}
-
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -329,7 +329,7 @@ class CI_DB_mysqli_driver extends CI_DB {
{
return @mysqli_affected_rows($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -386,13 +386,13 @@ class CI_DB_mysqli_driver extends CI_DB {
*/
function _list_tables($prefix_limit = FALSE)
{
- $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char;
-
+ $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char;
+
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%'";
}
-
+
return $sql;
}
@@ -409,7 +409,7 @@ class CI_DB_mysqli_driver extends CI_DB {
*/
function _list_columns($table = '')
{
- return "SHOW COLUMNS FROM ".$table;
+ return "SHOW COLUMNS FROM ".$this->_protect_identifiers($table, TRUE, NULL, FALSE);
}
// --------------------------------------------------------------------
@@ -440,7 +440,7 @@ class CI_DB_mysqli_driver extends CI_DB {
{
return mysqli_error($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -471,31 +471,31 @@ class CI_DB_mysqli_driver extends CI_DB {
{
return $item;
}
-
+
foreach ($this->_reserved_identifiers as $id)
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -514,12 +514,12 @@ class CI_DB_mysqli_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return '('.implode(', ', $tables).')';
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -532,9 +532,27 @@ class CI_DB_mysqli_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Insert_batch statement
+ *
+ * Generates a platform-specific insert string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the insert keys
+ * @param array the insert values
+ * @return string
+ */
+ function _insert_batch($table, $keys, $values)
+ {
+ return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values);
+ }
// --------------------------------------------------------------------
@@ -557,21 +575,72 @@ class CI_DB_mysqli_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
-
+
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
-
+
$sql .= $orderby.$limit;
-
+
+ return $sql;
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
+ * Update_Batch statement
+ *
+ * Generates a platform-specific batch update string from the supplied data
+ *
+ * @access public
+ * @param string the table name
+ * @param array the update data
+ * @param array the where clause
+ * @return string
+ */
+ function _update_batch($table, $values, $index, $where = NULL)
+ {
+ $ids = array();
+ $where = ($where != '' AND count($where) >=1) ? implode(" ", $where).' AND ' : '';
+
+ foreach($values as $key => $val)
+ {
+ $ids[] = $val[$index];
+
+ foreach(array_keys($val) as $field)
+ {
+ if ($field != $index)
+ {
+ $final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+ }
+ }
+ }
+
+ $sql = "UPDATE ".$table." SET ";
+ $cases = '';
+
+ foreach($final as $k => $v)
+ {
+ $cases .= $k.' = CASE '."\n";
+ foreach ($v as $row)
+ {
+ $cases .= $row."\n";
+ }
+
+ $cases .= 'ELSE '.$k.' END, ';
+ }
+
+ $sql .= substr($cases, 0, -2);
+
+ $sql .= ' WHERE '.$where.$index.' IN ('.implode(',', $ids).')';
+
return $sql;
}
-
// --------------------------------------------------------------------
/**
@@ -584,12 +653,12 @@ class CI_DB_mysqli_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return "TRUNCATE ".$table;
}
-
+
// --------------------------------------------------------------------
/**
@@ -602,7 +671,7 @@ class CI_DB_mysqli_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -620,7 +689,7 @@ class CI_DB_mysqli_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -638,14 +707,14 @@ class CI_DB_mysqli_driver extends CI_DB {
* @return string
*/
function _limit($sql, $limit, $offset)
- {
+ {
$sql .= "LIMIT ".$limit;
-
+
if ($offset > 0)
{
$sql .= " OFFSET ".$offset;
}
-
+
return $sql;
}
diff --git a/system/database/drivers/mysqli/mysqli_forge.php b/system/database/drivers/mysqli/mysqli_forge.php
index 262d491ed..d5097335e 100644..100755
--- a/system/database/drivers/mysqli/mysqli_forge.php
+++ b/system/database/drivers/mysqli/mysqli_forge.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
@@ -23,7 +23,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_mysqli_forge extends CI_DB_forge {
-
+
/**
* Create database
*
@@ -76,52 +76,52 @@ class CI_DB_mysqli_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
if (array_key_exists('NAME', $attributes))
{
$sql .= ' '.$this->db->_protect_identifiers($attributes['NAME']).' ';
}
-
+
if (array_key_exists('TYPE', $attributes))
{
$sql .= ' '.$attributes['TYPE'];
}
-
+
if (array_key_exists('CONSTRAINT', $attributes))
{
$sql .= '('.$attributes['CONSTRAINT'].')';
}
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes))
{
$sql .= ($attributes['NULL'] === TRUE) ? ' NULL' : ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
$sql .= ',';
}
}
-
+
return $sql;
}
@@ -141,12 +141,12 @@ class CI_DB_mysqli_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$sql .= $this->_process_fields($fields);
@@ -165,14 +165,14 @@ class CI_DB_mysqli_forge extends CI_DB_forge {
if (is_array($key))
{
$key_name = $this->db->_protect_identifiers(implode('_', $key));
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key_name = $this->db->_protect_identifiers($key);
$key = array($key_name);
}
-
+
$sql .= ",\n\tKEY {$key_name} (" . implode(', ', $key) . ")";
}
}
@@ -226,7 +226,7 @@ class CI_DB_mysqli_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
}
diff --git a/system/database/drivers/mysqli/mysqli_result.php b/system/database/drivers/mysqli/mysqli_result.php
index 81d22cc9c..c4d8f5d58 100644..100755
--- a/system/database/drivers/mysqli/mysqli_result.php
+++ b/system/database/drivers/mysqli/mysqli_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
@@ -25,7 +25,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_mysqli_result extends CI_DB_result {
-
+
/**
* Number of rows in the result set
*
@@ -36,7 +36,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
{
return @mysqli_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -67,7 +67,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
{
$field_names[] = $field->name;
}
-
+
return $field_names;
}
@@ -85,17 +85,17 @@ class CI_DB_mysqli_result extends CI_DB_result {
{
$retval = array();
while ($field = mysqli_fetch_field($this->result_id))
- {
- $F = new stdClass();
- $F->name = $field->name;
- $F->type = $field->type;
+ {
+ $F = new stdClass();
+ $F->name = $field->name;
+ $F->type = $field->type;
$F->default = $field->def;
$F->max_length = $field->max_length;
$F->primary_key = ($field->flags & MYSQLI_PRI_KEY_FLAG) ? 1 : 0;
-
+
$retval[] = $F;
}
-
+
return $retval;
}
@@ -105,7 +105,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_object($this->result_id))
@@ -146,7 +146,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
{
return mysqli_fetch_assoc($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -161,7 +161,7 @@ class CI_DB_mysqli_result extends CI_DB_result {
{
return mysqli_fetch_object($this->result_id);
}
-
+
}
diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php
index 44fd0f7aa..e17889b8c 100644..100755
--- a/system/database/drivers/mysqli/mysqli_utility.php
+++ b/system/database/drivers/mysqli/mysqli_utility.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
@@ -23,7 +23,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_mysqli_utility extends CI_DB_utility {
-
+
/**
* List databases
*
@@ -34,7 +34,7 @@ class CI_DB_mysqli_utility extends CI_DB_utility {
{
return "SHOW DATABASES";
}
-
+
// --------------------------------------------------------------------
/**
@@ -81,42 +81,6 @@ class CI_DB_mysqli_utility extends CI_DB_utility {
// Currently unsupported
return $this->db->display_error('db_unsuported_feature');
}
-
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _create_database($name)
- {
- return "CREATE DATABASE ".$name;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- return "DROP DATABASE ".$name;
- }
-
}
/* End of file mysqli_utility.php */
diff --git a/system/database/drivers/oci8/index.html b/system/database/drivers/oci8/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/oci8/index.html
+++ b/system/database/drivers/oci8/index.html
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 758192358..64f53cc3f 100644..100755
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -2,14 +2,14 @@
/**
* 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.
- * @license http://codeigniter.com/user_guide/license.html
+ * @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
+ * @since Version 1.0
* @filesource
*/
@@ -22,10 +22,10 @@
* creates dynamically based on whether the active record
* class is being used or not.
*
- * @package CodeIgniter
+ * @package CodeIgniter
* @subpackage Drivers
* @category Database
- * @author ExpressionEngine Dev Team
+ * @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/database/
*/
@@ -44,14 +44,14 @@
class CI_DB_oci8_driver extends CI_DB {
var $dbdriver = 'oci8';
-
+
// The character used for excaping
var $_escape_char = '"';
-
+
// clause and character used for LIKE escape sequences
var $_like_escape_str = " escape '%s' ";
var $_like_escape_chr = '!';
-
+
/**
* The syntax to count rows is slightly different across different
* database engines, so this string appears in each driver and is
@@ -141,7 +141,7 @@ class CI_DB_oci8_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -248,7 +248,7 @@ class CI_DB_oci8_driver extends CI_DB {
}
return FALSE;
}
-
+
// build the query string
$sql = "begin $package.$procedure(";
@@ -256,20 +256,20 @@ class CI_DB_oci8_driver extends CI_DB {
foreach($params as $param)
{
$sql .= $param['name'] . ",";
-
+
if (array_key_exists('type', $param) && ($param['type'] == OCI_B_CURSOR))
{
$have_cursor = TRUE;
}
}
$sql = trim($sql, ",") . "); end;";
-
+
$this->stmt_id = FALSE;
$this->_set_stmt_id($sql);
$this->_bind_params($params);
$this->query($sql, FALSE, $have_cursor);
}
-
+
// --------------------------------------------------------------------
/**
@@ -284,10 +284,10 @@ class CI_DB_oci8_driver extends CI_DB {
{
return;
}
-
+
foreach ($params as $param)
{
- foreach (array('name', 'value', 'type', 'length') as $val)
+ foreach (array('name', 'value', 'type', 'length') as $val)
{
if ( ! isset($param[$val]))
{
@@ -305,26 +305,26 @@ class CI_DB_oci8_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
return TRUE;
}
-
+
// Reset the transaction failure flag.
// If the $test_mode flag is set to TRUE transactions will be rolled back
// even if the queries produce a successful result.
$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;
-
+
$this->_commit = OCI_DEFAULT;
return TRUE;
}
@@ -335,8 +335,8 @@ class CI_DB_oci8_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -361,8 +361,8 @@ class CI_DB_oci8_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -396,18 +396,15 @@ class CI_DB_oci8_driver extends CI_DB {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
+ }
+
+ return $str;
+ }
- // Access the CI object
- $CI =& get_instance();
+ $str = remove_invisible_characters($str);
- $str = $CI->input->_remove_invisible_characters($str);
-
// escape LIKE condition wildcards
if ($like === TRUE)
{
@@ -415,7 +412,7 @@ class CI_DB_oci8_driver extends CI_DB {
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
-
+
return $str;
}
@@ -493,9 +490,9 @@ class CI_DB_oci8_driver extends CI_DB {
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
- $sql .= " WHERE TABLE_NAME LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char);
+ $sql .= " WHERE TABLE_NAME LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);
}
-
+
return $sql;
}
@@ -558,7 +555,7 @@ class CI_DB_oci8_driver extends CI_DB {
$error = ocierror($this->conn_id);
return $error['code'];
}
-
+
// --------------------------------------------------------------------
/**
@@ -581,26 +578,26 @@ class CI_DB_oci8_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -619,12 +616,12 @@ class CI_DB_oci8_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return implode(', ', $tables);
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -662,17 +659,17 @@ class CI_DB_oci8_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
return $sql;
}
@@ -688,12 +685,12 @@ class CI_DB_oci8_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return "TRUNCATE TABLE ".$table;
}
-
+
// --------------------------------------------------------------------
/**
@@ -706,7 +703,7 @@ class CI_DB_oci8_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -724,7 +721,7 @@ class CI_DB_oci8_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -755,7 +752,7 @@ class CI_DB_oci8_driver extends CI_DB {
$this->limit_used = TRUE;
return $newsql;
- }
+ }
// --------------------------------------------------------------------
diff --git a/system/database/drivers/oci8/oci8_forge.php b/system/database/drivers/oci8/oci8_forge.php
index d77ed8de6..3cd17585a 100644..100755
--- a/system/database/drivers/oci8/oci8_forge.php
+++ b/system/database/drivers/oci8/oci8_forge.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
@@ -66,12 +66,12 @@ class CI_DB_oci8_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$current_field_count = 0;
@@ -87,41 +87,41 @@ class CI_DB_oci8_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
-
+
$sql .= ' '.$attributes['TYPE'];
-
+
if (array_key_exists('CONSTRAINT', $attributes))
{
$sql .= '('.$attributes['CONSTRAINT'].')';
}
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
{
$sql .= ' NULL';
}
else
{
- $sql .= ' NOT NULL';
+ $sql .= ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
@@ -141,17 +141,17 @@ class CI_DB_oci8_forge extends CI_DB_forge {
{
if (is_array($key))
{
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key = array($this->db->_protect_identifiers($key));
}
-
+
$sql .= ",\n\tUNIQUE COLUMNS (" . implode(', ', $key) . ")";
}
}
-
+
$sql .= "\n)";
return $sql;
@@ -218,9 +218,9 @@ class CI_DB_oci8_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
-
+
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
index cab538e21..88531b436 100644..100755
--- a/system/database/drivers/oci8/oci8_result.php
+++ b/system/database/drivers/oci8/oci8_result.php
@@ -2,14 +2,14 @@
/**
* 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.
- * @license http://codeigniter.com/user_guide/license.html
+ * @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
+ * @since Version 1.0
* @filesource
*/
@@ -21,7 +21,7 @@
* This class extends the parent result class: CI_DB_result
*
* @category Database
- * @author ExpressionEngine Dev Team
+ * @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_oci8_result extends CI_DB_result {
@@ -35,7 +35,7 @@ class CI_DB_oci8_result extends CI_DB_result {
*
* 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
@@ -111,7 +111,7 @@ class CI_DB_oci8_result extends CI_DB_result {
$fieldCount = $this->num_fields();
for ($c = 1; $c <= $fieldCount; $c++)
{
- $F = new stdClass();
+ $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);
@@ -128,12 +128,12 @@ class CI_DB_oci8_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_resource($this->result_id))
{
- ocifreestatement($this->result_id);
+ ocifreestatement($this->result_id);
$this->result_id = FALSE;
}
}
@@ -151,8 +151,8 @@ class CI_DB_oci8_result extends CI_DB_result {
function _fetch_assoc(&$row)
{
$id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
-
- return ocifetchinto($id, $row, OCI_ASSOC + OCI_RETURN_NULLS);
+
+ return ocifetchinto($id, $row, OCI_ASSOC + OCI_RETURN_NULLS);
}
// --------------------------------------------------------------------
@@ -166,17 +166,17 @@ class CI_DB_oci8_result extends CI_DB_result {
* @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)
{
@@ -192,7 +192,7 @@ class CI_DB_oci8_result extends CI_DB_result {
{
$obj->$key = $val;
}
-
+
$result[] = $obj;
}
diff --git a/system/database/drivers/oci8/oci8_utility.php b/system/database/drivers/oci8/oci8_utility.php
index 74670eaab..854b467e1 100644..100755
--- a/system/database/drivers/oci8/oci8_utility.php
+++ b/system/database/drivers/oci8/oci8_utility.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
@@ -81,41 +81,6 @@ class CI_DB_oci8_utility extends CI_DB_utility {
// Currently unsupported
return $this->db->display_error('db_unsuported_feature');
}
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access public
- * @param string the database name
- * @return bool
- */
- function _create_database($name)
- {
- return FALSE;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- return FALSE;
- }
-
}
/* End of file oci8_utility.php */
diff --git a/system/database/drivers/odbc/index.html b/system/database/drivers/odbc/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/odbc/index.html
+++ b/system/database/drivers/odbc/index.html
diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index 6cb3080d4..c8e03c356 100644..100755
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.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
@@ -31,14 +31,14 @@
class CI_DB_odbc_driver extends CI_DB {
var $dbdriver = 'odbc';
-
+
// the character used to excape - not necessary for ODBC
var $_escape_char = '';
-
+
// clause and character used for LIKE escape sequences
var $_like_escape_str = " {escape '%s'} ";
var $_like_escape_chr = '!';
-
+
/**
* The syntax to count rows is slightly different across different
* database engines, so this string appears in each driver and is
@@ -51,7 +51,7 @@ class CI_DB_odbc_driver extends CI_DB {
function CI_DB_odbc_driver($params)
{
parent::CI_DB($params);
-
+
$this->_random_keyword = ' RND('.time().')'; // database specific random keyword
}
@@ -60,12 +60,12 @@ class CI_DB_odbc_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
{
return @odbc_connect($this->hostname, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
/**
@@ -73,12 +73,12 @@ class CI_DB_odbc_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
return @odbc_pconnect($this->hostname, $this->username, $this->password);
}
-
+
// --------------------------------------------------------------------
/**
@@ -102,7 +102,7 @@ class CI_DB_odbc_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
// Not needed for ODBC
@@ -126,7 +126,7 @@ class CI_DB_odbc_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -146,13 +146,13 @@ class CI_DB_odbc_driver extends CI_DB {
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
$sql = $this->_prep_query($sql);
return @odbc_exec($this->conn_id, $sql);
}
-
+
// --------------------------------------------------------------------
/**
@@ -163,7 +163,7 @@ class CI_DB_odbc_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
return $sql;
@@ -175,15 +175,15 @@ class CI_DB_odbc_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -204,8 +204,8 @@ class CI_DB_odbc_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -230,8 +230,8 @@ class CI_DB_odbc_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -265,19 +265,16 @@ class CI_DB_odbc_driver extends CI_DB {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
-
- // Access the CI object
- $CI =& get_instance();
-
+ }
+
+ return $str;
+ }
+
// ODBC doesn't require escaping
- $str = $CI->input->_remove_invisible_characters($str);
-
+ $str = remove_invisible_characters($str);
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
@@ -285,10 +282,10 @@ class CI_DB_odbc_driver extends CI_DB {
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -301,7 +298,7 @@ class CI_DB_odbc_driver extends CI_DB {
{
return @odbc_num_rows($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -362,13 +359,13 @@ class CI_DB_odbc_driver extends CI_DB {
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
- //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char);
+ //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);
return FALSE; // not currently supported
}
-
+
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -413,7 +410,7 @@ class CI_DB_odbc_driver extends CI_DB {
{
return odbc_errormsg($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -449,26 +446,26 @@ class CI_DB_odbc_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -487,12 +484,12 @@ class CI_DB_odbc_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return '('.implode(', ', $tables).')';
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -505,10 +502,10 @@ class CI_DB_odbc_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
-
+
// --------------------------------------------------------------------
/**
@@ -530,21 +527,21 @@ class CI_DB_odbc_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -557,12 +554,12 @@ class CI_DB_odbc_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return $this->_delete($table);
}
-
+
// --------------------------------------------------------------------
/**
@@ -575,7 +572,7 @@ class CI_DB_odbc_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -593,7 +590,7 @@ class CI_DB_odbc_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -630,7 +627,7 @@ class CI_DB_odbc_driver extends CI_DB {
@odbc_close($conn_id);
}
-
+
}
diff --git a/system/database/drivers/odbc/odbc_forge.php b/system/database/drivers/odbc/odbc_forge.php
index 1ae559b6e..3ec86b4e9 100644..100755
--- a/system/database/drivers/odbc/odbc_forge.php
+++ b/system/database/drivers/odbc/odbc_forge.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
@@ -54,7 +54,7 @@ class CI_DB_odbc_forge extends CI_DB_forge {
function _drop_database($name)
{
// ODBC has no "drop database" command since it's
- // designed to connect to an existing database
+ // designed to connect to an existing database
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_feature');
@@ -78,12 +78,12 @@ class CI_DB_odbc_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$current_field_count = 0;
@@ -99,41 +99,41 @@ class CI_DB_odbc_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
-
+
$sql .= ' '.$attributes['TYPE'];
-
+
if (array_key_exists('CONSTRAINT', $attributes))
{
$sql .= '('.$attributes['CONSTRAINT'].')';
}
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
{
$sql .= ' NULL';
}
else
{
- $sql .= ' NOT NULL';
+ $sql .= ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
@@ -146,24 +146,24 @@ class CI_DB_odbc_forge extends CI_DB_forge {
$primary_keys = $this->db->_protect_identifiers($primary_keys);
$sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
}
-
+
if (is_array($keys) && count($keys) > 0)
{
foreach ($keys as $key)
{
if (is_array($key))
{
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key = array($this->db->_protect_identifiers($key));
}
-
+
$sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")";
}
}
-
+
$sql .= "\n)";
return $sql;
@@ -179,7 +179,7 @@ class CI_DB_odbc_forge extends CI_DB_forge {
*/
function _drop_table($table)
{
- // Not a supported ODBC feature
+ // Not a supported ODBC feature
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_feature');
@@ -235,9 +235,9 @@ class CI_DB_odbc_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
-
+
}
diff --git a/system/database/drivers/odbc/odbc_result.php b/system/database/drivers/odbc/odbc_result.php
index 5ae46df62..a81a2b8b7 100644..100755
--- a/system/database/drivers/odbc/odbc_result.php
+++ b/system/database/drivers/odbc/odbc_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
@@ -25,7 +25,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_odbc_result extends CI_DB_result {
-
+
/**
* Number of rows in the result set
*
@@ -36,7 +36,7 @@ class CI_DB_odbc_result extends CI_DB_result {
{
return @odbc_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -65,9 +65,9 @@ class CI_DB_odbc_result extends CI_DB_result {
$field_names = array();
for ($i = 0; $i < $this->num_fields(); $i++)
{
- $field_names[] = odbc_field_name($this->result_id, $i);
+ $field_names[] = odbc_field_name($this->result_id, $i);
}
-
+
return $field_names;
}
@@ -86,16 +86,16 @@ class CI_DB_odbc_result extends CI_DB_result {
$retval = array();
for ($i = 0; $i < $this->num_fields(); $i++)
{
- $F = new stdClass();
- $F->name = odbc_field_name($this->result_id, $i);
- $F->type = odbc_field_type($this->result_id, $i);
+ $F = new stdClass();
+ $F->name = odbc_field_name($this->result_id, $i);
+ $F->type = odbc_field_type($this->result_id, $i);
$F->max_length = odbc_field_len($this->result_id, $i);
$F->primary_key = 0;
$F->default = '';
$retval[] = $F;
}
-
+
return $retval;
}
@@ -105,7 +105,7 @@ class CI_DB_odbc_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_resource($this->result_id))
diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php
index 4e6848e82..d335bed99 100644..100755
--- a/system/database/drivers/odbc/odbc_utility.php
+++ b/system/database/drivers/odbc/odbc_utility.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
@@ -32,7 +32,7 @@ class CI_DB_odbc_utility extends CI_DB_utility {
*/
function _list_databases()
{
- // Not sure if ODBC lets you list all databases...
+ // Not sure if ODBC lets you list all databases...
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_feature');
@@ -53,7 +53,7 @@ class CI_DB_odbc_utility extends CI_DB_utility {
*/
function _optimize_table($table)
{
- // Not a supported ODBC feature
+ // Not a supported ODBC feature
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_feature');
@@ -74,7 +74,7 @@ class CI_DB_odbc_utility extends CI_DB_utility {
*/
function _repair_table($table)
{
- // Not a supported ODBC feature
+ // Not a supported ODBC feature
if ($this->db->db_debug)
{
return $this->db->display_error('db_unsuported_feature');
@@ -96,52 +96,7 @@ class CI_DB_odbc_utility extends CI_DB_utility {
// Currently unsupported
return $this->db->display_error('db_unsuported_feature');
}
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
- /**
- * Create database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _create_database()
- {
- // ODBC has no "create database" command since it's
- // designed to connect to an existing database
- if ($this->db->db_debug)
- {
- return $this->db->display_error('db_unsuported_feature');
- }
- return FALSE;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- // ODBC has no "drop database" command since it's
- // designed to connect to an existing database
- if ($this->db->db_debug)
- {
- return $this->db->display_error('db_unsuported_feature');
- }
- return FALSE;
- }
}
/* End of file odbc_utility.php */
diff --git a/system/database/drivers/postgre/index.html b/system/database/drivers/postgre/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/postgre/index.html
+++ b/system/database/drivers/postgre/index.html
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index bac179d40..0bb7974d8 100644..100755
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.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
@@ -31,7 +31,7 @@
class CI_DB_postgre_driver extends CI_DB {
var $dbdriver = 'postgre';
-
+
var $_escape_char = '"';
// clause and character used for LIKE escape sequences
@@ -51,7 +51,7 @@ class CI_DB_postgre_driver extends CI_DB {
*
* @access private
* @return string
- */
+ */
function _connect_string()
{
$components = array(
@@ -61,7 +61,7 @@ class CI_DB_postgre_driver extends CI_DB {
'username' => 'user',
'password' => 'password'
);
-
+
$connect_string = "";
foreach ($components as $key => $val)
{
@@ -80,9 +80,9 @@ class CI_DB_postgre_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
- {
+ {
return @pg_connect($this->_connect_string());
}
@@ -93,12 +93,12 @@ class CI_DB_postgre_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
return @pg_pconnect($this->_connect_string());
}
-
+
// --------------------------------------------------------------------
/**
@@ -125,7 +125,7 @@ class CI_DB_postgre_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
// Not needed for Postgre so we'll return TRUE
@@ -149,7 +149,7 @@ class CI_DB_postgre_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -169,13 +169,13 @@ class CI_DB_postgre_driver extends CI_DB {
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
$sql = $this->_prep_query($sql);
return @pg_query($this->conn_id, $sql);
}
-
+
// --------------------------------------------------------------------
/**
@@ -186,7 +186,7 @@ class CI_DB_postgre_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
return $sql;
@@ -198,15 +198,15 @@ class CI_DB_postgre_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -227,8 +227,8 @@ class CI_DB_postgre_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -251,8 +251,8 @@ class CI_DB_postgre_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -284,15 +284,15 @@ class CI_DB_postgre_driver extends CI_DB {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
+ }
+
+ return $str;
+ }
$str = pg_escape_string($str);
-
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
@@ -300,10 +300,10 @@ class CI_DB_postgre_driver extends CI_DB {
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -316,7 +316,7 @@ class CI_DB_postgre_driver extends CI_DB {
{
return @pg_affected_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -329,10 +329,10 @@ class CI_DB_postgre_driver extends CI_DB {
{
$v = $this->_version();
$v = $v['server'];
-
+
$table = func_num_args() > 0 ? func_get_arg(0) : null;
$column = func_num_args() > 1 ? func_get_arg(1) : null;
-
+
if ($table == null && $v >= '8.1')
{
$sql='SELECT LASTVAL() as ins_id';
@@ -400,17 +400,17 @@ class CI_DB_postgre_driver extends CI_DB {
* @return string
*/
function _list_tables($prefix_limit = FALSE)
- {
- $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
-
+ {
+ $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
+
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
- $sql .= " AND table_name LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char);
+ $sql .= " AND table_name LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);
}
-
+
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -455,7 +455,7 @@ class CI_DB_postgre_driver extends CI_DB {
{
return pg_last_error($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -491,26 +491,26 @@ class CI_DB_postgre_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -529,12 +529,12 @@ class CI_DB_postgre_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return implode(', ', $tables);
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -547,10 +547,10 @@ class CI_DB_postgre_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
-
+
// --------------------------------------------------------------------
/**
@@ -572,17 +572,17 @@ class CI_DB_postgre_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
return $sql;
}
@@ -598,12 +598,12 @@ class CI_DB_postgre_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return "TRUNCATE ".$table;
}
-
+
// --------------------------------------------------------------------
/**
@@ -616,7 +616,7 @@ class CI_DB_postgre_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -634,7 +634,7 @@ class CI_DB_postgre_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
@@ -651,14 +651,14 @@ class CI_DB_postgre_driver extends CI_DB {
* @return string
*/
function _limit($sql, $limit, $offset)
- {
+ {
$sql .= "LIMIT ".$limit;
-
+
if ($offset > 0)
{
$sql .= " OFFSET ".$offset;
}
-
+
return $sql;
}
diff --git a/system/database/drivers/postgre/postgre_forge.php b/system/database/drivers/postgre/postgre_forge.php
index c98ef425d..91a1c6861 100644..100755
--- a/system/database/drivers/postgre/postgre_forge.php
+++ b/system/database/drivers/postgre/postgre_forge.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
@@ -66,12 +66,15 @@ class CI_DB_postgre_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
if ($if_not_exists === TRUE)
{
- $sql .= 'IF NOT EXISTS ';
+ if ($this->db->table_exists($table))
+ {
+ return "SELECT * FROM $table"; // Needs to return innocous but valid SQL statement
+ }
}
-
+
$sql .= $this->db->_escape_identifiers($table)." (";
$current_field_count = 0;
@@ -87,41 +90,81 @@ class CI_DB_postgre_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
-
- $sql .= ' '.$attributes['TYPE'];
-
- if (array_key_exists('CONSTRAINT', $attributes))
+
+ $is_unsigned = (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE);
+
+ // Convert datatypes to be PostgreSQL-compatible
+ switch (strtoupper($attributes['TYPE']))
{
- $sql .= '('.$attributes['CONSTRAINT'].')';
+ case 'TINYINT':
+ $attributes['TYPE'] = 'SMALLINT';
+ break;
+ case 'SMALLINT':
+ $attributes['TYPE'] = ($is_unsigned) ? 'INTEGER' : 'SMALLINT';
+ break;
+ case 'MEDIUMINT':
+ $attributes['TYPE'] = 'INTEGER';
+ break;
+ case 'INT':
+ $attributes['TYPE'] = ($is_unsigned) ? 'BIGINT' : 'INTEGER';
+ break;
+ case 'BIGINT':
+ $attributes['TYPE'] = ($is_unsigned) ? 'NUMERIC' : 'BIGINT';
+ break;
+ case 'DOUBLE':
+ $attributes['TYPE'] = 'DOUBLE PRECISION';
+ break;
+ case 'DATETIME':
+ $attributes['TYPE'] = 'TIMESTAMP';
+ break;
+ case 'LONGTEXT':
+ $attributes['TYPE'] = 'TEXT';
+ break;
+ case 'BLOB':
+ $attributes['TYPE'] = 'BYTEA';
+ break;
+ }
+
+ // If this is an auto-incrementing primary key, use the serial data type instead
+ if (in_array($field, $primary_keys) && array_key_exists('AUTO_INCREMENT', $attributes)
+ && $attributes['AUTO_INCREMENT'] === TRUE)
+ {
+ $sql .= ' SERIAL';
}
-
- if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
+ else
{
- $sql .= ' UNSIGNED';
+ $sql .= ' '.$attributes['TYPE'];
}
-
+
+ // Modified to prevent constraints with integer data types
+ if (array_key_exists('CONSTRAINT', $attributes) && strpos($attributes['TYPE'], 'INT') === false)
+ {
+ $sql .= '('.$attributes['CONSTRAINT'].')';
+ }
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
{
$sql .= ' NULL';
}
else
{
- $sql .= ' NOT NULL';
+ $sql .= ' NOT NULL';
}
-
- if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
+
+ // Added new attribute to create unqite fields. Also works with MySQL
+ if (array_key_exists('UNIQUE', $attributes) && $attributes['UNIQUE'] === TRUE)
{
- $sql .= ' AUTO_INCREMENT';
+ $sql .= ' UNIQUE';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
@@ -131,29 +174,37 @@ class CI_DB_postgre_forge extends CI_DB_forge {
if (count($primary_keys) > 0)
{
- $primary_keys = $this->db->_protect_identifiers($primary_keys);
+ // Something seems to break when passing an array to _protect_identifiers()
+ foreach ($primary_keys as $index => $key)
+ {
+ $primary_keys[$index] = $this->db->_protect_identifiers($key);
+ }
+
$sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
}
-
+
+ $sql .= "\n);";
+
if (is_array($keys) && count($keys) > 0)
{
foreach ($keys as $key)
{
if (is_array($key))
{
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key = array($this->db->_protect_identifiers($key));
}
-
- $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")";
+
+ foreach ($key as $field)
+ {
+ $sql .= "CREATE INDEX " . $table . "_" . str_replace(array('"', "'"), '', $field) . "_index ON $table ($field); ";
+ }
}
}
- $sql .= "\n);";
-
return $sql;
}
@@ -162,12 +213,12 @@ class CI_DB_postgre_forge extends CI_DB_forge {
/**
* Drop Table
*
- * @access private
- * @return bool
+ * @access private
+ * @return bool
*/
function _drop_table($table)
{
- return "DROP TABLE ".$this->db->_escape_identifiers($table)." CASCADE";
+ return "DROP TABLE IF EXISTS ".$this->db->_escape_identifiers($table)." CASCADE";
}
// --------------------------------------------------------------------
@@ -218,9 +269,9 @@ class CI_DB_postgre_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
-
+
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/postgre/postgre_result.php b/system/database/drivers/postgre/postgre_result.php
index 545f413e8..e9a1d1607 100644..100755
--- a/system/database/drivers/postgre/postgre_result.php
+++ b/system/database/drivers/postgre/postgre_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
@@ -36,7 +36,7 @@ class CI_DB_postgre_result extends CI_DB_result {
{
return @pg_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -67,7 +67,7 @@ class CI_DB_postgre_result extends CI_DB_result {
{
$field_names[] = pg_field_name($this->result_id, $i);
}
-
+
return $field_names;
}
@@ -86,16 +86,16 @@ class CI_DB_postgre_result extends CI_DB_result {
$retval = array();
for ($i = 0; $i < $this->num_fields(); $i++)
{
- $F = new stdClass();
- $F->name = pg_field_name($this->result_id, $i);
- $F->type = pg_field_type($this->result_id, $i);
+ $F = new stdClass();
+ $F->name = pg_field_name($this->result_id, $i);
+ $F->type = pg_field_type($this->result_id, $i);
$F->max_length = pg_field_size($this->result_id, $i);
$F->primary_key = 0;
$F->default = '';
$retval[] = $F;
}
-
+
return $retval;
}
@@ -105,7 +105,7 @@ class CI_DB_postgre_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
if (is_resource($this->result_id))
@@ -146,7 +146,7 @@ class CI_DB_postgre_result extends CI_DB_result {
{
return pg_fetch_assoc($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -161,7 +161,7 @@ class CI_DB_postgre_result extends CI_DB_result {
{
return pg_fetch_object($this->result_id);
}
-
+
}
diff --git a/system/database/drivers/postgre/postgre_utility.php b/system/database/drivers/postgre/postgre_utility.php
index dda22ddb0..741c52ea8 100644..100755
--- a/system/database/drivers/postgre/postgre_utility.php
+++ b/system/database/drivers/postgre/postgre_utility.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
@@ -81,42 +81,6 @@ class CI_DB_postgre_utility extends CI_DB_utility {
// Currently unsupported
return $this->db->display_error('db_unsuported_feature');
}
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _create_database($name)
- {
- return "CREATE DATABASE ".$name;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- return "DROP DATABASE ".$name;
- }
-
-
}
diff --git a/system/database/drivers/sqlite/index.html b/system/database/drivers/sqlite/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/drivers/sqlite/index.html
+++ b/system/database/drivers/sqlite/index.html
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index 05e38848a..5bfc1f558 100644..100755
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.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
@@ -33,14 +33,14 @@
class CI_DB_sqlite_driver extends CI_DB {
var $dbdriver = 'sqlite';
-
+
// The character used to escape with - not needed for SQLite
var $_escape_char = '';
// clause and character used for LIKE escape sequences
- var $_like_escape_str = " ESCAPE '%s' ";
+ var $_like_escape_str = " ESCAPE '%s' ";
var $_like_escape_chr = '!';
-
+
/**
* The syntax to count rows is slightly different across different
* database engines, so this string appears in each driver and is
@@ -54,24 +54,24 @@ class CI_DB_sqlite_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_connect()
{
if ( ! $conn_id = @sqlite_open($this->database, FILE_WRITE_MODE, $error))
{
log_message('error', $error);
-
+
if ($this->db_debug)
{
$this->display_error($error, '', TRUE);
}
-
+
return FALSE;
}
-
+
return $conn_id;
}
-
+
// --------------------------------------------------------------------
/**
@@ -79,24 +79,24 @@ class CI_DB_sqlite_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_pconnect()
{
if ( ! $conn_id = @sqlite_popen($this->database, FILE_WRITE_MODE, $error))
{
log_message('error', $error);
-
+
if ($this->db_debug)
{
$this->display_error($error, '', TRUE);
}
-
+
return FALSE;
}
-
+
return $conn_id;
}
-
+
// --------------------------------------------------------------------
/**
@@ -120,7 +120,7 @@ class CI_DB_sqlite_driver extends CI_DB {
*
* @access private called by the base class
* @return resource
- */
+ */
function db_select()
{
return TRUE;
@@ -143,7 +143,7 @@ class CI_DB_sqlite_driver extends CI_DB {
}
// --------------------------------------------------------------------
-
+
/**
* Version number query string
*
@@ -154,7 +154,7 @@ class CI_DB_sqlite_driver extends CI_DB {
{
return sqlite_libversion();
}
-
+
// --------------------------------------------------------------------
/**
@@ -163,13 +163,13 @@ class CI_DB_sqlite_driver extends CI_DB {
* @access private called by the base class
* @param string an SQL query
* @return resource
- */
+ */
function _execute($sql)
{
$sql = $this->_prep_query($sql);
return @sqlite_query($this->conn_id, $sql);
}
-
+
// --------------------------------------------------------------------
/**
@@ -180,7 +180,7 @@ class CI_DB_sqlite_driver extends CI_DB {
* @access private called by execute()
* @param string an SQL query
* @return string
- */
+ */
function _prep_query($sql)
{
return $sql;
@@ -192,15 +192,15 @@ class CI_DB_sqlite_driver extends CI_DB {
* Begin Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_begin($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return TRUE;
}
-
+
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
@@ -222,8 +222,8 @@ class CI_DB_sqlite_driver extends CI_DB {
* Commit Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_commit()
{
if ( ! $this->trans_enabled)
@@ -247,8 +247,8 @@ class CI_DB_sqlite_driver extends CI_DB {
* Rollback Transaction
*
* @access public
- * @return bool
- */
+ * @return bool
+ */
function trans_rollback()
{
if ( ! $this->trans_enabled)
@@ -265,7 +265,7 @@ class CI_DB_sqlite_driver extends CI_DB {
$this->simple_query('ROLLBACK');
return TRUE;
}
-
+
// --------------------------------------------------------------------
/**
@@ -281,15 +281,15 @@ class CI_DB_sqlite_driver extends CI_DB {
if (is_array($str))
{
foreach($str as $key => $val)
- {
+ {
$str[$key] = $this->escape_str($val, $like);
- }
-
- return $str;
- }
-
+ }
+
+ return $str;
+ }
+
$str = sqlite_escape_string($str);
-
+
// escape LIKE condition wildcards
if ($like === TRUE)
{
@@ -297,10 +297,10 @@ class CI_DB_sqlite_driver extends CI_DB {
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
-
+
return $str;
}
-
+
// --------------------------------------------------------------------
/**
@@ -313,7 +313,7 @@ class CI_DB_sqlite_driver extends CI_DB {
{
return sqlite_changes($this->conn_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -347,7 +347,7 @@ class CI_DB_sqlite_driver extends CI_DB {
}
$query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE));
-
+
if ($query->num_rows() == 0)
{
return 0;
@@ -374,7 +374,7 @@ class CI_DB_sqlite_driver extends CI_DB {
if ($prefix_limit !== FALSE AND $this->dbprefix != '')
{
- $sql .= " AND 'name' LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char);
+ $sql .= " AND 'name' LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr);
}
return $sql;
}
@@ -424,7 +424,7 @@ class CI_DB_sqlite_driver extends CI_DB {
{
return sqlite_error_string(sqlite_last_error($this->conn_id));
}
-
+
// --------------------------------------------------------------------
/**
@@ -460,26 +460,26 @@ class CI_DB_sqlite_driver extends CI_DB {
{
if (strpos($item, '.'.$id) !== FALSE)
{
- $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
-
+ $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item);
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
- }
+ }
}
-
+
if (strpos($item, '.') !== FALSE)
{
- $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
+ $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;
}
else
{
$str = $this->_escape_char.$item.$this->_escape_char;
}
-
+
// remove duplicates if the user already included the escape
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
}
-
+
// --------------------------------------------------------------------
/**
@@ -498,12 +498,12 @@ class CI_DB_sqlite_driver extends CI_DB {
{
$tables = array($tables);
}
-
+
return '('.implode(', ', $tables).')';
}
// --------------------------------------------------------------------
-
+
/**
* Insert statement
*
@@ -516,10 +516,10 @@ class CI_DB_sqlite_driver extends CI_DB {
* @return string
*/
function _insert($table, $keys, $values)
- {
+ {
return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
}
-
+
// --------------------------------------------------------------------
/**
@@ -541,21 +541,21 @@ class CI_DB_sqlite_driver extends CI_DB {
{
$valstr[] = $key." = ".$val;
}
-
+
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
-
+
$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
$sql .= $orderby.$limit;
-
+
return $sql;
}
-
+
// --------------------------------------------------------------------
/**
@@ -568,12 +568,12 @@ class CI_DB_sqlite_driver extends CI_DB {
* @access public
* @param string the table name
* @return string
- */
+ */
function _truncate($table)
{
return $this->_delete($table);
}
-
+
// --------------------------------------------------------------------
/**
@@ -586,7 +586,7 @@ class CI_DB_sqlite_driver extends CI_DB {
* @param array the where clause
* @param string the limit clause
* @return string
- */
+ */
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
$conditions = '';
@@ -604,10 +604,10 @@ class CI_DB_sqlite_driver extends CI_DB {
}
$limit = ( ! $limit) ? '' : ' LIMIT '.$limit;
-
+
return "DELETE FROM ".$table.$conditions.$limit;
}
-
+
// --------------------------------------------------------------------
/**
@@ -622,7 +622,7 @@ class CI_DB_sqlite_driver extends CI_DB {
* @return string
*/
function _limit($sql, $limit, $offset)
- {
+ {
if ($offset == 0)
{
$offset = '';
@@ -631,7 +631,7 @@ class CI_DB_sqlite_driver extends CI_DB {
{
$offset .= ", ";
}
-
+
return $sql."LIMIT ".$offset.$limit;
}
diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php
index b7d25e755..56904082e 100644..100755
--- a/system/database/drivers/sqlite/sqlite_forge.php
+++ b/system/database/drivers/sqlite/sqlite_forge.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
@@ -75,13 +75,13 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
{
$sql = 'CREATE TABLE ';
-
+
// IF NOT EXISTS added to SQLite in 3.3.0
- if ($if_not_exists === TRUE && version_compare($this->_version(), '3.3.0', '>=') === TRUE)
+ if ($if_not_exists === TRUE && version_compare($this->db->_version(), '3.3.0', '>=') === TRUE)
{
$sql .= 'IF NOT EXISTS ';
}
-
+
$sql .= $this->db->_escape_identifiers($table)."(";
$current_field_count = 0;
@@ -97,41 +97,41 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
else
{
$attributes = array_change_key_case($attributes, CASE_UPPER);
-
+
$sql .= "\n\t".$this->db->_protect_identifiers($field);
-
+
$sql .= ' '.$attributes['TYPE'];
-
+
if (array_key_exists('CONSTRAINT', $attributes))
{
$sql .= '('.$attributes['CONSTRAINT'].')';
}
-
+
if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
{
$sql .= ' UNSIGNED';
}
-
+
if (array_key_exists('DEFAULT', $attributes))
{
$sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
}
-
+
if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
{
$sql .= ' NULL';
}
else
{
- $sql .= ' NOT NULL';
+ $sql .= ' NOT NULL';
}
-
+
if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
{
$sql .= ' AUTO_INCREMENT';
}
}
-
+
// don't add a comma on the end of the last field
if (++$current_field_count < count($fields))
{
@@ -151,13 +151,13 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
{
if (is_array($key))
{
- $key = $this->db->_protect_identifiers($key);
+ $key = $this->db->_protect_identifiers($key);
}
else
{
$key = array($this->db->_protect_identifiers($key));
}
-
+
$sql .= ",\n\tUNIQUE (" . implode(', ', $key) . ")";
}
}
@@ -237,9 +237,9 @@ class CI_DB_sqlite_forge extends CI_DB_forge {
{
$sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
}
-
+
return $sql;
-
+
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php
index 7b0631221..7bd30db7c 100644..100755
--- a/system/database/drivers/sqlite/sqlite_result.php
+++ b/system/database/drivers/sqlite/sqlite_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
@@ -25,7 +25,7 @@
* @link http://codeigniter.com/user_guide/database/
*/
class CI_DB_sqlite_result extends CI_DB_result {
-
+
/**
* Number of rows in the result set
*
@@ -36,7 +36,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
{
return @sqlite_num_rows($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -67,7 +67,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
{
$field_names[] = sqlite_field_name($this->result_id, $i);
}
-
+
return $field_names;
}
@@ -86,16 +86,16 @@ class CI_DB_sqlite_result extends CI_DB_result {
$retval = array();
for ($i = 0; $i < $this->num_fields(); $i++)
{
- $F = new stdClass();
- $F->name = sqlite_field_name($this->result_id, $i);
- $F->type = 'varchar';
+ $F = new stdClass();
+ $F->name = sqlite_field_name($this->result_id, $i);
+ $F->type = 'varchar';
$F->max_length = 0;
$F->primary_key = 0;
$F->default = '';
$retval[] = $F;
}
-
+
return $retval;
}
@@ -105,7 +105,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
* Free the result
*
* @return null
- */
+ */
function free_result()
{
// Not implemented in SQLite
@@ -142,7 +142,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
{
return sqlite_fetch_array($this->result_id);
}
-
+
// --------------------------------------------------------------------
/**
@@ -168,7 +168,7 @@ class CI_DB_sqlite_result extends CI_DB_result {
return $obj;
} else {
return NULL;
- }
+ }
}
}
diff --git a/system/database/drivers/sqlite/sqlite_utility.php b/system/database/drivers/sqlite/sqlite_utility.php
index 5629dac99..508023e2f 100644..100755
--- a/system/database/drivers/sqlite/sqlite_utility.php
+++ b/system/database/drivers/sqlite/sqlite_utility.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
@@ -39,7 +39,7 @@ class CI_DB_sqlite_utility extends CI_DB_utility {
{
if ($this->db_debug)
{
- return $this->display_error('db_unsuported_feature');
+ return $this->db->display_error('db_unsuported_feature');
}
return array();
}
@@ -90,51 +90,6 @@ class CI_DB_sqlite_utility extends CI_DB_utility {
// Currently unsupported
return $this->db->display_error('db_unsuported_feature');
}
-
- /**
- *
- * The functions below have been deprecated as of 1.6, and are only here for backwards
- * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation
- * is STRONGLY discouraged in favour if using dbforge.
- *
- */
-
- /**
- * Create database
- *
- * @access public
- * @param string the database name
- * @return bool
- */
- function _create_database()
- {
- // In SQLite, a database is created when you connect to the database.
- // We'll return TRUE so that an error isn't generated
- return TRUE;
- }
-
- // --------------------------------------------------------------------
-
- /**
- * Drop database
- *
- * @access private
- * @param string the database name
- * @return bool
- */
- function _drop_database($name)
- {
- if ( ! @file_exists($this->db->database) OR ! @unlink($this->db->database))
- {
- if ($this->db->db_debug)
- {
- return $this->db->display_error('db_unable_to_drop');
- }
- return FALSE;
- }
- return TRUE;
- }
-
}
/* End of file sqlite_utility.php */
diff --git a/system/database/index.html b/system/database/index.html
index c942a79ce..c942a79ce 100644..100755
--- a/system/database/index.html
+++ b/system/database/index.html