Skip to content

Commit bdbe85b

Browse files
authored
Adição de TExtendedField e correções em JSON, Buffer e Massive (#407)
2 parents 7676a61 + b88379e commit bdbe85b

File tree

6 files changed

+60
-21
lines changed

6 files changed

+60
-21
lines changed

CORE/Packages/Lazarus/RESTDataWareComponents.lpk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
</CodeGeneration>
2222
<Linking>
2323
<Debugging>
24-
<DebugInfoType Value="dsDwarf2"/>
24+
<DebugInfoType Value="dsDwarf3"/>
2525
</Debugging>
2626
</Linking>
2727
<Other>

CORE/Source/Basic/uRESTDWBasicDB.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ interface
742742
vBookmark : Integer;
743743
vActive,
744744
vInactive : Boolean;
745-
Procedure InternalPost; overload; // Gilberto Rocha 12/04/2019 - usado para poder fazer datasource.dataset.Post
745+
Procedure InternalPost; override; // Gilberto Rocha 12/04/2019 - usado para poder fazer datasource.dataset.Post
746746
procedure InternalOpen; override; // Gilberto Rocha 03/09/2021 - usado para poder fazer datasource.dataset.Open
747747
Function GetRecordCount : Integer; Override;
748748
procedure InternalRefresh; overload; // Gilberto Rocha 03/09/2021 - usado para poder fazer datasource.dataset.Refresh
@@ -9069,7 +9069,7 @@ procedure TRESTDWTable.InternalOpen;
90699069

90709070
Procedure TRESTDWClientSQL.InternalPost;
90719071
Begin
9072-
Inherited;
9072+
Inherited InternalPost;
90739073
End;
90749074

90759075
procedure TRESTDWClientSQL.InternalOpen;

CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
SMinIndexes = 'The minimum amount of indexes is 1';
6161
SIndexNotFound = 'Index ''%s'' not found';
6262
SUniDirectional = 'Operation cannot be performed on an unidirectional dataset';
63+
SFieldRequired = 'Field ''%s'' must have a value';
6364

6465
Type
6566
TCompareFunc = Function(subValue,
@@ -648,6 +649,7 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex)
648649
Procedure InternalDelete; Override;
649650
Procedure InternalPost; Override;
650651
Procedure InternalClose; Override;
652+
procedure CheckRequiredFields;
651653
Procedure InternalHandleException; Override;
652654
Procedure InternalInitFieldDefs; Override;
653655
Procedure InternalOpen; Override;
@@ -817,6 +819,7 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex)
817819
Property IndexName : String Read GetIndexName Write SetIndexName;
818820
Property IndexFieldNames : String Read GetIndexFieldNames Write SetIndexFieldNames;
819821
Property MaxIndexesCount : Integer Read FMaxIndexesCount Write SetMaxIndexesCount default 2;
822+
Property Filter;
820823
Property BeforeOpen;
821824
Property AfterOpen;
822825
Property BeforeClose;
@@ -972,9 +975,11 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex)
972975
Private
973976
vSize,
974977
vPrecision : Integer;
978+
Procedure SetAsExtended(Const AValue : Extended);
975979
Protected
976-
Function GetAsString : String; Override;
977-
Function GetAsVariant : Variant; Override;
980+
Function GetAsString : String; Override;
981+
Procedure SetAsString (Const AValue : String); Override;
982+
// Function GetAsVariant : Variant; Override;
978983
Public
979984
Constructor Create(AOwner: TComponent); override;
980985
Property Size : Integer Read vSize Write vSize;
@@ -1423,6 +1428,26 @@ TMemBookmarkInfo = record
14231428
vPrecision := 8;
14241429
End;
14251430

1431+
{$IFDEF FPC}
1432+
Procedure TExtendedField.SetAsExtended(Const AValue : Extended);
1433+
Begin
1434+
SetData(@AValue, True);
1435+
End;
1436+
1437+
Procedure TExtendedField.SetAsString(Const AValue : String);
1438+
Var
1439+
x : Extended;
1440+
Begin
1441+
If AValue = '' Then
1442+
Clear
1443+
Else
1444+
Begin
1445+
x := StrToFloat(AValue);
1446+
SetAsExtended(x);
1447+
End;
1448+
End;
1449+
{$ENDIF}
1450+
14261451
Function TExtendedField.GetAsString: string;
14271452
Var
14281453
x : Extended;
@@ -1515,13 +1540,6 @@ TMemBookmarkInfo = record
15151540
End;
15161541
{$ENDIF}
15171542

1518-
{$IFDEF FPC}
1519-
Function TExtendedField.GetAsVariant : Variant;
1520-
Begin
1521-
Result := Extended(Value); //_RealSupportManager._VarFromReal(Value);
1522-
End;
1523-
{$ENDIF}
1524-
15251543
Function TRESTDWMTMemoryRecord.GetIndex: Integer;
15261544
Begin
15271545
// If FMemoryData <> nil then
@@ -2699,8 +2717,9 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer
26992717
End
27002718
Else If Field.datatype = ftExtended Then
27012719
Begin
2702-
Move(aDataBytes[1], Pointer(@vLongDouble)^, SizeOf(DWLongDouble));
2703-
PExtended(Buffer)^ := vLongDouble;
2720+
If Length(TRESTDWBytes(Buffer)) = 0 Then
2721+
SetLength(TRESTDWBytes(Buffer), cLen);
2722+
Move(aDataBytes[1], Pointer(Buffer)^, SizeOf(DWLongDouble));
27042723
End
27052724
Else
27062725
Begin
@@ -3084,6 +3103,8 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field : TField;
30843103
dwftFloat,
30853104
{$IFNDEF FPC}
30863105
dwftFMTBCD,
3106+
{$ELSE}
3107+
45,
30873108
{$ENDIF}
30883109
dwftBCD,
30893110
dwftCurrency,
@@ -5422,6 +5443,18 @@ procedure TRESTDWMemTable.InternalDelete;
54225443
End;
54235444
End;
54245445

5446+
procedure TRESTDWMemTable.CheckRequiredFields;
5447+
var
5448+
I: Integer;
5449+
begin
5450+
for I := 0 to Fields.Count - 1 do
5451+
if Fields[I].Required and not Fields[I].ReadOnly and (Fields[I].FieldKind = fkData) and Fields[I].IsNull then
5452+
begin
5453+
Fields[I].FocusControl;
5454+
DatabaseErrorFmt(SFieldRequired, [Fields[I].DisplayName]);
5455+
end;
5456+
end;
5457+
54255458
procedure TRESTDWMemTable.InternalPost;
54265459
var
54275460
RecPos: Integer;

CORE/Source/utils/JSON/uRESTDWDataJSON.pas

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,7 @@
14241424
vReal : Real;
14251425
bJsonValue : TRESTDWJSONInterfaceObject;
14261426
JSONBase : TRESTDWJSONBase;
1427+
vString,
14271428
DecimalLocal : String;
14281429
begin
14291430
{$IF Defined(RESTDWLAZARUS) or not Defined(DELPHIXEUP)}
@@ -1439,12 +1440,15 @@
14391440
Begin
14401441
For I := 0 To bJsonValue.PairCount -1 Do
14411442
Begin
1443+
vString := Trim(bJsonValue.pairs[I].Value);
14421444
If (Lowercase(bJsonValue.pairs[I].classname) = Lowercase('TJSONObject')) Or
14431445
(Lowercase(bJsonValue.pairs[I].classname) = Lowercase('TDWJSONObject')) Or
14441446
(Lowercase(bJsonValue.pairs[I].classname) = Lowercase('TJSONArray')) Or
1445-
(Lowercase(bJsonValue.pairs[I].classname) = Lowercase('TDWJSONArray')) Then
1447+
(Lowercase(bJsonValue.pairs[I].classname) = Lowercase('TDWJSONArray')) Or
1448+
((Lowercase(bJsonValue.pairs[I].classname) = '_string') And (vString <> '') And
1449+
((vString[InitStrPos] = '[')) And (vString[Length(vString) - FinalStrPos] = ']')) Then
14461450
Begin
1447-
JSONBase := TRESTDWJSONBase.Create(bJsonValue.pairs[I].Value);
1451+
JSONBase := TRESTDWJSONBase.Create(vString);
14481452
// If bJsonValue.pairs[I].Name <> '' Then
14491453
If Assigned(JSONBase) Then
14501454
If bJsonValue.pairs[I].Name <> '' Then
@@ -1478,7 +1482,8 @@
14781482
If (bJsonValue.pairs[I].Value <> cNullvalue) And
14791483
(bJsonValue.pairs[I].Value <> cNullvalueTag) Then
14801484
Begin
1481-
vReal := StrToFloat(StringReplace(bJsonValue.pairs[I].Value, '.', DecimalLocal, [rfReplaceAll]));
1485+
vReal := StrToFloat(StringReplace(StringReplace(bJsonValue.pairs[I].Value, '.', DecimalLocal, [rfReplaceAll]),
1486+
'"', '', [rfReplaceAll]));
14821487
AddFloat(bJsonValue.pairs[I].Name, vReal);
14831488
End
14841489
Else

CORE/Source/utils/JSON/uRESTDWJSON.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2284,7 +2284,8 @@ destructor TJSONArray.destroy;
22842284
obj := TObject(myArrayList[0]);
22852285
myArrayList [0] := nil;
22862286
If (obj <> CONST_FALSE) And
2287-
(obj <> CONST_TRUE) Then
2287+
(obj <> CONST_TRUE) And
2288+
(obj <> CNULL) Then
22882289
FreeAndNil(obj);
22892290
myArrayList.Delete(0);
22902291
end;

CORE/Source/utils/uRESTDWMassiveBuffer.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,9 +1535,9 @@ implementation
15351535
End;
15361536
End;
15371537
End;
1538-
{$IFDEF DELPHIXEUP}ftSingle, ftFMTBcd,{$ENDIF}
1539-
ftFloat, ftCurrency,
1540-
ftBCD : Begin
1538+
{$IFDEF DELPHIXEUP}ftSingle, {$ENDIF}
1539+
ftFloat, ftCurrency,
1540+
ftFMTBcd, ftBCD : Begin
15411541
If Not UpdateTag Then
15421542
Begin
15431543
If Field.IsNull Then

0 commit comments

Comments
 (0)