Skip to content

Commit 89c88fa

Browse files
committed
Correções de tipagens e compatibilidade Delphi/Lazarus
- Ajuste de campos Single para Float. - Substituição de FmtBCD/BCD por Extended personalizados. - Suporte a Extended em Delphi antigos, Lazarus e FPC puro. - Compatibilização de clientes SQL com o servidor Delphi.
1 parent f885d69 commit 89c88fa

File tree

7 files changed

+837
-279
lines changed

7 files changed

+837
-279
lines changed

CORE/Packages/Delphi/RESTDWCore.dpk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ package RESTDWCore;
2929
{$RUNONLY}
3030
{$IMPLICITBUILD OFF}
3131

32+
requires
33+
rtl,
34+
soaprtl,
35+
dbrtl;
36+
3237
contains
3338
uRESTDWBasic in '..\..\Source\Basic\uRESTDWBasic.pas',
3439
uRESTDWBasicDB in '..\..\Source\Basic\uRESTDWBasicDB.pas',

CORE/Source/Basic/uRESTDWProtoTypes.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ interface
6969
dwftGuid = Integer(DB.ftGuid);
7070
dwftTimeStamp = Integer(DB.ftTimeStamp);
7171
dwftFMTBcd = Integer(DB.ftFMTBcd);
72+
dwftSingle = Integer(DB.ftFloat);
7273
{$IFDEF DELPHI2006UP}
7374
dwftFixedWideChar = Integer(DB.ftFixedWideChar);
7475
dwftWideMemo = Integer(DB.ftWideMemo);
@@ -84,18 +85,17 @@ interface
8485
dwftLongWord = Integer(DB.ftLongWord); //42
8586
dwftShortint = Integer(DB.ftShortint); //43
8687
dwftByte = Integer(DB.ftByte); //44
87-
dwftExtended = Integer(DB.ftFloat); //45
88+
dwftExtended = Integer(DB.ftExtended); //45
8889
dwftStream = Integer(DB.ftStream); //48
8990
dwftTimeStampOffset = Integer(DB.ftTimeStampOffset); //49
90-
dwftSingle = Integer(DB.ftSingle); //51
9191
{$ELSE}
9292
dwftLongWord = Integer(42);
9393
dwftShortint = Integer(43);
9494
dwftByte = Integer(44);
95-
dwftExtended = Integer(45);
95+
dwftExtended = Integer(ftFMTBcd);
9696
dwftStream = Integer(48);
9797
dwftTimeStampOffset = Integer(49);
98-
dwftSingle = Integer(51);
98+
// dwftSingle = Integer(51);
9999
{$ENDIF}
100100
{Unsupported types}
101101
dwftUnknown = Integer(DB.ftUnknown);

CORE/Source/Basic/uRESTDWStorageBin.pas

Lines changed: 104 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
unit uRESTDWStorageBin;
1+
unit uRESTDWStorageBin;
22

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

@@ -248,15 +248,23 @@ interface
248248
If (Not (Assigned(DataSet.FindField(FFieldNames[Index]))) And
249249
Not(FindDef(FFieldNames[Index]))) Then
250250
Begin
251-
VFDef := DataSet.FieldDefs.AddFieldDef;
252-
VFDef.Name := FFieldNames[Index];
253-
VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
254-
VFDef.Size := FFieldSize[Index];
251+
If FFieldTypes[Index] = {$IFDEF FPC}45{$ELSE}dwftExtended{$ENDIF} Then
252+
Begin
253+
DataSet.FieldDefs.Add(FFieldNames[Index], DWFieldTypeToFieldType(FFieldTypes[Index]));
254+
VFDef := DataSet.FieldDefs[DataSet.FieldDefs.Count -1];
255+
End
256+
Else
257+
Begin
258+
VFDef := DataSet.FieldDefs.AddFieldDef;
259+
VFDef.Name := FFieldNames[Index];
260+
VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
261+
End;
262+
If FFieldTypes[Index] <> dwftExtended Then
263+
VFDef.Size := FFieldSize[Index];
255264
VFDef.Required := FFieldAttrs[Index] and 1 > 0;
256265
Case FFieldTypes[Index] of
257266
dwftFloat,
258-
dwftCurrency,
259-
dwftSingle : VFDef.Precision := FFieldPrecision[Index];
267+
dwftCurrency : VFDef.Precision := FFieldPrecision[Index];
260268
dwftBCD,
261269
dwftFMTBcd : Begin
262270
{$IFNDEF FPC}
@@ -327,26 +335,22 @@ interface
327335
FFieldNames[I] := vFieldName;
328336
// field type
329337
AStream.Read(vFieldType, SizeOf(vFieldType));
330-
FFieldTypes[I] := vFieldType;
338+
If vFieldType in [{$IFDEF FPC}45, {$ENDIF}dwftExtended] Then
339+
FFieldTypes[I] := {$IFDEF FPC}Integer(ftFMTBcd){$ELSE}Integer(ftExtended){$ENDIF}
340+
Else
341+
FFieldTypes[I] := vFieldType;
331342
// field size
332343
AStream.Read(vFieldSize, SizeOf(vFieldSize));
333344
FFieldSize[I] := vFieldSize;
334345
// field precision
335346
AStream.Read(vFieldPrecision, SizeOf(vFieldPrecision));
336347
{$IFDEF FPC}
337-
If vFieldType in [dwftSingle, dwftFloat, dwftFMTBcd, dwftBCD] Then
338-
If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
339-
Begin
340-
If (vFieldPrecision < 12) Or
341-
(FFieldPrecision[I] = 0) Then
342-
FFieldPrecision[I] := 12;
343-
End
344-
Else
345-
Begin
346-
If (vFieldPrecision < 8) Or
347-
(FFieldPrecision[I] = 0) Then
348-
FFieldPrecision[I] := 8;
349-
End;
348+
If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
349+
Begin
350+
If (vFieldPrecision < 12) Or
351+
(FFieldPrecision[I] = 0) Then
352+
FFieldPrecision[I] := 12;
353+
End;
350354
{$ELSE}
351355
FFieldPrecision[I] := vFieldPrecision;
352356
If vFieldType in [dwftSingle] Then
@@ -425,6 +429,7 @@ interface
425429
vInt64 : DWInt64;
426430
vSingle : DWSingle;
427431
vDouble : DWDouble;
432+
vExtended : DWLongDouble;
428433
vWord : DWWord;
429434
vCurrency : DWCurrency;
430435
vTimeStamp : {$IFDEF FPC} TTimeStamp {$ELSE} TSQLTimeStamp {$ENDIF};
@@ -469,12 +474,12 @@ interface
469474
dwftSmallint,
470475
dwftWord,
471476
dwftInteger,
472-
dwftSingle,
477+
// dwftSingle,
473478
dwftExtended,
474479
dwftFloat,
475480
dwftOraTimeStamp,
476481
dwftBCD,
477-
dwftFMTBcd,
482+
// dwftFMTBcd,
478483
dwftCurrency,
479484
dwftDate,
480485
dwftTime,
@@ -653,22 +658,22 @@ interface
653658
Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vInt));
654659
End;
655660
End;
656-
// 4 - Bytes - Flutuantes
657-
dwftSingle :Begin // Gledston
658-
vLength := SizeOf(vDouble);
659-
stream.Read(vDouble, vLength);
660-
If aField <> Nil Then
661-
Begin
662-
//Move(vSingle,PData^,Sizeof(vSingle));
663-
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
664-
//Move Null para Bytes
665-
Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
666-
//Move Bytes do Dado para Bytes
667-
Move(vDouble, vVarBytes[1], Sizeof(vDouble));
668-
//Move Bytes para Buffer
669-
Move(vVarBytes[0], PData^, Length(vVarBytes));
670-
End;
671-
End;
661+
// // 4 - Bytes - Flutuantes
662+
// dwftSingle :Begin // Gledston
663+
// vLength := SizeOf(vDouble);
664+
// stream.Read(vDouble, vLength);
665+
// If aField <> Nil Then
666+
// Begin
667+
// //Move(vSingle,PData^,Sizeof(vSingle));
668+
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
669+
// //Move Null para Bytes
670+
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
671+
// //Move Bytes do Dado para Bytes
672+
// Move(vDouble, vVarBytes[1], Sizeof(vDouble));
673+
// //Move Bytes para Buffer
674+
// Move(vVarBytes[0], PData^, Length(vVarBytes));
675+
// End;
676+
// End;
672677
// 8 - Bytes - Inteiros
673678
dwftLargeint,
674679
dwftAutoInc,
@@ -686,7 +691,13 @@ interface
686691
End;
687692
End;
688693
// 8 - Bytes - Flutuantes
689-
dwftFloat :Begin
694+
dwftFloat
695+
{$IFDEF FPC}
696+
, 45 //Extended
697+
{$ENDIF}
698+
, dwftExtended
699+
700+
:Begin
690701
stream.Read(vDouble, SizeOf(vDouble));
691702
If aField <> Nil Then
692703
Begin
@@ -699,23 +710,23 @@ interface
699710
Move(vVarBytes[0], PData^, Length(vVarBytes));
700711
End;
701712
End;
702-
//dwftExtended :Begin
703-
// stream.Read(vDouble, SizeOf(Extended));
704-
// If aField <> Nil Then
705-
// Begin
706-
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(Extended));
707-
// //Move Null para Bytes
708-
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
709-
// //Move Bytes do Dado para Bytes
710-
// Move(vDouble, vVarBytes[1], Sizeof(Extended));
711-
// //Move Bytes para Buffer
712-
// {$IFDEF FPC}
713-
// PRESTDWBytes(pData)^ := vVarBytes;
714-
// {$ELSE}
715-
// Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vDouble));
716-
// {$ENDIF}
717-
// End;
718-
// End;
713+
// dwftExtended :Begin
714+
// stream.Read(vExtended, SizeOf(vExtended));
715+
// If aField <> Nil Then
716+
// Begin
717+
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vExtended));
718+
// //Move Null para Bytes
719+
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
720+
// //Move Bytes do Dado para Bytes
721+
// Move(vExtended, vVarBytes[1], Sizeof(vExtended));
722+
// //Move Bytes para Buffer
723+
// {$IFDEF FPC}
724+
// PRESTDWBytes(pData)^ := vVarBytes;
725+
// {$ELSE}
726+
// Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vExtended));
727+
// {$ENDIF}
728+
// End;
729+
// End;
719730
// 8 - Bytes - Date, Time, DateTime, TimeStamp
720731
dwftDate,
721732
dwftTime,
@@ -822,7 +833,7 @@ interface
822833
End;
823834
End;
824835
// 8 - Bytes - Currency
825-
dwftFMTBcd :Begin
836+
{$IFNDEF FPC}dwftFMTBcd : Begin
826837
stream.Read(vCurrency, SizeOf(vCurrency));
827838
{$IFDEF FPC}
828839
vBCD := CurrToBcd(vCurrency);
@@ -841,6 +852,7 @@ interface
841852
//Move Bytes para Buffer
842853
Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vBCD));
843854
End;
855+
{$ENDIF}
844856
//N Bytes - String Blobs
845857
dwftWideMemo,
846858
dwftFmtMemo,
@@ -1340,6 +1352,7 @@ interface
13401352
vSingle : DWSingle;
13411353
vDouble : DWDouble;
13421354
vCurrency : DWCurrency;
1355+
vExtended : DWLongDouble;
13431356
vBCD : DWBCD;
13441357
vMemoryStream : TMemoryStream;
13451358
vBoolean : Boolean;
@@ -1456,11 +1469,11 @@ interface
14561469
Move(PData^, vInt, Sizeof(vInt));
14571470
Stream.Write(vByte, Sizeof(vInt));
14581471
End;
1459-
// 4 - Bytes - Flutuantes
1460-
dwftSingle : Begin
1461-
Move(PData^, vDouble, Sizeof(vDouble));
1462-
Stream.Write(vDouble, Sizeof(vDouble));
1463-
End;
1472+
// // 4 - Bytes - Flutuantes
1473+
// dwftSingle : Begin
1474+
// Move(PData^, vDouble, Sizeof(vDouble));
1475+
// Stream.Write(vDouble, Sizeof(vDouble));
1476+
// End;
14641477
// 8 - Bytes - Inteiros
14651478
dwftLargeint,
14661479
dwftAutoInc,
@@ -1506,6 +1519,10 @@ interface
15061519
Move(PData^, vCurrency, Sizeof(vCurrency));
15071520
Stream.Write(vCurrency, Sizeof(vCurrency));
15081521
End;
1522+
dwftExtended : Begin
1523+
Move(PData^, vExtended, Sizeof(vExtended));
1524+
Stream.Write(vExtended, Sizeof(vExtended));
1525+
End;
15091526
// 8 - Bytes - Currency
15101527
dwftBCD : Begin
15111528
{$IFDEF FPC}
@@ -1520,6 +1537,7 @@ interface
15201537
{$ENDIF}
15211538
Stream.Write(vCurrency, Sizeof(vCurrency));
15221539
End;
1540+
{$IFNDEF FPC}
15231541
// 8 - Bytes - Currency
15241542
dwftFMTBcd : Begin
15251543
Move(PData^, vBCD, Sizeof(vBCD));
@@ -1534,6 +1552,7 @@ interface
15341552
{$ENDIF}
15351553
Stream.Write(vCurrency, Sizeof(vCurrency));
15361554
End;
1555+
{$ENDIF}
15371556
// N Bytes - Blobs
15381557
// dwftWideMemo,
15391558
// dwftFmtMemo,
@@ -1601,6 +1620,7 @@ interface
16011620
vInt : DWInteger;
16021621
vDouble : DWDouble;
16031622
vWord : DWWord;
1623+
vExtended : DWLongDouble;
16041624
vSingle : DWSingle;
16051625
vCurrency : DWCurrency;
16061626
vMemoryStream : TMemoryStream;
@@ -1674,10 +1694,10 @@ interface
16741694
AStream.Write(vInt, Sizeof(vInt));
16751695
End;
16761696
// 4 - Bytes - Flutuantes
1677-
dwftSingle : Begin
1678-
vSingle := ADataset.Fields[i].Value;
1679-
AStream.Write(vSingle, SizeOf(vSingle));
1680-
End;
1697+
// dwftSingle : Begin
1698+
// vSingle := ADataset.Fields[i].Value;
1699+
// AStream.Write(vSingle, SizeOf(vSingle));
1700+
// End;
16811701
// 8 - Bytes - Inteiros
16821702
dwftLargeint,
16831703
dwftAutoInc,
@@ -1690,10 +1710,19 @@ interface
16901710
AStream.Write(vInt64, Sizeof(vInt64));
16911711
End;
16921712
// 8 - Bytes - Flutuantes
1693-
dwftFloat : Begin
1694-
vDouble := ADataset.Fields[i].AsFloat;
1695-
AStream.Write(vDouble, Sizeof(vDouble));
1696-
End;
1713+
dwftFloat
1714+
{$IFDEF FPC}
1715+
, 45, dwftExtended
1716+
{$ENDIF} : Begin
1717+
vDouble := ADataset.Fields[i].AsFloat;
1718+
AStream.Write(vDouble, Sizeof(vDouble));
1719+
End;
1720+
{$IFNDEF FPC}
1721+
dwftExtended : Begin
1722+
vExtended := ADataset.Fields[i]{$IFNDEF FPC}.AsExtended{$ELSE}.AsFloat{$ENDIF};
1723+
AStream.Write(vExtended, Sizeof(vExtended));
1724+
End;
1725+
{$ENDIF}
16971726
// 8 - Bytes - Date, Time, DateTime, TimeStamp
16981727
dwftDate,
16991728
dwftTime,
@@ -1717,8 +1746,10 @@ interface
17171746
{$ENDIF}
17181747
// 8 - Bytes - Currency
17191748
dwftCurrency,
1720-
dwftBCD,
1721-
dwftFMTBcd : Begin
1749+
dwftBCD
1750+
{$IFNDEF FPC}
1751+
, dwftFMTBcd
1752+
{$ENDIF} : Begin
17221753
{$IFDEF FPC}
17231754
If ADataset.Fields[i].Isnull Then
17241755
vCurrency := 0

0 commit comments

Comments
 (0)