Browse Source

--- Merging r14787 into '.':
U packages/fcl-db/src/base/bufdataset.pas
U packages/fcl-db/src/base/bufdataset_parser.pp
U packages/fcl-db/src/base/dbconst.pas
--- Merging r14855 into '.':
U packages/fcl-db/tests/testfieldtypes.pas
U packages/fcl-db/tests/testdbbasics.pas
U packages/fcl-db/tests/testbufdatasetstreams.pas
U packages/fcl-db/src/sqldb/sqldb.pp
U packages/fcl-db/src/base/xmldatapacketreader.pp
G packages/fcl-db/src/base/bufdataset.pas
--- Merging r15005 into '.':
G packages/fcl-db/tests/testdbbasics.pas
G packages/fcl-db/src/base/bufdataset.pas
--- Merging r15006 into '.':
U packages/fcl-db/src/base/fields.inc
--- Merging r15007 into '.':
U packages/fcl-db/src/sqldb/interbase/ibconnection.pp

git-svn-id: branches/fixes_2_4@15209 -

joost 15 years ago
parent
commit
d32c60f746

+ 123 - 111
packages/fcl-db/src/base/bufdataset.pas

@@ -24,9 +24,9 @@ interface
 uses Classes,Sysutils,db,bufdataset_parser;
 uses Classes,Sysutils,db,bufdataset_parser;
 
 
 type
 type
-  TBufDataset = Class;
+  TCustomBufDataset = Class;
 
 
-  TResolverErrorEvent = procedure(Sender: TObject; DataSet: TBufDataset; E: EUpdateError;
+  TResolverErrorEvent = procedure(Sender: TObject; DataSet: TCustomBufDataset; E: EUpdateError;
     UpdateKind: TUpdateKind; var Response: TResolverResponse) of object;
     UpdateKind: TUpdateKind; var Response: TResolverResponse) of object;
 
 
   { TBufBlobStream }
   { TBufBlobStream }
@@ -43,7 +43,7 @@ type
   private
   private
     FBlobBuffer : PBlobBuffer;
     FBlobBuffer : PBlobBuffer;
     FPosition   : ptrint;
     FPosition   : ptrint;
-    FDataset    : TBufDataset;
+    FDataset    : TCustomBufDataset;
   protected
   protected
     function Read(var Buffer; Count: Longint): Longint; override;
     function Read(var Buffer; Count: Longint): Longint; override;
     function Write(const Buffer; Count: Longint): Longint; override;
     function Write(const Buffer; Count: Longint): Longint; override;
@@ -52,7 +52,7 @@ type
     constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
     constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
   end;
   end;
 
 
-  { TBufDataset }
+  { TCustomBufDataset }
 
 
   PBufRecLinkItem = ^TBufRecLinkItem;
   PBufRecLinkItem = ^TBufRecLinkItem;
   TBufRecLinkItem = record
   TBufRecLinkItem = record
@@ -108,7 +108,7 @@ type
 
 
   TBufIndex = class(TObject)
   TBufIndex = class(TObject)
   private
   private
-    FDataset : TBufDataset;
+    FDataset : TCustomBufDataset;
   protected
   protected
     function GetBookmarkSize: integer; virtual; abstract;
     function GetBookmarkSize: integer; virtual; abstract;
     function GetCurrentBuffer: Pointer; virtual; abstract;
     function GetCurrentBuffer: Pointer; virtual; abstract;
@@ -125,7 +125,7 @@ type
     DescFields      : String;
     DescFields      : String;
     Options         : TIndexOptions;
     Options         : TIndexOptions;
     IndNr           : integer;
     IndNr           : integer;
-    constructor Create(const ADataset : TBufDataset); virtual;
+    constructor Create(const ADataset : TCustomBufDataset); virtual;
     function ScrollBackward : TGetResult; virtual; abstract;
     function ScrollBackward : TGetResult; virtual; abstract;
     function ScrollForward : TGetResult;  virtual; abstract;
     function ScrollForward : TGetResult;  virtual; abstract;
     function GetCurrent : TGetResult;  virtual; abstract;
     function GetCurrent : TGetResult;  virtual; abstract;
@@ -249,7 +249,7 @@ type
     FRecordArray    : array of Pointer;
     FRecordArray    : array of Pointer;
     FLastRecInd     : integer;
     FLastRecInd     : integer;
     FNeedScroll     : Boolean;
     FNeedScroll     : Boolean;
-    constructor Create(const ADataset: TBufDataset); override;
+    constructor Create(const ADataset: TCustomBufDataset); override;
     function ScrollBackward : TGetResult; override;
     function ScrollBackward : TGetResult; override;
     function ScrollForward : TGetResult; override;
     function ScrollForward : TGetResult; override;
     function GetCurrent : TGetResult; override;
     function GetCurrent : TGetResult; override;
@@ -312,7 +312,7 @@ type
     // Returns if there is at least one more record available in the stream
     // Returns if there is at least one more record available in the stream
     function GetCurrentRecord : boolean; virtual; abstract;
     function GetCurrentRecord : boolean; virtual; abstract;
     // Store a record from stream in the current record-buffer
     // Store a record from stream in the current record-buffer
-    procedure RestoreRecord(ADataset : TBufDataset); virtual; abstract;
+    procedure RestoreRecord(ADataset : TCustomBufDataset); virtual; abstract;
     // Move the stream to the next record
     // Move the stream to the next record
     procedure GotoNextRecord; virtual; abstract;
     procedure GotoNextRecord; virtual; abstract;
 
 
@@ -320,7 +320,7 @@ type
     // Save the field-definitions to a stream.
     // Save the field-definitions to a stream.
     procedure StoreFieldDefs(AFieldDefs : TFieldDefs); virtual; abstract;
     procedure StoreFieldDefs(AFieldDefs : TFieldDefs); virtual; abstract;
     // Save a record from the current record-buffer to the stream
     // Save a record from the current record-buffer to the stream
-    procedure StoreRecord(ADataset : TBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); virtual; abstract;
+    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); virtual; abstract;
     // Is called after all records are stored
     // Is called after all records are stored
     procedure FinalizeStoreRecords; virtual; abstract;
     procedure FinalizeStoreRecords; virtual; abstract;
     // Checks if the provided stream is of the right format for this class
     // Checks if the provided stream is of the right format for this class
@@ -339,12 +339,12 @@ type
     function GetCurrentRecord : boolean; override;
     function GetCurrentRecord : boolean; override;
     procedure GotoNextRecord; override;
     procedure GotoNextRecord; override;
     procedure InitLoadRecords; override;
     procedure InitLoadRecords; override;
-    procedure RestoreRecord(ADataset : TBufDataset); override;
-    procedure StoreRecord(ADataset : TBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
+    procedure RestoreRecord(ADataset : TCustomBufDataset); override;
+    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
   end;
   end;
 
 
-  TBufDataset = class(TDBDataSet)
+  TCustomBufDataset = class(TDBDataSet)
   private
   private
     FFileName: string;
     FFileName: string;
     FFileStream     : TFileStream;
     FFileStream     : TFileStream;
@@ -485,6 +485,12 @@ type
     property IndexFieldNames : String read GetIndexFieldNames write SetIndexFieldNames;
     property IndexFieldNames : String read GetIndexFieldNames write SetIndexFieldNames;
   end;
   end;
 
 
+  TBufDataset = class(TCustomBufDataset)
+  published
+    property FieldDefs;
+  end;
+
+
 procedure RegisterDatapacketReader(ADatapacketReaderClass : TDatapacketReaderClass; AFormat : TDataPacketFormat);
 procedure RegisterDatapacketReader(ADatapacketReaderClass : TDatapacketReaderClass; AFormat : TDataPacketFormat);
 
 
 implementation
 implementation
@@ -526,9 +532,12 @@ begin
 end;
 end;
 
 
 function DBCompareText(subValue, aValue: pointer; options: TLocateOptions): LargeInt;
 function DBCompareText(subValue, aValue: pointer; options: TLocateOptions): LargeInt;
-
 begin
 begin
-  if loCaseInsensitive in options then
+  if [loCaseInsensitive,loPartialKey]=options then
+    Result := AnsiStrLIComp(pchar(subValue),pchar(aValue),length(pchar(subValue)))
+  else if [loPartialKey] = options then
+    Result := AnsiStrLComp(pchar(subValue),pchar(aValue),length(pchar(subValue)))
+  else if [loCaseInsensitive] = options then
     Result := AnsiCompareText(pchar(subValue),pchar(aValue))
     Result := AnsiCompareText(pchar(subValue),pchar(aValue))
   else
   else
     Result := AnsiCompareStr(pchar(subValue),pchar(aValue));
     Result := AnsiCompareStr(pchar(subValue),pchar(aValue));
@@ -627,10 +636,10 @@ begin
 end;
 end;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
-    TBufDataSet
+    TCustomBufDataset
   ---------------------------------------------------------------------}
   ---------------------------------------------------------------------}
 
 
-constructor TBufDataset.Create(AOwner : TComponent);
+constructor TCustomBufDataset.Create(AOwner : TComponent);
 begin
 begin
   Inherited Create(AOwner);
   Inherited Create(AOwner);
   FMaxIndexesCount:=2;
   FMaxIndexesCount:=2;
@@ -649,13 +658,13 @@ begin
   FPacketRecords := 10;
   FPacketRecords := 10;
 end;
 end;
 
 
-procedure TBufDataset.SetPacketRecords(aValue : integer);
+procedure TCustomBufDataset.SetPacketRecords(aValue : integer);
 begin
 begin
   if (aValue = -1) or (aValue > 0) then FPacketRecords := aValue
   if (aValue = -1) or (aValue > 0) then FPacketRecords := aValue
     else DatabaseError(SInvPacketRecordsValue);
     else DatabaseError(SInvPacketRecordsValue);
 end;
 end;
 
 
-destructor TBufDataset.Destroy;
+destructor TCustomBufDataset.Destroy;
 
 
 Var
 Var
   I : Integer;
   I : Integer;
@@ -671,13 +680,13 @@ begin
   inherited destroy;
   inherited destroy;
 end;
 end;
 
 
-procedure TBufDataset.FetchAll;
+procedure TCustomBufDataset.FetchAll;
 begin
 begin
   repeat
   repeat
   until (getnextpacket < FPacketRecords) or (FPacketRecords = -1);
   until (getnextpacket < FPacketRecords) or (FPacketRecords = -1);
 end;
 end;
 
 
-procedure TBufDataset.BuildIndex(var AIndex: TBufIndex);
+procedure TCustomBufDataset.BuildIndex(var AIndex: TBufIndex);
 
 
 var PCurRecLinkItem : PBufRecLinkItem;
 var PCurRecLinkItem : PBufRecLinkItem;
     p,l,q           : PBufRecLinkItem;
     p,l,q           : PBufRecLinkItem;
@@ -861,13 +870,13 @@ begin
   (AIndex as TDoubleLinkedBufIndex).FLastRecBuf[(AIndex as TDoubleLinkedBufIndex).IndNr].prior:=l;
   (AIndex as TDoubleLinkedBufIndex).FLastRecBuf[(AIndex as TDoubleLinkedBufIndex).IndNr].prior:=l;
 end;
 end;
 
 
-function TBufDataset.GetIndexDefs : TIndexDefs;
+function TCustomBufDataset.GetIndexDefs : TIndexDefs;
 
 
 begin
 begin
   Result := FIndexDefs;
   Result := FIndexDefs;
 end;
 end;
 
 
-procedure TBufDataset.UpdateIndexDefs;
+procedure TCustomBufDataset.UpdateIndexDefs;
 var i : integer;
 var i : integer;
 begin
 begin
   FIndexDefs.Clear;
   FIndexDefs.Clear;
@@ -881,18 +890,18 @@ begin
     end;
     end;
 end;
 end;
 
 
-Function TBufDataset.GetCanModify: Boolean;
+Function TCustomBufDataset.GetCanModify: Boolean;
 begin
 begin
   Result:= True;
   Result:= True;
 end;
 end;
 
 
-function TBufDataset.intAllocRecordBuffer: PChar;
+function TCustomBufDataset.intAllocRecordBuffer: PChar;
 begin
 begin
   // Note: Only the internal buffers of TDataset provide bookmark information
   // Note: Only the internal buffers of TDataset provide bookmark information
   result := AllocMem(FRecordsize+sizeof(TBufRecLinkItem)*FMaxIndexesCount);
   result := AllocMem(FRecordsize+sizeof(TBufRecLinkItem)*FMaxIndexesCount);
 end;
 end;
 
 
-function TBufDataset.AllocRecordBuffer: PChar;
+function TCustomBufDataset.AllocRecordBuffer: PChar;
 begin
 begin
   result := AllocMem(FRecordsize + BookmarkSize + CalcfieldsSize);
   result := AllocMem(FRecordsize + BookmarkSize + CalcfieldsSize);
 // The records are initialised, or else the fields of an empty, just-opened dataset
 // The records are initialised, or else the fields of an empty, just-opened dataset
@@ -900,18 +909,18 @@ begin
   InitRecord(result);
   InitRecord(result);
 end;
 end;
 
 
-procedure TBufDataset.FreeRecordBuffer(var Buffer: PChar);
+procedure TCustomBufDataset.FreeRecordBuffer(var Buffer: PChar);
 begin
 begin
   ReAllocMem(Buffer,0);
   ReAllocMem(Buffer,0);
 end;
 end;
 
 
-procedure TBufDataset.ClearCalcFields(Buffer: PChar);
+procedure TCustomBufDataset.ClearCalcFields(Buffer: PChar);
 begin
 begin
   if CalcFieldsSize > 0 then
   if CalcFieldsSize > 0 then
     FillByte((Buffer+RecordSize)^,CalcFieldsSize,0);
     FillByte((Buffer+RecordSize)^,CalcFieldsSize,0);
 end;
 end;
 
 
-procedure TBufDataset.InternalOpen;
+procedure TCustomBufDataset.InternalOpen;
 
 
 var IndexNr : integer;
 var IndexNr : integer;
 
 
@@ -944,7 +953,7 @@ begin
   if assigned(FDatasetReader) then IntLoadRecordsFromFile;
   if assigned(FDatasetReader) then IntLoadRecordsFromFile;
 end;
 end;
 
 
-procedure TBufDataset.InternalClose;
+procedure TCustomBufDataset.InternalClose;
 
 
 var r  : integer;
 var r  : integer;
     iGetResult : TGetResult;
     iGetResult : TGetResult;
@@ -993,7 +1002,7 @@ begin
   if assigned(FParser) then FreeAndNil(FParser);
   if assigned(FParser) then FreeAndNil(FParser);
 end;
 end;
 
 
-procedure TBufDataset.InternalFirst;
+procedure TCustomBufDataset.InternalFirst;
 begin
 begin
   with FCurrentIndex do
   with FCurrentIndex do
     begin
     begin
@@ -1003,7 +1012,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.InternalLast;
+procedure TCustomBufDataset.InternalLast;
 begin
 begin
   FetchAll;
   FetchAll;
   with FCurrentIndex do
   with FCurrentIndex do
@@ -1040,7 +1049,7 @@ begin
   Result := pchar(FLastRecBuf);
   Result := pchar(FLastRecBuf);
 end;
 end;
 
 
-constructor TBufIndex.Create(const ADataset: TBufDataset);
+constructor TBufIndex.Create(const ADataset: TCustomBufDataset);
 begin
 begin
   inherited create;
   inherited create;
   FDataset := ADataset;
   FDataset := ADataset;
@@ -1243,7 +1252,7 @@ begin
   if FCursOnFirstRec then FCurrentRecBuf:=FLastRecBuf;
   if FCursOnFirstRec then FCurrentRecBuf:=FLastRecBuf;
 end;
 end;
 
 
-procedure TBufDataset.CurrentRecordToBuffer(Buffer: PChar);
+procedure TCustomBufDataset.CurrentRecordToBuffer(Buffer: PChar);
 var ABookMark : PBufBookmark;
 var ABookMark : PBufBookmark;
 begin
 begin
   with FCurrentIndex do
   with FCurrentIndex do
@@ -1257,7 +1266,7 @@ begin
   GetCalcFields(Buffer);
   GetCalcFields(Buffer);
 end;
 end;
 
 
-function TBufDataset.GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult;
+function TCustomBufDataset.GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult;
 
 
 var Acceptable : Boolean;
 var Acceptable : Boolean;
     SaveState : TDataSetState;
     SaveState : TDataSetState;
@@ -1304,14 +1313,14 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.DoBeforeClose;
+procedure TCustomBufDataset.DoBeforeClose;
 begin
 begin
   inherited DoBeforeClose;
   inherited DoBeforeClose;
   if FFileName<>'' then
   if FFileName<>'' then
     SaveToFile(FFileName);
     SaveToFile(FFileName);
 end;
 end;
 
 
-function TBufDataset.GetActiveRecordUpdateBuffer : boolean;
+function TCustomBufDataset.GetActiveRecordUpdateBuffer : boolean;
 
 
 var ABookmark : TBufBookmark;
 var ABookmark : TBufBookmark;
 
 
@@ -1320,10 +1329,10 @@ begin
   result := GetRecordUpdateBufferCached(ABookmark);
   result := GetRecordUpdateBufferCached(ABookmark);
 end;
 end;
 
 
-procedure TBufDataset.ProcessFieldCompareStruct(AField: TField; var ACompareRec : TDBCompareRec);
+procedure TCustomBufDataset.ProcessFieldCompareStruct(AField: TField; var ACompareRec : TDBCompareRec);
 begin
 begin
   case AField.DataType of
   case AField.DataType of
-    ftString : ACompareRec.Comparefunc := @DBCompareText;
+    ftString, ftFixedChar : ACompareRec.Comparefunc := @DBCompareText;
     ftSmallint : ACompareRec.Comparefunc := @DBCompareSmallInt;
     ftSmallint : ACompareRec.Comparefunc := @DBCompareSmallInt;
     ftInteger, ftBCD : ACompareRec.Comparefunc :=
     ftInteger, ftBCD : ACompareRec.Comparefunc :=
       @DBCompareInt;
       @DBCompareInt;
@@ -1334,7 +1343,7 @@ begin
       @DBCompareDouble;
       @DBCompareDouble;
     ftLargeint : ACompareRec.Comparefunc := @DBCompareLargeInt;
     ftLargeint : ACompareRec.Comparefunc := @DBCompareLargeInt;
   else
   else
-    DatabaseErrorFmt(SErrIndexBasedOnInvField, [Fieldtypenames[AField.DataType]]);
+    DatabaseErrorFmt(SErrIndexBasedOnInvField, [AField.FieldName,Fieldtypenames[AField.DataType]]);
   end;
   end;
 
 
   ACompareRec.Off1:=sizeof(TBufRecLinkItem)*FMaxIndexesCount+
   ACompareRec.Off1:=sizeof(TBufRecLinkItem)*FMaxIndexesCount+
@@ -1342,7 +1351,7 @@ begin
   ACompareRec.Off2:=ACompareRec.Off1;
   ACompareRec.Off2:=ACompareRec.Off1;
 end;
 end;
 
 
-procedure TBufDataset.SetIndexFieldNames(const AValue: String);
+procedure TCustomBufDataset.SetIndexFieldNames(const AValue: String);
 begin
 begin
   if AValue<>'' then
   if AValue<>'' then
     begin
     begin
@@ -1359,7 +1368,7 @@ begin
     SetIndexName('');
     SetIndexName('');
 end;
 end;
 
 
-procedure TBufDataset.SetIndexName(AValue: String);
+procedure TCustomBufDataset.SetIndexName(AValue: String);
 var i : integer;
 var i : integer;
 begin
 begin
   if AValue='' then AValue := 'DEFAULT_ORDER';
   if AValue='' then AValue := 'DEFAULT_ORDER';
@@ -1373,7 +1382,7 @@ begin
       end;
       end;
 end;
 end;
 
 
-procedure TBufDataset.SetMaxIndexesCount(const AValue: Integer);
+procedure TCustomBufDataset.SetMaxIndexesCount(const AValue: Integer);
 begin
 begin
   CheckInactive;
   CheckInactive;
   if AValue > 1 then
   if AValue > 1 then
@@ -1382,39 +1391,39 @@ begin
     DatabaseError(SMinIndexes);
     DatabaseError(SMinIndexes);
 end;
 end;
 
 
-procedure TBufDataset.InternalSetToRecord(Buffer: PChar);
+procedure TCustomBufDataset.InternalSetToRecord(Buffer: PChar);
 begin
 begin
   FCurrentIndex.GotoBookmark(PBufBookmark(Buffer+FRecordSize));
   FCurrentIndex.GotoBookmark(PBufBookmark(Buffer+FRecordSize));
 end;
 end;
 
 
-procedure TBufDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
+procedure TCustomBufDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
 begin
 begin
   PBufBookmark(Buffer + FRecordSize)^ := PBufBookmark(Data)^;
   PBufBookmark(Buffer + FRecordSize)^ := PBufBookmark(Data)^;
 end;
 end;
 
 
-procedure TBufDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
+procedure TCustomBufDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
 begin
 begin
   PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag := Value;
   PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag := Value;
 end;
 end;
 
 
-procedure TBufDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
+procedure TCustomBufDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
 begin
 begin
   PBufBookmark(Data)^ := PBufBookmark(Buffer + FRecordSize)^;
   PBufBookmark(Data)^ := PBufBookmark(Buffer + FRecordSize)^;
 end;
 end;
 
 
-function TBufDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
+function TCustomBufDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
 begin
 begin
   Result := PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag;
   Result := PBufBookmark(Buffer + FRecordSize)^.BookmarkFlag;
 end;
 end;
 
 
-procedure TBufDataset.InternalGotoBookmark(ABookmark: Pointer);
+procedure TCustomBufDataset.InternalGotoBookmark(ABookmark: Pointer);
 begin
 begin
   // note that ABookMark should be a PBufBookmark. But this way it can also be
   // note that ABookMark should be a PBufBookmark. But this way it can also be
   // a pointer to a TBufRecLinkItem
   // a pointer to a TBufRecLinkItem
   FCurrentIndex.GotoBookmark(ABookmark);
   FCurrentIndex.GotoBookmark(ABookmark);
 end;
 end;
 
 
-function TBufDataset.getnextpacket : integer;
+function TCustomBufDataset.getnextpacket : integer;
 
 
 var i : integer;
 var i : integer;
     pb : pchar;
     pb : pchar;
@@ -1445,7 +1454,7 @@ begin
   result := i;
   result := i;
 end;
 end;
 
 
-function TBufDataset.GetFieldSize(FieldDef : TFieldDef) : longint;
+function TCustomBufDataset.GetFieldSize(FieldDef : TFieldDef) : longint;
 
 
 begin
 begin
   case FieldDef.DataType of
   case FieldDef.DataType of
@@ -1482,7 +1491,7 @@ begin
 {$ENDIF}
 {$ENDIF}
 end;
 end;
 
 
-function TBufDataset.GetRecordUpdateBuffer(const ABookmark : TBufBookmark; IncludePrior : boolean = false; AFindNext : boolean = false): boolean;
+function TCustomBufDataset.GetRecordUpdateBuffer(const ABookmark : TBufBookmark; IncludePrior : boolean = false; AFindNext : boolean = false): boolean;
 
 
 var x        : integer;
 var x        : integer;
     StartBuf : integer;
     StartBuf : integer;
@@ -1503,7 +1512,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TBufDataset.GetRecordUpdateBufferCached(const ABookmark: TBufBookmark;
+function TCustomBufDataset.GetRecordUpdateBufferCached(const ABookmark: TBufBookmark;
   IncludePrior: boolean): boolean;
   IncludePrior: boolean): boolean;
 begin
 begin
   // if the current update buffer complies, immediately return true
   // if the current update buffer complies, immediately return true
@@ -1515,7 +1524,7 @@ begin
     Result := GetRecordUpdateBuffer(ABookmark,IncludePrior);
     Result := GetRecordUpdateBuffer(ABookmark,IncludePrior);
 end;
 end;
 
 
-function TBufDataset.LoadBuffer(Buffer : PChar): TGetResult;
+function TCustomBufDataset.LoadBuffer(Buffer : PChar): TGetResult;
 
 
 var NullMask        : pbyte;
 var NullMask        : pbyte;
     x               : longint;
     x               : longint;
@@ -1559,7 +1568,7 @@ begin
   Result := grOK;
   Result := grOK;
 end;
 end;
 
 
-function TBufDataset.GetCurrentBuffer: PChar;
+function TCustomBufDataset.GetCurrentBuffer: PChar;
 begin
 begin
   if State = dsFilter then Result := FFilterBuffer
   if State = dsFilter then Result := FFilterBuffer
   else if state = dsCalcFields then Result := CalcBuffer
   else if state = dsCalcFields then Result := CalcBuffer
@@ -1567,13 +1576,13 @@ begin
 end;
 end;
 
 
 
 
-function TBufDataset.GetFieldData(Field: TField; Buffer: Pointer;
+function TCustomBufDataset.GetFieldData(Field: TField; Buffer: Pointer;
   NativeFormat: Boolean): Boolean;
   NativeFormat: Boolean): Boolean;
 begin
 begin
   Result := GetFieldData(Field, Buffer);
   Result := GetFieldData(Field, Buffer);
 end;
 end;
 
 
-function TBufDataset.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
+function TCustomBufDataset.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
 
 
 var CurrBuff : pchar;
 var CurrBuff : pchar;
 
 
@@ -1625,13 +1634,13 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.SetFieldData(Field: TField; Buffer: Pointer;
+procedure TCustomBufDataset.SetFieldData(Field: TField; Buffer: Pointer;
   NativeFormat: Boolean);
   NativeFormat: Boolean);
 begin
 begin
   SetFieldData(Field,Buffer);
   SetFieldData(Field,Buffer);
 end;
 end;
 
 
-procedure TBufDataset.SetFieldData(Field: TField; Buffer: Pointer);
+procedure TCustomBufDataset.SetFieldData(Field: TField; Buffer: Pointer);
 
 
 var CurrBuff : pointer;
 var CurrBuff : pointer;
     NullMask : pbyte;
     NullMask : pbyte;
@@ -1668,7 +1677,7 @@ begin
     DataEvent(deFieldChange, Ptrint(Field));
     DataEvent(deFieldChange, Ptrint(Field));
 end;
 end;
 
 
-procedure TBufDataset.InternalDelete;
+procedure TCustomBufDataset.InternalDelete;
 var i         : Integer;
 var i         : Integer;
     StartInd  : Integer;
     StartInd  : Integer;
     RemRec    : pointer;
     RemRec    : pointer;
@@ -1704,13 +1713,13 @@ begin
 end;
 end;
 
 
 
 
-procedure TBufDataset.ApplyRecUpdate(UpdateKind : TUpdateKind);
+procedure TCustomBufDataset.ApplyRecUpdate(UpdateKind : TUpdateKind);
 
 
 begin
 begin
   raise EDatabaseError.Create(SApplyRecNotSupported);
   raise EDatabaseError.Create(SApplyRecNotSupported);
 end;
 end;
 
 
-procedure TBufDataset.CancelUpdates;
+procedure TCustomBufDataset.CancelUpdates;
 var StoreRecBM     : TBufBookmark;
 var StoreRecBM     : TBufBookmark;
   procedure CancelUpdBuffer(var AUpdBuffer : TRecUpdateBuffer);
   procedure CancelUpdBuffer(var AUpdBuffer : TRecUpdateBuffer);
   var
   var
@@ -1797,19 +1806,19 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.SetOnUpdateError(const AValue: TResolverErrorEvent);
+procedure TCustomBufDataset.SetOnUpdateError(const AValue: TResolverErrorEvent);
 
 
 begin
 begin
   FOnUpdateError := AValue;
   FOnUpdateError := AValue;
 end;
 end;
 
 
-procedure TBufDataset.ApplyUpdates; // For backwards-compatibility
+procedure TCustomBufDataset.ApplyUpdates; // For backwards-compatibility
 
 
 begin
 begin
   ApplyUpdates(0);
   ApplyUpdates(0);
 end;
 end;
 
 
-procedure TBufDataset.ApplyUpdates(MaxErrors: Integer);
+procedure TCustomBufDataset.ApplyUpdates(MaxErrors: Integer);
 
 
 var r            : Integer;
 var r            : Integer;
     FailedCount  : integer;
     FailedCount  : integer;
@@ -1900,7 +1909,7 @@ begin
 end;
 end;
 
 
 
 
-procedure TBufDataset.InternalCancel;
+procedure TCustomBufDataset.InternalCancel;
 
 
 Var i            : integer;
 Var i            : integer;
 
 
@@ -1914,7 +1923,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.InternalPost;
+procedure TCustomBufDataset.InternalPost;
 
 
 Var CurrBuff     : PChar;
 Var CurrBuff     : PChar;
     i            : integer;
     i            : integer;
@@ -1999,7 +2008,7 @@ begin
   move(ActiveBuffer^,FCurrentIndex.CurrentBuffer^,FRecordSize);
   move(ActiveBuffer^,FCurrentIndex.CurrentBuffer^,FRecordSize);
 end;
 end;
 
 
-procedure TBufDataset.CalcRecordSize;
+procedure TCustomBufDataset.CalcRecordSize;
 
 
 var x : longint;
 var x : longint;
 
 
@@ -2017,7 +2026,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TBufDataset.GetIndexFieldNames: String;
+function TCustomBufDataset.GetIndexFieldNames: String;
 begin
 begin
   if FCurrentIndex<>FIndexes[1] then
   if FCurrentIndex<>FIndexes[1] then
     result := ''
     result := ''
@@ -2025,25 +2034,25 @@ begin
     result := FCurrentIndex.FieldsName;
     result := FCurrentIndex.FieldsName;
 end;
 end;
 
 
-function TBufDataset.GetIndexName: String;
+function TCustomBufDataset.GetIndexName: String;
 begin
 begin
   result := FCurrentIndex.Name;
   result := FCurrentIndex.Name;
 end;
 end;
 
 
-function TBufDataset.GetRecordSize : Word;
+function TCustomBufDataset.GetRecordSize : Word;
 
 
 begin
 begin
   result := FRecordSize + BookmarkSize;
   result := FRecordSize + BookmarkSize;
 end;
 end;
 
 
-function TBufDataset.GetChangeCount: integer;
+function TCustomBufDataset.GetChangeCount: integer;
 
 
 begin
 begin
   result := length(FUpdateBuffer);
   result := length(FUpdateBuffer);
 end;
 end;
 
 
 
 
-procedure TBufDataset.InternalInitRecord(Buffer: PChar);
+procedure TCustomBufDataset.InternalInitRecord(Buffer: PChar);
 
 
 begin
 begin
   FillChar(Buffer^, FRecordSize, #0);
   FillChar(Buffer^, FRecordSize, #0);
@@ -2051,7 +2060,7 @@ begin
   fillchar(Buffer^,FNullmaskSize,255);
   fillchar(Buffer^,FNullmaskSize,255);
 end;
 end;
 
 
-procedure TBufDataset.SetRecNo(Value: Longint);
+procedure TCustomBufDataset.SetRecNo(Value: Longint);
 
 
 var
 var
     recnr        : integer;
     recnr        : integer;
@@ -2074,7 +2083,7 @@ begin
   GotoBookmark(@TmpRecBuffer);
   GotoBookmark(@TmpRecBuffer);
 end;
 end;
 
 
-function TBufDataset.GetRecNo: Longint;
+function TCustomBufDataset.GetRecNo: Longint;
 
 
 Var abuf            : PChar;
 Var abuf            : PChar;
 
 
@@ -2087,19 +2096,19 @@ begin
     result := 0;
     result := 0;
 end;
 end;
 
 
-function TBufDataset.IsCursorOpen: Boolean;
+function TCustomBufDataset.IsCursorOpen: Boolean;
 
 
 begin
 begin
   Result := FOpen;
   Result := FOpen;
 end;
 end;
 
 
-Function TBufDataset.GetRecordCount: Longint;
+Function TCustomBufDataset.GetRecordCount: Longint;
 
 
 begin
 begin
   Result := FBRecordCount;
   Result := FBRecordCount;
 end;
 end;
 
 
-Function TBufDataSet.UpdateStatus: TUpdateStatus;
+Function TCustomBufDataset.UpdateStatus: TUpdateStatus;
 
 
 begin
 begin
   Result:=usUnmodified;
   Result:=usUnmodified;
@@ -2111,7 +2120,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TbufDataset.GetNewBlobBuffer : PBlobBuffer;
+function TCustomBufDataset.GetNewBlobBuffer : PBlobBuffer;
 
 
 var ABlobBuffer : PBlobBuffer;
 var ABlobBuffer : PBlobBuffer;
 
 
@@ -2124,7 +2133,7 @@ begin
   result := ABlobBuffer;
   result := ABlobBuffer;
 end;
 end;
 
 
-function TbufDataset.GetNewWriteBlobBuffer : PBlobBuffer;
+function TCustomBufDataset.GetNewWriteBlobBuffer : PBlobBuffer;
 
 
 var ABlobBuffer : PBlobBuffer;
 var ABlobBuffer : PBlobBuffer;
 
 
@@ -2136,7 +2145,7 @@ begin
   result := ABlobBuffer;
   result := ABlobBuffer;
 end;
 end;
 
 
-procedure TBufDataset.FreeBlobBuffer(var ABlobBuffer: PBlobBuffer);
+procedure TCustomBufDataset.FreeBlobBuffer(var ABlobBuffer: PBlobBuffer);
 
 
 begin
 begin
   if not Assigned(ABlobBuffer) then Exit;
   if not Assigned(ABlobBuffer) then Exit;
@@ -2188,7 +2197,7 @@ constructor TBufBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode);
 var bufblob : TBufBlobField;
 var bufblob : TBufBlobField;
 
 
 begin
 begin
-  FDataset := Field.DataSet as TBufDataset;
+  FDataset := Field.DataSet as TCustomBufDataset;
   if mode = bmread then
   if mode = bmread then
     begin
     begin
     if not field.getData(@bufblob) then
     if not field.getData(@bufblob) then
@@ -2202,7 +2211,7 @@ begin
     else
     else
       FBlobBuffer := bufblob.BlobBuffer;
       FBlobBuffer := bufblob.BlobBuffer;
     end
     end
-  else if mode=bmWrite then with FDataSet as TBufDataset do
+  else if mode=bmWrite then with FDataSet as TCustomBufDataset do
     begin
     begin
     FBlobBuffer := GetNewWriteBlobBuffer;
     FBlobBuffer := GetNewWriteBlobBuffer;
     FBlobBuffer^.FieldNo := Field.FieldNo;
     FBlobBuffer^.FieldNo := Field.FieldNo;
@@ -2213,7 +2222,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TBufDataset.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream;
+function TCustomBufDataset.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream;
 
 
 var bufblob : TBufBlobField;
 var bufblob : TBufBlobField;
 
 
@@ -2241,7 +2250,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.AddIndex(const AName, AFields : string; AOptions : TIndexOptions; const ADescFields: string = '';
+procedure TCustomBufDataset.AddIndex(const AName, AFields : string; AOptions : TIndexOptions; const ADescFields: string = '';
                                const ACaseInsFields: string = '');
                                const ACaseInsFields: string = '');
 begin
 begin
   if AFields='' then DatabaseError(SNoIndexFieldNameGiven);
   if AFields='' then DatabaseError(SNoIndexFieldNameGiven);
@@ -2255,7 +2264,7 @@ begin
   InternalAddIndex(AName,AFields,AOptions,ADescFields,ACaseInsFields);
   InternalAddIndex(AName,AFields,AOptions,ADescFields,ACaseInsFields);
 end;
 end;
 
 
-procedure TBufDataset.SaveToFile(AFileName: string;
+procedure TCustomBufDataset.SaveToFile(AFileName: string;
   Format: TDataPacketFormat);
   Format: TDataPacketFormat);
 var AFileStream : TFileStream;
 var AFileStream : TFileStream;
 begin
 begin
@@ -2268,7 +2277,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.SetDatasetPacket(AReader: TDataPacketReader);
+procedure TCustomBufDataset.SetDatasetPacket(AReader: TDataPacketReader);
 begin
 begin
   FDatasetReader := AReader;
   FDatasetReader := AReader;
   try
   try
@@ -2278,7 +2287,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.GetDatasetPacket(AWriter: TDataPacketReader);
+procedure TCustomBufDataset.GetDatasetPacket(AWriter: TDataPacketReader);
 
 
   procedure StoreUpdateBuffer(AUpdBuffer : TRecUpdateBuffer; var ARowState: TRowState);
   procedure StoreUpdateBuffer(AUpdBuffer : TRecUpdateBuffer; var ARowState: TRowState);
   var AThisRowState : TRowState;
   var AThisRowState : TRowState;
@@ -2380,7 +2389,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.LoadFromStream(AStream: TStream; Format: TDataPacketFormat);
+procedure TCustomBufDataset.LoadFromStream(AStream: TStream; Format: TDataPacketFormat);
 var APacketReaderReg : TDatapacketReaderRegistration;
 var APacketReaderReg : TDatapacketReaderRegistration;
     APacketReader : TDataPacketReader;
     APacketReader : TDataPacketReader;
 begin
 begin
@@ -2400,7 +2409,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.SaveToStream(AStream: TStream; Format: TDataPacketFormat);
+procedure TCustomBufDataset.SaveToStream(AStream: TStream; Format: TDataPacketFormat);
 var APacketReaderReg : TDatapacketReaderRegistration;
 var APacketReaderReg : TDatapacketReaderRegistration;
     APacketWriter : TDataPacketReader;
     APacketWriter : TDataPacketReader;
 begin
 begin
@@ -2417,7 +2426,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.LoadFromFile(AFileName: string; Format: TDataPacketFormat);
+procedure TCustomBufDataset.LoadFromFile(AFileName: string; Format: TDataPacketFormat);
 var AFileStream : TFileStream;
 var AFileStream : TFileStream;
 begin
 begin
   if AFileName='' then AFileName := FFileName;
   if AFileName='' then AFileName := FFileName;
@@ -2429,18 +2438,18 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TBufDataset.CreateDataset;
+procedure TCustomBufDataset.CreateDataset;
 begin
 begin
   CheckInactive;
   CheckInactive;
   CreateFields;
   CreateFields;
 end;
 end;
 
 
-function TBufDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
+function TCustomBufDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
 begin
 begin
   Result:=FCurrentIndex.BookmarkValid(ABookmark);
   Result:=FCurrentIndex.BookmarkValid(ABookmark);
 end;
 end;
 
 
-function TBufDataset.CompareBookmarks(Bookmark1, Bookmark2: TBookmark
+function TCustomBufDataset.CompareBookmarks(Bookmark1, Bookmark2: TBookmark
   ): Longint;
   ): Longint;
 begin
 begin
   if FCurrentIndex.CompareBookmarks(Bookmark1,Bookmark2) then
   if FCurrentIndex.CompareBookmarks(Bookmark1,Bookmark2) then
@@ -2449,14 +2458,14 @@ begin
     Result := -1;
     Result := -1;
 end;
 end;
 
 
-procedure TBufDataset.IntLoadFielddefsFromFile;
+procedure TCustomBufDataset.IntLoadFielddefsFromFile;
 
 
 begin
 begin
   FDatasetReader.LoadFielddefs(FieldDefs);
   FDatasetReader.LoadFielddefs(FieldDefs);
   if DefaultFields then CreateFields;
   if DefaultFields then CreateFields;
 end;
 end;
 
 
-procedure TBufDataset.IntLoadRecordsFromFile;
+procedure TCustomBufDataset.IntLoadRecordsFromFile;
 
 
 var StoreState      : TDataSetState;
 var StoreState      : TDataSetState;
     AddRecordBuffer : boolean;
     AddRecordBuffer : boolean;
@@ -2563,7 +2572,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TBufDataset.InternalAddIndex(const AName, AFields : string; AOptions : TIndexOptions; const ADescFields: string;
+procedure TCustomBufDataset.InternalAddIndex(const AName, AFields : string; AOptions : TIndexOptions; const ADescFields: string;
                                        const ACaseInsFields: string);
                                        const ACaseInsFields: string);
 var StoreIndNr : Integer;
 var StoreIndNr : Integer;
 begin
 begin
@@ -2599,7 +2608,7 @@ begin
     FMaxIndexesCount := FIndexesCount;
     FMaxIndexesCount := FIndexesCount;
 end;
 end;
 
 
-procedure TBufDataset.DoFilterRecord(var Acceptable: Boolean);
+procedure TCustomBufDataset.DoFilterRecord(var Acceptable: Boolean);
 begin
 begin
   Acceptable := true;
   Acceptable := true;
   // check user filter
   // check user filter
@@ -2612,7 +2621,7 @@ begin
 
 
 end;
 end;
 
 
-procedure TBufDataset.SetFilterText(const Value: String);
+procedure TCustomBufDataset.SetFilterText(const Value: String);
 begin
 begin
   if Value = Filter then
   if Value = Filter then
     exit;
     exit;
@@ -2627,7 +2636,7 @@ begin
   if IsCursorOpen and Filtered then Resync([]);
   if IsCursorOpen and Filtered then Resync([]);
 end;
 end;
 
 
-procedure TBufDataset.SetFiltered(Value: Boolean); {override;}
+procedure TCustomBufDataset.SetFiltered(Value: Boolean); {override;}
 begin
 begin
   if Value = Filtered then
   if Value = Filtered then
     exit;
     exit;
@@ -2640,7 +2649,7 @@ begin
     Resync([]);
     Resync([]);
 end;
 end;
 
 
-procedure TBufDataset.InternalRefresh;
+procedure TCustomBufDataset.InternalRefresh;
 var StoreDefaultFields: boolean;
 var StoreDefaultFields: boolean;
 begin
 begin
   StoreDefaultFields:=DefaultFields;
   StoreDefaultFields:=DefaultFields;
@@ -2653,31 +2662,31 @@ begin
   SetDefaultFields(StoreDefaultFields);
   SetDefaultFields(StoreDefaultFields);
 end;
 end;
 
 
-procedure TBufDataset.BeforeRefreshOpenCursor;
+procedure TCustomBufDataset.BeforeRefreshOpenCursor;
 begin
 begin
   // Do nothing
   // Do nothing
 end;
 end;
 
 
-function TBufDataset.Fetch: boolean;
+function TCustomBufDataset.Fetch: boolean;
 begin
 begin
-  // Empty procedure to make it possible to use TBufDataset as a memory dataset
+  // Empty procedure to make it possible to use TCustomBufDataset as a memory dataset
   Result := False;
   Result := False;
 end;
 end;
 
 
-function TBufDataset.LoadField(FieldDef: TFieldDef; buffer: pointer; out
+function TCustomBufDataset.LoadField(FieldDef: TFieldDef; buffer: pointer; out
   CreateBlob: boolean): boolean;
   CreateBlob: boolean): boolean;
 begin
 begin
-  // Empty procedure to make it possible to use TBufDataset as a memory dataset
+  // Empty procedure to make it possible to use TCustomBufDataset as a memory dataset
   CreateBlob := False;
   CreateBlob := False;
   Result := False;
   Result := False;
 end;
 end;
 
 
-function TBufDataset.IsReadFromPacket: Boolean;
+function TCustomBufDataset.IsReadFromPacket: Boolean;
 begin
 begin
   Result := (FDatasetReader<>nil) or (FFileName<>'');
   Result := (FDatasetReader<>nil) or (FFileName<>'');
 end;
 end;
 
 
-procedure TBufDataset.ParseFilter(const AFilter: string);
+procedure TCustomBufDataset.ParseFilter(const AFilter: string);
 begin
 begin
   // parser created?
   // parser created?
   if Length(AFilter) > 0 then
   if Length(AFilter) > 0 then
@@ -2728,7 +2737,7 @@ begin
     Result := ABookmark.BookmarkInt;
     Result := ABookmark.BookmarkInt;
 end;
 end;
 
 
-Function TBufDataset.Locate(const KeyFields: string; const KeyValues: Variant; options: TLocateOptions) : boolean;
+Function TCustomBufDataset.Locate(const KeyFields: string; const KeyValues: Variant; options: TLocateOptions) : boolean;
 
 
 var CurrLinkItem    : PBufRecLinkItem;
 var CurrLinkItem    : PBufRecLinkItem;
     bm              : TBufBookmark;
     bm              : TBufBookmark;
@@ -2753,7 +2762,10 @@ begin
 
 
     SetLength(DBCompareStruct,FieldsAmount);
     SetLength(DBCompareStruct,FieldsAmount);
     for FieldNr:=0 to FieldsAmount-1 do
     for FieldNr:=0 to FieldsAmount-1 do
+      begin
       ProcessFieldCompareStruct(TField(SearchFields[FieldNr]),DBCompareStruct[FieldNr]);
       ProcessFieldCompareStruct(TField(SearchFields[FieldNr]),DBCompareStruct[FieldNr]);
+      DBCompareStruct[FieldNr].Options:=options;
+      end;
   finally
   finally
     SearchFields.Free;
     SearchFields.Free;
   end;
   end;
@@ -2827,7 +2839,7 @@ begin
   Result := GetSpareBuffer;
   Result := GetSpareBuffer;
 end;
 end;
 
 
-constructor TArrayBufIndex.Create(const ADataset: TBufDataset);
+constructor TArrayBufIndex.Create(const ADataset: TCustomBufDataset);
 begin
 begin
   Inherited create(ADataset);
   Inherited create(ADataset);
   FInitialBuffers:=10000;
   FInitialBuffers:=10000;
@@ -3108,12 +3120,12 @@ begin
 //  SetLength(AChangeLog,0);
 //  SetLength(AChangeLog,0);
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.RestoreRecord(ADataset: TBufDataset);
+procedure TFpcBinaryDatapacketReader.RestoreRecord(ADataset: TCustomBufDataset);
 begin
 begin
   Stream.ReadBuffer(ADataset.GetCurrentBuffer^,ADataset.FRecordSize);
   Stream.ReadBuffer(ADataset.GetCurrentBuffer^,ADataset.FRecordSize);
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.StoreRecord(ADataset: TBufDataset;
+procedure TFpcBinaryDatapacketReader.StoreRecord(ADataset: TCustomBufDataset;
   ARowState: TRowState; AUpdOrder : integer);
   ARowState: TRowState; AUpdOrder : integer);
 begin
 begin
   // Ugly because private members of ADataset are used...
   // Ugly because private members of ADataset are used...

+ 2 - 2
packages/fcl-db/src/base/bufdataset_parser.pp

@@ -373,7 +373,7 @@ begin
 
 
   // define field in parser
   // define field in parser
   case FieldInfo.DataType of
   case FieldInfo.DataType of
-    ftString:
+    ftString, ftFixedChar:
       begin
       begin
       TempFieldVar := TStringFieldVar.Create(FieldInfo);
       TempFieldVar := TStringFieldVar.Create(FieldInfo);
       TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
       TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
@@ -405,7 +405,7 @@ begin
         TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
         TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
       end;
       end;
   else
   else
-    raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName]);
+    raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName,Fieldtypenames[FieldInfo.DataType]]);
   end;
   end;
 
 
   // add to our own list
   // add to our own list

+ 1 - 1
packages/fcl-db/src/base/dbconst.pas

@@ -36,7 +36,7 @@ Resourcestring
   SErrTransAlreadyActive   = 'Transaction already active';
   SErrTransAlreadyActive   = 'Transaction already active';
   SErrTransactionnSet      = 'Transaction not set';
   SErrTransactionnSet      = 'Transaction not set';
   SErrIndexResultTooLong   = 'Index result for "%s" too long, >100 characters (%d).';
   SErrIndexResultTooLong   = 'Index result for "%s" too long, >100 characters (%d).';
-  SErrIndexBasedOnInvField = 'Field "%s" is an invalid field type to base index on.';
+  SErrIndexBasedOnInvField = 'Field "%s" has an invalid field type (%s) to base index on.';
   SErrIndexBasedOnUnkField = 'Index based on unknown field "%s".';
   SErrIndexBasedOnUnkField = 'Index based on unknown field "%s".';
   SErrConnTransactionnSet  = 'Transaction of connection not set';
   SErrConnTransactionnSet  = 'Transaction of connection not set';
   SErrNotASQLConnection    = '"%s" is not a TSQLConnection';
   SErrNotASQLConnection    = '"%s" is not a TSQLConnection';

+ 1 - 1
packages/fcl-db/src/base/fields.inc

@@ -2046,7 +2046,7 @@ begin
       F:=FDisplayFormat
       F:=FDisplayFormat
     else
     else
       Case DataType of
       Case DataType of
-       ftTime : F:=ShortTimeFormat;
+       ftTime : F:=LongTimeFormat;
        ftDate : F:=ShortDateFormat;
        ftDate : F:=ShortDateFormat;
       else
       else
        F:='c'
        F:='c'

+ 4 - 4
packages/fcl-db/src/base/xmldatapacketreader.pp

@@ -49,13 +49,13 @@ type
   public
   public
     destructor destroy; override;
     destructor destroy; override;
     procedure StoreFieldDefs(AFieldDefs : TFieldDefs); override;
     procedure StoreFieldDefs(AFieldDefs : TFieldDefs); override;
-    procedure StoreRecord(ADataset : TBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
+    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
     procedure FinalizeStoreRecords; override;
     procedure FinalizeStoreRecords; override;
     procedure LoadFieldDefs(AFieldDefs : TFieldDefs); override;
     procedure LoadFieldDefs(AFieldDefs : TFieldDefs); override;
     procedure InitLoadRecords; override;
     procedure InitLoadRecords; override;
     function GetCurrentRecord : boolean; override;
     function GetCurrentRecord : boolean; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
-    procedure RestoreRecord(ADataset : TBufDataset); override;
+    procedure RestoreRecord(ADataset : TCustomBufDataset); override;
     procedure GotoNextRecord; override;
     procedure GotoNextRecord; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
   end;
   end;
@@ -328,7 +328,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.RestoreRecord(ADataset : TBufDataset);
+procedure TXMLDatapacketReader.RestoreRecord(ADataset : TCustomBufDataset);
 var FieldNr    : integer;
 var FieldNr    : integer;
     AFieldNode : TDomNode;
     AFieldNode : TDomNode;
 begin
 begin
@@ -342,7 +342,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.StoreRecord(ADataset : TBufDataset; ARowState : TRowState; AUpdOrder : integer = 0);
+procedure TXMLDatapacketReader.StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0);
 var FieldNr : Integer;
 var FieldNr : Integer;
     ARecordNode : TDOMElement;
     ARecordNode : TDOMElement;
 begin
 begin

+ 2 - 2
packages/fcl-db/src/sqldb/interbase/ibconnection.pp

@@ -458,9 +458,9 @@ begin
         TrLen := SQLLen;
         TrLen := SQLLen;
       end;
       end;
     SQL_TYPE_DATE :
     SQL_TYPE_DATE :
-      TrType := ftDate{Time};
+      TrType := ftDate;
     SQL_TYPE_TIME :
     SQL_TYPE_TIME :
-        TrType := ftDateTime;
+        TrType := ftTime;
     SQL_TIMESTAMP :
     SQL_TIMESTAMP :
         TrType := ftDateTime;
         TrType := ftDateTime;
     SQL_ARRAY :
     SQL_ARRAY :

+ 1 - 1
packages/fcl-db/src/sqldb/sqldb.pp

@@ -186,7 +186,7 @@ type
 
 
 { TCustomSQLQuery }
 { TCustomSQLQuery }
 
 
-  TCustomSQLQuery = class (Tbufdataset)
+  TCustomSQLQuery = class (TCustomBufDataset)
   private
   private
     FCursor              : TSQLCursor;
     FCursor              : TSQLCursor;
     FUpdateable          : boolean;
     FUpdateable          : boolean;

+ 32 - 32
packages/fcl-db/tests/testbufdatasetstreams.pas

@@ -14,7 +14,7 @@ type
 
 
   { TTestBufDatasetStreams }
   { TTestBufDatasetStreams }
 
 
-  TUpdDatasetProc = procedure(ADataset : TBufDataset) of object;
+  TUpdDatasetProc = procedure(ADataset : TCustomBufDataset) of object;
 
 
   TTestBufDatasetStreams = class(TTestCase)
   TTestBufDatasetStreams = class(TTestCase)
   private
   private
@@ -24,14 +24,14 @@ type
     procedure TestChangesCancelUpdates(AUpdDatasetProc : TUpdDatasetProc);
     procedure TestChangesCancelUpdates(AUpdDatasetProc : TUpdDatasetProc);
     procedure TestChangesXML(AUpdDatasetProc : TUpdDatasetProc);
     procedure TestChangesXML(AUpdDatasetProc : TUpdDatasetProc);
 
 
-    procedure SimpleEditChange(ADataset: TBufDataset);
-    procedure SimpleDeleteChange(ADataset: TBufDataset);
-    procedure MoreDeletesChange(ADataset: TBufDataset);
-    procedure SimpleInsertChange(ADataset: TBufDataset);
-    procedure MoreInsertsChange(ADataset: TBufDataset);
-    procedure SeveralEditsChange(ADataset: TBufDataset);
-    procedure DeleteAllChange(ADataset: TBufDataset);
-    procedure DeleteAllInsertChange(ADataset: TBufDataset);
+    procedure SimpleEditChange(ADataset: TCustomBufDataset);
+    procedure SimpleDeleteChange(ADataset: TCustomBufDataset);
+    procedure MoreDeletesChange(ADataset: TCustomBufDataset);
+    procedure SimpleInsertChange(ADataset: TCustomBufDataset);
+    procedure MoreInsertsChange(ADataset: TCustomBufDataset);
+    procedure SeveralEditsChange(ADataset: TCustomBufDataset);
+    procedure DeleteAllChange(ADataset: TCustomBufDataset);
+    procedure DeleteAllInsertChange(ADataset: TCustomBufDataset);
   protected
   protected
     procedure SetUp; override;
     procedure SetUp; override;
     procedure TearDown; override;
     procedure TearDown; override;
@@ -96,9 +96,9 @@ end;
 procedure TTestBufDatasetStreams.TestChangesApplyUpdates(
 procedure TTestBufDatasetStreams.TestChangesApplyUpdates(
   AUpdDatasetProc: TUpdDatasetProc; Inserts : Boolean);
   AUpdDatasetProc: TUpdDatasetProc; Inserts : Boolean);
 var OrgDs,
 var OrgDs,
-    ChangedDs : TBufDataset;
+    ChangedDs : TCustomBufDataset;
 begin
 begin
-  OrgDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   OrgDs.Open;
   OrgDs.Open;
   AUpdDatasetProc(OrgDs);
   AUpdDatasetProc(OrgDs);
   OrgDs.ApplyUpdates;
   OrgDs.ApplyUpdates;
@@ -112,7 +112,7 @@ begin
     OrgDs.First;
     OrgDs.First;
     end
     end
   else
   else
-    ChangedDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+    ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   ChangedDs.Open;
   ChangedDs.Open;
   CompareDatasets(OrgDs,ChangedDs);
   CompareDatasets(OrgDs,ChangedDs);
 end;
 end;
@@ -120,28 +120,28 @@ end;
 procedure TTestBufDatasetStreams.TestChangesCancelUpdates(
 procedure TTestBufDatasetStreams.TestChangesCancelUpdates(
   AUpdDatasetProc: TUpdDatasetProc);
   AUpdDatasetProc: TUpdDatasetProc);
 var OrgDs,
 var OrgDs,
-    ChangedDs : TBufDataset;
+    ChangedDs : TCustomBufDataset;
 begin
 begin
-  OrgDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   OrgDs.Open;
   OrgDs.Open;
   AUpdDatasetProc(OrgDs);
   AUpdDatasetProc(OrgDs);
   OrgDs.CancelUpdates;
   OrgDs.CancelUpdates;
 
 
-  ChangedDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   ChangedDs.Open;
   ChangedDs.Open;
   CompareDatasets(OrgDs,ChangedDs);
   CompareDatasets(OrgDs,ChangedDs);
 end;
 end;
 
 
 procedure TTestBufDatasetStreams.TestChangesXML(AUpdDatasetProc: TUpdDatasetProc);
 procedure TTestBufDatasetStreams.TestChangesXML(AUpdDatasetProc: TUpdDatasetProc);
 var SaveDs,
 var SaveDs,
-    LoadDs : TBufDataset;
+    LoadDs : TCustomBufDataset;
 begin
 begin
-  SaveDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   SaveDs.Open;
   SaveDs.Open;
   AUpdDatasetProc(SaveDs);
   AUpdDatasetProc(SaveDs);
   SaveDs.SaveToFile('Basics.xml',dfXML);
   SaveDs.SaveToFile('Basics.xml',dfXML);
 
 
-  LoadDs := TBufDataset.Create(nil);
+  LoadDs := TCustomBufDataset.Create(nil);
   LoadDs.LoadFromFile('Basics.xml');
   LoadDs.LoadFromFile('Basics.xml');
 
 
   CompareDatasets(SaveDs,LoadDs);
   CompareDatasets(SaveDs,LoadDs);
@@ -153,7 +153,7 @@ begin
   LoadDs.Free;
   LoadDs.Free;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.SimpleEditChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.SimpleEditChange(ADataset: TCustomBufDataset);
 begin
 begin
   ADataset.next;
   ADataset.next;
   ADataset.edit;
   ADataset.edit;
@@ -161,13 +161,13 @@ begin
   ADataset.Post;
   ADataset.Post;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.SimpleDeleteChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.SimpleDeleteChange(ADataset: TCustomBufDataset);
 begin
 begin
   ADataset.Next;
   ADataset.Next;
   ADataset.Delete;
   ADataset.Delete;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.MoreDeletesChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.MoreDeletesChange(ADataset: TCustomBufDataset);
 begin
 begin
   with ADataset do
   with ADataset do
     begin
     begin
@@ -190,7 +190,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.SimpleInsertChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.SimpleInsertChange(ADataset: TCustomBufDataset);
 begin
 begin
   ADataset.next;
   ADataset.next;
   ADataset.insert;
   ADataset.insert;
@@ -199,7 +199,7 @@ begin
   ADataset.Post;
   ADataset.Post;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.MoreInsertsChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.MoreInsertsChange(ADataset: TCustomBufDataset);
 begin
 begin
   with ADataset do
   with ADataset do
     begin
     begin
@@ -244,7 +244,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.SeveralEditsChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.SeveralEditsChange(ADataset: TCustomBufDataset);
 begin
 begin
   with ADataset do
   with ADataset do
     begin
     begin
@@ -264,13 +264,13 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.DeleteAllChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.DeleteAllChange(ADataset: TCustomBufDataset);
 begin
 begin
   with ADataset do
   with ADataset do
     while not eof do delete;
     while not eof do delete;
 end;
 end;
 
 
-procedure TTestBufDatasetStreams.DeleteAllInsertChange(ADataset: TBufDataset);
+procedure TTestBufDatasetStreams.DeleteAllInsertChange(ADataset: TCustomBufDataset);
 begin
 begin
   DeleteAllChange(ADataset);
   DeleteAllChange(ADataset);
   with ADataset do
   with ADataset do
@@ -332,14 +332,14 @@ begin
 end;
 end;
 
 
 procedure TTestBufDatasetStreams.TestBasicsXML;
 procedure TTestBufDatasetStreams.TestBasicsXML;
-var SaveDs: TBufDataset;
-    LoadDs: TBufDataset;
+var SaveDs: TCustomBufDataset;
+    LoadDs: TCustomBufDataset;
 begin
 begin
-  SaveDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
   SaveDs.Open;
   SaveDs.Open;
   SaveDs.SaveToFile('Basics.xml',dfXML);
   SaveDs.SaveToFile('Basics.xml',dfXML);
 
 
-  LoadDs := TBufDataset.Create(nil);
+  LoadDs := TCustomBufDataset.Create(nil);
   LoadDs.LoadFromFile('Basics.xml');
   LoadDs.LoadFromFile('Basics.xml');
   CompareDatasets(SaveDs,LoadDs);
   CompareDatasets(SaveDs,LoadDs);
   LoadDs.Free;
   LoadDs.Free;
@@ -392,11 +392,11 @@ begin
   ds := DBConnector.GetNDataset(true,5);
   ds := DBConnector.GetNDataset(true,5);
 
 
   ds.open;
   ds.open;
-  TBufDataset(ds).FileName:='test.dat';
+  TCustomBufDataset(ds).FileName:='test.dat';
   ds.close;
   ds.close;
 
 
   LoadDs := DBConnector.GetNDataset(True,2);
   LoadDs := DBConnector.GetNDataset(True,2);
-  TBufDataset(LoadDs).FileName:='test.dat';
+  TCustomBufDataset(LoadDs).FileName:='test.dat';
   LoadDs.Open;
   LoadDs.Open;
 
 
   ds := DBConnector.GetNDataset(true,4);
   ds := DBConnector.GetNDataset(true,4);

+ 76 - 57
packages/fcl-db/tests/testdbbasics.pas

@@ -38,6 +38,7 @@ type
     procedure TestBookmarkValid;
     procedure TestBookmarkValid;
 
 
     procedure TestLocate;
     procedure TestLocate;
+    procedure TestLocateCaseIns;
 
 
     procedure TestFirst;
     procedure TestFirst;
     procedure TestDelete1;
     procedure TestDelete1;
@@ -133,9 +134,9 @@ type THackDataLink=class(TdataLink);
 
 
 procedure TTestDBBasics.TestIsEmpty;
 procedure TTestDBBasics.TestIsEmpty;
 begin
 begin
-  if not (DBConnector.GetNDataset(5) is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
-  with tbufdataset(DBConnector.GetNDataset(True,1)) do
+  if not (DBConnector.GetNDataset(5) is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
+  with tCustombufdataset(DBConnector.GetNDataset(True,1)) do
     begin
     begin
     open;
     open;
     delete;
     delete;
@@ -544,44 +545,44 @@ end;
 
 
 procedure TTestDBBasics.TestSafeAsXML;
 procedure TTestDBBasics.TestSafeAsXML;
 var ds    : TDataset;
 var ds    : TDataset;
-    LoadDs: TBufDataset;
+    LoadDs: TCustomBufDataset;
 begin
 begin
   ds := DBConnector.GetNDataset(true,5);
   ds := DBConnector.GetNDataset(true,5);
-  if not (ds is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
+  if not (ds is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
 
 
   ds.open;
   ds.open;
-  TBufDataset(ds).SaveToFile('test.xml');
+  TCustomBufDataset(ds).SaveToFile('test.xml');
   ds.close;
   ds.close;
 
 
-  LoadDs := TBufDataset.Create(nil);
+  LoadDs := TCustomBufDataset.Create(nil);
   LoadDs.LoadFromFile('test.xml');
   LoadDs.LoadFromFile('test.xml');
   FTestXMLDatasetDefinition(LoadDS);
   FTestXMLDatasetDefinition(LoadDS);
 end;
 end;
 
 
 procedure TTestDBBasics.TestFileNameProperty;
 procedure TTestDBBasics.TestFileNameProperty;
 var ds    : TDataset;
 var ds    : TDataset;
-    LoadDs: TBufDataset;
+    LoadDs: TCustomBufDataset;
 begin
 begin
   ds := DBConnector.GetNDataset(true,5);
   ds := DBConnector.GetNDataset(true,5);
-  if not (ds is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
+  if not (ds is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
 
 
   ds.open;
   ds.open;
-  TBufDataset(ds).FileName:='test.xml';
+  TCustomBufDataset(ds).FileName:='test.xml';
   ds.close;
   ds.close;
 
 
   ds := DBConnector.GetNDataset(True,7);
   ds := DBConnector.GetNDataset(True,7);
-  TBufDataset(ds).FileName:='test.xml';
+  TCustomBufDataset(ds).FileName:='test.xml';
   ds.Open;
   ds.Open;
   FTestXMLDatasetDefinition(Ds);
   FTestXMLDatasetDefinition(Ds);
 end;
 end;
 
 
 procedure TTestDBBasics.TestClientDatasetAsMemDataset;
 procedure TTestDBBasics.TestClientDatasetAsMemDataset;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     i  : integer;
     i  : integer;
 begin
 begin
-  ds := TBufDataset.Create(nil);
+  ds := TCustomBufDataset.Create(nil);
   DS.FieldDefs.Add('ID',ftInteger);
   DS.FieldDefs.Add('ID',ftInteger);
   DS.FieldDefs.Add('NAME',ftString,50);
   DS.FieldDefs.Add('NAME',ftString,50);
   DS.CreateDataset;
   DS.CreateDataset;
@@ -756,6 +757,24 @@ begin
     end;
     end;
 end;
 end;
 
 
+procedure TTestDBBasics.TestLocateCaseIns;
+begin
+  with DBConnector.GetNDataset(true,13) do
+    begin
+    open;
+    assertfalse(Locate('name',vararrayof(['TEstName5']),[]));
+    asserttrue(Locate('name',vararrayof(['TEstName5']),[loCaseInsensitive]));
+    AssertEquals(5,FieldByName('id').AsInteger);
+
+    assertfalse(Locate('name',vararrayof(['TestN']),[]));
+    asserttrue(Locate('name',vararrayof(['TestN']),[loPartialKey]));
+
+    assertfalse(Locate('name',vararrayof(['TestNA']),[loPartialKey]));
+    asserttrue(Locate('name',vararrayof(['TestNA']),[loPartialKey, loCaseInsensitive]));
+    close;
+    end;
+end;
+
 procedure TTestDBBasics.TestSetFieldValues;
 procedure TTestDBBasics.TestSetFieldValues;
 var PassException : boolean;
 var PassException : boolean;
 begin
 begin
@@ -894,9 +913,9 @@ begin
     
     
   if TestCancelUpdate then
   if TestCancelUpdate then
     begin
     begin
-    if not (ds is TBufDataset) then
-      Ignore('This test only applies to TBufDataset and descendents.');
-    with TBufDataset(ds) do
+    if not (ds is TCustomBufDataset) then
+      Ignore('This test only applies to TCustomBufDataset and descendents.');
+    with TCustomBufDataset(ds) do
       begin
       begin
       CancelUpdates;
       CancelUpdates;
 
 
@@ -963,9 +982,9 @@ begin
 
 
   if TestCancelUpdate then
   if TestCancelUpdate then
     begin
     begin
-    if not (ds is TBufDataset) then
-      Ignore('This test only applies to TBufDataset and descendents.');
-    with TBufDataset(ds) do
+    if not (ds is TCustomBufDataset) then
+      Ignore('This test only applies to TCustomBufDataset and descendents.');
+    with TCustomBufDataset(ds) do
       begin
       begin
       CancelUpdates;
       CancelUpdates;
 
 
@@ -1087,12 +1106,12 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddIndexFieldType(AFieldType: TFieldType; ActiveDS : boolean);
 procedure TTestDBBasics.TestAddIndexFieldType(AFieldType: TFieldType; ActiveDS : boolean);
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     FList : TStringList;
     FList : TStringList;
     LastValue : Variant;
     LastValue : Variant;
     StrValue : String;
     StrValue : String;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     
     
@@ -1186,12 +1205,12 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddIndex;
 procedure TTestDBBasics.TestAddIndex;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     FList : TStringList;
     FList : TStringList;
     i : integer;
     i : integer;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
 
 
@@ -1230,12 +1249,12 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddDescIndex;
 procedure TTestDBBasics.TestAddDescIndex;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     FList : TStringList;
     FList : TStringList;
     i : integer;
     i : integer;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
 
 
@@ -1274,12 +1293,12 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddCaseInsIndex;
 procedure TTestDBBasics.TestAddCaseInsIndex;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     FList : TStringList;
     FList : TStringList;
     i : integer;
     i : integer;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
 
 
@@ -1319,11 +1338,11 @@ end;
 procedure TTestDBBasics.TestInactSwitchIndex;
 procedure TTestDBBasics.TestInactSwitchIndex;
 // Test if the default-index is properly build when the active index is not
 // Test if the default-index is properly build when the active index is not
 // the default-index while opening then dataset
 // the default-index while opening then dataset
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     i : integer;
     i : integer;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
 
 
@@ -1346,18 +1365,18 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddIndexActiveDS;
 procedure TTestDBBasics.TestAddIndexActiveDS;
-var ds   : TBufDataset;
+var ds   : TCustomBufDataset;
     I    : integer;
     I    : integer;
 begin
 begin
   TestAddIndexFieldType(ftString,true);
   TestAddIndexFieldType(ftString,true);
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddIndexEditDS;
 procedure TTestDBBasics.TestAddIndexEditDS;
-var ds        : TBufDataset;
+var ds        : TCustomBufDataset;
     I         : integer;
     I         : integer;
     LastValue : String;
     LastValue : String;
 begin
 begin
-  ds := DBConnector.GetNDataset(True,5) as TBufDataset;
+  ds := DBConnector.GetNDataset(True,5) as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     MaxIndexesCount:=3;
     MaxIndexesCount:=3;
@@ -1386,12 +1405,12 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestIndexFieldNamesAct;
 procedure TTestDBBasics.TestIndexFieldNamesAct;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     FList : TStringList;
     FList : TStringList;
     i : integer;
     i : integer;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     AFieldType:=ftString;
     AFieldType:=ftString;
@@ -1458,13 +1477,13 @@ end;
 
 
 procedure TTestDBBasics.TestIndexCurRecord;
 procedure TTestDBBasics.TestIndexCurRecord;
 // Test if the currentrecord stays the same after an index change
 // Test if the currentrecord stays the same after an index change
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     i : integer;
     i : integer;
     OldID : Integer;
     OldID : Integer;
     OldStringValue : string;
     OldStringValue : string;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     AFieldType:=ftString;
     AFieldType:=ftString;
@@ -1505,11 +1524,11 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestAddDblIndex;
 procedure TTestDBBasics.TestAddDblIndex;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     LastInteger : Integer;
     LastInteger : Integer;
     LastString : string;
     LastString : string;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
 
 
@@ -1550,13 +1569,13 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestIndexEditRecord;
 procedure TTestDBBasics.TestIndexEditRecord;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     i : integer;
     i : integer;
     OldID : Integer;
     OldID : Integer;
     OldStringValue : string;
     OldStringValue : string;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     AFieldType:=ftString;
     AFieldType:=ftString;
@@ -1584,11 +1603,11 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestIndexFieldNames;
 procedure TTestDBBasics.TestIndexFieldNames;
-var ds : TBufDataset;
+var ds : TCustomBufDataset;
     AFieldType : TFieldType;
     AFieldType : TFieldType;
     PrevValue : String;
     PrevValue : String;
 begin
 begin
-  ds := DBConnector.GetFieldDataset as TBufDataset;
+  ds := DBConnector.GetFieldDataset as TCustomBufDataset;
   with ds do
   with ds do
     begin
     begin
     AFieldType:=ftString;
     AFieldType:=ftString;
@@ -1917,9 +1936,9 @@ end;
 procedure TTestDBBasics.TestBufDatasetCancelUpd;
 procedure TTestDBBasics.TestBufDatasetCancelUpd;
 var i : byte;
 var i : byte;
 begin
 begin
-  if not (DBConnector.GetNDataset(5) is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
-  with DBConnector.GetNDataset(5) as TBufDataset do
+  if not (DBConnector.GetNDataset(5) is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
+  with DBConnector.GetNDataset(5) as TCustomBufDataset do
     begin
     begin
     open;
     open;
     next;
     next;
@@ -2032,9 +2051,9 @@ end;
 procedure TTestDBBasics.TestBufDatasetCancelUpd1;
 procedure TTestDBBasics.TestBufDatasetCancelUpd1;
 var i : byte;
 var i : byte;
 begin
 begin
-  if not (DBConnector.GetNDataset(5) is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
-  with DBConnector.GetNDataset(5) as TBufDataset do
+  if not (DBConnector.GetNDataset(5) is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
+  with DBConnector.GetNDataset(5) as TCustomBufDataset do
     begin
     begin
     open;
     open;
     next;
     next;
@@ -2062,11 +2081,11 @@ procedure TTestDBBasics.TestMultipleDeleteUpdateBuffer;
 var ds    : TDataset;
 var ds    : TDataset;
 begin
 begin
   ds := DBConnector.GetNDataset(true,5);
   ds := DBConnector.GetNDataset(true,5);
-  if not (ds is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
+  if not (ds is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
 
 
   ds.open;
   ds.open;
-  with TBufDataset(ds) do
+  with TCustomBufDataset(ds) do
     begin
     begin
     AssertEquals(0,ChangeCount);
     AssertEquals(0,ChangeCount);
     edit;
     edit;
@@ -2085,11 +2104,11 @@ begin
 end;
 end;
 
 
 procedure TTestDBBasics.TestDoubleDelete;
 procedure TTestDBBasics.TestDoubleDelete;
-var ds    : TBufDataset;
+var ds    : TCustomBufDataset;
 begin
 begin
-  ds := TBufDataset(DBConnector.GetNDataset(true,5));
-  if not (ds is TBufDataset) then
-    Ignore('This test only applies to TBufDataset and descendents.');
+  ds := TCustomBufDataset(DBConnector.GetNDataset(true,5));
+  if not (ds is TCustomBufDataset) then
+    Ignore('This test only applies to TCustomBufDataset and descendents.');
 
 
   with ds do
   with ds do
     begin
     begin

+ 2 - 2
packages/fcl-db/tests/testfieldtypes.pas

@@ -133,10 +133,10 @@ const
 
 
 
 
 procedure TTestFieldTypes.TestpfInUpdateFlag;
 procedure TTestFieldTypes.TestpfInUpdateFlag;
-var ds   : TBufDataset;
+var ds   : TCustomBufDataset;
     AFld1, AFld2, AFld3 : Tfield;
     AFld1, AFld2, AFld3 : Tfield;
 begin
 begin
-  ds := (DBConnector.GetNDataset(True,5) as TBufDataset);
+  ds := (DBConnector.GetNDataset(True,5) as TCustomBufDataset);
   with ds do
   with ds do
     begin
     begin
     AFld1 := TIntegerField.Create(ds);
     AFld1 := TIntegerField.Create(ds);