mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-03 14:29:26 +01:00
sync with tdbf svn rev 275
git-svn-id: trunk@6403 -
This commit is contained in:
parent
38dabf82da
commit
258708e6d3
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
|
||||
@ -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]);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user