Browse Source

* More correct fix for overview query. Use LEFT JOIN to explicitly specify order of tables to help MySQL to generate correct exec plan.
* Speed-up history query by using TESTRESULTS as main table and TR_ID field for ordering.
* Test file or run id must be provided for history query. Print an error if not provided.
* Limit query results to 1000 records to prevent unnecessary server load.

git-svn-id: trunk@23579 -

yury 12 years ago
parent
commit
aeb3c002b0
1 changed files with 35 additions and 25 deletions
  1. 35 25
      tests/utils/testsuite/utests.pp

+ 35 - 25
tests/utils/testsuite/utests.pp

@@ -128,6 +128,7 @@ Const
   OldTestResultsTableName = 'OLDTESTRESULTS';
   OldTestResultsTableName = 'OLDTESTRESULTS';
   NewTestResultsTableName = 'TESTRESULTS';
   NewTestResultsTableName = 'TESTRESULTS';
   LastOldTestRun = 91178;
   LastOldTestRun = 91178;
+  MaxLimit = 1000;
 
 
   Function TestResultsTableName(const RunId : String) : string;
   Function TestResultsTableName(const RunId : String) : string;
   var
   var
@@ -303,6 +304,8 @@ begin
   if Length(S) = 0 then
   if Length(S) = 0 then
     S:=RequestVariables['TESTLIMIT'];
     S:=RequestVariables['TESTLIMIT'];
   FLimit:=StrToIntDef(S,50);
   FLimit:=StrToIntDef(S,50);
+  if FLimit > MaxLimit then
+    FLimit:=MaxLimit;
   FVersion:=RequestVariables['version'];
   FVersion:=RequestVariables['version'];
   if Length(FVersion) = 0 then
   if Length(FVersion) = 0 then
     FVersion:=RequestVariables['TESTVERSION'];
     FVersion:=RequestVariables['TESTVERSION'];
@@ -793,7 +796,7 @@ end;
 Procedure TTestSuite.ShowRunOverview;
 Procedure TTestSuite.ShowRunOverview;
 Const
 Const
   SOverview = 'SELECT TU_ID as ID,TU_DATE as Date,TC_NAME as CPU,TO_NAME as OS,'+
   SOverview = 'SELECT TU_ID as ID,TU_DATE as Date,TC_NAME as CPU,TO_NAME as OS,'+
-               'TV_VERSION as Version,(select count(*) from TESTRESULTS where TR_TESTRUN_FK=TU_ID) as Count,'+
+               'TV_VERSION as Version,count(*) as Count,'+
                'TU_SVNCOMPILERREVISION as SvnCompRev,'+
                'TU_SVNCOMPILERREVISION as SvnCompRev,'+
                'TU_SVNRTLREVISION as SvnRTLRev,'+
                'TU_SVNRTLREVISION as SvnRTLRev,'+
                'TU_SVNPACKAGESREVISION as SvnPackRev,TU_SVNTESTSREVISION as SvnTestsRev,'+
                'TU_SVNPACKAGESREVISION as SvnPackRev,TU_SVNTESTSREVISION as SvnTestsRev,'+
@@ -802,13 +805,10 @@ Const
                '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN+'+
                '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN+'+
                 'TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as Total,'+
                 'TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as Total,'+
                'TU_SUBMITTER as Submitter, TU_MACHINE as Machine, TU_COMMENT as Comment %s '+
                'TU_SUBMITTER as Submitter, TU_MACHINE as Machine, TU_COMMENT as Comment %s '+
-              'FROM TESTRUN force index (primary),TESTCPU,TESTOS,TESTVERSION,TESTCATEGORY '+
-              'WHERE '+
-               '(TC_ID=TU_CPU_FK) AND '+
-               '(TO_ID=TU_OS_FK) AND '+
-               '(TV_ID=TU_VERSION_FK) AND '+
-               '(TCAT_ID=TU_CATEGORY_FK) '+
-               '%s '+
+              'FROM TESTRUN left join TESTCPU on (TC_ID=TU_CPU_FK) left join TESTOS on (TO_ID=TU_OS_FK) '+
+              'left join TESTVERSION on (TV_ID=TU_VERSION_FK) left join TESTCATEGORY on (TCAT_ID=TU_CATEGORY_FK) '+
+              'left join TESTRESULTS on (TR_TESTRUN_FK=TU_ID) '+
+              '%s'+
               'GROUP BY TU_ID '+
               'GROUP BY TU_ID '+
               'ORDER BY TU_ID DESC LIMIT %d';
               'ORDER BY TU_ID DESC LIMIT %d';
 
 
@@ -852,6 +852,12 @@ begin
      A:=A+'&failedonly=1';
      A:=A+'&failedonly=1';
    If FNoSkipped then
    If FNoSkipped then
      A:=A+'&noskipped=1';
      A:=A+'&noskipped=1';
+     
+  if S <> '' then
+  begin
+    Delete(S, 1, 4);
+    S:='WHERE '+ S + ' ';
+  end;
   Qry:=Format(SOverview,[SC,S,FLimit]);
   Qry:=Format(SOverview,[SC,S,FLimit]);
   If FDebug then
   If FDebug then
     Writeln('Query : '+Qry);
     Writeln('Query : '+Qry);
@@ -1554,6 +1560,7 @@ Var
   Res : Boolean;
   Res : Boolean;
   ver : known_versions;
   ver : known_versions;
 begin
 begin
+  Res:=False;
   os_count:=nil;
   os_count:=nil;
   cpu_count:=nil;
   cpu_count:=nil;
   version_count:=nil;
   version_count:=nil;
@@ -1564,14 +1571,6 @@ begin
   begin
   begin
     FTestFileID:=GetSingleton('SELECT T_ID FROM TESTS WHERE T_NAME LIKE ''%'+
     FTestFileID:=GetSingleton('SELECT T_ID FROM TESTS WHERE T_NAME LIKE ''%'+
      FTestFileName+'%''');
      FTestFileName+'%''');
-    if FTestFileID = '' then
-      with FHTMLWriter do begin
-        EmitHistoryForm;
-        HeaderStart(2);
-        Write(Format('No test files matching "%s" found.', [FTestFileName]));
-        HeaderEnd(2);
-        exit;
-      end;
   end;
   end;
   if FTestFileID<>'' then
   if FTestFileID<>'' then
     FTestFileName:=GetTestFileName(FTestFileID);
     FTestFileName:=GetTestFileName(FTestFileID);
@@ -1605,6 +1604,16 @@ begin
         //EmitCheckBox('noskipped','1',FNoSkipped);
         //EmitCheckBox('noskipped','1',FNoSkipped);
         Res:=true;
         Res:=true;
         EmitHistoryForm;
         EmitHistoryForm;
+        if FTestFileID = '' then
+          with FHTMLWriter do begin
+            HeaderStart(2);
+            if Trim(FTestFileName) <> '' then
+              Write(Format('Error: No test files matching "%s" found.', [FTestFileName]))
+            else
+              Write('Error: Please specify a test file.');
+            HeaderEnd(2);
+            Res:=False;
+          end;
       end;
       end;
     If Res then
     If Res then
       begin
       begin
@@ -1664,14 +1673,16 @@ begin
         +',TU_SVNCOMPILERREVISION AS Compiler_rev'
         +',TU_SVNCOMPILERREVISION AS Compiler_rev'
         +',TU_SVNPACKAGESREVISION AS Packages_rev'
         +',TU_SVNPACKAGESREVISION AS Packages_rev'
         +',TO_ID,TC_ID,TV_ID'
         +',TO_ID,TC_ID,TV_ID'
-        +' FROM TESTRUN '
-        +' LEFT JOIN TESTRESULTS ON  (TR_TESTRUN_FK=TU_ID)'
+        +' FROM TESTRESULTS '
+        +' LEFT JOIN TESTRUN ON  (TR_TESTRUN_FK=TU_ID)'
         +' LEFT JOIN TESTOS ON  (TU_OS_FK=TO_ID)'
         +' LEFT JOIN TESTOS ON  (TU_OS_FK=TO_ID)'
         +' LEFT JOIN TESTCPU ON  (TU_CPU_FK=TC_ID)'
         +' LEFT JOIN TESTCPU ON  (TU_CPU_FK=TC_ID)'
         +' LEFT JOIN TESTVERSION ON  (TU_VERSION_FK=TV_ID)';
         +' LEFT JOIN TESTVERSION ON  (TU_VERSION_FK=TV_ID)';
       S:='';
       S:='';
       if FTestFileID<>'' then
       if FTestFileID<>'' then
         S:=S+' AND (TR_TEST_FK='+FTestFileID+')';
         S:=S+' AND (TR_TEST_FK='+FTestFileID+')';
+      if FRunID<>'' then
+        S:=S+' AND (TR_TESTRUN_FK='+FRunID+')';
       If FOnlyFailed then
       If FOnlyFailed then
         S:=S+' AND (TR_OK="-")';
         S:=S+' AND (TR_OK="-")';
       If FNoSkipped then
       If FNoSkipped then
@@ -1753,16 +1764,17 @@ begin
 
 
       if S <> '' then
       if S <> '' then
       begin
       begin
-        if LowerCase(Copy(S, 1, 4)) = ' and' then
-          Delete(S, 1, 4);
+        Delete(S, 1, 4);
         S:=SS + ' WHERE '+ S;
         S:=SS + ' WHERE '+ S;
       end
       end
       else
       else
         S:=SS;
         S:=SS;
 
 
-      S:=S+' ORDER BY TU_ID DESC';
+      S:=S+' ORDER BY TR_ID DESC';
       if FDATE=0 then
       if FDATE=0 then
-        S:=S+' LIMIT '+IntToStr(FLimit);
+        S:=S+' LIMIT '+IntToStr(FLimit)
+      else
+        S:=S+' LIMIT '+IntToStr(MaxLimit);
       Qry:=S;
       Qry:=S;
       If FDebug then
       If FDebug then
       begin
       begin
@@ -2217,9 +2229,7 @@ begin
             end;
             end;
              if FDebug then
              if FDebug then
               Write('After Source.');
               Write('After Source.');
-    end
-    else
-      Write(Format('No data for test file with ID: %s',[FTestFileID]));
+    end;
 
 
     end;
     end;
   if assigned(os_count) then
   if assigned(os_count) then