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 "

\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 ///////////////////////////////////////////////////////////////////////////