Allow browsing developed OQL class tree

This commit is contained in:
Eric
2020-01-02 15:58:43 +01:00
parent 7f3efe59ab
commit c8335499fd
2 changed files with 34 additions and 2 deletions

View File

@@ -128,6 +128,19 @@ class OQLClassNode
return $sOQL;
}
public function Browse(Closure $callback)
{
$callback($this);
foreach ($this->GetJoins() as $aJoins)
{
/** @var \OQLJoin $oJoin */
foreach ($aJoins as $oJoin)
{
$oJoin->GetOOQLClassNode()->Browse($callback);
}
}
}
public function GetExternalKeys()
{
return $this->aExtKeys;
@@ -318,4 +331,4 @@ class OQLJoin
return $this->sRightField;
}
}
}

View File

@@ -23,7 +23,7 @@ class OQLClassTreeBuilder
* @param \DBObjectSearch $oDBObjetSearch
* @param \QueryBuilderContext $oBuild
*/
public function __construct($oDBObjetSearch, $oBuild)
protected function __construct($oDBObjetSearch, $oBuild)
{
$this->oBuild = $oBuild;
$this->oDBObjectSearch = $oDBObjetSearch;
@@ -36,6 +36,25 @@ class OQLClassTreeBuilder
$this->oOQLClassNode = new OQLClassNode($oBuild, $this->sClass, $this->sClassAlias);
}
/**
* @param \DBObjectSearch $oDBObjetSearch
* @param \QueryBuilderContext $oBuild
*
* @return \OQLClassNode
* @throws \CoreException
*/
public static function GetOQLClassTree($oDBObjetSearch, $oBuild)
{
$oOQLClassTreeBuilder = new OQLClassTreeBuilder($oDBObjetSearch, $oBuild);
$oOQLClassNode = $oOQLClassTreeBuilder->DevelopOQLClassNode();
$oOQLClassTreeOptimizer = new OQLClassTreeOptimizer($oOQLClassNode, $oBuild);
$oOQLClassTreeOptimizer->OptimizeClassTree();
$oOQLActualClassTreeResolver = new OQLActualClassTreeResolver($oOQLClassNode, $oBuild);
$oOQLClassNode = $oOQLActualClassTreeResolver->Resolve();
return $oOQLClassNode;
}
/**
* Develop OQL.
* Add joins from OQL (outgoing and incoming)