From a74cff690233cf3a00cadce5c3e58e194769d4ff Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 4 Dec 2019 15:39:44 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B01213=20-=20Allow=20NOT=20IN=20SELECT=20i?= =?UTF-8?q?n=20OQL=20syntax=20-=20Fix=20unit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/dbobjectsearch.class.php | 11 +++++++++++ test/core/OQLTest.php | 9 ++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index e72f19031..904851ef2 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -1635,6 +1635,13 @@ class DBObjectSearch extends DBSearch } } + /** + * @param \OqlQuery $oOqlQuery + * @param string $sQuery + * + * @throws \CoreException + * @throws \Exception + */ public function InitFromOqlQuery(OqlQuery $oOqlQuery, $sQuery) { $oModelReflection = new ModelReflectionRuntime(); @@ -1751,6 +1758,10 @@ class DBObjectSearch extends DBSearch foreach ($oOqlQuery->GetSelectedClasses() as $oClassDetails) { $sClassToSelect = $oClassDetails->GetValue(); + if (!array_key_exists($sClassToSelect, $aAliases)) + { + throw new CoreException("$sClassToSelect is not a valid alias"); + } $this->m_aSelectedClasses[$sClassToSelect] = $aAliases[$sClassToSelect]; } $this->m_aClasses = $aAliases; diff --git a/test/core/OQLTest.php b/test/core/OQLTest.php index 511faa319..ede988bff 100644 --- a/test/core/OQLTest.php +++ b/test/core/OQLTest.php @@ -63,14 +63,9 @@ class OQLTest extends ItopDataTestCase public function NestedQueryProvider() { return array( - array('SELECT `UserRequest` FROM UserRequest AS `UserRequest` WHERE `UserRequest`.org_id IN (SELECT id FROM Organization AS `Organization` JOIN Organization AS `Organization1` ON `Organization`.parent_id BELOW `Organization1`.id WHERE (`Organization1`.`id` = \'3\'))'), - array('SELECT `UserRequest` FROM UserRequest AS `UserRequest` WHERE (`UserRequest`.`org_id` IN (SELECT `Organization` FROM Organization AS `Organization` WHERE `Organization`.`id`=`UserRequest`.`org_id`))'), - array('SELECT toto WHERE id IN (SELECT titi)'), - array('SELECT toto WHERE id IN (SELECT titi WHERE a=1)'), - array('SELECT toto WHERE id IN (SELECT titi AS ti JOIN toto AS to ON to.a=ti.b)'), - array('SELECT toto WHERE id IN (SELECT titi AS ti JOIN toto AS to ON to.a=ti.b WHERE to.a=1)'), - array('SELECT toto WHERE id NOT IN (SELECT titi)'), array("SELECT User AS U JOIN Person AS P ON U.contactid = P.id WHERE U.status='enabled' AND U.id NOT IN (SELECT User AS U JOIN Person AS P ON U.contactid=P.id JOIN URP_UserOrg AS L ON L.userid = U.id WHERE U.status='enabled' AND L.allowed_org_id = P.org_id UNION SELECT User AS U WHERE U.status='enabled' AND U.id NOT IN ( SELECT User AS U JOIN URP_UserOrg AS L ON L.userid = U.id WHERE U.status='enabled'))"), + array('SELECT `UserRequest` FROM UserRequest AS `UserRequest` WHERE `UserRequest`.org_id IN (SELECT `Organization` FROM Organization AS `Organization` JOIN Organization AS `Organization1` ON `Organization`.parent_id BELOW `Organization1`.id WHERE (`Organization1`.`id` = \'3\'))'), + array('SELECT `UserRequest` FROM UserRequest AS `UserRequest` WHERE (`UserRequest`.`org_id` IN (SELECT `Organization` FROM Organization AS `Organization` WHERE `Organization`.`id`=`UserRequest`.`org_id`))'), array("SELECT UserRequest AS Ur WHERE Ur.id NOT IN (SELECT UserRequest AS Ur JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = Ur.id)"), array("SELECT Ticket AS T WHERE T. finalclass IN ('userrequest' , 'change') AND T.id NOT IN (SELECT UserRequest AS Ur JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = Ur.id UNION SELECT Change AS C JOIN lnkFunctionalCIToTicket AS lnk ON lnk.ticket_id = C.id)"), array("SELECT PhysicalDevice WHERE status='production' AND id NOT IN (SELECT PhysicalDevice AS p JOIN lnkFunctionalCIToProviderContract AS l ON l.functionalci_id=p.id)"),