diff options
author | Andrey Andreev <narf@bofh.bg> | 2012-05-15 11:57:44 +0200 |
---|---|---|
committer | Andrey Andreev <narf@bofh.bg> | 2012-05-15 11:57:44 +0200 |
commit | caa9c7c1b6689b29a0f11739586d2d3e83b06910 (patch) | |
tree | 3f906e4cd0f2ed452f348c93b7f28016ed26d1da /system/database/drivers | |
parent | 212b0470e1aa288ba4f4d47d13647d6cd150fd15 (diff) | |
parent | dabeaa11ca2076935e5091e0f9e90ff9c4593962 (diff) |
Merge pull request #1355 from shidec/develop
Escaping boolean data type, some DBMS (e.g., postgre) need it
Diffstat (limited to 'system/database/drivers')
-rw-r--r-- | system/database/drivers/postgre/postgre_driver.php | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php index 84bf768ee..670eb549d 100644 --- a/system/database/drivers/postgre/postgre_driver.php +++ b/system/database/drivers/postgre/postgre_driver.php @@ -311,6 +311,27 @@ class CI_DB_postgre_driver extends CI_DB { // -------------------------------------------------------------------- /** + * "Smart" Escape String + * + * Escapes data based on type + * Sets boolean and null types + * + * @param string + * @return mixed + */ + public function escape($str) + { + if (is_bool($str)) + { + return ($str) ? 'TRUE' : 'FALSE'; + } + + return parent::escape($str); + } + + // -------------------------------------------------------------------- + + /** * Affected Rows * * @return int @@ -558,6 +579,78 @@ class CI_DB_postgre_driver extends CI_DB { // -------------------------------------------------------------------- /** + * Where + * + * Called by where() or or_where() + * + * @param mixed + * @param mixed + * @param string + * @return object + * + */ + protected function _where($key, $value = NULL, $type = 'AND ', $escape = NULL) + { + $type = $this->_group_get_type($type); + + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + // If the escape value was not set will will base it on the global setting + if ( ! is_bool($escape)) + { + $escape = $this->_protect_identifiers; + } + + foreach ($key as $k => $v) + { + $prefix = (count($this->qb_where) === 0 && count($this->qb_cache_where) === 0) ? '' : $type; + + if (is_null($v) && ! $this->_has_operator($k)) + { + // 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); + } + elseif (is_bool($v)) + { + $v = ' '.($v ? 'TRUE' : 'FALSE'); + } + + if ( ! $this->_has_operator($k)) + { + $k .= ' = '; + } + } + else + { + $k = $this->protect_identifiers($k, FALSE, $escape); + } + + $this->qb_where[] = $prefix.$k.$v; + if ($this->qb_caching === TRUE) + { + $this->qb_cache_where[] = $prefix.$k.$v; + $this->qb_cache_exists[] = 'where'; + } + + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** * Close DB Connection * * @param resource |