Performance improvements to version and application classes. Reduce the amount of queries to

what is necessary during object creation.  The only use of all but one of the arrays we were fetching
during version and application construction was in ::delete() so we can just retrieve them there.
Speed screenshot class up by only querying for necessary columns, not select *
This commit is contained in:
Chris Morgan
2006-07-09 00:48:33 +00:00
committed by WineHQ
parent d06cba3977
commit 0a9f8cc155
5 changed files with 148 additions and 138 deletions

View File

@@ -117,7 +117,7 @@ function display_move_test_to_versions_table($aVersionsIds,$icurrentVersionId)
echo " <td>".util_trim_description($oVersion->sDescription)."</td>\n";
echo " <td align=center>".$oVersion->sTestedRating."</td>\n";
echo " <td align=center>".$oVersion->sTestedRelease."</td>\n";
echo " <td align=center>".sizeof($oVersion->aCommentsIds)."</td>\n";
echo " <td align=center>".Comment::get_comment_count_for_versionid($oVersion->iVersionId)."</td>\n";
echo "</tr>\n\n";
$c++;

View File

@@ -25,7 +25,6 @@ class Application {
var $sSubmitTime;
var $iSubmitterId;
var $aVersionsIds; // an array that contains the versionId of every version linked to this app.
var $aUrlsIds; // an array that contains the screenshotId of every url linked to this version
/**
* constructor, fetches the data.
@@ -77,24 +76,6 @@ class Application {
$this->aVersionsIds[] = $oRow->versionId;
}
}
/*
* We fetch urlsIds.
*/
$this->aUrlsIds = array();
$sQuery = "SELECT id
FROM appData
WHERE type = 'url'
AND appId = '?'";
if($hResult = query_parameters($sQuery, $iAppId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aUrlsIds[] = $oRow->id;
}
}
}
}
@@ -219,7 +200,24 @@ class Application {
$oVersion = new Version($iVersionId);
$oVersion->delete($bSilent);
}
foreach($this->aUrlsIds as $iUrlId)
/* fetch urlsIds */
$aUrlsIds = array();
$sQuery = "SELECT id
FROM appData
WHERE type = 'url'
AND appId = '?'";
if($hResult = query_parameters($sQuery, $this->iAppId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aUrlsIds[] = $oRow->id;
}
}
foreach($aUrlsIds as $iUrlId)
{
$oUrl = new Url($iUrlId);
$oUrl->delete($bSilent);

View File

@@ -187,6 +187,16 @@ class Comment {
return false;
}
function get_comment_count_for_versionid($iVersionId)
{
$sQuery = "SELECT count(*) as cnt from appComments where versionId = '?'";
$hResult = query_parameters($sQuery, $iVersionId);
if(!$hResult) return 0;
$oRow = mysql_fetch_object($hResult);
return $oRow->cnt;
}
/**
* class static functions
*/

View File

@@ -307,12 +307,13 @@ class Screenshot {
*
* $bFormatting == false turns off all extranious formatting applied to the returned image html
*/
function get_screenshot_img($iAppId = null, $iVersionId = null, $bFormatting = true)
function get_screenshot_img($iAppId = null, $iVersionId = null,
$bFormatting = true)
{
// we want a random screenshots for this app
if($iAppId && !$iVersionId)
{
$hResult = query_parameters("SELECT appData.*, RAND() AS rand
$hResult = query_parameters("SELECT appData.id, appData.description, RAND() AS rand
FROM appData, appVersion
WHERE appData.versionId = appVersion.versionId
AND appVersion.appId = '?'
@@ -321,7 +322,7 @@ function get_screenshot_img($iAppId = null, $iVersionId = null, $bFormatting = t
ORDER BY rand", $iAppId);
} else if ($iVersionId) // we want a random screenshot for this version
{
$hResult = query_parameters("SELECT *, RAND() AS rand
$hResult = query_parameters("SELECT id, description, RAND() AS rand
FROM appData
WHERE versionId = '?'
AND type = 'image'

View File

@@ -25,13 +25,6 @@ class Version {
var $iSubmitterId;
var $sDate;
var $sQueued;
var $aNotesIds; // an array that contains the noteId of every note linked to this version
var $aCommentsIds; // an array that contains the commentId of every comment linked to this version
var $aScreenshotsIds; // an array that contains the screenshotId of every screenshot linked to this version
var $aUrlsIds; // an array that contains the screenshotId of every url linked to this version
var $aBuglinkIds; // an array that contains the buglinkId of every bug linked to this version
var $aTestingIds; // an array that contains the testingId of every test result linked to this version
var $aMonitorIds; // an array that contains the monitorId of every monitor linked to this version
/**
* constructor, fetches the data.
@@ -67,105 +60,6 @@ class Version {
$this->sQueued = $oRow->queued;
}
}
/*
* We fetch notesIds.
*/
$this->aNotesIds = array();
$sQuery = "SELECT noteId
FROM appNotes
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aNotesIds[] = $oRow->noteId;
}
}
/*
* We fetch commentsIds.
*/
$this->aCommentsIds = array();
$sQuery = "SELECT commentId
FROM appComments
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aCommentsIds[] = $oRow->commentId;
}
}
/*
* We fetch screenshotsIds and urlsIds.
*/
$this->aScreenshotsIds = array();
$this->aUrlsIds = array();
$sQuery = "SELECT id, type
FROM appData
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
if($oRow->type="image")
$this->aScreenshotsIds[] = $oRow->id;
else
$this->aUrlsIds[] = $oRow->id;
}
}
/*
* We fetch Bug linkIds.
*/
$this->aBuglinkIds = array();
$sQuery = "SELECT *
FROM buglinks
WHERE versionId = '?'
ORDER BY bug_id";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aBuglinkIds[] = $oRow->linkId;
}
}
/*
* We fetch Test Results Ids.
*/
$this->aTestingIds = array();
$sQuery = "SELECT *
FROM testResults
WHERE versionId = '?'
ORDER BY testingId";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aTestingIds[] = $oRow->testingId;
}
}
/*
* We fetch monitor Ids.
*/
$this->aMonitorIds = array();
$sQuery = "SELECT *
FROM appMonitors
WHERE versionId = '?'
ORDER BY monitorId";
if($hResult = query_parameters($sQuery, $iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$this->aMonitorIds[] = $oRow->monitorId;
}
}
}
}
@@ -287,43 +181,129 @@ class Version {
if(!$_SESSION['current']->canDeleteVersion($this))
return false;
/* fetch notesIds */
$aNotesIds = array();
$sQuery = "SELECT noteId
FROM appNotes
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aNotesIds[] = $oRow->noteId;
}
}
/* remove all of the items this version contains */
foreach($this->aNotesIds as $iNoteId)
foreach($aNotesIds as $iNoteId)
{
$oNote = new Note($iNoteId);
$oNote->delete($bSilent);
}
foreach($this->aCommentsIds as $iCommentId)
/* We fetch commentsIds. */
$aCommentsIds = array();
$sQuery = "SELECT commentId
FROM appComments
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aCommentsIds[] = $oRow->commentId;
}
}
foreach($aCommentsIds as $iCommentId)
{
$oComment = new Comment($iCommentId);
$oComment->delete($bSilent);
}
foreach($this->aScreenshotsIds as $iScreenshotId)
/* fetch screenshotsIds and urlsIds */
$aScreenshotsIds = array();
$aUrlsIds = array();
$sQuery = "SELECT id, type
FROM appData
WHERE versionId = '?'";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
if($oRow->type="image")
$aScreenshotsIds[] = $oRow->id;
else
$aUrlsIds[] = $oRow->id;
}
}
foreach($aScreenshotsIds as $iScreenshotId)
{
$oScreenshot = new Screenshot($iScreenshotId);
$oScreenshot->delete($bSilent);
}
foreach($this->aUrlsIds as $iUrlId)
foreach($aUrlsIds as $iUrlId)
{
$oUrl = new Url($iUrlId);
$oUrl->delete($bSilent);
}
foreach($this->aBuglinkIds as $iBug_id)
{
$oBug = new bug($iBug_id);
$oBug->delete($bSilent);
}
foreach($this->aTestingIds as $iTestId)
/* fetch Test Results Ids */
$aTestingIds = array();
$sQuery = "SELECT *
FROM testResults
WHERE versionId = '?'
ORDER BY testingId";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aTestingIds[] = $oRow->testingId;
}
}
foreach($aTestingIds as $iTestId)
{
$oTest = new testData($iTestId);
$oTest->delete($bSilent);
}
foreach($this->aMonitorIds as $iMonitorId)
/* fetch monitor Ids */
$aMonitorIds = array();
$sQuery = "SELECT *
FROM appMonitors
WHERE versionId = '?'
ORDER BY monitorId";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aMonitorIds[] = $oRow->monitorId;
}
}
foreach($aMonitorIds as $iMonitorId)
{
$oMonitor = new Monitor($iMonitorId);
$oMonitor->delete($bSilent);
}
// remove any maintainers for this version so we don't orphan them
$hResult = query_parameters("DELETE from appMaintainers WHERE versionId='?'", $this->iVersionId);
if(!$hResult)
@@ -520,6 +500,27 @@ class Version {
mail_appdb($sEmail, $sSubject ,$sMsg);
}
function get_buglink_ids()
{
/*
* We fetch Bug linkIds.
*/
$aBuglinkIds = array();
$sQuery = "SELECT *
FROM buglinks
WHERE versionId = '?'
ORDER BY bug_id";
if($hResult = query_parameters($sQuery, $this->iVersionId))
{
while($oRow = mysql_fetch_object($hResult))
{
$aBuglinkIds[] = $oRow->linkId;
}
}
return $aBuglinkIds;
}
/* output html and the current versions information for editing */
/* if $editParentApplication is true that means we need to display fields */
/* to let the user change the parent application of this version */
@@ -802,7 +803,7 @@ class Version {
echo html_frame_end();
view_version_bugs($this->iVersionId, $this->aBuglinkIds);
view_version_bugs($this->iVersionId, $this->get_buglink_ids());
/* display the notes for the application */
$hNotes = query_parameters("SELECT noteId FROM appNotes WHERE versionId = '?'",
@@ -901,7 +902,7 @@ class Version {
echo " <td>".util_trim_description($oVersion->sDescription)."</td>\n";
echo " <td align=center>".$oVersion->sTestedRating."</td>\n";
echo " <td align=center>".$oVersion->sTestedRelease."</td>\n";
echo " <td align=center>".sizeof($oVersion->aCommentsIds)."</td>\n";
echo " <td align=center>".Comment::get_comment_count_for_versionid($oVersion->iVersionId)."</td>\n";
echo "</tr>\n\n";
$c++;