浏览代码

Merged revisions 9853-9857,9860,9863-9864,9867,9885-9886,9894-9896 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

........
r9853 | joost | 2008-01-21 17:17:12 +0100 (Mon, 21 Jan 2008) | 3 lines

* The Category of a testrun is now stored into the database. The default is CategoryID is 1 for compatibility with digests without category
* Fixed procession of db-errors
* Added support for adding new fpcunit-tests and parse the testunits
........
r9854 | joost | 2008-01-21 17:26:20 +0100 (Mon, 21 Jan 2008) | 2 lines

* Added Comment and Category properties to TDigestResultsWriter
* Write Comment and Category to digest.cfg
........
r9857 | joost | 2008-01-21 17:41:09 +0100 (Mon, 21 Jan 2008) | 1 line

* Typo
........
r9860 | joost | 2008-01-21 22:43:28 +0100 (Mon, 21 Jan 2008) | 1 line

* Add paszlib dependency
........
r9885 | joost | 2008-01-23 22:56:34 +0100 (Wed, 23 Jan 2008) | 1 line

* Write RelSrcDir to digest.cfg
........
r9886 | joost | 2008-01-23 22:59:00 +0100 (Wed, 23 Jan 2008) | 1 line

* Add RelSrcDir setting with a default value of "tests", to specify in which directory the test-sources reside, relative to the TestSrcDir
........
r9894 | joost | 2008-01-24 17:35:58 +0100 (Thu, 24 Jan 2008) | 1 line

* Renamed TestSQLFieldTypes.pas to TestFieldTypes.pas for consistency needed by dbdigest
........
r9895 | joost | 2008-01-24 18:02:47 +0100 (Thu, 24 Jan 2008) | 1 line

* Add dash between hostname and date in digest-tarfile
........
r9896 | joost | 2008-01-24 18:40:32 +0100 (Thu, 24 Jan 2008) | 1 line

* Only convert the classname in the filename of a unit-test to lowercase and not the whole path
........

git-svn-id: branches/fixes_2_2@10684 -

joost 17 年之前
父节点
当前提交
4fa70a42ee

+ 0 - 1
.gitattributes

@@ -1281,7 +1281,6 @@ packages/fcl-db/tests/memdstoolsunit.pas svneol=native#text/plain
 packages/fcl-db/tests/sqldbtoolsunit.pas -text
 packages/fcl-db/tests/testbasics.pas svneol=native#text/plain
 packages/fcl-db/tests/testdbbasics.pas -text
-packages/fcl-db/tests/testsqlfieldtypes.pas -text
 packages/fcl-db/tests/toolsunit.pas -text
 packages/fcl-fpcunit/Makefile svneol=native#text/plain
 packages/fcl-fpcunit/Makefile.fpc svneol=native#text/plain

+ 244 - 76
packages/fcl-db/tests/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/07]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/16]
 #
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos 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 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 sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos 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 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 sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd 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 powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -167,6 +167,17 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -188,7 +199,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 endif
-export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -377,6 +388,9 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
 endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
+endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
 endif
@@ -401,6 +415,15 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
 endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_UNITS+=toolsunit dbftoolsunit memdstoolsunit sqldbtoolsunit
+endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_EXAMPLES+=dbtestframework
 endif
@@ -536,6 +559,9 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_EXAMPLES+=dbtestframework
 endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_EXAMPLES+=dbtestframework
+endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_EXAMPLES+=dbtestframework
 endif
@@ -560,6 +586,15 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_EXAMPLES+=dbtestframework
 endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_EXAMPLES+=dbtestframework
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_EXAMPLES+=dbtestframework
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_EXAMPLES+=dbtestframework
+endif
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
@@ -1339,10 +1374,11 @@ else
 TAROPT=vz
 TAREXT=.tar.gz
 endif
-override REQUIRE_PACKAGES=rtl fcl-fpcunit fcl-db
+override REQUIRE_PACKAGES=rtl fcl-fpcunit fcl-db paszlib
 ifeq ($(FULL_TARGET),i386-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1356,7 +1392,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1364,7 +1401,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_WINUNITS-BASE=1
 REQUIRE_PACKAGES_WINUNITS-JEDI=1
 REQUIRE_PACKAGES_FCL-BASE=1
@@ -1380,7 +1418,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1388,7 +1427,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1402,15 +1442,23 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
 REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1424,7 +1472,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1433,7 +1482,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1441,7 +1491,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1449,7 +1500,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1463,7 +1515,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1471,7 +1524,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1485,7 +1539,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1493,7 +1548,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1501,7 +1557,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1509,7 +1566,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1520,7 +1578,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1528,7 +1587,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1536,7 +1596,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1550,7 +1611,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1564,7 +1626,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1578,7 +1641,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1586,7 +1650,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1594,7 +1659,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1608,7 +1674,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1616,7 +1683,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1624,7 +1692,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1638,7 +1707,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1652,7 +1722,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1660,7 +1731,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1668,7 +1740,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1682,7 +1755,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1690,7 +1764,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1698,7 +1773,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1712,7 +1788,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1726,7 +1803,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1735,7 +1813,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1743,7 +1822,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1757,7 +1837,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1771,7 +1852,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1785,7 +1867,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_WINUNITS-BASE=1
 REQUIRE_PACKAGES_WINUNITS-JEDI=1
 REQUIRE_PACKAGES_FCL-BASE=1
@@ -1799,7 +1882,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1807,7 +1891,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1821,15 +1906,32 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-FPCUNIT=1
+REQUIRE_PACKAGES_FCL-DB=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
 REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1840,7 +1942,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1848,7 +1951,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1856,7 +1960,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1864,7 +1969,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1872,7 +1978,8 @@ REQUIRE_PACKAGES_FCL-DB=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1886,7 +1993,8 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1900,7 +2008,41 @@ REQUIRE_PACKAGES_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-FPCUNIT=1
+REQUIRE_PACKAGES_FCL-DB=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-FPCUNIT=1
+REQUIRE_PACKAGES_FCL-DB=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-FPCUNIT=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-FPCUNIT=1
@@ -1932,30 +2074,56 @@ ifdef UNITDIR_RTL
 override COMPILER_UNITDIR+=$(UNITDIR_RTL)
 endif
 endif
-ifdef REQUIRE_PACKAGES_NETDB
-PACKAGEDIR_NETDB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /netdb/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_NETDB),)
-ifneq ($(wildcard $(PACKAGEDIR_NETDB)/units/$(TARGETSUFFIX)),)
-UNITDIR_NETDB=$(PACKAGEDIR_NETDB)/units/$(TARGETSUFFIX)
+ifdef REQUIRE_PACKAGES_HASH
+PACKAGEDIR_HASH:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /hash/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_HASH),)
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)),)
+UNITDIR_HASH=$(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)
+else
+UNITDIR_HASH=$(PACKAGEDIR_HASH)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_HASH)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_HASH) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_HASH)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_HASH=
+UNITDIR_HASH:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /hash/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_HASH),)
+UNITDIR_HASH:=$(firstword $(UNITDIR_HASH))
+else
+UNITDIR_HASH=
+endif
+endif
+ifdef UNITDIR_HASH
+override COMPILER_UNITDIR+=$(UNITDIR_HASH)
+endif
+endif
+ifdef REQUIRE_PACKAGES_PASZLIB
+PACKAGEDIR_PASZLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PASZLIB),)
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)),)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)
 else
-UNITDIR_NETDB=$(PACKAGEDIR_NETDB)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)
 endif
 ifdef CHECKDEPEND
-$(PACKAGEDIR_NETDB)/$(FPCMADE):
-	$(MAKE) -C $(PACKAGEDIR_NETDB) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_NETDB)/$(FPCMADE)
+$(PACKAGEDIR_PASZLIB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PASZLIB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PASZLIB)/$(FPCMADE)
 endif
 else
-PACKAGEDIR_NETDB=
-UNITDIR_NETDB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /netdb/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_NETDB),)
-UNITDIR_NETDB:=$(firstword $(UNITDIR_NETDB))
+PACKAGEDIR_PASZLIB=
+UNITDIR_PASZLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PASZLIB),)
+UNITDIR_PASZLIB:=$(firstword $(UNITDIR_PASZLIB))
 else
-UNITDIR_NETDB=
+UNITDIR_PASZLIB=
 endif
 endif
-ifdef UNITDIR_NETDB
-override COMPILER_UNITDIR+=$(UNITDIR_NETDB)
+ifdef UNITDIR_PASZLIB
+override COMPILER_UNITDIR+=$(UNITDIR_PASZLIB)
 endif
 endif
 ifdef REQUIRE_PACKAGES_FCL-BASE
@@ -2271,13 +2439,13 @@ override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-JEDI)
 endif
 endif
 ifndef NOCPUDEF
-override FPCOPTDEF=$(CPU_TARGET)
+override FPCOPTDEF=$(ARCH)
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(CPU_TARGET)
+override FPCOPT+=-P$(ARCH)
 endif
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
@@ -2430,7 +2598,7 @@ endif
 endif
 endif
 .PHONY: fpc_units
-ifneq ($(TARGET_UNITS),)
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
 override ALLTARGET+=fpc_units
 override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
 override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))

+ 1 - 1
packages/fcl-db/tests/Makefile.fpc

@@ -16,7 +16,7 @@ fpcpackage=y
 fpcdir=../../..
 
 [require]
-packages=fcl-fpcunit fcl-db
+packages=fcl-fpcunit fcl-db paszlib
 
 [rules]
 .NOTPARALLEL:

+ 0 - 1318
packages/fcl-db/tests/testsqlfieldtypes.pas

@@ -1,1318 +0,0 @@
-unit TestSQLFieldTypes;
-
-{$mode objfpc}{$H+}
-
-interface
-
-uses
-  Classes, SysUtils, fpcunit, testutils, testregistry,
-  db;
-
-type
-
-
-  TParamProc = procedure(AParam:TParam; i : integer);
-  TFieldProc = procedure(AField:TField; i : integer);
-
-  { TTestFieldTypes }
-
-  TTestFieldTypes= class(TTestCase)
-  private
-    procedure CreateTableWithFieldType(ADatatype : TFieldType; ASQLTypeDecl : string);
-    procedure TestFieldDeclaration(ADatatype: TFieldType; ADataSize: integer);
-    procedure TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
-  protected
-    procedure SetUp; override; 
-    procedure TearDown; override;
-    procedure RunTest; override;
-  published
-    procedure TestClearUpdateableStatus;
-    procedure TestParseJoins; // bug 10148
-    procedure TestInsertLargeStrFields; // bug 9600
-    procedure TestNumericNames; // Bug9661
-    procedure Test11Params;
-    procedure TestRowsAffected; // bug 9758
-    procedure TestStringsReplace;
-    procedure TestCircularParams;
-    procedure TestBug9744;
-    procedure TestCrossStringDateParam;
-    procedure TestGetFieldNames;
-    procedure TestGetTables;
-    procedure TestUpdateIndexDefs;
-    procedure TestSetBlobAsMemoParam;
-    procedure TestSetBlobAsStringParam;
-    procedure TestGetIndexDefs;
-    procedure TestDblQuoteEscComments;
-    procedure TestpfInUpdateFlag; // bug 7565
-    procedure TestInt;
-    procedure TestScript;
-
-    procedure TestTemporaryTable;
-
-    procedure TestParametersAndDates;
-    procedure TestExceptOnsecClose;
-
-    procedure TestBlob;
-    procedure TestChangeBlob;
-    procedure TestBlobGetText;
-
-    procedure TestLargeRecordSize;
-    procedure TestNumeric;
-    procedure TestFloat;
-    procedure TestDateTime;       // bug 6925
-    procedure TestString;
-    procedure TestUnlVarChar;
-    procedure TestDate;
-
-    procedure TestNullValues;
-    procedure TestParamQuery;
-    procedure TestStringParamQuery;
-    procedure TestDateParamQuery;
-    procedure TestIntParamQuery;
-    procedure TestFloatParamQuery;
-    procedure TestAggregates;
-  end;
-
-implementation
-
-uses sqldbtoolsunit,toolsunit, variants, sqldb, bufdataset, strutils;
-
-Type HackedDataset = class(TDataset);
-
-const
-  testFloatValuesCount = 21;
-  testFloatValues : Array[0..testFloatValuesCount-1] of double = (-maxSmallint-1,-maxSmallint,-256,-255,-128,-127,-1,0,1,127,128,255,256,maxSmallint,maxSmallint+1,0.123456,-0.123456,4.35,12.434E7,9.876e-5,123.45678);
-
-  testIntValuesCount = 17;
-  testIntValues : Array[0..testIntValuesCount-1] of integer = (-maxInt,-maxSmallint-1,-maxSmallint,-256,-255,-128,-127,-1,0,1,127,128,255,256,maxSmallint,maxSmallint+1,MaxInt);
-
-  testStringValuesCount = 20;
-  testStringValues : Array[0..testStringValuesCount-1] of string = (
-    '',
-    'a',
-    'ab',
-    'abc',
-    'abcd',
-    'abcde',
-    'abcdef',
-    'abcdefg',
-    'abcdefgh',
-    'abcdefghi',
-    'abcdefghij',
-    'lMnOpQrStU',
-    '1234567890',
-    '_!@#$%^&*(',
-    ' ''quotes'' ',
-    ')-;:/?.<>',
-    '~`|{}- =',    // note that there's no \  (backslash) since some db's uses that as escape-character
-    '  WRaP  ',
-    'wRaP  ',
-    ' wRAP'
-  );
-
-  testDateValuesCount = 18;
-  testDateValues : Array[0..testDateValuesCount-1] of string = (
-    '2000-01-01',
-    '1999-12-31',
-    '2004-02-29',
-    '2004-03-01',
-    '1991-02-28',
-    '1991-03-01',
-    '2040-10-16',
-    '1977-09-29',
-    '1800-03-30',
-    '1650-05-10',
-    '1754-06-04',
-    '0904-04-12',
-    '0199-07-09',
-    '0001-01-01',
-    '1899-12-29',
-    '1899-12-30',
-    '1899-12-31',
-    '1900-01-01'
-  );
-
-
-procedure TTestFieldTypes.TestpfInUpdateFlag;
-var ds   : TBufDataset;
-    AFld1, AFld2, AFld3 : Tfield;
-begin
-  ds := (DBConnector.GetNDataset(True,5) as TBufDataset);
-  with ds do
-    begin
-    AFld1 := TIntegerField.Create(ds);
-    AFld1.FieldName := 'ID';
-    AFld1.DataSet := ds;
-    AFld1.ProviderFlags := AFld1.ProviderFlags + [pfInKey];
-
-    AFld2 := TStringField.Create(ds);
-    AFld2.FieldName := 'NAME';
-    AFld2.DataSet := ds;
-
-    AFld3 := TIntegerField.Create(ds);
-    AFld3.FieldName := 'CALCFLD';
-    AFld3.DataSet := ds;
-    Afld3.FieldKind := fkCalculated;
-    AFld3.ProviderFlags := [];
-
-    Open;
-    Edit;
-    FieldByName('ID').AsInteger := 254;
-    Post;
-    ApplyUpdates;
-    Append;
-    FieldByName('ID').AsInteger := 255;
-    Post;
-    ApplyUpdates;
-    Close;
-    AFld1.Free;
-    AFld2.Free;
-    AFld3.Free;
-    end;
-end;
-
-procedure TTestFieldTypes.TestScript;
-
-var Ascript : TSQLScript;
-
-begin
-  Ascript := tsqlscript.create(nil);
-  with Ascript do
-    begin
-    DataBase := TSQLDBConnector(DBConnector).Connection;
-    transaction := TSQLDBConnector(DBConnector).Transaction;
-    script.clear;
-    script.append('create table a (id int);');
-    script.append('create table b (id int);');
-    ExecuteScript;
-    end;
-end;
-
-procedure TTestFieldTypes.TestInt;
-
-var
-  i          : byte;
-
-begin
-  CreateTableWithFieldType(ftInteger,'INT');
-  TestFieldDeclaration(ftInteger,4);
-
-  for i := 0 to testIntValuesCount-1 do
-    TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (' + inttostr(testIntValues[i]) + ')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testIntValuesCount-1 do
-      begin
-      AssertEquals(testIntValues[i],fields[0].AsInteger);
-      Next;
-      end;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestLargeRecordSize;
-
-var
-  i          : byte;
-
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (plant varchar(8192),sampling_type varchar(8192),area varchar(8192), area_description varchar(8192), batch varchar(8192), sampling_datetime timestamp, status varchar(8192), batch_commentary varchar(8192))');
-
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  if UpperCase(dbconnectorparams)='INTERBASE' then TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    sql.clear;
-    sql.append('insert into FPDEV2 (plant,sampling_type,batch,sampling_datetime,status,batch_commentary) values (''ZUBNE PASTE'',''OTISCI POVR￿INA'',''000037756'',''2005-07-01'',''NE ODGOVARA'',''Ovdje se upisuje komentar o kontrolnom broju..............'')');
-    ExecSQL;
-
-    sql.clear;
-    sql.append('select * from FPDEV2');
-    open;
-    AssertEquals('ZUBNE PASTE',FieldByName('plant').AsString);
-    AssertEquals(EncodeDate(2005,07,01),FieldByName('sampling_datetime').AsDateTime);
-    close;
-    end;
-end;
-
-
-procedure TTestFieldTypes.TestNumeric;
-
-const
-  testValuesCount = 13;
-  testValues : Array[0..testValuesCount-1] of currency = (-123456.789,-10200,-10000,-1875.25,-10,-0.5,0,0.5,10,1875.25,10000,10200,123456.789);
-
-var
-  i          : byte;
-
-begin
-  CreateTableWithFieldType(ftBCD,'NUMERIC(10,4)');
-  TestFieldDeclaration(ftBCD,sizeof(Currency));
-
-  for i := 0 to testValuesCount-1 do
-    TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (' + CurrToStrF(testValues[i],ffFixed,3) + ')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testValuesCount-1 do
-      begin
-      AssertEquals(testValues[i],fields[0].AsCurrency);
-      Next;
-      end;
-    close;
-    end;
-end;
-
-
-procedure TTestFieldTypes.TestString;
-
-const
-  testValuesCount = 19;
-  testValues : Array[0..testValuesCount-1] of string = (
-    '',
-    'a',
-    'ab',
-    'abc',
-    'abcd',
-    'abcde',
-    'abcdef',
-    'abcdefg',
-    'abcdefgh',
-    'abcdefghi',
-    'abcdefghij',
-    'lMnOpQrStU',
-    '1234567890',
-    '_!@#$%^&*(',
-    ')-;:/?.<>',
-    '~`|{}- =',    // note that there's no \  (backslash) since some db's uses that as escape-character
-    '  WRaP  ',
-    'wRaP  ',
-    ' wRAP'
-  );
-
-var
-  i             : byte;
-
-begin
-  CreateTableWithFieldType(ftString,'VARCHAR(10)');
-  TestFieldDeclaration(ftString,11);
-
-  for i := 0 to testValuesCount-1 do
-    TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''' + testValues[i] + ''')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testValuesCount-1 do
-      begin
-      if (SQLDbType in MySQLdbTypes) then
-        AssertEquals(TrimRight(testValues[i]),fields[0].AsString) // MySQL automatically trims strings
-      else
-        AssertEquals(testValues[i],fields[0].AsString);
-      Next;
-      end;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestUnlVarChar;
-
-const
-  testValuesCount = 21;
-  testValues : Array[0..testValuesCount-1] of string = (
-    '',
-    'a',
-    'ab',
-    'abc',
-    'abcd',
-    'abcde',
-    'abcdef',
-    'abcdefg',
-    'abcdefgh',
-    'abcdefghi',
-    'abcdefghij',
-    'lMnOpQrStU',
-    '1234567890',
-    '_!@#$%^&*(',
-    ')-;:/?.<>',
-    '~`|{}- =',
-    '  WRaP  ',
-    'wRaP  ',
-    ' wRAP',
-    '0123456789',
-    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?' + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?'
-    + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?' + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 !@#$%^&*()_+-=][|}{;:,./<>?'
-  );
-
-var
-  i             : byte;
-
-begin
-  if SQLDbType<>postgresql then Ignore('This test does only apply to Postgres, since others don''t support varchars without length given');
-
-  CreateTableWithFieldType(ftString,'VARCHAR');
-  TestFieldDeclaration(ftString,dsMaxStringSize+1);
-
-  for i := 0 to testValuesCount-1 do
-    TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''' + testValues[i] + ''')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testValuesCount-1 do
-      begin
-      AssertEquals(testValues[i],fields[0].AsString);
-      Next;
-      end;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestDate;
-
-var
-  i             : byte;
-
-begin
-  CreateTableWithFieldType(ftDate,'DATE');
-  TestFieldDeclaration(ftDate,8);
-
-  for i := 0 to testDateValuesCount-1 do
-    if SQLDbType=oracle then
-      TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (to_date (''' + testDateValues[i] + ''',''YYYY-MM-DD''))')
-    else
-      TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''' + testDateValues[i] + ''')');
-
-//  TSQLDBConnector(DBConnector).Transaction.CommitRetaining; // For debug-purposes
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testDateValuesCount-1 do
-      begin
-      AssertEquals(testDateValues[i],FormatDateTime('yyyy/mm/dd',fields[0].AsDateTime));
-      Next;
-      end;
-    close;
-    end;
-
-end;
-
-procedure TTestFieldTypes.TestChangeBlob;
-
-var s : string;
-
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (ID int,FT '+FieldtypeDefinitions[ftblob]+')');
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining; // For interbase
-
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (ID,FT) values (1,''Test deze blob'')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    sql.clear;
-    sql.add('select * from FPDEV2');
-    Open;
-    fields[1].ProviderFlags := [pfInUpdate]; // blob niet in de where
-    UpdateMode := upWhereAll;
-
-    AssertEquals('Test deze blob',fields[1].AsString);
-    edit;
-// Dat werkt niet lekker, omdat de stream vernield wordt...
-//    fields[0].asstring := 'Deze blob is gewijzigd!';
-
-    With Createblobstream(fields[1],bmwrite) do
-      begin
-      s := 'Deze blob is gewijzigd!';
-      WriteBuffer(Pointer(s)^,Length(s));
-      post;
-      free;
-      end;
-    AssertEquals('Deze blob is gewijzigd!',fields[1].AsString);
-    
-    ApplyUpdates(0);
-
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining; // For debug-purposes
-
-    close;
-
-    open;
-    AssertEquals('Deze blob is gewijzigd!',fields[1].AsString);
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestBlobGetText;
-begin
-  CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
-  TestFieldDeclaration(ftBlob,0);
-
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''Test deze blob'')');
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (Null)');
-
-//  TSQLDBConnector(DBConnector).Transaction.CommitRetaining; // For debug-purposes
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    AssertFalse(fields[0].IsNull);
-    AssertEquals('(BLOB)',fields[0].DisplayText);
-    AssertEquals('Test deze blob',fields[0].AsString);
-    Next;
-    AssertTrue(fields[0].IsNull);
-    AssertEquals('(blob)',fields[0].Text);
-    AssertEquals('',fields[0].AsString);
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestSetBlobAsStringParam;
-
-var
-  i             : byte;
-  ASQL          : TSQLQuery;
-
-begin
-  CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
-//  CreateTableWithFieldType(ftBlob,'TEXT');
-  TestFieldDeclaration(ftBlob,0);
-
-  ASQL := DBConnector.GetNDataset(True,1) as tsqlquery;
-  with ASql  do
-    begin
-    sql.Text := 'insert into FPDEV2 (FT) values (:BlobParam)';
-    Params.ParamByName('blobParam').AsString := 'Test deze BLob';
-    ExecSQL;
-    end;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    if not eof then
-      AssertEquals('Test deze BLob',fields[0].AsString);
-    close;
-    end;
-end;
-
-
-procedure TTestFieldTypes.TestBlob;
-
-var
-  i             : byte;
-
-begin
-  CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
-  TestFieldDeclaration(ftBlob,0);
-
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''Test deze blob'')');
-
-//  TSQLDBConnector(DBConnector).Transaction.CommitRetaining; // For debug-purposes
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    AssertEquals('Test deze blob',fields[0].AsString);
-    close;
-    end;
-end;
-
-
-procedure TTestFieldTypes.TestDateTime;
-
-const
-  testValuesCount = 31;
-  testValues : Array[0..testValuesCount-1] of string = (
-    '2000-01-01',
-    '1999-12-31',
-    '2004-02-29',
-    '2004-03-01',
-    '1991-02-28',
-    '1991-03-01',
-    '1977-09-29',
-    '2000-01-01 10:00:00',
-    '2000-01-01 23:59:59',
-    '1994-03-06 11:54:30',
-    '2040-10-16',                   // MySQL 4.0 doesn't support datetimes before 1970 or after 2038
-    '1400-02-03 12:21:53',
-    '0354-11-20 21:25:15',
-    '1333-02-03 21:44:21',
-    '1800-03-30',
-    '1650-05-10',
-    '1754-06-04',
-    '0904-04-12',
-    '0199-07-09',
-    '0001-01-01',
-    '1899-12-29',
-    '1899-12-30',
-    '1899-12-31',
-    '1900-01-01',
-    '1899-12-30 18:00:51',
-    '1899-12-30 04:00:51',
-    '1899-12-29 04:00:51',
-    '1899-12-29 18:00:51',
-    '1903-04-02 01:04:02',
-    '1815-09-24 03:47:22',
-    '2100-01-01 01:01:01'
-  );
-
-var
-  i, corrTestValueCount : byte;
-
-begin
-  CreateTableWithFieldType(ftDateTime,FieldtypeDefinitions[ftDateTime]);
-  TestFieldDeclaration(ftDateTime,8);
-  
-  if SQLDbType=mysql40 then corrTestValueCount := testValuesCount-21
-    else corrTestValueCount := testValuesCount;
-
-  for i := 0 to corrTestValueCount-1 do
-    if SQLDbType=oracle then
-      TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (to_date (''' + testValues[i] + ''',''YYYY-MM-DD HH24:MI:SS''))')
-    else
-      TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (''' + testValues[i] + ''')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to corrTestValueCount-1 do
-      begin
-      if length(testValues[i]) < 12 then
-        AssertEquals(testValues[i],FormatDateTime('yyyy/mm/dd',fields[0].AsDateTime))
-      else
-        AssertEquals(testValues[i],FormatDateTime('yyyy/mm/dd hh:mm:ss',fields[0].AsDateTime));
-      Next;
-      end;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestFloat;
-const
-  testValuesCount = 21;
-  testValues : Array[0..testValuesCount-1] of double = (-maxSmallint-1,-maxSmallint,-256,-255,-128,-127,-1,0,1,127,128,255,256,maxSmallint,maxSmallint+1,0.123456,-0.123456,4.35,12.434E7,9.876e-5,123.45678);
-
-var
-  i          : byte;
-
-begin
-  CreateTableWithFieldType(ftFloat,'FLOAT');
-  TestFieldDeclaration(ftFloat,sizeof(double));
-
-  for i := 0 to testValuesCount-1 do
-    TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (' + floattostr(testValues[i]) + ')');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    for i := 0 to testValuesCount-1 do
-      begin
-      AssertEquals(testValues[i],fields[0].AsFloat);
-      Next;
-      end;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestNullValues;
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (FIELD1 INT, FIELD2 INT)');
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FIELD1) values (1)');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    sql.clear;
-    sql.append('select * from FPDEV2');
-    open;
-    AssertEquals(1,FieldByName('FIELD1').AsInteger);
-    AssertTrue('Null-values test failed',FieldByName('FIELD2').IsNull);
-    close;
-    end;
-end;
-
-
-procedure TTestFieldTypes.TestParamQuery;
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (FIELD1 INT, FIELD2 INT, FIELD3 INT, DECOY VARCHAR(30))');
-
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    sql.clear;
-    sql.append('insert into FPDEV2 (field1) values (:field1)');
-    Params.ParamByName('field1').AsInteger := 1;
-    ExecSQL;
-
-    sql.clear;
-    sql.append('insert into FPDEV2 (field1,field2,decoy) values (:field1,:field2,''decoytest'')');
-    Params.ParamByName('field1').AsInteger := 2;
-    Params.ParamByName('field2').DataType := ftInteger;
-    Params.ParamByName('field2').Value := Null;
-    ExecSQL;
-
-    sql.clear;
-    sql.append('insert into FPDEV2 (field1,field2,field3) values (:field1,:field2,:field3)');
-    Params.ParamByName('field1').AsInteger := 3;
-    Params.ParamByName('field2').AsInteger := 2;
-    Params.ParamByName('field3').AsInteger := 3;
-    ExecSQL;
-
-    sql.clear;
-    sql.append('insert into FPDEV2 (field1,field2,field3,decoy) values (:field1,:field2,:field3,'':decoy ::test $decoy2 $$2'')');
-    Params.ParamByName('field1').AsInteger := 4;
-    Params.ParamByName('field2').AsInteger := 2;
-    Params.ParamByName('field3').AsInteger := 3;
-    ExecSQL;
-
-    sql.clear;
-    sql.append('insert into FPDEV2 (field1,field2,field3) values (:field1,:field2,:field1)');
-    Params.ParamByName('field1').AsInteger := 5;
-    Params.ParamByName('field2').AsInteger := 2;
-    ExecSQL;
-    
-    sql.clear;
-    sql.append('select * from FPDEV2 order by FIELD1');
-    open;
-    AssertEquals(1,FieldByName('FIELD1').asinteger);
-    AssertTrue(FieldByName('FIELD2').IsNull);
-    AssertTrue(FieldByName('FIELD3').IsNull);
-    AssertTrue(FieldByName('DECOY').IsNull);
-    next;
-    AssertEquals(2,FieldByName('FIELD1').asinteger);
-    AssertTrue(FieldByName('FIELD2').IsNull);
-    AssertTrue(FieldByName('FIELD3').IsNull);
-    AssertEquals('decoytest',FieldByName('DECOY').AsString);
-    next;
-    AssertEquals(3,FieldByName('FIELD1').asinteger);
-    AssertEquals(2,FieldByName('FIELD2').asinteger);
-    AssertEquals(3,FieldByName('FIELD3').asinteger);
-    AssertTrue(FieldByName('DECOY').IsNull);
-    next;
-    AssertEquals(4,FieldByName('FIELD1').asinteger);
-    AssertEquals(2,FieldByName('FIELD2').asinteger);
-    AssertEquals(3,FieldByName('FIELD3').asinteger);
-    AssertEquals(':decoy ::test $decoy2 $$2',FieldByName('DECOY').AsString);
-    next;
-    AssertEquals(5,FieldByName('FIELD1').asinteger);
-    AssertEquals(2,FieldByName('FIELD2').asinteger);
-    AssertEquals(5,FieldByName('FIELD3').asinteger);
-    AssertTrue(FieldByName('DECOY').IsNull);
-    close;
-
-    end;
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-
-end;
-
-procedure TTestFieldTypes.TestIntParamQuery;
-
-begin
-  TestXXParamQuery(ftInteger,'INT',testIntValuesCount);
-end;
-
-procedure TTestFieldTypes.TestFloatParamQuery;
-
-begin
-  TestXXParamQuery(ftFloat,'FLOAT',testFloatValuesCount);
-end;
-
-procedure TTestFieldTypes.TestStringParamQuery;
-
-begin
-  TestXXParamQuery(ftString,'VARCHAR(10)',testStringValuesCount);
-end;
-
-procedure TTestFieldTypes.TestDateParamQuery;
-
-begin
-  TestXXParamQuery(ftDate,'DATE',testDateValuesCount);
-end;
-
-
-procedure TTestFieldTypes.TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
-
-var i : integer;
-
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (ID INT, FIELD1 '+ASQLTypeDecl+')');
-
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  if SQLDbType=interbase then TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    PacketRecords := -1;
-    sql.clear;
-    sql.append('insert into FPDEV2 (ID,FIELD1) values (:id,:field1)');
-
-    ShortDateFormat := 'yyyy-mm-dd';
-
-    for i := 0 to testValuesCount -1 do
-      begin
-      Params.ParamByName('id').AsInteger := i;
-      case ADataType of
-        ftInteger: Params.ParamByName('field1').asinteger := testIntValues[i];
-        ftFloat  : Params.ParamByName('field1').AsFloat   := testFloatValues[i];
-        ftString : Params.ParamByName('field1').AsString  := testStringValues[i];
-        ftDate   : if cross then
-                     Params.ParamByName('field1').AsString:= testDateValues[i]
-                   else
-                     Params.ParamByName('field1').AsDateTime:= StrToDate(testDateValues[i]);
-      else
-        AssertTrue('no test for paramtype available',False);
-      end;
-      ExecSQL;
-      end;
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-    sql.clear;
-    sql.append('select * from FPDEV2 order by ID');
-    open;
-
-    for i := 0 to testValuesCount -1 do
-      begin
-      AssertEquals(i,FieldByName('ID').AsInteger);
-      case ADataType of
-        ftInteger: AssertEquals(testIntValues[i],FieldByName('FIELD1').AsInteger);
-        ftFloat  : AssertEquals(testFloatValues[i],FieldByName('FIELD1').AsFloat);
-        ftString : AssertEquals(testStringValues[i],FieldByName('FIELD1').AsString);
-        ftdate   : AssertEquals(testDateValues[i],FormatDateTime('yyyy/mm/dd',FieldByName('FIELD1').AsDateTime));
-      else
-        AssertTrue('no test for paramtype available',False);
-      end;
-      Next;
-      end;
-    close;
-    end;
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-end;
-
-procedure TTestFieldTypes.TestAggregates;
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (FIELD1 INT, FIELD2 INT)');
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 values (1,1)');
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 values (2,3)');
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 values (3,4)');
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 values (4,4)');
-
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    sql.clear;
-    sql.append('select count(*) from FPDEV2');
-    open;
-    AssertEquals(4,Fields[0].AsInteger);
-    close;
-
-    sql.clear;
-    sql.append('select sum(FIELD1) from FPDEV2');
-    open;
-    AssertEquals(10,Fields[0].AsInteger);
-    close;
-
-    sql.clear;
-    sql.append('select avg(FIELD2) from FPDEV2');
-    open;
-    AssertEquals(3,Fields[0].AsInteger);
-    close;
-
-    end;
-
-end;
-
-procedure TTestFieldTypes.CreateTableWithFieldType(ADatatype: TFieldType;
-  ASQLTypeDecl: string);
-begin
-  TSQLDBConnector(DBConnector).Connection.ExecuteDirect('create table FPDEV2 (FT ' +ASQLTypeDecl+ ')');
-
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-  TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-end;
-
-procedure TTestFieldTypes.TestFieldDeclaration(ADatatype: TFieldType;
-  ADataSize: integer);
-begin
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    SQL.Clear;
-    SQL.Add('select * from FPDEV2');
-
-    Open;
-    AssertEquals(1,FieldCount);
-    AssertTrue(CompareText('FT',fields[0].FieldName)=0);
-    AssertEquals(ADataSize,fields[0].DataSize);
-    AssertTrue(ADatatype=fields[0].DataType);
-    Close;
-    end;
-end;
-
-procedure TTestFieldTypes.SetUp; 
-begin
-  InitialiseDBConnector;
-end;
-
-procedure TTestFieldTypes.TearDown; 
-begin
-  if assigned(DBConnector) then
-    TSQLDBConnector(DBConnector).Transaction.Rollback;
-  FreeAndNil(DBConnector);
-end;
-
-procedure TTestFieldTypes.RunTest;
-begin
-//  if (SQLDbType in TSQLDBTypes) then
-    inherited RunTest;
-end;
-
-procedure TTestFieldTypes.TestClearUpdateableStatus;
-// Test if CanModify is correctly disabled in case of a select query without
-// a from-statement.
-begin
-  if not (SQLDbType in MySQLdbTypes) then Ignore('This test does only apply to MySQL because the used SQL-statement is MySQL only.');
-  with TSQLDBConnector(DBConnector) do
-    begin
-    with (GetNDataset(false,5) as TSQLQuery) do
-      begin
-      Open;
-      AssertEquals(True,CanModify);
-      Close;
-      SQL.Text:='select last_insert_id();';
-      Open;
-      AssertEquals(False,CanModify);
-      close;
-      end;
-    end;
-end;
-
-procedure TTestFieldTypes.TestParseJoins;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    with query do
-      begin
-      SQL.Text:='select TT.NAME from FPDEV left join FPDEV as TT on TT.ID=FPDEV.ID';
-      Open;
-      close;
-      end;
-    end;
-end;
-
-procedure TTestFieldTypes.TestInsertLargeStrFields;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    Connection.ExecuteDirect('create table FPDEV2 (         ' +
-                              '  ID INT NOT NULL          , ' +
-                              '  NAME VARCHAR(16000),       ' +
-                              '  PRIMARY KEY (ID)           ' +
-                              ')                            ');
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-    Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (1,''test1'')';
-    Query.ExecSQL;
-    query.sql.Text:='select * from FPDEV2';
-    Query.Open;
-    AssertEquals(query.FieldByName('NAME').AsString,'test1');
-    Query.insert;
-    query.fields[1].AsString:='11';
-    query.Close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestNumericNames;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    if sqQuoteFieldnames in Connection.ConnOptions then
-      Connection.ExecuteDirect('create table FPDEV2 (         ' +
-                                '  "2ID" INT NOT NULL            , ' +
-                                '  "3TEST" VARCHAR(10),     ' +
-                                '  PRIMARY KEY ("2ID")           ' +
-                                ')                            ')
-    else
-      Connection.ExecuteDirect('create table FPDEV2 (         ' +
-                                '  2ID INT NOT NULL            , ' +
-                                '  3TEST VARCHAR(10),     ' +
-                                '  PRIMARY KEY (2ID)           ' +
-                                ')                            ');
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-    with query do
-      begin
-      SQL.Text:='select * from FPDEV2';
-      Open;
-      Edit;
-      fieldbyname('2ID').AsInteger:=1;
-      fieldbyname('3TEST').AsString:='3test';
-      Post;
-      ApplyUpdates(0);
-      close;
-      open;
-      AssertEquals('3test',FieldByName('3TEST').AsString);
-      Edit;
-      fieldbyname('3TEST').AsString:='test3';
-      Post;
-      ApplyUpdates(0);
-      open;
-      AssertEquals('test3',FieldByName('3TEST').AsString);
-      close;
-      end;
-    end;
-end;
-
-procedure TTestFieldTypes.TestRowsAffected;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    AssertEquals(-1,query.RowsAffected);
-    Connection.ExecuteDirect('create table FPDEV2 (         ' +
-                              '  ID INT NOT NULL            , ' +
-                              '  NAME VARCHAR(250),         ' +
-                              '  PRIMARY KEY (ID)           ' +
-                              ')                            ');
-// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-    Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (1,''test1'')';
-    Query.ExecSQL;
-    AssertEquals(1,query.RowsAffected);
-    Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (2,''test2'')';
-    Query.ExecSQL;
-    AssertEquals(1,query.RowsAffected);
-    Query.SQL.Text := 'update FPDEV2 set NAME=''NewTest''';
-    Query.ExecSQL;
-    AssertEquals(2,query.RowsAffected);
-    Query.SQL.Text := 'select * from FPDEV2';
-    Query.Open;
-    AssertTrue(query.RowsAffected<>0); // It should return -1 or the number of selected rows.
-    query.Close;
-    AssertTrue(query.RowsAffected<>0); // It should return -1 or the same as the last time it was called.
-    if (SQLDbType = sqlite3) then  // sqlite doesn't count the rowsaffected if there is no where-clause
-      Query.SQL.Text := 'delete from FPDEV2 where 1'
-    else
-      Query.SQL.Text := 'delete from FPDEV2';
-    Query.ExecSQL;
-    AssertEquals(2,query.RowsAffected);
-    Query.SQL.Text := 'delete from FPDEV2';
-    Query.ExecSQL;
-    AssertEquals(0,query.RowsAffected);
-    end;
-end;
-
-procedure TTestFieldTypes.TestStringsReplace;
-begin
-  AssertEquals('dit is een string',StringsReplace('dit was een string',['was'],['is'],[]));
-  AssertEquals('dit is een string was een string',StringsReplace('dit was een string was een string',['was'],['is'],[]));
-  AssertEquals('dit is een string is een string',StringsReplace('dit was een string was een string',['was'],['is'],[rfReplaceAll]));
-
-  AssertEquals('dit is een char is een char',StringsReplace('dit was een string was een string',['was','string'],['is','char'],[rfReplaceAll]));
-  AssertEquals('dit is een string was een string',StringsReplace('dit was een string was een string',['string','was'],['char','is'],[]));
-
-  AssertEquals('dit is een char is een strin',StringsReplace('dit was een string was een strin',['string','was'],['char','is'],[rfReplaceAll]));
-
-  AssertEquals('dit Was een char is een char',StringsReplace('dit Was een string was een string',['was','string'],['is','char'],[rfReplaceAll]));
-  AssertEquals('dit wAs een char is een char',StringsReplace('dit wAs een string was een string',['was','string'],['is','char'],[rfReplaceAll]));
-  AssertEquals('dit is een char is een char',StringsReplace('dit Was een sTring was een string',['was','string'],['is','char'],[rfReplaceAll,rfIgnoreCase]));
-  AssertEquals('dit is een char is een char',StringsReplace('dit wAs een STRING was een string',['was','string'],['is','char'],[rfReplaceAll,rfIgnoreCase]));
-
-  AssertEquals('dit was een si was een sa',StringsReplace('dit was een string was een straat',['straat','string'],['sa','si'],[rfReplaceAll]));
-  AssertEquals('dit was een si was een sa',StringsReplace('dit was een string was een straat',['string','straat'],['si','sa'],[rfReplaceAll]));
-
-  AssertEquals('dit was een sing was een saat',StringsReplace('dit was een string was een straat',['str','string'],['s','si'],[rfReplaceAll]));
-  AssertEquals('dit was een si was een saat',StringsReplace('dit was een string was een straat',['string','str'],['si','s'],[rfReplaceAll]));
-
-  AssertEquals('dit was een string was een string',StringsReplace('dit was een string was een string',[''],['is'],[rfReplaceAll]));
-  AssertEquals('dit  een string  een string',StringsReplace('dit was een string was een string',['was'],[''],[rfReplaceAll]));
-end;
-
-procedure TTestFieldTypes.TestCircularParams;
-begin
-  with TSQLDBConnector(dbconnector) do
-    begin
-    Connection.ExecuteDirect('create table FPDEV2 (id1 int, id2 int,vchar varchar(10))');
-    // Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-    Query.sql.Text := 'insert into FPDEV2 values(:id1,:id2,:vchar)';
-    query.params[0].asinteger := 1;
-    query.params[1].asinteger := 1;
-    query.params[2].asstring := '$1 :id2 $';
-    query.ExecSQL;
-    query.sql.text := 'select * from FPDEV2';
-    query.open;
-    AssertEquals(1,query.fields[0].asinteger);
-    AssertEquals(1,query.fields[1].asinteger);
-    AssertEquals('$1 :id2 $',query.fields[2].AsString);
-    query.close;
-    end;
-end;
-
-procedure TTestFieldTypes.Test11Params;
-var i : integer;
-begin
-  with TSQLDBConnector(dbconnector) do
-    begin
-    Connection.ExecuteDirect('create table FPDEV2 (id1 int, id2 int, id3 int, id4 int,id5 int,id6 int,id7 int,id8 int, id9 int, id10 int, id11 int)');
-    // Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
-    TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
-
-    Query.sql.Text := 'insert into FPDEV2 values(:id1,:id2,:id3,:id4,:id5,:id6,:id7,:id8,:id9,:id10,:id11)';
-    for i := 0 to 10 do
-      query.params[i].asinteger := 1;
-    query.ExecSQL;
-    query.sql.text := 'select * from FPDEV2';
-    query.open;
-    for i := 0 to 10 do
-      AssertEquals(1,query.fields[i].asinteger);
-    query.close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestBug9744;
-var i : integer;
-begin
-  if SQLDbType in [interbase,postgresql] then Ignore('This test does not apply to this db-engine, since it has no double field-type');
-
-  with TSQLDBConnector(DBConnector) do
-    begin
-    try
-      Connection.ExecuteDirect('create table TTTOBJ (         ' +
-                                '  ID INT NOT NULL,           ' +
-                                '  NAME VARCHAR(250),         ' +
-                                '  PRIMARY KEY (ID)           ' +
-                                ')                            ');
-      Connection.ExecuteDirect('create table TTTXY (          ' +
-                                '  ID INT NOT NULL,           ' +
-                                '  NP INT NOT NULL,           ' +
-                                '  X DOUBLE,                  ' +
-                                '  Y DOUBLE,                  ' +
-                                '  PRIMARY KEY (ID,NP)        ' +
-                                ')                            ');
-      for i := 0 to 7 do
-        begin
-        connection.ExecuteDirect('insert into TTTOBJ(ID,NAME) values ('+inttostr(i)+',''A'+inttostr(i)+''')');
-        connection.ExecuteDirect('insert into TTTXY(ID,NP,X,Y) values ('+inttostr(i)+',1,1,1)');
-        connection.ExecuteDirect('insert into TTTXY(ID,NP,X,Y) values ('+inttostr(i)+',2,2,2)');
-        end;
-      Query.SQL.Text := 'select OBJ.ID, OBJ.NAME, count(XY.NP) as NPF from TTTOBJ as OBJ, TTTXY as XY where (OBJ.ID=XY.ID) group by OBJ.ID';
-      query.Prepare;
-      query.open;
-      query.close;
-    finally
-      Connection.ExecuteDirect('drop table TTTXY');
-      Connection.ExecuteDirect('drop table TTTOBJ');
-      end
-    end;
-end;
-
-procedure TTestFieldTypes.TestCrossStringDateParam;
-begin
-  TestXXParamQuery(ftDate,'DATE',testDateValuesCount,True);
-end;
-
-procedure TTestFieldTypes.TestGetFieldNames;
-var FieldNames : TStringList;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    FieldNames := TStringList.Create;
-    try
-      if SQLDbType in MySQLdbTypes then
-        Connection.GetFieldNames('FPDEV',FieldNames)
-      else
-        Connection.GetFieldNames('fpDEv',FieldNames);
-      AssertEquals(2,FieldNames.Count);
-      AssertEquals('ID',UpperCase(FieldNames[0]));
-      AssertEquals('NAME',UpperCase(FieldNames[1]));
-    finally
-      FieldNames.Free;
-      end;
-    end;
-end;
-
-procedure TTestFieldTypes.TestGetTables;
-var TableNames : TStringList;
-begin
-  with TSQLDBConnector(DBConnector) do
-    begin
-    TableNames := TStringList.Create;
-    try
-      Connection.GetTableNames(TableNames);
-      AssertTrue(TableNames.Count>0);
-      AssertTrue(TableNames.IndexOf('FPDEV')>-1);
-      AssertTrue(TableNames.IndexOf('FPDEV_FIELD')>-1);
-    finally
-      TableNames.Free;
-      end;
-    end;
-end;
-
-procedure TTestFieldTypes.TestUpdateIndexDefs;
-var ds : TSQLQuery;
-begin
-  ds := DBConnector.GetNDataset(1) as TSQLQuery;
-  ds.Prepare;
-  ds.IndexDefs.Update;
-  AssertEquals(1,ds.IndexDefs.count);
-  AssertTrue(CompareText('ID',ds.indexdefs[0].Fields)=0);
-  Asserttrue(ds.indexdefs[0].Options=[ixPrimary,ixUnique]);
-  ds.IndexDefs.Update;
-  AssertEquals(1,ds.IndexDefs.count);
-  AssertTrue(CompareText('ID',ds.indexdefs[0].Fields)=0);
-  Asserttrue(ds.indexdefs[0].Options=[ixPrimary,ixUnique]);
-end;
-
-procedure TTestFieldTypes.TestSetBlobAsMemoParam;
-var
-  i             : byte;
-  ASQL          : TSQLQuery;
-
-begin
-  CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
-  TestFieldDeclaration(ftBlob,0);
-
-  ASQL := DBConnector.GetNDataset(True,1) as tsqlquery;
-  with ASql  do
-    begin
-    sql.Text := 'insert into FPDEV2 (FT) values (:BlobParam)';
-    Params.ParamByName('blobParam').AsMemo := 'Test deze BLob';
-    ExecSQL;
-    end;
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    Open;
-    if not eof then
-      AssertEquals('Test deze BLob',fields[0].AsString);
-    close;
-    end;
-
-end;
-
-procedure TTestFieldTypes.TestTemporaryTable;
-begin
-  if SQLDbType=interbase then Ignore('This test does not apply to Interbase/Firebird, since it doesn''t support temporary tables');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    SQL.Clear;
-    SQL.Add('CREATE TEMPORARY TABLE TEMP1 (id int)');
-    ExecSQL;
-    SQL.Text :=  'INSERT INTO TEMP1(id) values (5)';
-    ExecSQL;
-    SQL.Text := 'SELECT * FROM TEMP1';
-    Open;
-    AssertEquals(5,fields[0].AsInteger);
-    Close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestGetIndexDefs;
-
-var ds : TSQLQuery;
-    inddefs : TIndexDefs;
-
-begin
-  ds := DBConnector.GetNDataset(1) as TSQLQuery;
-  ds.Open;
-  AssertEquals(1,ds.IndexDefs.count);
-  inddefs := HackedDataset(ds).GetIndexDefs(ds.IndexDefs,[ixPrimary]);
-  AssertEquals(1,inddefs.count);
-  AssertTrue(CompareText('ID',inddefs[0].Fields)=0);
-  Asserttrue(inddefs[0].Options=[ixPrimary,ixUnique]);
-  inddefs.Free;
-
-  inddefs := HackedDataset(ds).GetIndexDefs(ds.IndexDefs,[ixPrimary,ixUnique]);
-  AssertEquals(1,inddefs.count);
-  AssertTrue(CompareText('ID',inddefs[0].Fields)=0);
-  Asserttrue(inddefs[0].Options=[ixPrimary,ixUnique]);
-  inddefs.Free;
-
-  inddefs := HackedDataset(ds).GetIndexDefs(ds.IndexDefs,[ixDescending]);
-  AssertEquals(0,inddefs.count);
-  inddefs.Free;
-end;
-
-procedure TTestFieldTypes.TestDblQuoteEscComments;
-begin
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    SQL.Clear;
-    SQL.Add('select * from FPDEV where name=''test '''' and :ThisIsNotAParameter  ''');
-    open;
-    close;
-    end;
-end;
-
-procedure TTestFieldTypes.TestParametersAndDates;
-// See bug 7205
-var ADateStr : String;
-begin
-  if SQLDbType in [interbase,mysql40,mysql41,mysql50] then Ignore('This test does not apply to this sqldb-connection type, since it doesn''t use semicolons for casts');
-
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    SQL.Clear;
-    sql.add('select now()::date as current_date where 1=1');
-    open;
-    first;
-    ADateStr:=fields[0].asstring; // return the correct date
-    // writeln(fields[0].asstring);
-    close;
-
-    sql.clear;
-    sql.add('select now()::date as current_date where cast(1 as integer) = :PARAM1');
-    params.parambyname('PARAM1').asinteger:= 1;
-    open;
-    first;
-    AssertEquals(ADateStr,fields[0].asstring); // return invalid date
-    // writeln(fields[0].asstring);
-    close;
-
-    end
-end;
-
-procedure TTestFieldTypes.TestExceptOnsecClose;
-
-var passed : boolean;
-
-begin
-  with TSQLDBConnector(DBConnector).Query do
-    begin
-    SQL.Clear;
-    SQL.Add('select * from FPDEV');
-
-    Open;
-    close;
-    
-    SQL.Clear;
-    SQL.Add('select blaise from FPDEV');
-    passed := false;
-    try
-      open;
-    except
-      on E: Exception do
-        passed := (E.ClassType.InheritsFrom(EDatabaseError))
-      end;
-    AssertTrue(passed);
-
-    Close;
-    end;
-end;
-
-initialization
-  if uppercase(dbconnectorname)='SQL' then RegisterTest(TTestFieldTypes);
-end.
-

+ 12 - 9
packages/fcl-fpcunit/src/digesttestreport.pp

@@ -86,7 +86,9 @@ type
     FTestResult : TTestStatus;
     FOutputDir : String;
     FHostName : String;
-  private
+    FComment : String;
+    FCategory : String;
+    FRelSrcDir: string;
     procedure CreateTar;
   public
   {ITestListener}
@@ -96,6 +98,10 @@ type
     procedure EndTest(ATest: TTest); override;
     procedure StartTestSuite(ATestSuite: TTestSuite); override;
     procedure EndTestSuite(ATestSuite: TTestSuite); override;
+    
+    property Comment: string read FComment write FComment;
+    property Category: string read FCategory write FCategory;
+    property RelSrcDir: string read FRelSrcDir write FRelSrcDir;
   end;
   
 implementation
@@ -223,7 +229,7 @@ var TarWriter : TTarWriter;
 
 
 begin
-  TarFileName:= FHostName+FormatDateTime('yyyymmddhhmm',Now)+'.tar.gz';
+  TarFileName:= FHostName+'-'+FormatDateTime('yyyymmddhhmm',Now)+'.tar.gz';
   getdir(0,OldDir);
   Chdir(FOutputDir);
   
@@ -306,7 +312,6 @@ end;
 
 procedure TDigestResultsWriter.EndTestSuite(ATestSuite: TTestSuite);
 var DigestFileName : String;
-    Comment        : String;
     i              : byte;
 begin
   if ATestSuite.TestName='' then
@@ -319,13 +324,11 @@ begin
     AddLog(DigestFileName,'Submitter='+sysutils.GetEnvironmentVariable('USER'));
     FHostName:=sysutils.GetEnvironmentVariable('HOSTNAME');
     if pos('.',FHostName)>0 then
-      FHostName:=system.Copy(FHostName,1,pos('.',FHostName));
+      FHostName:=system.Copy(FHostName,1,pos('.',FHostName)-1);
     AddLog(DigestFileName,'Machine='+FHostName);
-    
-    Comment:='';
-    for i := 1 to Paramcount do
-      Comment:=Comment+ParamStr(i)+' ';
-    AddLog(DigestFileName,'Comment='+Comment);
+    AddLog(DigestFileName,'Comment='+FComment);
+    AddLog(DigestFileName,'Category='+FCategory);
+    AddLog(DigestFileName,'RelSrcDir='+FRelSrcDir);
 // Create .tar.gz file
     CreateTar;
     end;

+ 27 - 3
tests/utils/dbdigest.pp

@@ -68,12 +68,14 @@ TConfigOpt = (
   coLogFile,
   coOS,
   coCPU,
+  coCategory,
   coVersion,
   coDate,
   coSubmitter,
   coMachine,
   coComment,
   coTestSrcDir,
+  coRelSrcDir,
   coVerbose
  );
 
@@ -87,22 +89,25 @@ ConfigStrings : Array [TConfigOpt] of string = (
   'logfile',
   'os',
   'cpu',
+  'category',
   'version',
   'date',
   'submitter',
   'machine',
   'comment',
   'testsrcdir',
+  'relsrcdir',
   'verbose'
 );
 
 ConfigOpts : Array[TConfigOpt] of char
-           = ('d','h','u','p','l','o','c','v','t','s','m','C','S','V');
+           = ('d','h','u','p','l','o','c','a','v','t','s','m','C','S','r','V');
 
 Var
   TestOS,
   TestCPU,
   TestVersion,
+  TestCategory,
   DatabaseName,
   HostName,
   UserName,
@@ -125,6 +130,7 @@ begin
     coLogFile      : LogFileName:=Value;
     coOS           : TestOS:=Value;
     coCPU          : TestCPU:=Value;
+    coCategory     : TestCategory:=Value;
     coVersion      : TestVersion:=Value;
     coDate         : 
       begin
@@ -150,7 +156,15 @@ begin
         TestSrcDir:=Value;
 	if (TestSrcDir<>'') and (TestSrcDir[length(TestSrcDir)]<>'/') then
 	  TestSrcDir:=TestSrcDir+'/';
-      end;	  
+      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;
 
@@ -190,6 +204,9 @@ Var
   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);
@@ -258,6 +275,7 @@ Var
   TestCPUID : Integer;
   TestOSID  : Integer;
   TestVersionID  : Integer;
+  TestCategoryID : Integer;
   TestRunID : Integer;
 
 Procedure GetIDs;
@@ -269,6 +287,12 @@ begin
   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.');
@@ -277,7 +301,7 @@ begin
   TestRunID:=GetRunID(TestOSID,TestCPUID,TestVersionID,TestDate);
   If (TestRunID=-1) then
     begin
-    TestRunID:=AddRun(TestOSID,TestCPUID,TestVersionID,TestDate);
+    TestRunID:=AddRun(TestOSID,TestCPUID,TestVersionID,TestCategoryID,TestDate);
     If TestRUnID=-1 then
       Verbose(V_Error,'Could not insert new testrun record!');
     end

+ 99 - 9
tests/utils/dbtests.pp

@@ -20,9 +20,10 @@ Uses
 Function GetTestID(Name : string) : Integer;
 Function GetOSID(Name : String) : Integer;
 Function GetCPUID(Name : String) : Integer;
+Function GetCategoryID(Name : String) : Integer;
 Function GetVersionID(Name : String) : Integer;
 Function GetRunID(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer;
-Function AddRun(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer;
+Function AddRun(OSID, CPUID, VERSIONID, CATEGORYID : Integer; Date : TDateTime) : Integer;
 Function AddTest(Name : String; AddSource : Boolean) : Integer;
 Function UpdateTest(ID : Integer; Info : TConfig; Source : String) : Boolean;
 Function AddTestResult(TestID,RunID,TestRes : Integer;
@@ -49,8 +50,9 @@ Function  EscapeSQL( S : String) : String;
 Function SQLDate(D : TDateTime) : String;
 
 var
+  RelSrcDir,
   TestSrcDir : string;
-  
+
 Implementation
 
 Uses
@@ -105,7 +107,7 @@ Function RunQuery (Qry : String; Var res : TQueryResult) : Boolean ;
 
 begin
   Verbose(V_DEBUG,'Running query:'+Qry);
-  Result:=mysql_query(@Connection,PChar(qry))>=0;
+  Result:=mysql_query(@Connection,PChar(qry))=0;
   If Not Result then
     Verbose(V_WARNING,'Query : '+Qry+'Failed : '+Strpas(mysql_error(@connection)))
   else
@@ -207,6 +209,14 @@ begin
   Result:=IDQuery(Format(SFromName,[Name]));
 end;
 
+Function GetCategoryID(Name : String) : Integer;
+
+Const
+  SFromName = 'SELECT TCAT_ID FROM TESTCATEGORY WHERE (TCAT_NAME="%s")';
+
+begin
+  Result:=IDQuery(Format(SFromName,[Name]));
+end;
 
 Function GetRunID(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer;
 
@@ -222,24 +232,103 @@ begin
   Result:=IDQuery(Format(SFromIDS,[OSID,CPUID,VERSIONID,SQLDate(Date)]));
 end;
 
-Function AddRun(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer;
+Function AddRun(OSID, CPUID, VERSIONID, CATEGORYID : Integer; Date : TDateTime) : Integer;
 
 Const
   SInsertRun = 'INSERT INTO TESTRUN '+
-               '(TU_OS_FK,TU_CPU_FK,TU_VERSION_FK,TU_DATE)'+
+               '(TU_OS_FK,TU_CPU_FK,TU_VERSION_FK,TU_CATEGORY_FK,TU_DATE)'+
                ' VALUES '+
-               '(%d,%d,%d,"%s")';
+               '(%d,%d,%d,%d,"%s")';
 
 Var
   Res : TQueryResult;
 
 begin
-  If RunQuery(Format(SInsertRun,[OSID,CPUID,VERSIONID,SQLDate(Date)]),Res) then
+  If RunQuery(Format(SInsertRun,[OSID,CPUID,VERSIONID,CATEGORYID,SQLDate(Date)]),Res) then
     Result:=mysql_insert_id(@connection)
   else
     Result:=-1;
 end;
 
+function posr(c : Char; const s : AnsiString) : integer;
+var
+  i : integer;
+begin
+  i := length(s);
+  while (i>0) and (s[i] <> c) do dec(i);
+  Result := i;
+end;
+
+function GetUnitTestConfig(const fn : string; var r : TConfig) : Boolean;
+var
+  Path       : string;
+  ClassName  : string;
+  MethodName : string;
+  slashpos   : integer;
+  FileName   : string;
+  s          : string;
+  t          : text;
+begin
+  Result := False;
+  FillChar(r,sizeof(r),0);
+  if pos('.',fn) > 0 then exit; // This is normally not a unit-test
+  slashpos := posr('/',fn);
+  if slashpos < 1 then exit;
+  MethodName := copy(fn,slashpos+1,length(fn));
+  Path := copy(fn,1,slashpos-1);
+  slashpos := posr('/',Path);
+  if slashpos > 0 then
+    begin
+    ClassName := copy(Path,slashpos+1,length(Path));
+    Path := copy(Path,1,slashpos-1);
+    end
+  else
+    begin
+    ClassName := Path;
+    path := '.';
+    end;
+  if upper(ClassName[1])<>'T' then exit;
+  FileName := TestSrcDir+RelSrcDir+Path+DirectorySeparator+copy(lowercase(ClassName),2,length(classname));
+  if FileExists(FileName+'.pas') then
+    FileName := FileName + '.pas'
+  else if FileExists(FileName+'.pp') then
+    FileName := FileName + '.pp'
+  else exit;
+  
+  Verbose(V_Debug,'Reading '+FileName);
+  assign(t,FileName);
+  {$I-}
+   reset(t);
+  {$I+}
+  if ioresult<>0 then
+   begin
+     Verbose(V_Error,'Can''t open '+FileName);
+     exit;
+   end;
+  while not eof(t) do
+   begin
+     readln(t,s);
+
+     if s<>'' then
+      begin
+        TrimB(s);
+        if SameText(copy(s,1,9),'PROCEDURE') then
+         begin
+           if pos(';',s)>11 then
+            begin
+              s := copy(s,11,pos(';',s)-11);
+              TrimB(s);
+              if SameText(s,ClassName+'.'+MethodName) then
+               begin
+                 Result := True;
+                 r.Note:= 'unittest';
+               end;
+            end;
+         end;
+      end;
+   end;
+  close(t);
+end;
 
 Function AddTest(Name : String; AddSource : Boolean) : Integer;
 
@@ -253,8 +342,9 @@ Var
 
 begin
   Result:=-1;
-  If FileExists(TestSrcDir+Name) and
-     GetConfig(TestSrcDir+Name,Info) then
+  If (FileExists(TestSrcDir+RelSrcDir+Name) and
+     GetConfig(TestSrcDir+RelSrcDir+Name,Info)) or
+     GetUnitTestConfig(Name,Info) then
     begin
     If RunQuery(Format(SInsertTest,[Name]),Res) then
       begin