Browse Source

* Due to buggy MySQL query plan optimizer, the existing tests overview query use incorrect execution plan which leads to long execution time. The SQL query has been changed to produce efficient execution plan. Now the overview form works correctly.
* Fixed displaying of the test category column.
* Fixed History overview.
* History form: display a error when a test file not found.
* Use MySQL 5.5 connection.

git-svn-id: trunk@23564 -

yury 12 years ago
parent
commit
49f9288611
1 changed files with 44 additions and 21 deletions
  1. 44 21
      tests/utils/testsuite/utests.pp

+ 44 - 21
tests/utils/testsuite/utests.pp

@@ -21,7 +21,7 @@ uses
 {$else not USE_FPCGI}
 {$else not USE_FPCGI}
      cgiapp,
      cgiapp,
 {$endif not USE_FPCGI}
 {$endif not USE_FPCGI}
-     sysutils,mysql50conn,sqldb,whtml,dbwhtml,db,
+     sysutils,mysql55conn,sqldb,whtml,dbwhtml,db,
      tresults,
      tresults,
      Classes,ftFont,fpimage,fpimgcanv,fpWritePng,fpcanvas;
      Classes,ftFont,fpimage,fpimgcanv,fpWritePng,fpcanvas;
 
 
@@ -370,7 +370,7 @@ Function TTestSuite.ConnectToDB : Boolean;
 
 
 begin
 begin
   Result:=False;
   Result:=False;
-  FDB:=TMySQl50Connection.Create(Self);
+  FDB:=TMySQl55Connection.Create(Self);
   FDB.HostName:=DefHost;
   FDB.HostName:=DefHost;
   FDB.DatabaseName:=DefDatabase;
   FDB.DatabaseName:=DefDatabase;
   FDB.UserName:=DefDBUser;
   FDB.UserName:=DefDBUser;
@@ -793,8 +793,8 @@ 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,COUNT(TR_ID) as Count,'+
-               'TU_CATEGORY_FK,TU_SVNCOMPILERREVISION as SvnCompRev,'+
+               'TV_VERSION as Version,(select count(*) from TESTRESULTS where TR_TESTRUN_FK=TU_ID) as Count,'+
+               '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,'+
                '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN) AS OK,'+
                '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN) AS OK,'+
@@ -802,13 +802,12 @@ 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 TESTRESULTS,TESTRUN,TESTCPU,TESTOS,TESTVERSION,TESTCATEGORY '+
+              'FROM TESTRUN force index (primary),TESTCPU,TESTOS,TESTVERSION,TESTCATEGORY '+
               'WHERE '+
               'WHERE '+
                '(TC_ID=TU_CPU_FK) AND '+
                '(TC_ID=TU_CPU_FK) AND '+
                '(TO_ID=TU_OS_FK) AND '+
                '(TO_ID=TU_OS_FK) AND '+
                '(TV_ID=TU_VERSION_FK) AND '+
                '(TV_ID=TU_VERSION_FK) AND '+
-               '(TCAT_ID=TU_CATEGORY_FK) AND '+
-               '(TR_TESTRUN_FK=TU_ID) '+
+               '(TCAT_ID=TU_CATEGORY_FK) '+
                '%s '+
                '%s '+
               'GROUP BY TU_ID '+
               'GROUP BY TU_ID '+
               'ORDER BY TU_ID DESC LIMIT %d';
               'ORDER BY TU_ID DESC LIMIT %d';
@@ -845,7 +844,7 @@ begin
           'TU_SVNPACKAGESREVISION,"/",TU_SVNTESTSREVISION) as svnrev'
           'TU_SVNPACKAGESREVISION,"/",TU_SVNTESTSREVISION) as svnrev'
    else
    else
      SC:='';
      SC:='';
-   If GetCategoryName(FCategory)='All' then
+   If (FCategory='') or (GetCategoryName(FCategory)='All') then
      SC:=SC+', TCAT_NAME as Cat';
      SC:=SC+', TCAT_NAME as Cat';
 
 
    A:=SDetailsURL;
    A:=SDetailsURL;
@@ -1526,7 +1525,7 @@ Type
   PStatusLA = ^AStatusLA;
   PStatusLA = ^AStatusLA;
   PStatusDTA = ^AStatusDTA;
   PStatusDTA = ^AStatusDTA;
 Var
 Var
-  S,FL,cpu,version,os : String;
+  S,SS,FL,cpu,version,os : String;
   date : TDateTime;
   date : TDateTime;
   Qry : String;
   Qry : String;
   Base, Category : string;
   Base, Category : string;
@@ -1562,8 +1561,18 @@ begin
   ContentType:='text/html';
   ContentType:='text/html';
   EmitContentType;
   EmitContentType;
   if (FTestFileID='') and (FTestFileName<>'') then
   if (FTestFileID='') and (FTestFileName<>'') then
+  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;
   if FTestFileID<>'' then
   if FTestFileID<>'' then
     FTestFileName:=GetTestFileName(FTestFileID);
     FTestFileName:=GetTestFileName(FTestFileID);
   if FTestFileName<>'' then
   if FTestFileName<>'' then
@@ -1642,7 +1651,7 @@ begin
         end;
         end;
       HeaderEnd(2);
       HeaderEnd(2);
       ParaGraphStart;
       ParaGraphStart;
-      S:='SELECT TR_ID,TR_TESTRUN_FK AS Run,TR_TEST_FK,TR_OK AS OK'
+      SS:='SELECT TR_ID,TR_TESTRUN_FK AS Run,TR_TEST_FK,TR_OK AS OK'
         +', TR_SKIP As Skip,TR_RESULT  As Result'
         +', TR_SKIP As Skip,TR_RESULT  As Result'
       //S:='SELECT * '
       //S:='SELECT * '
         +',TC_NAME AS CPU, TV_VERSION AS Version, TO_NAME AS OS'
         +',TC_NAME AS CPU, TV_VERSION AS Version, TO_NAME AS OS'
@@ -1659,8 +1668,10 @@ begin
         +' LEFT JOIN TESTRESULTS ON  (TR_TESTRUN_FK=TU_ID)'
         +' LEFT JOIN TESTRESULTS 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)'
-        +' WHERE  (TR_TEST_FK='+FTestFileID+')';
+        +' LEFT JOIN TESTVERSION ON  (TU_VERSION_FK=TV_ID)';
+      S:='';
+      if FTestFileID<>'' then
+        S:=S+' AND (TR_TEST_FK='+FTestFileID+')';
       If FOnlyFailed then
       If FOnlyFailed then
         S:=S+' AND (TR_OK="-")';
         S:=S+' AND (TR_OK="-")';
       If FNoSkipped then
       If FNoSkipped then
@@ -1740,6 +1751,15 @@ begin
       if FDATE<>0 then
       if FDATE<>0 then
         S:=S+' AND (TU_DATE >= '''+FormatDateTime('YYYY-MM-DD',FDate)+''')';
         S:=S+' AND (TU_DATE >= '''+FormatDateTime('YYYY-MM-DD',FDate)+''')';
 
 
+      if S <> '' then
+      begin
+        if LowerCase(Copy(S, 1, 4)) = ' and' then
+          Delete(S, 1, 4);
+        S:=SS + ' WHERE '+ S;
+      end
+      else
+        S:=SS;
+
       S:=S+' ORDER BY TU_ID DESC';
       S:=S+' ORDER BY TU_ID DESC';
       if FDATE=0 then
       if FDATE=0 then
         S:=S+' LIMIT '+IntToStr(FLimit);
         S:=S+' LIMIT '+IntToStr(FLimit);
@@ -2140,16 +2160,19 @@ begin
               Write('After log.');
               Write('After log.');
             Source:='';
             Source:='';
             Try
             Try
-            Source:=getsingleton('select T_SOURCE from TESTS where T_ID='+ftestfileid);
-            if Source<>'' then
+              if ftestfileid <> '' then
               begin
               begin
-                HeaderStart(2);
-                Write('Source:');
-                HeaderEnd(2);
-                PreformatStart;
-                system.Write(Source);
-                system.flush(output);
-                PreformatEnd;
+                Source:=getsingleton('select T_SOURCE from TESTS where T_ID='+ftestfileid);
+                if Source<>'' then
+                  begin
+                    HeaderStart(2);
+                    Write('Source:');
+                    HeaderEnd(2);
+                    PreformatStart;
+                    system.Write(Source);
+                    system.flush(output);
+                    PreformatEnd;
+                  end;
               end;
               end;
             Finally
             Finally
             Base:='trunk';
             Base:='trunk';