diff options
author | Derek Allard <derek.allard@ellislab.com> | 2008-02-10 22:46:18 +0100 |
---|---|---|
committer | Derek Allard <derek.allard@ellislab.com> | 2008-02-10 22:46:18 +0100 |
commit | 156481371306db532d6b3880d0914e9237b93685 (patch) | |
tree | e523a9e2dfc0775a682549644a4f8fb0df77e7ec /system/database/drivers | |
parent | 26c7a9c3757b27a632be453be7adb4eca29baa2f (diff) |
changes for enhanced database compatibility
Diffstat (limited to 'system/database/drivers')
-rw-r--r-- | system/database/drivers/mssql/mssql_driver.php | 47 | ||||
-rw-r--r-- | system/database/drivers/mysqli/mysqli_driver.php | 3 | ||||
-rw-r--r-- | system/database/drivers/oci8/oci8_driver.php | 14 | ||||
-rw-r--r-- | system/database/drivers/postgre/postgre_driver.php | 2 | ||||
-rw-r--r-- | system/database/drivers/sqlite/sqlite_driver.php | 14 |
5 files changed, 58 insertions, 22 deletions
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php index 4cf444088..8e12a2d21 100644 --- a/system/database/drivers/mssql/mssql_driver.php +++ b/system/database/drivers/mssql/mssql_driver.php @@ -430,16 +430,51 @@ class CI_DB_mssql_driver extends CI_DB { * @param boolean only affect the first word
* @return mixed the item with backticks
*/
- function _protect_identifiers($item, $affect_spaces = TRUE, $first_word_only = FALSE)
+ function _protect_identifiers($item, $first_word_only = FALSE)
{
- // MSSQL doesn't use backticks
- if (strpos($item, '.') !== FALSE)
+ if (is_array($item))
{
- $aliased_tables = implode(".",$this->ar_aliased_tables).'.';
- $table_name = substr($item, 0, strpos($item, '.')+1);
- $item = (strpos($aliased_tables, $table_name) !== FALSE) ? $item = $item : $this->dbprefix.$item;
+ $escaped_array = array();
+
+ foreach($item as $k=>$v)
+ {
+ $escaped_array[$this->_protect_identifiers($k)] = $this->_protect_identifiers($v, $first_word_only);
+ }
+
+ return $escaped_array;
+ }
+
+ // This function may get "item1 item2" as a string, and so
+ // we may need ""item1" "item2"" and not ""item1 item2""
+ if (ctype_alnum($item) === FALSE)
+ {
+ if (strpos($item, '.') !== FALSE)
+ {
+ $aliased_tables = implode(".",$this->ar_aliased_tables).'.';
+ $table_name = substr($item, 0, strpos($item, '.')+1);
+ $item = (strpos($aliased_tables, $table_name) !== FALSE) ? $item = $item : $this->dbprefix.$item;
+ }
+
+ // This function may get "field >= 1", and need it to return ""field" >= 1"
+ $lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';
+
+ $item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1"$2"$3', $item);
+ }
+ else
+ {
+ return "\"{$item}\"";
}
+ $exceptions = array('AS', '/', '-', '%', '+', '*');
+
+ foreach ($exceptions as $exception)
+ {
+
+ if (stristr($item, " \"{$exception}\" ") !== FALSE)
+ {
+ $item = preg_replace('/ "('.preg_quote($exception).')" /i', ' $1 ', $item);
+ }
+ }
return $item;
}
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php index b6d1cba77..31c27117c 100644 --- a/system/database/drivers/mysqli/mysqli_driver.php +++ b/system/database/drivers/mysqli/mysqli_driver.php @@ -96,7 +96,8 @@ class CI_DB_mysqli_driver extends CI_DB { */
function db_set_charset($charset, $collation)
{
- return @mysqli_query($this->conn_id, "SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'");
+ // TODO - add support if needed
+ return TRUE;
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php index 7aab37e82..8f63c25a5 100644 --- a/system/database/drivers/oci8/oci8_driver.php +++ b/system/database/drivers/oci8/oci8_driver.php @@ -556,7 +556,7 @@ class CI_DB_oci8_driver extends CI_DB { }
// This function may get "item1 item2" as a string, and so
- // we may need "`item1` `item2`" and not "`item1 item2`"
+ // we may need ""item1" "item2"" and not ""item1 item2""
if (ctype_alnum($item) === FALSE)
{
if (strpos($item, '.') !== FALSE)
@@ -566,14 +566,14 @@ class CI_DB_oci8_driver extends CI_DB { $item = (strpos($aliased_tables, $table_name) !== FALSE) ? $item = $item : $this->dbprefix.$item;
}
- // This function may get "field >= 1", and need it to return "`field` >= 1"
+ // This function may get "field >= 1", and need it to return ""field" >= 1"
$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';
- $item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);
+ $item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1"$2"$3', $item);
}
else
{
- return "`{$item}`";
+ return "\"{$item}\"";
}
$exceptions = array('AS', '/', '-', '%', '+', '*');
@@ -581,9 +581,9 @@ class CI_DB_oci8_driver extends CI_DB { foreach ($exceptions as $exception)
{
- if (stristr($item, " `{$exception}` ") !== FALSE)
+ if (stristr($item, " \"{$exception}\" ") !== FALSE)
{
- $item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);
+ $item = preg_replace('/ "('.preg_quote($exception).')" /i', ' $1 ', $item);
}
}
return $item;
@@ -608,7 +608,7 @@ class CI_DB_oci8_driver extends CI_DB { $tables = array($tables);
}
- return '('.implode(', ', $tables).')';
+ return implode(', ', $tables);
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php index cac0ecb60..a32c37ed8 100644 --- a/system/database/drivers/postgre/postgre_driver.php +++ b/system/database/drivers/postgre/postgre_driver.php @@ -493,7 +493,7 @@ class CI_DB_postgre_driver extends CI_DB { $tables = array($tables);
}
- return '('.implode(', ', $tables).')';
+ return implode(', ', $tables);
}
// --------------------------------------------------------------------
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php index 5290edeea..b6cb460b1 100644 --- a/system/database/drivers/sqlite/sqlite_driver.php +++ b/system/database/drivers/sqlite/sqlite_driver.php @@ -404,7 +404,7 @@ class CI_DB_sqlite_driver extends CI_DB { {
if (stristr($table, '.'))
{
- $table = preg_replace("/\./", "`.`", $table);
+ $table = preg_replace("/\./", ".", $table);
}
return $table;
@@ -437,7 +437,7 @@ class CI_DB_sqlite_driver extends CI_DB { }
// This function may get "item1 item2" as a string, and so
- // we may need "`item1` `item2`" and not "`item1 item2`"
+ // we may need "item1 item2" and not "item1 item2"
if (ctype_alnum($item) === FALSE)
{
if (strpos($item, '.') !== FALSE)
@@ -447,14 +447,14 @@ class CI_DB_sqlite_driver extends CI_DB { $item = (strpos($aliased_tables, $table_name) !== FALSE) ? $item = $item : $this->dbprefix.$item;
}
- // This function may get "field >= 1", and need it to return "`field` >= 1"
+ // This function may get "field >= 1", and need it to return "field >= 1"
$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';
- $item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1`$2`$3', $item);
+ $item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1$2$3', $item);
}
else
{
- return "`{$item}`";
+ return "{$item}";
}
$exceptions = array('AS', '/', '-', '%', '+', '*');
@@ -462,9 +462,9 @@ class CI_DB_sqlite_driver extends CI_DB { foreach ($exceptions as $exception)
{
- if (stristr($item, " `{$exception}` ") !== FALSE)
+ if (stristr($item, " {$exception} ") !== FALSE)
{
- $item = preg_replace('/ `('.preg_quote($exception).')` /i', ' $1 ', $item);
+ $item = preg_replace('/ ('.preg_quote($exception).') /i', ' $1 ', $item);
}
}
return $item;
|