mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-02 12:10:22 +02:00
Add dbconfig program to handle TESTCONFIG table
git-svn-id: trunk@26209 -
This commit is contained in:
parent
bd91a8da7e
commit
a5ea0d2b4c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -12343,6 +12343,7 @@ tests/utils/avx/options.pas svneol=native#text/plain
|
||||
tests/utils/avx/readme.txt svneol=native#text/plain
|
||||
tests/utils/bench.pp svneol=native#text/plain
|
||||
tests/utils/concat.pp svneol=native#text/plain
|
||||
tests/utils/dbconfig.pp svneol=native#text/plain
|
||||
tests/utils/dbdigest.pp svneol=native#text/plain
|
||||
tests/utils/dbtests.pp svneol=native#text/plain
|
||||
tests/utils/digest.pp svneol=native#text/plain
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/10/05]
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013-11-16 rev 26097]
|
||||
#
|
||||
default: all
|
||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android i8086-msdos
|
||||
@ -539,223 +539,223 @@ ifeq ($(FULL_TARGET),i8086-msdos)
|
||||
override TARGET_PROGRAMS+=dotest fptime fail testfail digest concat $(DBDIGEST)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-win32)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-os2)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-beos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-haiku)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-solaris)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-qnx)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netware)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-darwin)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-emx)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-watcom)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wince)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-symbian)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-nativent)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-iphonesim)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-android)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-atari)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-wii)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-aix)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-netbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-solaris)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-openbsd)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-palmos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-darwin)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-wince)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-gba)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-nds)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-symbian)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-android)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-aix)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),avr-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),armeb-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),mips-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),mipsel-linux)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),jvm-java)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),jvm-android)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i8086-msdos)
|
||||
override CLEAN_PROGRAMS+=dbdigest
|
||||
override CLEAN_PROGRAMS+=dbdigest dbconfig
|
||||
endif
|
||||
override INSTALL_FPCPACKAGE=y
|
||||
ifdef REQUIRE_UNITSDIR
|
||||
@ -1331,6 +1331,7 @@ ASNAME=$(BINUTILSPREFIX)as
|
||||
LDNAME=$(BINUTILSPREFIX)ld
|
||||
ARNAME=$(BINUTILSPREFIX)ar
|
||||
RCNAME=$(BINUTILSPREFIX)rc
|
||||
NASMNAME=$(BINUTILSPREFIX)nasm
|
||||
ifndef ASPROG
|
||||
ifdef CROSSBINDIR
|
||||
ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
|
||||
@ -1359,10 +1360,18 @@ else
|
||||
ARPROG=$(ARNAME)
|
||||
endif
|
||||
endif
|
||||
ifndef NASMPROG
|
||||
ifdef CROSSBINDIR
|
||||
NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
|
||||
else
|
||||
NASMPROG=$(NASMNAME)
|
||||
endif
|
||||
endif
|
||||
AS=$(ASPROG)
|
||||
LD=$(LDPROG)
|
||||
RC=$(RCPROG)
|
||||
AR=$(ARPROG)
|
||||
NASM=$(NASMPROG)
|
||||
ifdef inUnix
|
||||
PPAS=./ppas$(SRCBATCHEXT)
|
||||
else
|
||||
@ -1916,4 +1925,4 @@ endif
|
||||
.NOTPARALLEL:
|
||||
utils: all
|
||||
utilsdb:
|
||||
$(MAKE) utils DBDIGEST=dbdigest
|
||||
$(MAKE) utils DBDIGEST="dbdigest dbconfig"
|
||||
|
@ -19,7 +19,7 @@ programs_win64=prepup
|
||||
programs_go32v2=prepup
|
||||
|
||||
[clean]
|
||||
programs=dbdigest
|
||||
programs=dbdigest dbconfig
|
||||
|
||||
[rules]
|
||||
.NOTPARALLEL:
|
||||
@ -27,4 +27,4 @@ programs=dbdigest
|
||||
utils: all
|
||||
|
||||
utilsdb:
|
||||
$(MAKE) utils DBDIGEST=dbdigest
|
||||
$(MAKE) utils DBDIGEST="dbdigest dbconfig"
|
||||
|
905
tests/utils/dbconfig.pp
Normal file
905
tests/utils/dbconfig.pp
Normal file
@ -0,0 +1,905 @@
|
||||
{
|
||||
This file is part of the Free Pascal test suite.
|
||||
Copyright (c) 2002 by the Free Pascal development team.
|
||||
|
||||
This program generates a digest
|
||||
of the last tests run.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$ifndef win32}
|
||||
{$linklib pthread}
|
||||
{$endif}
|
||||
|
||||
program digest;
|
||||
|
||||
uses
|
||||
sysutils,teststr,testu,tresults,
|
||||
mysql55dyn,dbtests;
|
||||
|
||||
|
||||
Var
|
||||
StatusCount : Array[TTestStatus] of Integer;
|
||||
UnknownLines : integer;
|
||||
|
||||
|
||||
Procedure ExtractTestFileName(Var Line : string);
|
||||
|
||||
Var I : integer;
|
||||
|
||||
begin
|
||||
I:=Pos(' ',Line);
|
||||
If (I<>0) then
|
||||
Line:=Copy(Line,1,I-1);
|
||||
end;
|
||||
|
||||
Function Analyse(Var Line : string; Var Status : TTestStatus) : Boolean;
|
||||
|
||||
Var
|
||||
TS : TTestStatus;
|
||||
|
||||
begin
|
||||
Result:=False;
|
||||
For TS:=FirstStatus to LastStatus do
|
||||
begin
|
||||
Result:=Pos(StatusText[TS],Line)=1;
|
||||
If Result then
|
||||
begin
|
||||
Status:=TS;
|
||||
Delete(Line,1,Length(StatusText[TS]));
|
||||
ExtractTestFileName(Line);
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Type
|
||||
|
||||
TConfigOpt = (
|
||||
coDatabaseName,
|
||||
coHost,
|
||||
coUserName,
|
||||
coPassword,
|
||||
coPort,
|
||||
coLogFile,
|
||||
coLongLogFile,
|
||||
coOS,
|
||||
coCPU,
|
||||
coCategory,
|
||||
coVersion,
|
||||
coDate,
|
||||
coSubmitter,
|
||||
coMachine,
|
||||
coComment,
|
||||
coTestSrcDir,
|
||||
coRelSrcDir,
|
||||
coVerbose,
|
||||
coOffset
|
||||
);
|
||||
|
||||
{ Additional options only for dbdigest.cfg file }
|
||||
|
||||
TConfigAddOpt = (
|
||||
coCompilerDate,
|
||||
coCompilerFullVersion,
|
||||
coSvnCompilerRevision,
|
||||
coSvnTestsRevision,
|
||||
coSvnRTLRevision,
|
||||
coSvnPackagesRevision
|
||||
);
|
||||
|
||||
Const
|
||||
|
||||
ConfigStrings : Array [TConfigOpt] of string = (
|
||||
'databasename',
|
||||
'host',
|
||||
'username',
|
||||
'password',
|
||||
'port',
|
||||
'logfile',
|
||||
'longlogfile',
|
||||
'os',
|
||||
'cpu',
|
||||
'category',
|
||||
'version',
|
||||
'date',
|
||||
'submitter',
|
||||
'machine',
|
||||
'comment',
|
||||
'testsrcdir',
|
||||
'relsrcdir',
|
||||
'verbose',
|
||||
'offset'
|
||||
);
|
||||
|
||||
ConfigOpts : Array[TConfigOpt] of char =(
|
||||
'd', { coDatabaseName }
|
||||
'h', { coHost }
|
||||
'u', { coUserName }
|
||||
'p', { coPassword }
|
||||
'P', { coPort }
|
||||
'l', { coLogFile }
|
||||
'L', { coLongLogFile }
|
||||
'o', { coOS }
|
||||
'c', { coCPU }
|
||||
'a', { coCategory }
|
||||
'v', { coVersion }
|
||||
't', { coDate }
|
||||
's', { coSubmitter }
|
||||
'm', { coMachine }
|
||||
'C', { coComment }
|
||||
'S', { coTestSrcDir }
|
||||
'r', { coRelSrcDir }
|
||||
'V', { coVerbose }
|
||||
'O' { coOffset }
|
||||
);
|
||||
|
||||
ConfigAddStrings : Array [TConfigAddOpt] of string = (
|
||||
'compilerdate',
|
||||
'compilerfullversion',
|
||||
'svncompilerrevision',
|
||||
'svntestsrevision',
|
||||
'svnrtlrevision',
|
||||
'svnpackagesrevision'
|
||||
);
|
||||
|
||||
ConfigAddCols : Array [TConfigAddOpt] of string = (
|
||||
'TU_COMPILERDATE',
|
||||
'TU_COMPILERFULLVERSION',
|
||||
'TU_SVNCOMPILERREVISION',
|
||||
'TU_SVNTESTSREVISION',
|
||||
'TU_SVNRTLREVISION',
|
||||
'TU_SVNPACKAGESREVISION'
|
||||
);
|
||||
|
||||
|
||||
Var
|
||||
TestOS,
|
||||
TestCPU,
|
||||
TestVersion,
|
||||
TestCategory,
|
||||
DatabaseName,
|
||||
HostName,
|
||||
UserName,
|
||||
Password,
|
||||
Port,
|
||||
LongLogFileName,
|
||||
LogFileName,
|
||||
Submitter,
|
||||
Machine,
|
||||
Comment,
|
||||
OffsetString : String;
|
||||
TestDate : TDateTime;
|
||||
TestCompilerDate,
|
||||
TestCompilerFullVersion,
|
||||
TestSvnCompilerRevision,
|
||||
TestSvnTestsRevision,
|
||||
TestSvnRTLRevision,
|
||||
TestSvnPackagesRevision : String;
|
||||
|
||||
Procedure SetAddOpt (O : TConfigAddOpt; Value : string);
|
||||
begin
|
||||
Case O of
|
||||
coCompilerDate:
|
||||
TestCompilerDate:=Value;
|
||||
coCompilerFullVersion:
|
||||
TestCompilerFullVersion:=Value;
|
||||
coSvnCompilerRevision:
|
||||
TestSvnCompilerRevision:=Value;
|
||||
coSvnTestsRevision:
|
||||
TestSvnTestsRevision:=Value;
|
||||
coSvnRTLRevision:
|
||||
TestSvnRTLRevision:=Value;
|
||||
coSvnPackagesRevision:
|
||||
TestSvnPackagesRevision:=Value;
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure SetOpt (O : TConfigOpt; Value : string);
|
||||
var
|
||||
year,month,day,min,hour : word;
|
||||
begin
|
||||
Case O of
|
||||
coDatabaseName : DatabaseName:=Value;
|
||||
coHost : HostName:=Value;
|
||||
coUserName : UserName:=Value;
|
||||
coPassword : Password:=Value;
|
||||
coPort : Port:=Value;
|
||||
coLogFile : LogFileName:=Value;
|
||||
coLongLogFile : LongLogFileName:=Value;
|
||||
coOS : TestOS:=Value;
|
||||
coCPU : TestCPU:=Value;
|
||||
coCategory : TestCategory:=Value;
|
||||
coVersion : TestVersion:=Value;
|
||||
coDate :
|
||||
begin
|
||||
{ Formated like YYYYMMDDhhmm }
|
||||
if Length(value)=12 then
|
||||
begin
|
||||
year:=StrToInt(Copy(value,1,4));
|
||||
month:=StrToInt(Copy(value,5,2));
|
||||
day:=StrToInt(Copy(Value,7,2));
|
||||
hour:=StrToInt(Copy(Value,9,2));
|
||||
min:=StrToInt(Copy(Value,11,2));
|
||||
TestDate:=EncodeDate(year,month,day)+EncodeTime(hour,min,0,0);
|
||||
end
|
||||
else
|
||||
Verbose(V_Error,'Error in date format, use YYYYMMDDhhmm');
|
||||
end;
|
||||
coSubmitter : Submitter:=Value;
|
||||
coMachine : Machine:=Value;
|
||||
coComment : Comment:=Value;
|
||||
coOffset : OffsetString:=Value;
|
||||
coVerbose : DoVerbose:=true;
|
||||
coTestSrcDir :
|
||||
begin
|
||||
TestSrcDir:=Value;
|
||||
if (TestSrcDir<>'') and (TestSrcDir[length(TestSrcDir)]<>'/') then
|
||||
TestSrcDir:=TestSrcDir+'/';
|
||||
end;
|
||||
coRelSrcDir :
|
||||
begin
|
||||
RelSrcDir:=Value;
|
||||
if (RelSrcDir<>'') and (RelSrcDir[length(RelSrcDir)]<>'/') then
|
||||
RelSrcDir:=RelSrcDir+'/';
|
||||
if (RelSrcDir<>'') and (RelSrcDir[1]='/') then
|
||||
RelSrcDir:=copy(RelSrcDir,2,length(RelSrcDir)-1);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function ProcessOption(S: String) : Boolean;
|
||||
|
||||
Var
|
||||
N : String;
|
||||
I : Integer;
|
||||
co : TConfigOpt;
|
||||
coa : TConfigAddOpt;
|
||||
|
||||
begin
|
||||
Verbose(V_DEBUG,'Processing option: '+S);
|
||||
I:=Pos('=',S);
|
||||
Result:=(I<>0);
|
||||
If Result then
|
||||
begin
|
||||
N:=Copy(S,1,I-1);
|
||||
Delete(S,1,I);
|
||||
For co:=low(TConfigOpt) to high(TConfigOpt) do
|
||||
begin
|
||||
Result:=CompareText(ConfigStrings[co],N)=0;
|
||||
If Result then
|
||||
begin
|
||||
SetOpt(co,S);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
For coa:=low(TConfigAddOpt) to high(TConfigAddOpt) do
|
||||
begin
|
||||
Result:=CompareText(ConfigAddStrings[coa],N)=0;
|
||||
If Result then
|
||||
begin
|
||||
SetAddOpt(coa,S);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Verbose(V_ERROR,'Unknown option : '+n+S);
|
||||
end;
|
||||
|
||||
Procedure ProcessConfigfile(FN : String);
|
||||
|
||||
Var
|
||||
F : Text;
|
||||
S : String;
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
// Set the default value for old digests without RelSrcDir to the rtl/compiler
|
||||
// testsuite
|
||||
RelSrcDir:='tests/';
|
||||
If Not FileExists(FN) Then
|
||||
Exit;
|
||||
Verbose(V_DEBUG,'Parsing config file: '+FN);
|
||||
Assign(F,FN);
|
||||
{$i-}
|
||||
Reset(F);
|
||||
If IOResult<>0 then
|
||||
Exit;
|
||||
{$I+}
|
||||
While not(EOF(F)) do
|
||||
begin
|
||||
ReadLn(F,S);
|
||||
S:=trim(S);
|
||||
I:=Pos('#',S);
|
||||
If I<>0 then
|
||||
S:=Copy(S,1,I-1);
|
||||
If (S<>'') then
|
||||
ProcessOption(S);
|
||||
end;
|
||||
Close(F);
|
||||
end;
|
||||
|
||||
Procedure ProcessCommandLine;
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
O : String;
|
||||
c,co : TConfigOpt;
|
||||
ShortOptFound, Found : Boolean;
|
||||
|
||||
begin
|
||||
I:=1;
|
||||
While I<=ParamCount do
|
||||
begin
|
||||
O:=Paramstr(I);
|
||||
ShortOptFound:=(Length(O)=2) and (O[1]='-');
|
||||
If ShortOptFound then
|
||||
For co:=low(TConfigOpt) to high(TConfigOpt) do
|
||||
begin
|
||||
Found:=(O[2]=ConfigOpts[co]);
|
||||
If Found then
|
||||
begin
|
||||
c:=co;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
If not ShortOptFound then
|
||||
begin
|
||||
Found:=false;
|
||||
{ accept long options }
|
||||
if (copy(O,1,2)='--') then
|
||||
begin
|
||||
{ remove -- }
|
||||
O:=copy(O,3,length(O));
|
||||
For co:=low(TConfigOpt) to high(TConfigOpt) do
|
||||
begin
|
||||
Found:=(O=ConfigStrings[co]);
|
||||
If Found then
|
||||
begin
|
||||
c:=co;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
end;
|
||||
if not Found then
|
||||
Verbose(V_ERROR,'Illegal command-line option : '+O)
|
||||
else
|
||||
begin
|
||||
Found:=(I<ParamCount);
|
||||
If Not found then
|
||||
Verbose(V_ERROR,'Option requires argument : '+O)
|
||||
else
|
||||
begin
|
||||
inc(I);
|
||||
O:=Paramstr(I);
|
||||
SetOpt(c,o);
|
||||
end;
|
||||
end;
|
||||
Inc(I);
|
||||
end;
|
||||
end;
|
||||
|
||||
Var
|
||||
TestCPUID : Integer;
|
||||
TestOSID : Integer;
|
||||
TestVersionID : Integer;
|
||||
TestCategoryID : Integer;
|
||||
TestRunID : Integer;
|
||||
TestConfigID : Integer;
|
||||
TestRunHistoryID : Integer;
|
||||
|
||||
Procedure GetIDs;
|
||||
|
||||
begin
|
||||
TestCPUID := GetCPUId(TestCPU);
|
||||
If TestCPUID=-1 then
|
||||
Verbose(V_Error,'NO ID for CPU "'+TestCPU+'" found.');
|
||||
TestOSID := GetOSID(TestOS);
|
||||
If TestOSID=-1 then
|
||||
Verbose(V_Error,'NO ID for OS "'+TestOS+'" found.');
|
||||
TestCategoryID := GetCategoryID(TestCategory);
|
||||
If TestCategoryID=-1 then
|
||||
begin
|
||||
// Verbose(V_Error,'NO ID for Category "'+TestCategory+'" found.');
|
||||
TestCategoryID:=1;
|
||||
end;
|
||||
TestVersionID := GetVersionID(TestVersion);
|
||||
If TestVersionID=-1 then
|
||||
Verbose(V_Error,'NO ID for version "'+TestVersion+'" found.');
|
||||
If (Round(TestDate)=0) then
|
||||
Testdate:=Now;
|
||||
TestRunID:=GetRunID(TestOSID,TestCPUID,TestVersionID,TestDate);
|
||||
If (TestRunID=-1) then
|
||||
begin
|
||||
TestRunID:=AddRun(TestOSID,TestCPUID,TestVersionID,TestCategoryID,TestDate);
|
||||
If TestRUnID=-1 then
|
||||
Verbose(V_Error,'Could not insert new testrun record!');
|
||||
end
|
||||
else
|
||||
CleanTestRun(TestRunID);
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
LongLogFile : Text;
|
||||
const
|
||||
UseLongLog : boolean = false;
|
||||
LongLogOpenCount : longint = 0;
|
||||
FirstLongLogLine : boolean = true;
|
||||
|
||||
Function GetContentsFromLongLog(Line : String) : String;
|
||||
var
|
||||
S : String;
|
||||
IsFirst, IsFound : boolean;
|
||||
begin
|
||||
Result:='';
|
||||
IsFirst:=true;
|
||||
IsFound:=false;
|
||||
While Not(EOF(LongLogFile)) do
|
||||
begin
|
||||
ReadLn(LongLogFile,S);
|
||||
if FirstLongLogLine then
|
||||
begin
|
||||
{ At start of file there is a separation line }
|
||||
if (pos('>>>>>>>>>>>',S)=1) then
|
||||
Readln(LongLogFile,S);
|
||||
FirstLongLogLine:=false;
|
||||
end;
|
||||
if pos(Line,S)=1 then
|
||||
begin
|
||||
IsFound:=true;
|
||||
while not eof(LongLogFile) do
|
||||
begin
|
||||
ReadLn(LongLogFile,S);
|
||||
{ End of file marker }
|
||||
if eof(LongLogFile) or (pos('>>>>>>>>>>>',S)=1) then
|
||||
exit;
|
||||
Result:=Result+S+LineEnding;
|
||||
end;
|
||||
end
|
||||
else if IsFirst then
|
||||
begin
|
||||
Verbose(V_Warning,'Line "'+Line+'" not found as next "'+S+'"');
|
||||
IsFirst:=false;
|
||||
end;
|
||||
end;
|
||||
if not IsFound then
|
||||
begin
|
||||
Verbose(V_Warning,'Line "'+Line+'" not found');
|
||||
{ Restart to get a chance to find others }
|
||||
if eof(LongLogFile) then
|
||||
begin
|
||||
Close(LongLogFile);
|
||||
Reset(LongLogFile);
|
||||
inc(LongLogOpenCount);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function GetLog(Line, FN : String) : String;
|
||||
|
||||
begin
|
||||
if UseLongLog then
|
||||
begin
|
||||
Result:=GetContentsFromLongLog(Line);
|
||||
exit;
|
||||
end;
|
||||
FN:=ChangeFileExt(FN,'.log');
|
||||
If FileExists(FN) then
|
||||
Result:=GetFileContents(FN)
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
|
||||
Function GetExecuteLog(Line, FN : String) : String;
|
||||
|
||||
begin
|
||||
if UseLongLog then
|
||||
begin
|
||||
Result:=GetContentsFromLongLog(Line);
|
||||
exit;
|
||||
end;
|
||||
FN:=ChangeFileExt(FN,'.elg');
|
||||
If FileExists(FN) then
|
||||
Result:=GetFileContents(FN)
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
|
||||
Procedure Processfile (FN: String);
|
||||
|
||||
var
|
||||
logfile : text;
|
||||
fullline,line,prevLine : string;
|
||||
TS,PrevTS : TTestStatus;
|
||||
ID,PrevID : integer;
|
||||
Testlog : string;
|
||||
is_new : boolean;
|
||||
begin
|
||||
Assign(logfile,FN);
|
||||
PrevId:=-1;
|
||||
PrevLine:='';
|
||||
is_new:=false;
|
||||
PrevTS:=low(TTestStatus);
|
||||
{$i-}
|
||||
reset(logfile);
|
||||
if ioresult<>0 then
|
||||
Verbose(V_Error,'Unable to open log file'+FN);
|
||||
{$i+}
|
||||
while not eof(logfile) do
|
||||
begin
|
||||
readln(logfile,line);
|
||||
fullline:=line;
|
||||
If analyse(line,TS) then
|
||||
begin
|
||||
Verbose(V_NORMAL,'Analysing result for test '+Line);
|
||||
If Not ExpectRun[TS] then
|
||||
begin
|
||||
ID:=RequireTestID(Line);
|
||||
if (PrevID<>-1) and (PrevID<>ID) then
|
||||
begin
|
||||
{ This can only happen if a Successfully compiled message
|
||||
is not followed by any other line about the same test }
|
||||
TestLog:='';
|
||||
AddTestResult(PrevID,TestRunId,ord(PrevTS),
|
||||
TestOK[PrevTS],TestSkipped[PrevTS],TestLog,is_new);
|
||||
Verbose(V_Warning,'Orphaned test: "'+prevline+'"');
|
||||
end;
|
||||
PrevID:=-1;
|
||||
If (ID<>-1) then
|
||||
begin
|
||||
If Not (TestOK[TS] or TestSkipped[TS]) then
|
||||
begin
|
||||
TestLog:=GetExecuteLog(Fullline,Line);
|
||||
if pos(failed_to_compile,TestLog)=1 then
|
||||
TestLog:=GetLog(Fullline,Line);
|
||||
end
|
||||
else
|
||||
TestLog:='';
|
||||
{ AddTestResult can fail for test that contain %recompile
|
||||
as the same }
|
||||
if AddTestResult(ID,TestRunID,Ord(TS),TestOK[TS],
|
||||
TestSkipped[TS],TestLog,is_new) <> -1 then
|
||||
begin
|
||||
if is_new then
|
||||
Inc(StatusCount[TS])
|
||||
else
|
||||
Verbose(V_Debug,'Test: "'+line+'" was updated');
|
||||
end
|
||||
else
|
||||
begin
|
||||
Verbose(V_Warning,'Test: "'+line+'" already registered');
|
||||
end;
|
||||
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Inc(StatusCount[TS]);
|
||||
PrevTS:=TS;
|
||||
PrevID:=RequireTestID(line);
|
||||
PrevLine:=line;
|
||||
end;
|
||||
|
||||
end
|
||||
else
|
||||
begin
|
||||
Inc(UnknownLines);
|
||||
Verbose(V_Warning,'Unknown line: "'+line+'"');
|
||||
end;
|
||||
end;
|
||||
close(logfile);
|
||||
end;
|
||||
|
||||
procedure UpdateTestRun;
|
||||
|
||||
var
|
||||
i : TTestStatus;
|
||||
qry : string;
|
||||
res : TQueryResult;
|
||||
|
||||
begin
|
||||
qry:='UPDATE TESTRUN SET ';
|
||||
for i:=low(TTestStatus) to high(TTestStatus) do
|
||||
qry:=qry+format('%s=%d, ',[SQLField[i],StatusCount[i]]);
|
||||
if TestCompilerDate<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coCompilerDate],EscapeSQL(TestCompilerDate)]);
|
||||
if TestCompilerFullVersion<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coCompilerFullVersion],EscapeSQL(TestCompilerFullVersion)]);
|
||||
if TestSvnCompilerRevision<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coSvnCompilerRevision],EscapeSQL(TestSvnCompilerRevision)]);
|
||||
if TestSvnTestsRevision<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coSvnTestsRevision],EscapeSQL(TestSvnTestsRevision)]);
|
||||
if TestSvnRTLRevision<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coSvnRTLRevision],EscapeSQL(TestSvnRTLRevision)]);
|
||||
if TestSvnPackagesRevision<>'' then
|
||||
qry:=qry+format('%s="%s", ',[ConfigAddCols[coSvnPackagesRevision],EscapeSQL(TestSvnPackagesRevision)]);
|
||||
|
||||
qry:=qry+format('TU_SUBMITTER="%s", TU_MACHINE="%s", TU_COMMENT="%s", TU_DATE="%s"',[Submitter,Machine,Comment,SqlDate(TestDate)]);
|
||||
qry:=qry+' WHERE TU_ID='+format('%d',[TestRunID]);
|
||||
if RunQuery(Qry,res) then
|
||||
FreeQueryResult(Res);
|
||||
end;
|
||||
|
||||
function GetTestRunHistoryID(TestRunID : Integer) : Integer;
|
||||
begin
|
||||
GetTestRunHistoryID:=IDQuery(
|
||||
format('SELECT TH_PREVIOUS_FK FROM TESTRUNHISTORY WHERE TH_ID_FK=%d',[TestRunID]));
|
||||
end;
|
||||
|
||||
function GetTestRunFieldID(const name : string; TestRunID : Integer) : Integer;
|
||||
begin
|
||||
GetTestRunFieldID:=IDQuery(
|
||||
format('SELECT %s FROM TESTRUN WHERE TU_ID=%d',[name,TestRunID]));
|
||||
end;
|
||||
function GetTestRunStringFieldID(const name : string; TestRunID : Integer) : String;
|
||||
begin
|
||||
GetTestRunStringFieldID:=StringQuery(
|
||||
format('SELECT %s FROM TESTRUN WHERE TU_ID=%d',[name,TestRunID]));
|
||||
end;
|
||||
|
||||
|
||||
function GetSubmitter(TestRunID:Integer) : String;
|
||||
begin
|
||||
GetSubmitter:=GetTestRunStringFieldID('TU_SUBMITTER',TestRunID);
|
||||
end;
|
||||
|
||||
function GetComment(TestRunID:Integer) : String;
|
||||
begin
|
||||
GetComment:=GetTestRunStringFieldID('TU_COMMENT',TestRunID);
|
||||
end;
|
||||
|
||||
function GetMachine(TestRunID:Integer) : String;
|
||||
begin
|
||||
GetMachine:=GetTestRunStringFieldID('TU_MACHINE',TestRunID);
|
||||
end;
|
||||
|
||||
function GetDate(TestRunID:Integer) : String;
|
||||
begin
|
||||
GetDate:=GetTestRunStringFieldID('TU_DATE',TestRunID);
|
||||
end;
|
||||
|
||||
|
||||
function AddTestHistoryEntry(TestRunID,TestPreviousID : Integer) : boolean;
|
||||
var
|
||||
qry : string;
|
||||
res : TQueryResult;
|
||||
begin
|
||||
qry:=format('INSERT INTO TESTRUNHISTORY (TH_ID_FK,TH_PREVIOUS_FK) '+
|
||||
' VALUES (%d,%d)',[TestRunID,TestPreviousID]);
|
||||
If RunQuery(qry,res) then
|
||||
begin
|
||||
FreeQueryResult(res);
|
||||
AddTestHistoryEntry:=true;
|
||||
end
|
||||
else
|
||||
AddTestHistoryEntry:=false;
|
||||
end;
|
||||
|
||||
function GetTestConfigId(TestRunID : Integer) : Integer;
|
||||
var
|
||||
qry : string;
|
||||
ConfigID, firstRunID, lastRunID,PrevRunID : Integer;
|
||||
RunCount : Integer;
|
||||
res : TQueryResult;
|
||||
AddCount : boolean;
|
||||
begin
|
||||
AddCount:=false;
|
||||
qry:='SELECT TCONF_ID FROM TESTCONFIG WHERE ' +
|
||||
'TCONF_CPU_FK=%d AND ' +
|
||||
'TCONF_OS_FK=%d AND ' +
|
||||
'TCONF_VERSION_FK=%d AND ' +
|
||||
'TCONF_CATEGORY_FK=%d AND ' +
|
||||
'TCONF_SUBMITTER="%s" AND ' +
|
||||
'TCONF_MACHINE="%s" AND ' +
|
||||
'TCONF_COMMENT="%s" ';
|
||||
ConfigID:=IDQuery(format(qry,[
|
||||
GetTestRunFieldID('TU_CPU_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_OS_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_VERSION_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_CATEGORY_FK',TestRunID),
|
||||
GetSubmitter(TestRunID),
|
||||
GetMachine(TestRunID),
|
||||
GetComment(TestRunID)]));
|
||||
qry:=format('SELECT TCONF_FIRST_RUN_FK FROM TESTCONFIG WHERE TCONF_ID=%d',[ConfigID]);
|
||||
FirstRunID:=IDQuery(qry);
|
||||
if TestRunID<FirstRunID then
|
||||
begin
|
||||
Verbose(V_Warning,format('FirstRunID changed from %d to %d',[FirstRunID,TestRunID]));
|
||||
qry:=format('UPDATE TESTCONFIG SET TCONF_FIRST_RUN_FK=%d WHERE TCONF_ID=%d',
|
||||
[TestRunID,ConfigID]);
|
||||
if RunQuery(qry,res) then
|
||||
FreeQueryResult(res)
|
||||
else
|
||||
Verbose(V_Warning,'Update of LastRunID failed');
|
||||
end;
|
||||
qry:=format('SELECT TCONF_LAST_RUN_FK FROM TESTCONFIG WHERE TCONF_ID=%d',[ConfigID]);
|
||||
LastRunID:=IDQuery(qry);
|
||||
if TestRunID>LastRunID then
|
||||
begin
|
||||
qry:=format('UPDATE TESTCONFIG SET TCONF_LAST_RUN_FK=%d WHERE TCONF_ID=%d',
|
||||
[TestRunID,ConfigID]);
|
||||
if RunQuery(qry,res) then
|
||||
FreeQueryResult(res)
|
||||
else
|
||||
Verbose(V_Warning,'Update of LastRunID failed');
|
||||
end
|
||||
else
|
||||
Verbose(V_Warning,format('LastRunID %di,new %d',[LastRunID,TestRunID]));
|
||||
qry:=format('SELECT TCONF_NEW_RUN_FK FROM TESTCONFIG WHERE TCONF_ID=%d',[ConfigID]);
|
||||
PrevRunID:=IDQuery(qry);
|
||||
if TestRunID<>PrevRunID then
|
||||
begin
|
||||
qry:=format('UPDATE TESTCONFIG SET TCONF_NEW_RUN_FK=%d WHERE TCONF_ID=%d',
|
||||
[TestRunID,ConfigID]);
|
||||
if RunQuery(qry,res) then
|
||||
FreeQueryResult(res)
|
||||
else
|
||||
Verbose(V_Warning,'Update of LastRunID failed');
|
||||
AddTestHistoryEntry(TestRunID,PrevRunID);
|
||||
AddCount:=true;
|
||||
end
|
||||
else
|
||||
Verbose(V_Warning,'TestRunID is equal to last!');
|
||||
qry:=format('SELECT TCONF_COUNT_RUNS FROM TESTCONFIG WHERE TCONF_ID=%d',[ConfigID]);
|
||||
RunCount:=IDQuery(qry);
|
||||
{ Add one to run count }
|
||||
if AddCount then
|
||||
begin
|
||||
Inc(RunCount);
|
||||
qry:=format('UPDATE TESTCONFIG SET TCONF_COUNT_RUNS=%d WHERE TCONF_ID=%d',
|
||||
[RunCount,ConfigID]);
|
||||
if RunQuery(qry,res) then
|
||||
FreeQueryResult(res)
|
||||
else
|
||||
Verbose(V_Warning,'Update of TU_COUNT_RUNS failed');
|
||||
end;
|
||||
GetTestConfigId:=ConfigID;
|
||||
end;
|
||||
|
||||
function InsertNewTestConfigId(TestRunID: Integer) : longint;
|
||||
var
|
||||
qry : string;
|
||||
TestDate : string;
|
||||
begin
|
||||
TestDate:=GetDate(TestRunID);
|
||||
qry:='INSERT INTO TESTCONFIG '+
|
||||
'(TCONF_NEW_RUN_FK,TCONF_FIRST_RUN_FK,TCONF_LAST_RUN_FK,' +
|
||||
'TCONF_CPU_FK,TCONF_OS_FK,TCONF_VERSION_FK,TCONF_CATEGORY_FK,'+
|
||||
'TCONF_SUBMITTER,TCONF_MACHINE,TCONF_COMMENT,'+
|
||||
'TCONF_NEW_DATE,TCONF_FIRST_DATE,TCONF_LAST_DATE) ';
|
||||
qry:=qry+format(' VALUES(%d,%d,%d,%d,%d,%d,%d,"%s","%s","%s","%s","%s","%s") ',
|
||||
[TestRunID,TestRunID,TestRunID,
|
||||
GetTestRunFieldID('TU_CPU_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_OS_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_VERSION_FK',TestRunID),
|
||||
GetTestRunFieldID('TU_CATEGORY_FK',TestRunID),
|
||||
GetSubmitter(TestRunID),
|
||||
GetMachine(TestRunID),
|
||||
GetComment(TestRunID),
|
||||
TestDate,TestDate,TestDate]);
|
||||
Result:=InsertQuery(qry);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure UpdateTestConfig;
|
||||
|
||||
var
|
||||
i : TTestStatus;
|
||||
qry : string;
|
||||
res : TQueryResult;
|
||||
|
||||
begin
|
||||
qry:='SHOW TABLES LIKE ''TESTCONFIG''';
|
||||
if not RunQuery(Qry,Res) then
|
||||
exit;
|
||||
{ Row_Count is zero if table does not aexist }
|
||||
if Res^.Row_Count=0 then exit;
|
||||
FreeQueryResult(Res);
|
||||
qry:='INSERT INTO TESTCONFIG (TCONF_NEW_RUN_FK,' +
|
||||
'TCONF_CPU_FK,TCONF_OS_FK,TCONF_VERSION_FK,TCONF_CATEGORY_FK,'+
|
||||
'TCONF_SUBMITTER,TCONF_MACHINE,TCONF_COMMENT,TCONF_NEW_DATE) ';
|
||||
qry:=qry+format(' VALUES(%d,%d,%d,%d,%d,"%s","%s","%s","%s") ',
|
||||
[TestRunID,TestCPUID,TestOSID,TestVersionID,TestCategoryID,
|
||||
Submitter,Machine,Comment,SqlDate(TestDate)]);
|
||||
qry:=qry+'ON DUPLICATE KEY UPDATE '+
|
||||
format('TCONF_NEW_RUN_FK = %d, TCONF_NEW_DATE = "%s",'+
|
||||
'TCONF_COUNT_RUNS = TCONF_COUNT_RUNS + 1',
|
||||
[TestRunID,SqlDate(TestDate)]);
|
||||
if RunQuery(Qry,res) then
|
||||
FreeQueryResult(Res);
|
||||
end;
|
||||
|
||||
Procedure ListRuns(var GlobalRes : TQueryResult);
|
||||
|
||||
var
|
||||
i,fid, num_fields : Integer;
|
||||
Row : PPchar;
|
||||
s : string;
|
||||
begin
|
||||
with GlobalRes^ do
|
||||
begin
|
||||
num_fields:=mysql_num_fields(GlobalRes);
|
||||
Writeln('Row count=',row_count);
|
||||
for i:=0 to row_count-1 do
|
||||
begin
|
||||
row:=mysql_fetch_row(GlobalRes);
|
||||
for fid:=0 to num_fields-1 do
|
||||
begin
|
||||
If (Row=Nil) or (Row[fID]=Nil) then
|
||||
s:=''
|
||||
else
|
||||
s:=strpas(Row[fID]);
|
||||
Writeln(format('row=%d, col=%d, value=%s',[i,fid,s]));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure InsertRunsIntoConfigAndHistory(var GlobalRes : TQueryResult);
|
||||
|
||||
var
|
||||
i,fid, num_fields : Integer;
|
||||
Row : PPchar;
|
||||
s : string;
|
||||
runid,previd : Integer;
|
||||
begin
|
||||
with GlobalRes^ do
|
||||
begin
|
||||
num_fields:=mysql_num_fields(GlobalRes);
|
||||
Writeln('Row count=',row_count);
|
||||
for i:=0 to row_count-1 do
|
||||
begin
|
||||
row:=mysql_fetch_row(GlobalRes);
|
||||
runid:=StrToIntDef(strpas(Row[0]),-1);
|
||||
previd:=GetTestRunHistoryID(RunID);
|
||||
if previd>=0 then
|
||||
begin
|
||||
Writeln(format('RunID=%d already handled prevID=%d',[runID,prevID]));
|
||||
continue;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if GetTestConfigId(runid)=-1 then
|
||||
begin
|
||||
InsertNewTestConfigId(RunID);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure GetAllTestRuns(var GlobalRes : TQueryResult);
|
||||
var
|
||||
qry : string;
|
||||
begin
|
||||
qry:='SELECT * FROM TESTRUN ORDER BY TU_ID';
|
||||
if OffsetString<>'' then
|
||||
qry:=qry+' LIMIT 1000 OFFSET '+OffsetString;
|
||||
if not RunQuery(qry,GlobalRes) then
|
||||
Verbose(V_Warning,'Failed to fetch testrun content');
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
GlobalRes : TQueryResult;
|
||||
|
||||
begin
|
||||
ProcessConfigFile('dbdigest.cfg');
|
||||
ProcessCommandLine;
|
||||
ConnectToDatabase(DatabaseName,HostName,UserName,Password,Port);
|
||||
GetAllTestRuns(GlobalRes);
|
||||
// ListRuns(GlobalRes);
|
||||
InsertRunsIntoConfigAndHistory(GlobalRes);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user