mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 11:08:45 +02:00
@@ -34,15 +34,13 @@ class DBObjectSearch
|
||||
private $m_aReferencedBy;
|
||||
private $m_aRelatedTo;
|
||||
|
||||
public function __construct($sClass, $sClassAlias = '')
|
||||
public function __construct($sClass, $sClassAlias = null)
|
||||
{
|
||||
if (empty($sClassAlias)) $sClassAlias = $sClass;
|
||||
if (is_null($sClassAlias)) $sClassAlias = $sClass;
|
||||
assert('is_string($sClass)');
|
||||
assert('MetaModel::IsValidClass($sClass)'); // #@# could do better than an assert, or at least give the caller's reference
|
||||
// => idee d'un assert avec call stack (autre utilisation = echec sur query SQL)
|
||||
|
||||
if (empty($sClassAlias)) $sClassAlias = $sClass;
|
||||
|
||||
$this->m_aSelectedClasses = array($sClassAlias => $sClass);
|
||||
$this->m_aClasses = array($sClassAlias => $sClass);
|
||||
$this->m_oSearchCondition = new TrueExpression;
|
||||
|
||||
@@ -2146,6 +2146,7 @@ abstract class MetaModel
|
||||
CMDBSource::CreateDB(self::$m_sDBName);
|
||||
}
|
||||
self::DBCreateTables();
|
||||
self::DBCreateViews();
|
||||
}
|
||||
|
||||
protected static function DBCreateTables()
|
||||
@@ -2169,6 +2170,25 @@ abstract class MetaModel
|
||||
// $sDoCreateAll = implode(" ; ", $aSQL);
|
||||
}
|
||||
|
||||
protected static function DBCreateViews()
|
||||
{
|
||||
list($aErrors, $aSugFix) = self::DBCheckViews();
|
||||
|
||||
$aSQL = array();
|
||||
foreach ($aSugFix as $sClass => $aTarget)
|
||||
{
|
||||
foreach ($aTarget as $aQueries)
|
||||
{
|
||||
foreach ($aQueries as $sQuery)
|
||||
{
|
||||
//$aSQL[] = $sQuery;
|
||||
// forces a refresh of cached information
|
||||
CMDBSource::CreateTable($sQuery);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function DBDump()
|
||||
{
|
||||
$aDataDump = array();
|
||||
@@ -2411,6 +2431,26 @@ abstract class MetaModel
|
||||
return array($aErrors, $aSugFix);
|
||||
}
|
||||
|
||||
public static function DBCheckViews()
|
||||
{
|
||||
$aErrors = array();
|
||||
$aSugFix = array();
|
||||
|
||||
// Reporting views (must be created after any other table)
|
||||
//
|
||||
foreach (self::GetClasses('bizmodel') as $sClass)
|
||||
{
|
||||
$sView = "view_$sClass";
|
||||
if (!CMDBSource::IsTable($sView))
|
||||
{
|
||||
$oFilter = new DBObjectSearch($sClass, '');
|
||||
$sSQL = self::MakeSelectQuery($oFilter);
|
||||
$aErrors[$sClass]['*'][] = "Missing view for class: $sClass";
|
||||
$aSugFix[$sClass]['*'][] = "CREATE VIEW `$sView` AS $sSQL";
|
||||
}
|
||||
}
|
||||
return array($aErrors, $aSugFix);
|
||||
}
|
||||
|
||||
private static function DBCheckIntegrity_Check2Delete($sSelWrongRecs, $sErrorDesc, $sClass, &$aErrorsAndFixes, &$iNewDelCount, &$aPlannedDel, $bProcessingFriends = false)
|
||||
{
|
||||
|
||||
@@ -287,10 +287,11 @@ function printMenu($sConfigFile)
|
||||
echo " <li><a href=\"$sUrl&todo=showbizmodel\">Browse business model</a></li>";
|
||||
if ($bHasDB)
|
||||
{
|
||||
echo " <li><a href=\"$sUrl&todo=checkmodeltodb\">Concordance between Biz model and DB format</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=checkmodeltodb\">Concordance between Biz model and <b>DB format</b></a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=checkmodeltoviews\">Concordance between Biz model and <b>Views</b></a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=checkdb\">DB integrity check</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=checkall\">Any check at once (see list above)</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=userrightssetup\">Setup userrights (init DB)</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=checkall\">Check business model, DB format and data integrity</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=showtables\">Show Tables</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=debugquery\">Test an OQL query (debug)</a></li>";
|
||||
echo " <li><a href=\"$sUrl&todo=dumpdb\">Dump database</a></li>";
|
||||
@@ -371,7 +372,10 @@ function DisplayDBFormatIssues($aErrors, $aSugFix, $sRepairUrl = "", $sSQLStatem
|
||||
$i = 0;
|
||||
foreach ($aTarget as $sTarget => $aMessages)
|
||||
{
|
||||
echo "<p>Wrong declaration for attribute <b>$sTarget</b></p>\n";
|
||||
if ($sTarget != '*')
|
||||
{
|
||||
echo "<p>Wrong declaration for attribute <b>$sTarget</b></p>\n";
|
||||
}
|
||||
$sMsg = implode(' AND ', $aMessages);
|
||||
if (!empty($sRepairUrl))
|
||||
{
|
||||
@@ -518,6 +522,12 @@ else
|
||||
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
|
||||
echo "done...</br>\n";
|
||||
break;
|
||||
case "checkmodeltoviews":
|
||||
echo "Check Views...</br>\n";
|
||||
list($aErrors, $aSugFix) = MetaModel::DBCheckViews();
|
||||
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
|
||||
echo "done...</br>\n";
|
||||
break;
|
||||
case "checkdb":
|
||||
echo "Check DB integrity...</br>\n";
|
||||
MetaModel::DBCheckIntegrity($sBaseUrl, "sql");
|
||||
@@ -541,6 +551,10 @@ else
|
||||
list($aErrors, $aSugFix) = MetaModel::DBCheckFormat();
|
||||
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
|
||||
echo "done...</br>\n";
|
||||
echo "Check Views...</br>\n";
|
||||
list($aErrors, $aSugFix) = MetaModel::DBCheckViews();
|
||||
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
|
||||
echo "done...</br>\n";
|
||||
echo "Check DB integrity...</br>\n";
|
||||
MetaModel::DBCheckIntegrity($sBaseUrl, "sql");
|
||||
echo "done...</br>\n";
|
||||
|
||||
Reference in New Issue
Block a user