Revision = 0;
$this->Trace = array();
$this->VersionTable = 'SystemVersion';
$this->InstallMethod = 'FullInstall';
$this->InsertSampleDataMethod = 'InsertSampleData';
}
function GetDbVersion()
{
$DbResult = $this->Database->select($this->VersionTable, '*', 'Id=1');
$Version = $DbResult->fetch_assoc();
return($Version['Revision']);
}
function IsInstalled()
{
debug_backtrace();
$DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->VersionTable.'"');
return($DbResult->num_rows > 0);
}
function IsUpToDate()
{
return($this->Revision <= $this->GetDbVersion());
}
function Upgrade()
{
$DbRevision = $this->GetDbVersion();
$Output = 'Počáteční revize databáze: '.$DbRevision.'
';
while($this->Revision > $DbRevision)
{
$TraceItem = $this->Trace[$DbRevision];
$Output .= 'Aktualizace na verzi '.$TraceItem['Revision'].':
';
// Show applied SQL queries immediatelly
echo($Output);
$Output = '';
$RevUpdate = $TraceItem['Function'];
$RevUpdate($this);
$DbRevision = $TraceItem['Revision'];
$this->Database->query('UPDATE `'.$this->VersionTable.'` SET `Revision`= '.$TraceItem['Revision'].' WHERE `Id`=1');
}
return($Output);
}
function Install()
{
$InstallMethod = $this->InstallMethod;
$InstallMethod($this);
$this->Update();
}
function Uninstall()
{
}
function InsertSampleData()
{
$InstallMethod = $this->InsertSampleDataMethod;
$InstallMethod($this);
}
function Execute($Query)
{
echo($Query.';
');
flush();
return($this->Database->query($Query));
}
}