mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-22 01:58:47 +02:00
(Retrofit from trunk) N.539 Regression introduced in [r4451] on oct 7th. Some OQL were issuing a notice and some were generating a SQL query that would fail with error "Column 'functionalci_id' in where clause is ambiguous" (See CI details)
SVN:2.3[4493]
This commit is contained in:
@@ -1237,7 +1237,16 @@ class DBObjectSearch extends DBSearch
|
||||
$oConditionTree = $oOqlQuery->GetCondition();
|
||||
if ($oConditionTree instanceof Expression)
|
||||
{
|
||||
$this->m_oSearchCondition = $this->OQLExpressionToCondition($sQuery, $oConditionTree, $aAliases);
|
||||
$aRawAliases = array($sClassAlias => $sClass);
|
||||
$aJoinSpecs = $oOqlQuery->GetJoins();
|
||||
if (is_array($aJoinSpecs))
|
||||
{
|
||||
foreach ($aJoinSpecs as $oJoinSpec)
|
||||
{
|
||||
$aRawAliases[$oJoinSpec->GetClassAlias()] = $oJoinSpec->GetClass();
|
||||
}
|
||||
}
|
||||
$this->m_oSearchCondition = $this->OQLExpressionToCondition($sQuery, $oConditionTree, $aRawAliases);
|
||||
}
|
||||
|
||||
// Maintain an array of filters, because the flat list is in fact referring to a tree
|
||||
|
||||
@@ -5401,6 +5401,55 @@ class TestUnions extends TestBizModel
|
||||
catch (OQLException $e)
|
||||
{
|
||||
if ($bSuccess) throw $e;
|
||||
echo "<p>Failed as expected.</p>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TestImplicitAlias extends TestBizModel
|
||||
{
|
||||
static public function GetName()
|
||||
{
|
||||
return 'OQLImplicitAliases';
|
||||
}
|
||||
|
||||
static public function GetDescription()
|
||||
{
|
||||
return 'Checking implicit aliases resolution';
|
||||
}
|
||||
|
||||
protected function DoExecute()
|
||||
{
|
||||
// The two first items did reveal an issue with the query cache,
|
||||
//because SELECT Person on the second line must not give the same query as SELECT Person on the first line
|
||||
$aQueries = array(
|
||||
"SELECT Person WHERE org_id = 1" => true,
|
||||
"SELECT Person WHERE s.org_id = 1" => false,
|
||||
"SELECT Person AS p WHERE p.org_id = 1" => true,
|
||||
"SELECT Person AS p WHERE Person.org_id = 1" => false,
|
||||
"SELECT P FROM Organization AS O JOIN Person AS P ON P.org_id = O.id WHERE org_id = 2" => true, // Bug N.539
|
||||
"SELECT Server JOIN Location ON Server.location_id = Location.id" => true,
|
||||
"SELECT Server JOIN Location ON Server.location_id = id" => false,
|
||||
"SELECT Server JOIN Location ON Server = Location.id" => false,
|
||||
"SELECT Server JOIN Location ON Server.location_id = Location.id WHERE Server.org_id = 1" => true,
|
||||
"SELECT Server JOIN Location ON Server.location_id = Location.id WHERE org_id = 1" => false,
|
||||
);
|
||||
foreach ($aQueries as $sQuery => $bSuccess)
|
||||
{
|
||||
echo "<h5>To Parse: ".htmlentities($sQuery, ENT_QUOTES, 'UTF-8')."</h5>\n";
|
||||
try
|
||||
{
|
||||
$oSearch = DBSearch::FromOQL($sQuery);
|
||||
if (!$bSuccess) throw new Exception('This query should not be parsable!');
|
||||
|
||||
CMDBSource::TestQuery($oSearch->MakeSelectQuery());
|
||||
echo "<p>Successfully tested the SQL query.</p>\n";
|
||||
}
|
||||
catch (OQLException $e)
|
||||
{
|
||||
if ($bSuccess) throw $e;
|
||||
echo "<p>Failed as expected.</p>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user