Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CORE/Packages/Delphi/RESTDWCore.dpk
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ package RESTDWCore;
{$RUNONLY}
{$IMPLICITBUILD OFF}

requires
rtl,
soaprtl,
dbrtl;

contains
uRESTDWBasic in '..\..\Source\Basic\uRESTDWBasic.pas',
uRESTDWBasicDB in '..\..\Source\Basic\uRESTDWBasicDB.pas',
Expand Down
8 changes: 4 additions & 4 deletions CORE/Source/Basic/uRESTDWProtoTypes.pas
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ interface
dwftGuid = Integer(DB.ftGuid);
dwftTimeStamp = Integer(DB.ftTimeStamp);
dwftFMTBcd = Integer(DB.ftFMTBcd);
dwftSingle = Integer(DB.ftFloat);
{$IFDEF DELPHI2006UP}
dwftFixedWideChar = Integer(DB.ftFixedWideChar);
dwftWideMemo = Integer(DB.ftWideMemo);
Expand All @@ -84,18 +85,17 @@ interface
dwftLongWord = Integer(DB.ftLongWord); //42
dwftShortint = Integer(DB.ftShortint); //43
dwftByte = Integer(DB.ftByte); //44
dwftExtended = Integer(DB.ftFloat); //45
dwftExtended = Integer(DB.ftExtended); //45
dwftStream = Integer(DB.ftStream); //48
dwftTimeStampOffset = Integer(DB.ftTimeStampOffset); //49
dwftSingle = Integer(DB.ftSingle); //51
{$ELSE}
dwftLongWord = Integer(42);
dwftShortint = Integer(43);
dwftByte = Integer(44);
dwftExtended = Integer(45);
dwftExtended = Integer(ftFMTBcd);
dwftStream = Integer(48);
dwftTimeStampOffset = Integer(49);
dwftSingle = Integer(51);
// dwftSingle = Integer(51);
{$ENDIF}
{Unsupported types}
dwftUnknown = Integer(DB.ftUnknown);
Expand Down
177 changes: 104 additions & 73 deletions CORE/Source/Basic/uRESTDWStorageBin.pas
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
unit uRESTDWStorageBin;
unit uRESTDWStorageBin;

{$I ..\Includes\uRESTDW.inc}

Expand Down Expand Up @@ -248,15 +248,23 @@ interface
If (Not (Assigned(DataSet.FindField(FFieldNames[Index]))) And
Not(FindDef(FFieldNames[Index]))) Then
Begin
VFDef := DataSet.FieldDefs.AddFieldDef;
VFDef.Name := FFieldNames[Index];
VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
VFDef.Size := FFieldSize[Index];
If FFieldTypes[Index] = {$IFDEF FPC}45{$ELSE}dwftExtended{$ENDIF} Then
Begin
DataSet.FieldDefs.Add(FFieldNames[Index], DWFieldTypeToFieldType(FFieldTypes[Index]));
VFDef := DataSet.FieldDefs[DataSet.FieldDefs.Count -1];
End
Else
Begin
VFDef := DataSet.FieldDefs.AddFieldDef;
VFDef.Name := FFieldNames[Index];
VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
End;
If FFieldTypes[Index] <> dwftExtended Then
VFDef.Size := FFieldSize[Index];
VFDef.Required := FFieldAttrs[Index] and 1 > 0;
Case FFieldTypes[Index] of
dwftFloat,
dwftCurrency,
dwftSingle : VFDef.Precision := FFieldPrecision[Index];
dwftCurrency : VFDef.Precision := FFieldPrecision[Index];
dwftBCD,
dwftFMTBcd : Begin
{$IFNDEF FPC}
Expand Down Expand Up @@ -327,26 +335,22 @@ interface
FFieldNames[I] := vFieldName;
// field type
AStream.Read(vFieldType, SizeOf(vFieldType));
FFieldTypes[I] := vFieldType;
If vFieldType in [{$IFDEF FPC}45, {$ENDIF}dwftExtended] Then
FFieldTypes[I] := {$IFDEF FPC}Integer(ftFMTBcd){$ELSE}Integer(ftExtended){$ENDIF}
Else
FFieldTypes[I] := vFieldType;
// field size
AStream.Read(vFieldSize, SizeOf(vFieldSize));
FFieldSize[I] := vFieldSize;
// field precision
AStream.Read(vFieldPrecision, SizeOf(vFieldPrecision));
{$IFDEF FPC}
If vFieldType in [dwftSingle, dwftFloat, dwftFMTBcd, dwftBCD] Then
If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
Begin
If (vFieldPrecision < 12) Or
(FFieldPrecision[I] = 0) Then
FFieldPrecision[I] := 12;
End
Else
Begin
If (vFieldPrecision < 8) Or
(FFieldPrecision[I] = 0) Then
FFieldPrecision[I] := 8;
End;
If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
Begin
If (vFieldPrecision < 12) Or
(FFieldPrecision[I] = 0) Then
FFieldPrecision[I] := 12;
End;
{$ELSE}
FFieldPrecision[I] := vFieldPrecision;
If vFieldType in [dwftSingle] Then
Expand Down Expand Up @@ -425,6 +429,7 @@ interface
vInt64 : DWInt64;
vSingle : DWSingle;
vDouble : DWDouble;
vExtended : DWLongDouble;
vWord : DWWord;
vCurrency : DWCurrency;
vTimeStamp : {$IFDEF FPC} TTimeStamp {$ELSE} TSQLTimeStamp {$ENDIF};
Expand Down Expand Up @@ -469,12 +474,12 @@ interface
dwftSmallint,
dwftWord,
dwftInteger,
dwftSingle,
// dwftSingle,
dwftExtended,
dwftFloat,
dwftOraTimeStamp,
dwftBCD,
dwftFMTBcd,
// dwftFMTBcd,
dwftCurrency,
dwftDate,
dwftTime,
Expand Down Expand Up @@ -653,22 +658,22 @@ interface
Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vInt));
End;
End;
// 4 - Bytes - Flutuantes
dwftSingle :Begin // Gledston
vLength := SizeOf(vDouble);
stream.Read(vDouble, vLength);
If aField <> Nil Then
Begin
//Move(vSingle,PData^,Sizeof(vSingle));
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
//Move Null para Bytes
Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
//Move Bytes do Dado para Bytes
Move(vDouble, vVarBytes[1], Sizeof(vDouble));
//Move Bytes para Buffer
Move(vVarBytes[0], PData^, Length(vVarBytes));
End;
End;
// // 4 - Bytes - Flutuantes
// dwftSingle :Begin // Gledston
// vLength := SizeOf(vDouble);
// stream.Read(vDouble, vLength);
// If aField <> Nil Then
// Begin
// //Move(vSingle,PData^,Sizeof(vSingle));
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
// //Move Null para Bytes
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
// //Move Bytes do Dado para Bytes
// Move(vDouble, vVarBytes[1], Sizeof(vDouble));
// //Move Bytes para Buffer
// Move(vVarBytes[0], PData^, Length(vVarBytes));
// End;
// End;
// 8 - Bytes - Inteiros
dwftLargeint,
dwftAutoInc,
Expand All @@ -686,7 +691,13 @@ interface
End;
End;
// 8 - Bytes - Flutuantes
dwftFloat :Begin
dwftFloat
{$IFDEF FPC}
, 45 //Extended
{$ENDIF}
, dwftExtended

:Begin
stream.Read(vDouble, SizeOf(vDouble));
If aField <> Nil Then
Begin
Expand All @@ -699,23 +710,23 @@ interface
Move(vVarBytes[0], PData^, Length(vVarBytes));
End;
End;
//dwftExtended :Begin
// stream.Read(vDouble, SizeOf(Extended));
// If aField <> Nil Then
// Begin
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(Extended));
// //Move Null para Bytes
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
// //Move Bytes do Dado para Bytes
// Move(vDouble, vVarBytes[1], Sizeof(Extended));
// //Move Bytes para Buffer
// {$IFDEF FPC}
// PRESTDWBytes(pData)^ := vVarBytes;
// {$ELSE}
// Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vDouble));
// {$ENDIF}
// End;
// End;
// dwftExtended :Begin
// stream.Read(vExtended, SizeOf(vExtended));
// If aField <> Nil Then
// Begin
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vExtended));
// //Move Null para Bytes
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
// //Move Bytes do Dado para Bytes
// Move(vExtended, vVarBytes[1], Sizeof(vExtended));
// //Move Bytes para Buffer
// {$IFDEF FPC}
// PRESTDWBytes(pData)^ := vVarBytes;
// {$ELSE}
// Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vExtended));
// {$ENDIF}
// End;
// End;
// 8 - Bytes - Date, Time, DateTime, TimeStamp
dwftDate,
dwftTime,
Expand Down Expand Up @@ -822,7 +833,7 @@ interface
End;
End;
// 8 - Bytes - Currency
dwftFMTBcd :Begin
{$IFNDEF FPC}dwftFMTBcd : Begin
stream.Read(vCurrency, SizeOf(vCurrency));
{$IFDEF FPC}
vBCD := CurrToBcd(vCurrency);
Expand All @@ -841,6 +852,7 @@ interface
//Move Bytes para Buffer
Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vBCD));
End;
{$ENDIF}
//N Bytes - String Blobs
dwftWideMemo,
dwftFmtMemo,
Expand Down Expand Up @@ -1340,6 +1352,7 @@ interface
vSingle : DWSingle;
vDouble : DWDouble;
vCurrency : DWCurrency;
vExtended : DWLongDouble;
vBCD : DWBCD;
vMemoryStream : TMemoryStream;
vBoolean : Boolean;
Expand Down Expand Up @@ -1456,11 +1469,11 @@ interface
Move(PData^, vInt, Sizeof(vInt));
Stream.Write(vByte, Sizeof(vInt));
End;
// 4 - Bytes - Flutuantes
dwftSingle : Begin
Move(PData^, vDouble, Sizeof(vDouble));
Stream.Write(vDouble, Sizeof(vDouble));
End;
// // 4 - Bytes - Flutuantes
// dwftSingle : Begin
// Move(PData^, vDouble, Sizeof(vDouble));
// Stream.Write(vDouble, Sizeof(vDouble));
// End;
// 8 - Bytes - Inteiros
dwftLargeint,
dwftAutoInc,
Expand Down Expand Up @@ -1506,6 +1519,10 @@ interface
Move(PData^, vCurrency, Sizeof(vCurrency));
Stream.Write(vCurrency, Sizeof(vCurrency));
End;
dwftExtended : Begin
Move(PData^, vExtended, Sizeof(vExtended));
Stream.Write(vExtended, Sizeof(vExtended));
End;
// 8 - Bytes - Currency
dwftBCD : Begin
{$IFDEF FPC}
Expand All @@ -1520,6 +1537,7 @@ interface
{$ENDIF}
Stream.Write(vCurrency, Sizeof(vCurrency));
End;
{$IFNDEF FPC}
// 8 - Bytes - Currency
dwftFMTBcd : Begin
Move(PData^, vBCD, Sizeof(vBCD));
Expand All @@ -1534,6 +1552,7 @@ interface
{$ENDIF}
Stream.Write(vCurrency, Sizeof(vCurrency));
End;
{$ENDIF}
// N Bytes - Blobs
// dwftWideMemo,
// dwftFmtMemo,
Expand Down Expand Up @@ -1601,6 +1620,7 @@ interface
vInt : DWInteger;
vDouble : DWDouble;
vWord : DWWord;
vExtended : DWLongDouble;
vSingle : DWSingle;
vCurrency : DWCurrency;
vMemoryStream : TMemoryStream;
Expand Down Expand Up @@ -1674,10 +1694,10 @@ interface
AStream.Write(vInt, Sizeof(vInt));
End;
// 4 - Bytes - Flutuantes
dwftSingle : Begin
vSingle := ADataset.Fields[i].Value;
AStream.Write(vSingle, SizeOf(vSingle));
End;
// dwftSingle : Begin
// vSingle := ADataset.Fields[i].Value;
// AStream.Write(vSingle, SizeOf(vSingle));
// End;
// 8 - Bytes - Inteiros
dwftLargeint,
dwftAutoInc,
Expand All @@ -1690,10 +1710,19 @@ interface
AStream.Write(vInt64, Sizeof(vInt64));
End;
// 8 - Bytes - Flutuantes
dwftFloat : Begin
vDouble := ADataset.Fields[i].AsFloat;
AStream.Write(vDouble, Sizeof(vDouble));
End;
dwftFloat
{$IFDEF FPC}
, 45, dwftExtended
{$ENDIF} : Begin
vDouble := ADataset.Fields[i].AsFloat;
AStream.Write(vDouble, Sizeof(vDouble));
End;
{$IFNDEF FPC}
dwftExtended : Begin
vExtended := ADataset.Fields[i]{$IFNDEF FPC}.AsExtended{$ELSE}.AsFloat{$ENDIF};
AStream.Write(vExtended, Sizeof(vExtended));
End;
{$ENDIF}
// 8 - Bytes - Date, Time, DateTime, TimeStamp
dwftDate,
dwftTime,
Expand All @@ -1717,8 +1746,10 @@ interface
{$ENDIF}
// 8 - Bytes - Currency
dwftCurrency,
dwftBCD,
dwftFMTBcd : Begin
dwftBCD
{$IFNDEF FPC}
, dwftFMTBcd
{$ENDIF} : Begin
{$IFDEF FPC}
If ADataset.Fields[i].Isnull Then
vCurrency := 0
Expand Down
Loading
Loading