Browse Source

* Data dictionary diff mechanism

git-svn-id: trunk@11544 -
michael 17 years ago
parent
commit
2f284f40b5

+ 1 - 0
.gitattributes

@@ -1173,6 +1173,7 @@ packages/fcl-db/src/datadict/buildd.lpi svneol=native#text/plain
 packages/fcl-db/src/datadict/buildd.lpr svneol=native#text/plain
 packages/fcl-db/src/datadict/fpdatadict.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpdddbf.pp svneol=native#text/plain
+packages/fcl-db/src/datadict/fpdddiff.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddfb.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddmysql40.pp svneol=native#text/plain
 packages/fcl-db/src/datadict/fpddmysql41.pp svneol=native#text/plain

+ 59 - 59
packages/fcl-db/src/datadict/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/07/30]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/06/23]
 #
 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 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
@@ -261,178 +261,178 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F
 override PACKAGE_NAME=fcl-db
 PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Makefile.fpc,$(PACKAGESDIR))))))
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddsqlite3
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddsqlite3
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddodbc fpddsqlite3
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddodbc fpddsqlite3
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddsqlite3
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddsqlite3
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=fpdatadict fpdddbf fpddsqldb
+override TARGET_UNITS+=fpdatadict fpdddiff fpdddbf fpddsqldb
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=fpdatadict fpddfb fpddsqldb  fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd

+ 1 - 1
packages/fcl-db/src/datadict/Makefile.fpc

@@ -17,7 +17,7 @@ packages_wince=ibase mysql oracle sqlite odbc postgres
 packages_win64=sqlite odbc
 
 [target]
-units=fpdatadict fpdddbf fpddsqldb
+units=fpdatadict fpdddiff fpdddbf fpddsqldb
 units_linux=fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 units_freebsd=fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd
 units_darwin=fpddfb fpddmysql40 fpddmysql41 fpddmysql50 fpddodbc fpddpq fpddoracle fpddsqlite3 fpddregstd

+ 219 - 0
packages/fcl-db/src/datadict/fpdddiff.pp

@@ -0,0 +1,219 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2008 by the Free Pascal development team
+
+    Data Dictionary diff mechanism, compare 2 data dictionaries.
+
+    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.
+
+ **********************************************************************}
+unit fpdddiff;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, fpdatadict;
+
+type
+
+  TDiffKind = (DiffTables, DiffFields, DiffIndexes);
+  TDiffKindSet = set of TDiffKind;
+
+  TDifferenceType = (dtMissing, dtDifferent, dtSurplus);
+  
+const
+  diffAll = [DiffTables, DiffFields, DiffIndexes];
+  
+type
+  
+  { TCustomDDDiffer }
+
+  TCustomDDDiffer = class
+  private
+    FSourceDD: TFPdatadictionary;
+    FTargetDD: TFPdatadictionary;
+  protected
+    procedure TableDifference (DiffType: TDifferenceType; SourceTable, TargetTable: TDDTableDef); virtual;
+    procedure IndexDifference (DiffType: TDifferenceType; SourceIndex, TargetIndex: TDDIndexDef); virtual;
+    procedure FieldDifference (DiffType: TDifferenceType; SourceField, TargetField: TDDFieldDef); virtual;
+    procedure CompareTables (Kind: TDiffKindSet);
+    procedure CompareTable (TableName: string; Kind: TDiffKindSet);
+    procedure CompareFields (Source, Target: TDDFieldDefs; Kind: TDiffKindSet);
+    procedure CompareField (Source, Target: TDDFieldDefs; Fieldname: string; Kind: TDiffKindSet);
+    procedure CompareIndexes (Source, Target: TDDIndexDefs; Kind: TDiffKindSet);
+    procedure CompareIndex (Source, Target: TDDIndexDefs; Indexname: string; Kind: TDiffKindSet);
+  public
+    procedure Compare (Kind: TDiffKindSet);
+    property SourceDD : TFPdatadictionary read FSourceDD write FSourceDD;
+    property TargetDD : TFPdatadictionary read FTargetDD write FTargetDD;
+  end;
+  
+  EDataDictDiff = Class(EDataDict);
+  
+implementation
+
+uses db;
+
+resourcestring
+  SErrMissingDatadict = 'Source and/or target datadictionary not assigned.';
+
+{ TCustomDDDiffer }
+
+procedure TCustomDDDiffer.TableDifference(DiffType: TDifferenceType;
+  SourceTable, TargetTable: TDDTableDef);
+begin
+end;
+
+procedure TCustomDDDiffer.IndexDifference(DiffType: TDifferenceType;
+  SourceIndex, TargetIndex: TDDIndexDef);
+begin
+end;
+
+procedure TCustomDDDiffer.FieldDifference(DiffType: TDifferenceType;
+  SourceField, TargetField: TDDFieldDef);
+begin
+end;
+
+procedure TCustomDDDiffer.CompareTables(Kind: TDiffKindSet);
+var
+  Tablenames : TStringlist;
+  r : integer;
+begin
+  Tablenames := TStringlist.Create;
+  try
+    TableNames.Duplicates:=dupIgnore;
+    TableNames.sorted := true;
+    for r := 0 to SourceDD.Tables.Count-1 do
+      TableNames.Add (SourceDD.Tables[r].TableName);
+    for r := 0 to TargetDD.Tables.Count-1 do
+      TableNames.Add (TargetDD.Tables[r].TableName);
+    for r := 0 to TableNames.count-1 do
+      CompareTable (TableNames[r], Kind);
+  finally
+    Tablenames.Free;
+  end;
+end;
+
+procedure TCustomDDDiffer.CompareTable(TableName: string; Kind: TDiffKindSet);
+var
+  SourceTable, TargetTable : TDDTableDef;
+begin
+  SourceTable := FSourceDD.Tables.FindTable(TableName);
+  TargetTable := FTargetDD.Tables.FindTable(TableName);
+  if Not assigned (TargetTable) then
+    begin
+    if DiffTables in Kind then
+      TableDifference (dtMissing, SourceTable, nil);
+    end
+  else if not assigned (SourceTable) then
+    begin
+    if DiffTables in Kind then
+      TableDifference (dtSurplus, nil, TargetTable);
+    end
+  else
+    begin  // table exists in source and target, compare fields and Indexes
+    if DiffFields in Kind then
+      CompareFields (SourceTable.Fields, TargetTable.Fields, Kind);
+    if DiffIndexes in Kind then
+      CompareIndexes(SourceTable.Indexes, TargetTable.Indexes, Kind);
+    end;
+end;
+
+procedure TCustomDDDiffer.CompareFields(Source, Target: TDDFieldDefs;
+  Kind: TDiffKindSet);
+var
+  FieldList : TStringlist;
+  r : integer;
+begin
+  FieldList := TStringlist.Create;
+  try
+    FieldList.Duplicates := dupIgnore;
+    FieldList.Sorted := true;
+    for r := 0 to Source.Count-1 do
+      FieldList.Add (Source[r].FieldName);
+    for r := 0 to Target.Count-1 do
+      FieldList.Add (Target[r].FieldName);
+    for r := 0 to FieldList.count-1 do
+      CompareField(Source, Target, FieldList[r], Kind);
+  finally
+    FieldList.Free;
+  end;
+end;
+
+procedure TCustomDDDiffer.CompareField(Source, Target: TDDFieldDefs;
+  Fieldname: string; Kind: TDiffKindSet);
+var
+  SourceField, TargetField : TDDFieldDef;
+begin
+  SourceField := Source.FindField(FieldName);
+  TargetField := Target.FindField(FieldName);
+  if not assigned (TargetField) then
+    FieldDifference(dtMissing, SourceField, nil)
+  else if not assigned (SourceField) then
+    FieldDifference(dtSurplus, nil, TargetField)
+  else if ( (SourceField.FieldType <> TargetField.FieldType) and
+            ( (SourceField.FieldType in [ftFixedChar,ftString]) <> (TargetField.FieldType in [ftFixedChar,ftString]) )
+          ) or
+          (SourceField.required <> TargetField.required) or
+//          (SourceField.DefaultExpression <> TargetField.DefaultExpression) or
+          ((SourceField.Size <> TargetField.Size) and not (SourceField.Fieldtype in [ftBlob])) or
+          (SourceField.Precision <> TargetField.Precision) then
+    FieldDifference(dtDifferent, SourceField, TargetField)
+end;
+
+procedure TCustomDDDiffer.CompareIndexes(Source, Target: TDDIndexDefs;
+  Kind: TDiffKindSet);
+var
+  IndexList : TStringlist;
+  r : integer;
+begin
+  IndexList := TStringlist.Create;
+  try
+    IndexList.Duplicates := dupIgnore;
+    IndexList.Sorted := true;
+    for r := 0 to Source.Count-1 do
+      IndexList.Add (Source[r].IndexName);
+    for r := 0 to Target.Count-1 do
+      IndexList.Add (Target[r].IndexName);
+    for r := 0 to IndexList.count-1 do
+      CompareIndex(Source, Target, IndexList[r], Kind);
+  finally
+    IndexList.Free;
+  end;
+end;
+
+procedure TCustomDDDiffer.CompareIndex(Source, Target: TDDIndexDefs;
+  Indexname: string; Kind: TDiffKindSet);
+var
+  SourceIndex, TargetIndex : TDDIndexDef;
+begin
+  SourceIndex := Source.FindIndex(IndexName);
+  TargetIndex := Target.FindIndex(IndexName);
+  if not assigned (TargetIndex) then
+    IndexDifference(dtMissing, SourceIndex, nil)
+  else if not assigned (SourceIndex) then
+    IndexDifference(dtSurplus, nil, TargetIndex)
+  else if (CompareText(SourceIndex.Expression,TargetIndex.Expression) <> 0) or
+          (CompareText(SourceIndex.Fields,TargetIndex.Fields) <> 0) or
+          (SourceIndex.Options <> TargetIndex.Options) or
+          (CompareText(SourceIndex.DescFields,TargetIndex.DescFields) <> 0) or
+          (CompareText(SourceIndex.CaseInsFields,TargetIndex.CaseInsFields) <> 0) then
+    IndexDifference(dtDifferent, SourceIndex, TargetIndex)
+end;
+
+procedure TCustomDDDiffer.Compare (Kind: TDiffKindSet);
+begin
+  if not assigned (FSourceDD) or not assigned (FTargetDD) then
+    raise EDataDictDiff.Create(SErrMissingDatadict);
+  CompareTables (Kind);
+end;
+
+end.
+