Skip to content

Commit

Permalink
Fixed: #4389: abmultiscalequery is executed more times than is necessary
Browse files Browse the repository at this point in the history
dev: as createfieldmap is used a lot, we should see performance improvements in all areas

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey@8789 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
mennodekker committed Jun 4, 2010
1 parent bbfedd0 commit 5d2922a
Showing 1 changed file with 97 additions and 64 deletions.
161 changes: 97 additions & 64 deletions common.php
Expand Up @@ -2544,63 +2544,35 @@ function createFieldMap($surveyid, $style='short', $force_refresh=false, $questi
." AND q.language='".$s_lang. "' "
." ORDER BY sq.question_order";
$abresult=db_execute_assoc($abquery) or safe_die ("Couldn't get perform answers query<br />$abquery<br />".$connect->ErrorMsg()); //Checked
$abcount=$abresult->RecordCount();

while ($abrow=$abresult->FetchRow())
{
$abmultiscalequery = "SELECT a.* FROM {$dbprefix}questions as q, {$dbprefix}answers as a, {$dbprefix}questions as sq"
." WHERE sq.parent_qid=q.qid AND q.sid=$surveyid AND q.qid={$arow['qid']} "
." AND a.qid=q.qid AND sq.sid=$surveyid AND q.qid={$arow['qid']}"
." AND a.scale_id=0 "
." AND sq.language='".$s_lang. "' "
." AND a.language='".$s_lang. "' "
." AND q.language='".$s_lang. "' "; //converted

$abmultiscaleresult=db_execute_assoc($abmultiscalequery) or safe_die ("Couldn't get perform answers query<br />$abquery<br />".$connect->ErrorMsg()); //Checked
$abmultiscalecount=$abmultiscaleresult->RecordCount();
//if ($abmultiscalecount>0)
if ($abmultiscaleresultrow=$abmultiscaleresult->FetchRow())
$fieldname="{$arow['sid']}X{$arow['gid']}X{$arow['qid']}{$abrow['title']}#0";
$fieldmap[$fieldname]=array("fieldname"=>$fieldname, 'type'=>$arow['type'], 'sid'=>$surveyid, "gid"=>$arow['gid'], "qid"=>$arow['qid'], "aid"=>$abrow['title'], "scale_id"=>0);
if ($style == "full")
{
$fieldname="{$arow['sid']}X{$arow['gid']}X{$arow['qid']}{$abrow['title']}#0";
$fieldmap[$fieldname]=array("fieldname"=>$fieldname, 'type'=>$arow['type'], 'sid'=>$surveyid, "gid"=>$arow['gid'], "qid"=>$arow['qid'], "aid"=>$abrow['title'], "scale_id"=>0);
if ($style == "full")
{
$fieldmap[$fieldname]['title']=$arow['title'];
$fieldmap[$fieldname]['question']=$arow['question'];
$fieldmap[$fieldname]['subquestion']=$abrow['question'];
$fieldmap[$fieldname]['group_name']=$arow['group_name'];
$fieldmap[$fieldname]['scale']=$clang->gT('Scale 1');
$fieldmap[$fieldname]['mandatory']=$arow['mandatory'];
$fieldmap[$fieldname]['hasconditions']=$conditions;
$fieldmap[$fieldname]['usedinconditions']=$usedinconditions;
}
$fieldmap[$fieldname]['title']=$arow['title'];
$fieldmap[$fieldname]['question']=$arow['question'];
$fieldmap[$fieldname]['subquestion']=$abrow['question'];
$fieldmap[$fieldname]['group_name']=$arow['group_name'];
$fieldmap[$fieldname]['scale']=$clang->gT('Scale 1');
$fieldmap[$fieldname]['mandatory']=$arow['mandatory'];
$fieldmap[$fieldname]['hasconditions']=$conditions;
$fieldmap[$fieldname]['usedinconditions']=$usedinconditions;
}
// multi-scale
$abmultiscalequery = "SELECT a.* FROM {$dbprefix}questions as q, {$dbprefix}answers as a, {$dbprefix}questions as sq"
." WHERE sq.parent_qid=q.qid AND q.sid=$surveyid AND q.qid={$arow['qid']} "
." AND a.qid=q.qid AND sq.sid=$surveyid AND q.qid={$arow['qid']}"
." AND a.scale_id=1 "
." AND sq.language='".$s_lang. "' "
." AND a.language='".$s_lang. "' "
." AND q.language='".$s_lang. "' "; //converted

$abmultiscaleresult=db_execute_assoc($abmultiscalequery) or safe_die ("Couldn't get perform answers query<br />$abquery<br />".$connect->ErrorMsg()); //Checked
$abmultiscalecount=$abmultiscaleresult->RecordCount();
if ($abmultiscaleresultrow=$abmultiscaleresult->FetchRow())
{
$fieldname="{$arow['sid']}X{$arow['gid']}X{$arow['qid']}{$abrow['title']}#1";
$fieldmap[$fieldname]=array("fieldname"=>$fieldname, 'type'=>$arow['type'], 'sid'=>$surveyid, "gid"=>$arow['gid'], "qid"=>$arow['qid'], "aid"=>$abrow['title'], "scale_id"=>1);
if ($style == "full")
{
$fieldmap[$fieldname]['title']=$arow['title'];
$fieldmap[$fieldname]['question']=$arow['question'];
$fieldmap[$fieldname]['subquestion']=$abrow['question'];
$fieldmap[$fieldname]['group_name']=$arow['group_name'];
$fieldmap[$fieldname]['scale']=$clang->gT('Scale 2');
$fieldmap[$fieldname]['mandatory']=$arow['mandatory'];
$fieldmap[$fieldname]['hasconditions']=$conditions;
$fieldmap[$fieldname]['usedinconditions']=$usedinconditions;
}

$fieldname="{$arow['sid']}X{$arow['gid']}X{$arow['qid']}{$abrow['title']}#1";
$fieldmap[$fieldname]=array("fieldname"=>$fieldname, 'type'=>$arow['type'], 'sid'=>$surveyid, "gid"=>$arow['gid'], "qid"=>$arow['qid'], "aid"=>$abrow['title'], "scale_id"=>1);
if ($style == "full")
{
$fieldmap[$fieldname]['title']=$arow['title'];
$fieldmap[$fieldname]['question']=$arow['question'];
$fieldmap[$fieldname]['subquestion']=$abrow['question'];
$fieldmap[$fieldname]['group_name']=$arow['group_name'];
$fieldmap[$fieldname]['scale']=$clang->gT('Scale 2');
$fieldmap[$fieldname]['mandatory']=$arow['mandatory'];
$fieldmap[$fieldname]['hasconditions']=$conditions;
$fieldmap[$fieldname]['usedinconditions']=$usedinconditions;
}
}
}
Expand Down Expand Up @@ -2754,7 +2726,8 @@ function templatereplace($line, $replacements=array())
global $percentcomplete, $move;
global $groupname, $groupdescription;
global $question;
global $questioncode, $answer, $navigator;
global $showXquestions, $showgroupinfo, $showqnumcode;
global $answer, $navigator;
global $help, $totalquestions, $surveyformat;
global $completed, $register_errormsg;
global $notanswered, $privacy, $surveyid;
Expand Down Expand Up @@ -2816,8 +2789,33 @@ function templatereplace($line, $replacements=array())
if (strpos($line, "{WELCOME}") !== false) $line=str_replace("{WELCOME}", $thissurvey['welcome'], $line);
if (strpos($line, "{LANGUAGECHANGER}") !== false) $line=str_replace("{LANGUAGECHANGER}", $languagechanger, $line);
if (strpos($line, "{PERCENTCOMPLETE}") !== false) $line=str_replace("{PERCENTCOMPLETE}", $percentcomplete, $line);
if (strpos($line, "{GROUPNAME}") !== false) $line=str_replace("{GROUPNAME}", $groupname, $line);
if (strpos($line, "{GROUPDESCRIPTION}") !== false) $line=str_replace("{GROUPDESCRIPTION}", $groupdescription, $line);

if(
$showgroupinfo == 'both' ||
$showgroupinfo == 'name' ||
($showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B') ||
($showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'N')
)
{
if (strpos($line, "{GROUPNAME}") !== false) $line=str_replace("{GROUPNAME}", $groupname, $line);
}
else
{
if (strpos($line, "{GROUPNAME}") !== false) $line=str_replace("{GROUPNAME}", '' , $line);
};
if(
$showgroupinfo == 'both' ||
$showgroupinfo == 'number' ||
($showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B') ||
($showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'D')
)
{
if (strpos($line, "{GROUPDESCRIPTION}") !== false) $line=str_replace("{GROUPDESCRIPTION}", $groupdescription, $line);
}
else
{
if (strpos($line, "{GROUPDESCRIPTION}") !== false) $line=str_replace("{GROUPDESCRIPTION}", '' , $line);
};

if (is_array($question))
{
Expand All @@ -2843,21 +2841,54 @@ function templatereplace($line, $replacements=array())
if (strpos($line, '{QUESTION_MAN_CLASS}') !== false) $line=str_replace('{QUESTION_MAN_CLASS}', $question['man_class'], $line);
if (strpos($line, "{QUESTION_INPUT_ERROR_CLASS}") !== false) $line=str_replace("{QUESTION_INPUT_ERROR_CLASS}", $question['input_error_class'], $line);

if (strpos($line, "{QUESTION_CODE}") !== false) $line=str_replace("{QUESTION_CODE}", $question['code'], $line);
if (strpos($line, "{ANSWER}") !== false) $line=str_replace("{ANSWER}", $answer, $line);
$totalquestionsAsked = $totalquestions - $totalBoilerplatequestions;
if ($totalquestionsAsked < 1)
if(
$showqnumcode == 'both' ||
$showqnumcode == 'number' ||
($showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'B') ||
($showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'N')
)
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There are no questions in this survey"), $line); //Singular
if (strpos($line, "{QUESTION_NUMBER}") !== false) $line=str_replace("{QUESTION_NUMBER}", $question['number'], $line);
}
if ($totalquestionsAsked == 1)
else
{
if (strpos($line, "{QUESTION_NUMBER}") !== false) $line=str_replace("{QUESTION_NUMBER}", '' , $line);
};
if(
$showqnumcode == 'both' ||
$showqnumcode == 'code' ||
($showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'B') ||
($showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'C')
)
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There is 1 question in this survey"), $line); //Singular
if (strpos($line, "{QUESTION_CODE}") !== false) $line=str_replace("{QUESTION_CODE}", $question['code'], $line);
}
else
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There are {NUMBEROFQUESTIONS} questions in this survey."), $line); //Note this line MUST be before {NUMBEROFQUESTIONS}
if (strpos($line, "{QUESTION_CODE}") !== false) $line=str_replace("{QUESTION_CODE}", '' , $line);
};

if (strpos($line, "{ANSWER}") !== false) $line=str_replace("{ANSWER}", $answer, $line);
$totalquestionsAsked = $totalquestions - $totalBoilerplatequestions;
if($showXquestions == 'show' || ($showXquestions == 'choose' && $thissurvey['showXquestions'] == 'Y'))
{
if ($totalquestionsAsked < 1)
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There are no questions in this survey"), $line); //Singular
}
if ($totalquestionsAsked == 1)
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There is 1 question in this survey"), $line); //Singular
}
else
{
if (strpos($line, "{THEREAREXQUESTIONS}") !== false) $line=str_replace("{THEREAREXQUESTIONS}", $clang->gT("There are {NUMBEROFQUESTIONS} questions in this survey."), $line); //Note this line MUST be before {NUMBEROFQUESTIONS}
};
}
else
{
if (strpos($line, '{THEREAREXQUESTIONS}') !== false) $line=str_replace('{THEREAREXQUESTIONS}' , '' , $line);
};
if (strpos($line, "{NUMBEROFQUESTIONS}") !== false) $line=str_replace("{NUMBEROFQUESTIONS}", $totalquestionsAsked, $line);

if (strpos($line, "{TOKEN}") !== false) {
Expand Down Expand Up @@ -6175,7 +6206,9 @@ function retrieve_Answer($code, $phpdateformat=null)
function tableExists($tablename)
{
global $connect;
$tablelist = $connect->MetaTables();
static $tablelist;

if (!isset($tablelist)) $tablelist = $connect->MetaTables();
if ($tablelist==false)
{
return false;
Expand Down

0 comments on commit 5d2922a

Please sign in to comment.