#132 Views on data model classes

SVN:trunk[429]
This commit is contained in:
Romain Quetiez
2010-06-04 14:02:46 +00:00
parent 0a38eab341
commit d115022132
3 changed files with 59 additions and 7 deletions

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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";