mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-07 15:29:35 +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);
|
procedure IncWordLE(var AVariable: Word; Amount: Integer);
|
||||||
begin
|
begin
|
||||||
AVariable := SwapWordLE(SwapWordLE(AVariable + Amount));
|
AVariable := SwapWordLE(SwapWordLE(AVariable) + Amount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure IncIntLE(var AVariable: Integer; Amount: Integer);
|
procedure IncIntLE(var AVariable: Integer; Amount: Integer);
|
||||||
begin
|
begin
|
||||||
AVariable := SwapIntLE(SwapIntLE(AVariable + Amount));
|
AVariable := SwapIntLE(SwapIntLE(AVariable) + Amount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//==========================================================
|
//==========================================================
|
||||||
@ -2106,7 +2106,7 @@ procedure TIndexFile.CalcKeyProperties;
|
|||||||
begin
|
begin
|
||||||
// now adjust keylen to align on DWORD boundaries
|
// now adjust keylen to align on DWORD boundaries
|
||||||
PIndexHdr(FIndexHeader)^.KeyRecLen := SwapWordLE((SwapWordLE(
|
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
|
PIndexHdr(FIndexHeader)^.NumKeys := SwapWordLE((RecordSize - FPageHeaderSize) div
|
||||||
SwapWordLE(PIndexHdr(FIndexHeader)^.KeyRecLen));
|
SwapWordLE(PIndexHdr(FIndexHeader)^.KeyRecLen));
|
||||||
end;
|
end;
|
||||||
|
|||||||
@ -85,11 +85,10 @@ type
|
|||||||
FDbfFile: TDbfFile;
|
FDbfFile: TDbfFile;
|
||||||
FFieldName: string;
|
FFieldName: string;
|
||||||
FExprWord: TExprWord;
|
FExprWord: TExprWord;
|
||||||
|
|
||||||
procedure SetExprWord(NewExprWord: TExprWord);
|
|
||||||
protected
|
protected
|
||||||
function GetFieldVal: Pointer; virtual; abstract;
|
function GetFieldVal: Pointer; virtual; abstract;
|
||||||
function GetFieldType: TExpressionType; virtual; abstract;
|
function GetFieldType: TExpressionType; virtual; abstract;
|
||||||
|
procedure SetExprWord(NewExprWord: TExprWord); virtual;
|
||||||
|
|
||||||
property ExprWord: TExprWord read FExprWord write SetExprWord;
|
property ExprWord: TExprWord read FExprWord write SetExprWord;
|
||||||
public
|
public
|
||||||
@ -111,7 +110,9 @@ type
|
|||||||
|
|
||||||
function GetFieldVal: Pointer; override;
|
function GetFieldVal: Pointer; override;
|
||||||
function GetFieldType: TExpressionType; override;
|
function GetFieldType: TExpressionType; override;
|
||||||
|
procedure SetExprWord(NewExprWord: TExprWord); override;
|
||||||
procedure SetRawStringField(NewRaw: boolean);
|
procedure SetRawStringField(NewRaw: boolean);
|
||||||
|
procedure UpdateExprWord;
|
||||||
public
|
public
|
||||||
constructor Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
|
constructor Create(UseFieldDef: TDbfFieldDef; ADbfFile: TDbfFile);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -187,7 +188,7 @@ end;
|
|||||||
|
|
||||||
procedure TFieldVar.SetExprWord(NewExprWord: TExprWord);
|
procedure TFieldVar.SetExprWord(NewExprWord: TExprWord);
|
||||||
begin
|
begin
|
||||||
FExprWord.FixedLen := FFieldDef.Size;
|
FExprWord := NewExprWord;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TStringFieldVar }
|
{ TStringFieldVar }
|
||||||
@ -234,18 +235,29 @@ begin
|
|||||||
FFieldVal := Src;
|
FFieldVal := Src;
|
||||||
end;
|
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);
|
procedure TStringFieldVar.SetRawStringField(NewRaw: boolean);
|
||||||
begin
|
begin
|
||||||
if NewRaw = FRawStringField then exit;
|
if NewRaw = FRawStringField then exit;
|
||||||
FRawStringField := NewRaw;
|
FRawStringField := NewRaw;
|
||||||
if NewRaw then
|
if NewRaw then
|
||||||
begin
|
FreeMem(FFieldVal)
|
||||||
FExprWord.FixedLen := FieldDef.Size;
|
else
|
||||||
FreeMem(FFieldVal);
|
|
||||||
end else begin
|
|
||||||
FExprWord.FixedLen := -1;
|
|
||||||
GetMem(FFieldVal, FieldDef.Size*3+1);
|
GetMem(FFieldVal, FieldDef.Size*3+1);
|
||||||
end;
|
UpdateExprWord;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//--TFloatFieldVar-----------------------------------------------------------
|
//--TFloatFieldVar-----------------------------------------------------------
|
||||||
@ -473,35 +485,35 @@ begin
|
|||||||
ftString:
|
ftString:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TStringFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineStringVariable(VarName, TempFieldVar.FieldVal);
|
||||||
TStringFieldVar(TempFieldVar).RawStringField := FRawStringFields;
|
TStringFieldVar(TempFieldVar).RawStringField := FRawStringFields;
|
||||||
end;
|
end;
|
||||||
ftBoolean:
|
ftBoolean:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TBooleanFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TBooleanFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineBooleanVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineBooleanVariable(VarName, TempFieldVar.FieldVal);
|
||||||
end;
|
end;
|
||||||
ftFloat:
|
ftFloat:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TFloatFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TFloatFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
|
||||||
end;
|
end;
|
||||||
ftAutoInc, ftInteger, ftSmallInt:
|
ftAutoInc, ftInteger, ftSmallInt:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TIntegerFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TIntegerFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineIntegerVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineIntegerVariable(VarName, TempFieldVar.FieldVal);
|
||||||
end;
|
end;
|
||||||
{$ifdef SUPPORT_INT64}
|
{$ifdef SUPPORT_INT64}
|
||||||
ftLargeInt:
|
ftLargeInt:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TLargeIntFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TLargeIntFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineLargeIntVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineLargeIntVariable(VarName, TempFieldVar.FieldVal);
|
||||||
end;
|
end;
|
||||||
{$endif}
|
{$endif}
|
||||||
ftDate, ftDateTime:
|
ftDate, ftDateTime:
|
||||||
begin
|
begin
|
||||||
TempFieldVar := TDateTimeFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
TempFieldVar := TDateTimeFieldVar.Create(FieldInfo, TDbfFile(FDbfFile));
|
||||||
TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
|
TempFieldVar.ExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
raise EDbfError.CreateFmt(STRING_INDEX_BASED_ON_INVALID_FIELD, [VarName]);
|
raise EDbfError.CreateFmt(STRING_INDEX_BASED_ON_INVALID_FIELD, [VarName]);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user