From fd8c7c99bd2c9e12cccaa1899755f245a5a4d35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20Espi=C3=A9?= Date: Tue, 20 Mar 2018 15:35:01 +0000 Subject: [PATCH] Advanced Search: IN with all values => 'true' SVN:b1162[5480] --- .../criteriontooql.class.inc.php | 7 ++++- .../search/CriterionConversionTest.php | 26 ++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/sources/application/search/criterionconversion/criteriontooql.class.inc.php b/sources/application/search/criterionconversion/criteriontooql.class.inc.php index da70708d32..0eb470bc21 100644 --- a/sources/application/search/criterionconversion/criteriontooql.class.inc.php +++ b/sources/application/search/criterionconversion/criteriontooql.class.inc.php @@ -159,8 +159,13 @@ class CriterionToOQL extends CriterionConversionAbstract if (!$oAttDef->IsNullAllowed()) { $aAllowedValues = $aAllowedValues['values']; + if (count($aValues) == count($aAllowedValues)) + { + // All entries are selected + return "1"; + } // more selected values than remaining so use NOT IN - if (count($aValues) > (count($aAllowedValues) / 2)) + else if (count($aValues) > (count($aAllowedValues) / 2)) { foreach($aValues as $aValue) { diff --git a/test/application/search/CriterionConversionTest.php b/test/application/search/CriterionConversionTest.php index 8c77d32c35..ac222cf064 100644 --- a/test/application/search/CriterionConversionTest.php +++ b/test/application/search/CriterionConversionTest.php @@ -339,18 +339,20 @@ class CriterionConversionTest extends ItopDataTestCase function OqlProvider() { return array( - array('OQL' => "SELECT Server WHERE ISNULL(nb_u)"), - array('OQL' => "SELECT Contact WHERE status = 'active'"), - array('OQL' => "SELECT Contact WHERE status = 'active' AND name LIKE 'toto%'"), - array('OQL' => "SELECT Contact WHERE status = 'active' AND org_id = 3"), - array('OQL' => "SELECT Contact WHERE status IN ('active', 'inactive')"), - array('OQL' => "SELECT Contact WHERE status NOT IN ('active')"), - array('OQL' => "SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) < start_date"), - array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND '2018-01-01 00:00:00' >= start_date"), - array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND status = 'active' AND org_id = 3 AND '2018-01-01 00:00:00' >= start_date"), - array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-01 00:00:00' >= start_date"), - array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-01 01:00:00' > start_date"), - array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-02 00:00:00' > start_date"), + 'ISNULL' => array('OQL' => "SELECT Server WHERE ISNULL(nb_u)"), + 'start' => array('OQL' => "SELECT Contact WHERE status = 'active' AND name LIKE 'toto%'"), + 'enum + key =' => array('OQL' => "SELECT Contact WHERE status = 'active' AND org_id = 3"), + 'enum =' => array('OQL' => "SELECT Contact WHERE status = 'active'"), + 'enum IN' => array('OQL' => "SELECT Contact WHERE status IN ('active', 'inactive')"), + 'enum NOT IN' => array('OQL' => "SELECT Contact WHERE status NOT IN ('active')"), + 'key NOT IN' => array('OQL' => "SELECT Contact WHERE org_id NOT IN ('1')"), + 'key IN' => array('OQL' => "SELECT Contact WHERE org_id IN ('1')"), + 'Date relative' => array('OQL' => "SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) < start_date"), + 'Date between 1' => array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND '2018-01-01 00:00:00' >= start_date"), + 'Date between 2' => array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND status = 'active' AND org_id = 3 AND '2018-01-01 00:00:00' >= start_date"), + 'Date between 3' => array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-01 00:00:00' >= start_date"), + 'Date between 4' => array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-01 01:00:00' > start_date"), + 'Date between 5' => array('OQL' => "SELECT UserRequest WHERE start_date >= '2017-01-01 00:00:00' AND '2017-01-02 00:00:00' > start_date"), ); }