From 7e6aba1484f1b9a32bf97f2a9a654a503c8eb86f Mon Sep 17 00:00:00 2001 From: Ivan Tcholakov Date: Thu, 21 Aug 2014 20:04:52 +0300 Subject: Query builder: IS NOT NULL support implementation, see #3194 --- system/database/DB_query_builder.php | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index 085c615e5..c75a46908 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -661,6 +661,15 @@ abstract class CI_DB_query_builder extends CI_DB_driver { // value appears not to have been set, assign the test to IS NULL $k .= ' IS NULL'; } + else + { + $operator = trim($this->_get_operator($k)); + + if ($operator == '<>' OR $operator == '!=') + { + $k = str_replace($operator, ' IS NOT NULL', $k); + } + } $this->{$qb_key}[] = array('condition' => $prefix.$k.$v, 'escape' => $escape); if ($this->qb_caching === TRUE) -- cgit v1.2.3-24-g4f1b From a3cc8084a73e2c58a9ac38963bf7f60ba50d213e Mon Sep 17 00:00:00 2001 From: Ivan Tcholakov Date: Fri, 22 Aug 2014 12:00:05 +0300 Subject: Query builder, IS NOT NULL support #3194: Strict comparison. --- system/database/DB_query_builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index c75a46908..69dc8c2d1 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -665,7 +665,7 @@ abstract class CI_DB_query_builder extends CI_DB_driver { { $operator = trim($this->_get_operator($k)); - if ($operator == '<>' OR $operator == '!=') + if ($operator === '<>' OR $operator === '!=') { $k = str_replace($operator, ' IS NOT NULL', $k); } -- cgit v1.2.3-24-g4f1b From 191550a6cdf4e01448b55ae08f7eee1d47a4e810 Mon Sep 17 00:00:00 2001 From: Rougin Royce Gutib Date: Sun, 24 Aug 2014 16:19:08 +0800 Subject: Fixed typo error --- system/database/DB_query_builder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index 69dc8c2d1..c3836ae14 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -635,7 +635,7 @@ abstract class CI_DB_query_builder extends CI_DB_driver { $key = array($key => $value); } - // If the escape value was not set will will base it on the global setting + // If the escape value was not set will base it on the global setting is_bool($escape) OR $escape = $this->_protect_identifiers; foreach ($key as $k => $v) @@ -2716,4 +2716,4 @@ abstract class CI_DB_query_builder extends CI_DB_driver { } /* End of file DB_query_builder.php */ -/* Location: ./system/database/DB_query_builder.php */ \ No newline at end of file +/* Location: ./system/database/DB_query_builder.php */ -- cgit v1.2.3-24-g4f1b From a7d3250df769da74f76b04ae477ef067180f1fa3 Mon Sep 17 00:00:00 2001 From: Rougin Gutib Date: Wed, 27 Aug 2014 10:52:49 +0800 Subject: Removed empty line --- system/database/DB_query_builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index c3836ae14..f11f84627 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -2716,4 +2716,4 @@ abstract class CI_DB_query_builder extends CI_DB_driver { } /* End of file DB_query_builder.php */ -/* Location: ./system/database/DB_query_builder.php */ +/* Location: ./system/database/DB_query_builder.php */ \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 2c6cdd7d3ac4c929bf6fa172b6ba48c282e3a831 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Wed, 17 Sep 2014 11:13:46 +0300 Subject: Fix #3238 Close #3239 --- system/database/DB_query_builder.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index f11f84627..4e37e4c03 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -663,11 +663,15 @@ abstract class CI_DB_query_builder extends CI_DB_driver { } else { - $operator = trim($this->_get_operator($k)); - - if ($operator === '<>' OR $operator === '!=') + $operator = $this->_get_operator($k); + if (stripos($operator, 'NULL') === FALSE) { - $k = str_replace($operator, ' IS NOT NULL', $k); + $op = strrpos($k, $operator); + if (strlen($k) === ($op + strlen($operator))) + { + $operator = strtr($operator, array('<>' => 'IS NOT', '!=' => 'IS NOT')); + $k = substr($k, 0, $op).rtrim($operator).' NULL'; + } } } -- cgit v1.2.3-24-g4f1b From f186e1f0af1dc0941b21e1667ff2a22f739a0dcb Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Thu, 18 Sep 2014 12:05:59 +0300 Subject: Fix #3242 --- system/database/DB_query_builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index 4e37e4c03..4b3aa4d6c 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -664,7 +664,7 @@ abstract class CI_DB_query_builder extends CI_DB_driver { else { $operator = $this->_get_operator($k); - if (stripos($operator, 'NULL') === FALSE) + if (stripos($operator, 'NULL') === FALSE && strncasecmp(ltrim($operator), 'IN', 2) !== 0) { $op = strrpos($k, $operator); if (strlen($k) === ($op + strlen($operator))) -- cgit v1.2.3-24-g4f1b From 970b3836071f1b74d2c98bdc0656c2d9699c9ac0 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Mon, 29 Sep 2014 11:43:48 +0300 Subject: Revert #3194 This has caused way too many BC breaks (#3238, #3242, #3257). Close #3257 --- system/database/DB_query_builder.php | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index 4b3aa4d6c..30882fadc 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -661,19 +661,6 @@ abstract class CI_DB_query_builder extends CI_DB_driver { // value appears not to have been set, assign the test to IS NULL $k .= ' IS NULL'; } - else - { - $operator = $this->_get_operator($k); - if (stripos($operator, 'NULL') === FALSE && strncasecmp(ltrim($operator), 'IN', 2) !== 0) - { - $op = strrpos($k, $operator); - if (strlen($k) === ($op + strlen($operator))) - { - $operator = strtr($operator, array('<>' => 'IS NOT', '!=' => 'IS NOT')); - $k = substr($k, 0, $op).rtrim($operator).' NULL'; - } - } - } $this->{$qb_key}[] = array('condition' => $prefix.$k.$v, 'escape' => $escape); if ($this->qb_caching === TRUE) -- cgit v1.2.3-24-g4f1b From 5bf4dcde18ae0d584c2dc701ccc8e43124549130 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Mon, 29 Sep 2014 20:07:15 +0300 Subject: Close #3194 --- system/database/DB_query_builder.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'system/database/DB_query_builder.php') diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php index 30882fadc..2096ffd60 100644 --- a/system/database/DB_query_builder.php +++ b/system/database/DB_query_builder.php @@ -661,6 +661,10 @@ abstract class CI_DB_query_builder extends CI_DB_driver { // value appears not to have been set, assign the test to IS NULL $k .= ' IS NULL'; } + elseif (preg_match('/\s*(!?=|<>)\s*$/i', $k, $match, PREG_OFFSET_CAPTURE)) + { + $k = substr($k, 0, $match[0][1]).($match[1][0] === '=' ? ' IS NULL' : ' IS NOT NULL'); + } $this->{$qb_key}[] = array('condition' => $prefix.$k.$v, 'escape' => $escape); if ($this->qb_caching === TRUE) -- cgit v1.2.3-24-g4f1b