diff --git a/test/testlist.inc.php b/test/testlist.inc.php
index b02e9ddc7..0a8bfed61 100644
--- a/test/testlist.inc.php
+++ b/test/testlist.inc.php
@@ -485,7 +485,7 @@ class TestMyBizModel extends TestBizModel
echo "Max depth = $iMaxDepth\n";
$oObj = MetaModel::GetObject("cmdbContact", 18);
- $aRels = $oObj->GetRelatedObjects("Potes", $iMaxDepth);
+ $aRels = $oObj->GetRelatedObjectsDown("Potes", $iMaxDepth);
echo $oObj->Get('name')." has some 'Potes'...\n";
foreach ($aRels as $sClass => $aObjs)
{
@@ -581,391 +581,6 @@ class TestMyBizModel extends TestBizModel
}
-///////////////////////////////////////////////////////////////////////////
-// Test a complex biz model on the fly
-///////////////////////////////////////////////////////////////////////////
-
-abstract class MyFarm extends TestBizModel
-{
- static public function GetConfigFile() {return '/config-test-farm.php';}
-
- protected function DoPrepare()
- {
- parent::DoPrepare();
- $this->ResetDB();
- MetaModel::DBCheckIntegrity();
- }
-
- protected function InsertMammal($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId, $sName, $iHeight, $sBirth)
- {
- $oNew = MetaModel::NewObject('Mammal');
- $oNew->Set('species', $sSpecies);
- $oNew->Set('sex', $sSex);
- $oNew->Set('speed', $iSpeed);
- $oNew->Set('mother', $iMotherid);
- $oNew->Set('father', $iFatherId);
- $oNew->Set('name', $sName);
- $oNew->Set('height', $iHeight);
- $oNew->Set('birth', $sBirth);
- return $this->ObjectToDB($oNew);
- }
-
- protected function InsertBird($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId)
- {
- $oNew = MetaModel::NewObject('Bird');
- $oNew->Set('species', $sSpecies);
- $oNew->Set('sex', $sSex);
- $oNew->Set('speed', $iSpeed);
- $oNew->Set('mother', $iMotherid);
- $oNew->Set('father', $iFatherId);
- return $this->ObjectToDB($oNew);
- }
-
- protected function InsertFlyingBird($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId, $iFlyingSpeed)
- {
- $oNew = MetaModel::NewObject('FlyingBird');
- $oNew->Set('species', $sSpecies);
- $oNew->Set('sex', $sSex);
- $oNew->Set('speed', $iSpeed);
- $oNew->Set('mother', $iMotherid);
- $oNew->Set('father', $iFatherId);
- $oNew->Set('flyingspeed', $iFlyingSpeed);
- return $this->ObjectToDB($oNew);
- }
-
- private function InsertGroup($sName, $iLeaderId)
- {
- $oNew = MetaModel::NewObject('Group');
- $oNew->Set('name', $sName);
- $oNew->Set('leader', $iLeaderId);
- $iId = $oNew->DBInsertNoReload();
- return $iId;
- }
-}
-
-
-class TestQueriesOnFarm extends MyFarm
-{
- static public function GetName()
- {
- return 'Farm test';
- }
-
- static public function GetDescription()
- {
- return 'A series of tests on the farm business model (SQL generation)';
- }
-
- protected function CheckQuery($sQuery, $bIsCorrectQuery)
- {
- if ($bIsCorrectQuery)
- {
- echo "
$sQuery
\n";
- }
- else
- {
- echo "$sQuery\n";
- }
- try
- {
- //$oOql = new OqlInterpreter($sQuery);
- //$oTrash = $oOql->ParseQuery();
- //self::DumpVariable($oTrash, true);
- $oMyFilter = DBObjectSearch::FromOQL($sQuery);
- }
- catch (OQLException $oOqlException)
- {
- if ($bIsCorrectQuery)
- {
- echo "
More info on this unexpected failure:
".$oOqlException->getHtmlDesc()."
\n";
- throw $oOqlException;
- return false;
- }
- else
- {
- // Everything is fine :-)
- echo "More info on this expected failure:\n";
- echo "
\n";
- echo "- ".get_class($oOqlException)."
\n";
- echo "- ".$oOqlException->getMessage()."
\n";
- echo "- ".$oOqlException->getHtmlDesc()."
\n";
- echo "
\n";
- echo "\n";
- return true;
- }
- }
- // The query was correctly parsed, was it expected to be correct ?
- if (!$bIsCorrectQuery)
- {
- throw new UnitTestException("The query '$sQuery' was parsed with success, while it shouldn't (?)");
- return false;
- }
- echo "To OQL: ".$oMyFilter->ToOQL()."
";
-
- $this->search_and_show_list($oMyFilter);
-
- //echo "first pass
\n";
- //self::DumpVariable($oMyFilter, true);
- $sQuery1 = $oMyFilter->MakeSelectQuery();
- //echo "
second pass
\n";
- //self::DumpVariable($oMyFilter, true);
- //$sQuery1 = $oMyFilter->MakeSelectQuery();
-
- $sSerialize = $oMyFilter->serialize();
- echo "
Serialized:$sSerialize
\n";
- $oFilter2 = DBObjectSearch::unserialize($sSerialize);
- try
- {
- $sQuery2 = $oFilter2->MakeSelectQuery();
- }
- catch (Exception $e)
- {
- echo "Could not compute the query after unserialize
\n";
- echo "Query 1: $sQuery1
\n";
- MyHelpers::var_cmp_html($oMyFilter, $oFilter2);
- throw $e;
- }
- //if ($oFilter2 != $oMyFilter) no, they may differ while the resulting query is the same!
- if ($sQuery1 != $sQuery2)
- {
- echo "serialize/unserialize mismatch :-(
\n";
- MyHelpers::var_cmp_html($sQuery1, $sQuery2);
- MyHelpers::var_cmp_html($oMyFilter, $oFilter2);
- return false;
- }
- return true;
- }
-
- protected function DoExecute()
- {
-// $this->ReportError("Found two different OQL expression out of the (same?) filter: $sExpr1 != $sExpr2");
-// $this->ReportSuccess('Found '.$oSet->Count()." objects of class $sClassName");
- echo "Create protagonists...
";
-
- $iId1 = $this->InsertMammal('human', 'male', 10, 0, 0, 'romanoff', 192, '1971-07-19');
- $iId2 = $this->InsertMammal('human', 'female', 9, 0, 0, 'rouanita', 165, '1983-01-23');
- $this->InsertMammal('human', 'female', 3, $iId2, $iId1, 'pomme', 169, '2008-02-23');
- $this->InsertMammal('pig', 'female', 3, 0, 0, 'grouinkette', 85, '2006-06-01');
- $this->InsertMammal('donkey', 'female', 3, 0, 0, 'muleta', 124, '2003-11-11');
-
- $this->InsertBird('rooster', 'male', 12, 0, 0);
- $this->InsertFlyingBird('pie', 'female', 11, 0, 0, 35);
-
- // Benchmarking
- //
- if (false)
- {
- define ('COUNT_BENCHMARK', 10);
- echo "Parsing a long query, ".COUNT_BENCHMARK." times
";
- $sQuery = "SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.birth < DATE_SUB(CURRENT_DATE(), INTERVAL 10 YEAR) AND Dad.height * 2 <= ROUND(TO_DAYS(Dad.birth) / (3 + 1) * 5 - 3)";
-
- $fStart = MyHelpers::getmicrotime();
- for($i=0 ; $i < COUNT_BENCHMARK ; $i++)
- {
- $oMyFilter = DBObjectSearch::FromOQL($sQuery);
- }
- $fDuration = MyHelpers::getmicrotime() - $fStart;
- $fParsingDuration = $fDuration / COUNT_BENCHMARK;
- echo "Mean time by op: $fParsingDuration
";
- }
-
- echo "Test queries...
";
-
- $aQueries = array(
- 'SELECT Animal' => true,
- 'SELECT Animal WHERE Animal.pkey = 1' => false,
- 'SELECT Animal WHERE Animal.id = 1' => true,
- 'SELECT Aniiimal' => false,
- 'SELECTe Animal' => false,
- 'SELECT * FROM Animal' => false,
- 'SELECT Animal AS zoo WHERE zoo.species = \'human\'' => true,
- 'SELECT Animal AS zoo WHERE species = \'human\'' => true,
- 'SELECT Animal AS zoo WHERE espece = \'human\'' => false,
- 'SELECT Animal AS zoo WHERE zoo.species IN (\'human\', "pig")' => true,
- 'SELECT Animal AS zoo WHERE CONCATENATION(zoo.species, zoo.sex) LIKE "hum%male"' => false,
- 'SELECT Animal AS zoo WHERE CONCAT(zoo.species, zoo.sex) LIKE "hum%male"' => true,
- 'SELECT Animal AS zoo WHERE zoo.species NOT IN (\'human\', "pig")' => true,
- 'SELECT Animal AS zoo WHERE zoo.kind = \'human\'' => false,
- 'SELECT Animal WHERE Animal.species = \'human\' AND Animal.sex = \'female\'' => true,
- 'SELECT Mammal AS x WHERE (x.species = \'human\' AND x.name LIKE \'ro%\') OR (x.species = \'donkey\' AND x.name LIKE \'po%\')' => true,
- 'SELECT Mammal AS x WHERE x.species = \'human\' AND x.name LIKE \'ro%\' OR x.species = \'donkey\' AND x.name LIKE \'po%\'' => true,
- 'SELECT Mammal AS m WHERE MONTH(m.birth) = 7' => true,
- 'SELECT Mammal AS m WHERE DAY(m.birth) = 19' => true,
- 'SELECT Mammal AS m WHERE YEAR(m.birth) = 1971' => true,
- 'SELECT Mammal AS m WHERE m.birth < DATE_SUB(CURRENT_DATE(), INTERVAL 10 YEAR)' => true,
- 'SELECT Mammal AS m WHERE m.birth > DATE_SUB(NOW(), INTERVAL 2000 DAY)' => true,
- 'SELECT Mammal AS m WHERE (TO_DAYS(NOW()) - TO_DAYS(m.birth)) > 2000' => true,
- 'SELECT Mammal AS m WHERE m.name = IF(FLOOR(ROUND(m.height)) > 2, "pomme", "romain")' => true,
- 'SELECT Mammal AS m WHERE (1 + 2' => false,
- 'SELECT Mammal AS m WHERE (1 + 2 * 4 / 23) > 0' => true,
- 'SELECT Mammal AS m WHERE (4 / 23 * 2 + 1) > 0' => true,
- 'SELECT Mammal AS m WHERE 1/0' => true,
- 'SELECT Mammal AS m WHERE MONTH(m.birth) = 7' => true,
- 'SELECT Animal JOIN Group ON Group.leader = Animal.id' => true,
- 'SELECT Group JOIN Animal ON Group.leader = Animal.id' => true,
- 'SELECT Animal AS A JOIN Group AS G1 ON G1.leader = A.id' => true,
- 'SELECT Animal AS A JOIN Group AS G ON FooClass.leader = A.id' => false,
- 'SELECT Animal AS A JOIN Group AS G ON G.leader = FooClass.id' => false,
- 'SELECT Animal AS A JOIN Group AS G ON G.masterchief = A.id' => false,
- 'SELECT Animal AS A JOIN Group AS G ON A.id = G.leader' => false,
- 'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.sex=\'male\' OR G.qwerty = 123' => false,
- 'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.sex=\'male\' OR G.name LIKE "a%"' => true,
- 'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.id = 1' => true,
- 'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE id = 1' => false,
- 'SELECT Animal AS A JOIN Group AS G ON A.member = G.id' => false,
- 'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id' => true,
- 'SELECT Mammal AS M JOIN Group AS G ON A.member = G.id' => false,
- 'SELECT Mammal AS myAlias JOIN Group AS myAlias ON myAlias.member = myAlias.id' => false,
- 'SELECT Mammal AS Mammal JOIN Group AS Mammal ON Mammal.member = Mammal.id' => false,
- 'SELECT Group AS G WHERE G.leader_name LIKE "%"' => true,
- 'SELECT Group AS G WHERE G.leader_speed < 100000' => true,
- 'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_name LIKE "%"' => true,
- 'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_speed < 100000' => true,
- 'SELECT Mammal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
- 'SELECT Mammal AS Child JOIN Animal AS Dad ON Child.father = Dad.id' => true,
- 'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
- 'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id' => true,
- 'SELECT Animal AS Dad JOIN Animal AS Child ON Child.father = Dad.id' => true,
- 'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id' => true,
- 'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.id = 1' => true,
- 'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\'' => false,
- 'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
- 'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\' OR Mum.speed = 0' => true,
- 'SELECT Animal AS Dad JOIN Animal AS Child ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id' => true,
- 'SELECT Mammal AS Dad JOIN Mammal AS Child ON Child.father = Dad.id' => true,
- 'SELECT Mammal AS Dad JOIN Mammal AS Child ON Child.father = Dad.id JOIN Mammal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\' OR Mum.name=\'chloe\' OR Child.name=\'bizounours\'' => true,
- // Specifying multiple objects
- 'SELECT Animal FROM Animal' => true,
- 'SELECT yelele FROM Animal' => false,
- 'SELECT Animal FROM Animal AS A' => false,
- 'SELECT A FROM Animal AS A' => true,
- );
- //$aQueries = array(
- // 'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_name LIKE "%"' => true,
- //);
- foreach($aQueries as $sQuery => $bIsCorrect)
- {
- $this->CheckQuery($sQuery, $bIsCorrect);
- }
- return true;
- }
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-// Test data load
-///////////////////////////////////////////////////////////////////////////
-
-class TestBulkChangeOnFarm extends TestBizModel
-{
- static public function GetName()
- {
- return 'Farm test - data load';
- }
-
- static public function GetDescription()
- {
- return 'Bulk load';
- }
-
- static public function GetConfigFile() {return '/config-test-farm.php';}
-
- protected function DoPrepare()
- {
- parent::DoPrepare();
- $this->ResetDB();
- MetaModel::DBCheckIntegrity();
- }
-
- protected function DoExecute()
- {
-// $this->ReportError("Found two different OQL expression out of the (same?) filter: $sExpr1 != $sExpr2");
-// $this->ReportSuccess('Found '.$oSet->Count()." objects of class $sClassName");
-
- $oParser = new CSVParser("denomination,hauteur,age
- suzy,123,2009-01-01
- chita,456,
- ", ',', '"');
- $aData = $oParser->ToArray(1, array('_name', '_height', '_birth'));
- self::DumpVariable($aData);
-
- $oBulk = new BulkChange(
- 'Mammal',
- $aData,
- // attributes
- array('name' => '_name', 'height' => '_height', 'birth' => '_birth'),
- // ext keys
- array(),
- // reconciliation
- array('name')
- );
-
- $oMyChange = MetaModel::NewObject("CMDBChange");
- $oMyChange->Set("date", time());
- $oMyChange->Set("userinfo", "Testor");
- $iChangeId = $oMyChange->DBInsert();
-// echo "Created new change: $iChangeId";
-
- echo "Planned for loading...
";
- $aRes = $oBulk->Process();
- self::DumpVariable($aRes);
- echo "Go for loading...
";
- $aRes = $oBulk->Process($oMyChange);
- self::DumpVariable($aRes);
-
- return;
-
- $oRawData = array(
- 'Mammal',
- array('species', 'sex', 'speed', 'mother', 'father', 'name', 'height', 'birth'),
- "human,male,23,0,0,romulus,192,1971
- human,male,23,0,0,remus,154,-50
- human,male,23,0,0,julius,160,-49
- human,female,23,0,0,cleopatra,142,-50
- pig,female,23,0,0,confucius,50,2003"
- );
- }
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-// Test data load
-///////////////////////////////////////////////////////////////////////////
-
-class TestFullTextSearchOnFarm extends MyFarm
-{
- static public function GetName()
- {
- return 'Farm test - full text search';
- }
-
- static public function GetDescription()
- {
- return 'Focus on the full text search feature';
- }
-
- protected function DoExecute()
- {
- echo "Create protagonists...
";
-
- $iId1 = $this->InsertMammal('human', 'male', 10, 0, 0, 'romanoff', 192, '1971-07-19');
- $iId2 = $this->InsertMammal('human', 'female', 9, 0, 0, 'rouanita', 165, '1983-01-23');
- $this->InsertMammal('human', 'female', 3, $iId2, $iId1, 'pomme', 169, '2008-02-23');
- $this->InsertMammal('pig', 'female', 3, 0, 0, 'grouinkette', 85, '2006-06-01');
- $this->InsertMammal('donkey', 'female', 3, 0, 0, 'muleta', 124, '2003-11-11');
-
- $this->InsertBird('rooster', 'male', 12, 0, 0);
- $this->InsertFlyingBird('pie', 'female', 11, 0, 0, 35);
-
- echo "Search...
";
- $oSearch = new DBObjectSearch('Mammal');
- $oSearch->AddCondition_FullText('manof');
- //$oResultSet = new DBObjectSet($oSearch);
- $this->search_and_show_list($oSearch);
- }
-}
-
-
///////////////////////////////////////////////////////////////////////////
// Test queries
///////////////////////////////////////////////////////////////////////////