sync with tdbf svn rev 275

git-svn-id: trunk@6403 -
This commit is contained in:
micha 2007-02-10 21:55:07 +00:00
parent 38dabf82da
commit 258708e6d3
3 changed files with 30 additions and 1508 deletions

File diff suppressed because it is too large Load Diff

View File

@ -628,12 +628,12 @@ var
procedure IncWordLE(var AVariable: Word; Amount: Integer);
begin
AVariable := SwapWordLE(SwapWordLE(AVariable + Amount));
AVariable := SwapWordLE(SwapWordLE(AVariable) + Amount);
end;
procedure IncIntLE(var AVariable: Integer; Amount: Integer);
begin
AVariable := SwapIntLE(SwapIntLE(AVariable + Amount));
AVariable := SwapIntLE(SwapIntLE(AVariable) + Amount);
end;
//==========================================================
@ -2106,7 +2106,7 @@ procedure TIndexFile.CalcKeyProperties;
begin
// now adjust keylen to align on DWORD boundaries
PIndexHdr(FIndexHeader)^.KeyRecLen := SwapWordLE((SwapWordLE(
PIndexHdr(FIndexHeader)^.KeyLen) + FEntryHeaderSize + 3) and 3);
PIndexHdr(FIndexHeader)^.KeyLen) + FEntryHeaderSize + 3) and not 3);
PIndexHdr(FIndexHeader)^.NumKeys := SwapWordLE((RecordSize - FPageHeaderSize) div
SwapWordLE(PIndexHdr(FIndexHeader)^.KeyRecLen));
end;

View File

@ -85,11 +85,10 @@ type
FDbfFile: TDbfFile;
FFieldName: string;
FExprWord: TExprWord;
procedure SetExprWord(NewExprWord: TExprWord);
protected
function GetFieldVal: Pointer; virtual; abstract;
function GetFieldType: TExpressionType; virtual; abstract;
procedure SetExprWord(NewExprWord: TExprWord); virtual;
property ExprWord: TExprWord read FExprWord write SetExprWord;
public
@ -111,7 +110,9 @@ type
function GetFieldVal: Pointer; override;
function GetFieldType: TExpressionType; override;
procedure SetExprWord(NewExprWord: TExprWord); override;
procedure SetRawStringField(NewRaw: boolean);
procedure UpdateExprWord;
public
constructor Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
destructor Destroy; override;
@ -187,7 +188,7 @@ end;
procedure TFieldVar.SetExprWord(NewExprWord: TExprWord);
begin
FExprWord.FixedLen := FFieldDef.Size;
FExprWord := NewExprWord;
end;
{ TStringFieldVar }
@ -234,18 +235,29 @@ begin
FFieldVal := Src;
end;
procedure TStringFieldVar.SetExprWord(NewExprWord: TExprWord);
begin
inherited;
UpdateExprWord;
end;
procedure TStringFieldVar.UpdateExprWord;
begin
if FRawStringField then
FExprWord.FixedLen := FieldDef.Size
else
FExprWord.FixedLen := -1;
end;
procedure TStringFieldVar.SetRawStringField(NewRaw: boolean);
begin
if NewRaw = FRawStringField then exit;
FRawStringField := NewRaw;
if NewRaw then
begin
FExprWord.FixedLen := FieldDef.Size;
FreeMem(FFieldVal);
end else begin
FExprWord.FixedLen := -1;
FreeMem(FFieldVal)
else
GetMem(FFieldVal, FieldDef.Size*3+1);
end;
UpdateExprWord;
end;
//--TFloatFieldVar-----------------------------------------------------------
@ -473,35 +485,35 @@ begin
ftString:
begin
TempFieldVar := TStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
TStringFieldVar(TempFieldVar).RawStringField := FRawStringFields;
end;
ftBoolean:
begin
TempFieldVar := TBooleanFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineBooleanVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineBooleanVariable(VarName, TempFieldVar.FieldVal);
end;
ftFloat:
begin
TempFieldVar := TFloatFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
end;
ftAutoInc, ftInteger, ftSmallInt:
begin
TempFieldVar := TIntegerFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineIntegerVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineIntegerVariable(VarName, TempFieldVar.FieldVal);
end;
{$ifdef SUPPORT_INT64}
ftLargeInt:
begin
TempFieldVar := TLargeIntFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineLargeIntVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineLargeIntVariable(VarName, TempFieldVar.FieldVal);
end;
{$endif}
ftDate, ftDateTime:
begin
TempFieldVar := TDateTimeFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
TempFieldVar.ExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
end;
else
raise EDbfError.CreateFmt(STRING_INDEX_BASED_ON_INVALID_FIELD, [VarName]);