Core API: added DBSearch:SetSelectedClasses

SVN:trunk[3815]
This commit is contained in:
Romain Quetiez
2015-11-09 10:35:51 +00:00
parent b071c47674
commit 0f4301af01
3 changed files with 53 additions and 1 deletions

View File

@@ -155,6 +155,22 @@ class DBObjectSearch extends DBSearch
return $this->m_aSelectedClasses;
}
/**
* @param array $aSelectedClasses array of aliases
* @throws CoreException
*/
public function SetSelectedClasses($aSelectedClasses)
{
$this->m_aSelectedClasses = array();
foreach ($aSelectedClasses as $sAlias)
{
if (!array_key_exists($sAlias, $this->m_aClasses))
{
throw new CoreException("Invalid class alias $sAlias");
}
$this->m_aSelectedClasses[$sAlias] = $this->m_aClasses[$sAlias];
}
}
public function SetModifierProperty($sPluginClass, $sProperty, $value)
{
@@ -565,7 +581,7 @@ class DBObjectSearch extends DBSearch
// NO: $oFilter = $oFilter->DeepClone();
// See also: Trac #639, and self::AddCondition_PointingTo()
$aAliasTranslation = array();
$res = $this->AddCondition_ReferencedBy_InNameSpace(DBObjectSearch, $sForeignExtKeyAttCode, $this->m_aClasses, $aAliasTranslation);
$res = $this->AddCondition_ReferencedBy_InNameSpace($oFilter, $sForeignExtKeyAttCode, $this->m_aClasses, $aAliasTranslation);
$this->TransferConditionExpression($oFilter, $aAliasTranslation);
return $res;
}

View File

@@ -91,6 +91,12 @@ abstract class DBSearch
abstract public function ChangeClass($sNewClass, $sAlias = null);
abstract public function GetSelectedClasses();
/**
* @param array $aSelectedClasses array of aliases
* @throws CoreException
*/
abstract public function SetSelectedClasses($aSelectedClasses);
abstract public function IsAny();
public function Describe(){return 'deprecated - use ToOQL() instead';}
@@ -162,6 +168,12 @@ abstract class DBSearch
return $oRes;
}
/**
* @param string $sQuery
* @param array $aParams
* @return DBSearch
* @throws OQLException
*/
static public function FromOQL($sQuery, $aParams = null)
{
if (empty($sQuery)) return null;

View File

@@ -52,6 +52,14 @@ class DBUnionSearch extends DBSearch
}
}
$this->ComputeSelectedClasses();
}
/**
* Find the lowest common ancestor for each of the selected class
*/
protected function ComputeSelectedClasses()
{
// 1 - Collect all the column/classes
$aColumnToClasses = array();
foreach ($this->aSearches as $iPos => $oSearch)
@@ -163,6 +171,22 @@ class DBUnionSearch extends DBSearch
return $this->aSelectedClasses;
}
/**
* @param array $aSelectedClasses array of aliases
* @throws CoreException
*/
public function SetSelectedClasses($aSelectedClasses)
{
// 1 - change for each search
foreach ($this->aSearches as $oSearch)
{
// Throws an exception if not valid
$oSearch->SetSelectedClasses($aSelectedClasses);
}
// 2 - update the lowest common ancestors
$this->ComputeSelectedClasses();
}
public function IsAny()
{
$bIsAny = true;