Browse Source

+ Cache field buffer position

git-svn-id: trunk@2918 -
joost 19 years ago
parent
commit
59c4fe4057
2 changed files with 10 additions and 12 deletions
  1. 9 12
      fcl/db/bufdataset.inc
  2. 1 0
      fcl/db/db.pp

+ 9 - 12
fcl/db/bufdataset.inc

@@ -82,6 +82,7 @@ begin
   If FBBufferCount > 0 then ReAllocMem(FBBuffers,0);
   If FBBufferCount > 0 then ReAllocMem(FBBuffers,0);
   FBRecordcount := 0;
   FBRecordcount := 0;
   FBBuffercount := 0;
   FBBuffercount := 0;
+  SetLength(FFieldBufPositions,0);
   FBCurrentrecord := -1;
   FBCurrentrecord := -1;
   FIsEOF := true;
   FIsEOF := true;
   FIsbOF := true;
   FIsbOF := true;
@@ -406,19 +407,10 @@ begin
       result := false;
       result := false;
       exit;
       exit;
       end;
       end;
-    inc(Currbuff,FNullmaskSize);
 
 
-    for x := 0 to FieldDefs.count-1 do
-      begin
-      if (Field.FieldName = FieldDefs[x].Name) then
-        begin
-        // a nil-buffer is allowed for the fields.isNull function
-        if assigned(buffer) then Move(CurrBuff^, Buffer^, GetFieldSize(FieldDefs[x]));
-        Result := True;
-        Break;
-        end
-      else Inc(CurrBuff, GetFieldSize(FieldDefs[x]));
-      end;
+    inc(CurrBuff,FFieldBufPositions[Field.FieldNo-1]);
+    if assigned(buffer) then Move(CurrBuff^, Buffer^, GetFieldSize(FieldDefs[Field.FieldNo-1]));
+    Result := True;
     end;
     end;
 end;
 end;
 
 
@@ -708,8 +700,12 @@ var x : longint;
 begin
 begin
   FNullmaskSize := 1+((FieldDefs.count) div 8);
   FNullmaskSize := 1+((FieldDefs.count) div 8);
   FRecordSize := FNullmaskSize;
   FRecordSize := FNullmaskSize;
+  SetLength(FFieldBufPositions,FieldDefs.count);
   for x := 0 to FieldDefs.count-1 do
   for x := 0 to FieldDefs.count-1 do
+    begin
+    FFieldBufPositions[x] := FRecordSize;
     inc(FRecordSize, GetFieldSize(FieldDefs[x]));
     inc(FRecordSize, GetFieldSize(FieldDefs[x]));
+    end;
 end;
 end;
 
 
 function TBufDataset.GetRecordSize : Word;
 function TBufDataset.GetRecordSize : Word;
@@ -749,3 +745,4 @@ end;
 
 
 
 
 
 
+

+ 1 - 0
fcl/db/db.pp

@@ -1510,6 +1510,7 @@ type
     FEditBuf        : PRecUpdateBuffer;
     FEditBuf        : PRecUpdateBuffer;
     FApplyingUpdates: boolean;
     FApplyingUpdates: boolean;
     FBDeletedRecords: integer;
     FBDeletedRecords: integer;
+    FFieldBufPositions : array of longint;
     procedure CalcRecordSize;
     procedure CalcRecordSize;
     function LoadBuffer(Buffer : PChar): TGetResult;
     function LoadBuffer(Buffer : PChar): TGetResult;
     function GetFieldSize(FieldDef : TFieldDef) : longint;
     function GetFieldSize(FieldDef : TFieldDef) : longint;