Skip to content

Commit e3dcc39

Browse files
authored
Atualização (#388)
2 parents e7d880b + 6d00994 commit e3dcc39

14 files changed

Lines changed: 214 additions & 124 deletions

CORE/Source/Basic/uRESTDWBasic.pas

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ TRESTDWServerIpVersionConfig = class(TPersistent)
472472
BinaryCompatibleMode : Boolean;
473473
CompareContext : Boolean) : Boolean;
474474
Public
475+
Procedure SetSocketKind (SocketKind : String);
475476
Procedure SetActive (Value : Boolean);Virtual;
476477
Procedure ClearDataRoute;
477478
Procedure AddDataRoute (DataRoute : String;
@@ -3418,8 +3419,8 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
34183419
vRequestHeader := TStringList.Create;
34193420
vCompareContext := False;
34203421
{ TODO 1 -oRoniery -ccorreção : função para fazer decode de url utf8 para ascii }
3421-
RawHTTPCommand := DecodeURL(RawHTTPCommand);
3422-
QueryParams := DecodeURL(QueryParams);
3422+
RawHTTPCommand := DecodeURL(RawHTTPCommand);
3423+
QueryParams := DecodeURL(QueryParams);
34233424
Cmd := RemoveBackslashCommands(Trim(RawHTTPCommand));
34243425
vUrlToExec := '';
34253426
Try
@@ -3827,20 +3828,19 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
38273828
End;
38283829
{$ENDIF}
38293830
If vAuthenticator <> Nil Then
3830-
Begin
3831+
Begin
38313832
If vToken = '' Then
38323833
vToken := Token;
38333834
vAcceptAuth := False;
38343835
vErrorCode := 401;
38353836
vErrorMessage := cInvalidAuth;
38363837
//Roniery ajuste para encontrar o evento na lista de eventos,
38373838
//para assim determinar se passa ou não no validador de permissão
3838-
if not (vUrlToExec='') then
3839-
Begin
3840-
if vUrlToExec[Length(vUrlToExec)] = '/' then
3841-
delete(vUrlToExec, Length(vUrlToExec), 1);
3842-
end;
3843-
3839+
If Not (vUrlToExec='') Then
3840+
Begin
3841+
If vUrlToExec[Length(vUrlToExec)] = '/' Then
3842+
Delete(vUrlToExec, Length(vUrlToExec), 1);
3843+
End;
38443844
// verifica se precisa autenticação
38453845
vNeedAuthorization := False;
38463846
{$IFNDEF RESTDWLAZARUS}
@@ -3975,7 +3975,7 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
39753975
PCustomHeaders := @ResponseHeaders;
39763976
BuildCORS(TRESTDWAuthToken(vAuthenticator).GetTokenRoutes, TStrings(PCustomHeaders^));
39773977
End;
3978-
End
3978+
End
39793979
Else
39803980
Begin
39813981
{$IFNDEF RESTDWLAZARUS}
@@ -4524,6 +4524,8 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
45244524
End;
45254525
End;
45264526
Finally
4527+
If Not (Assigned(ResultStream)) Then
4528+
ResultStream := TStringStream.Create(vDefaultPage.Text);
45274529
DestroyComponents;
45284530
End;
45294531
End;
@@ -4632,6 +4634,12 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
46324634
End;
46334635
End;
46344636

4637+
Procedure TRESTDWBasicReceptor.SetSocketKind(SocketKind : String);
4638+
Begin
4639+
FSocketKind := SocketKind;
4640+
End;
4641+
4642+
46354643
Procedure TRESTDWBasicReceptor.SetActive(Value : Boolean);
46364644
Begin
46374645
vActive := Value;

CORE/Source/Basic/uRESTDWBasicDB.pas

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6968,15 +6968,10 @@ procedure TRESTDWClientSQL.ProcBeforeOpen(DataSet: TDataSet);
69686968
Begin
69696969
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer <> Nil Then
69706970
Begin
6971-
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges <> Nil Then
6972-
Begin
6973-
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges.Count = 0 Then
6974-
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
6975-
Else
6976-
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
6977-
End
6971+
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChangesCount = 0 Then
6972+
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
69786973
Else
6979-
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
6974+
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
69806975
End
69816976
Else
69826977
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
@@ -7052,15 +7047,10 @@ procedure TRESTDWClientSQL.ProcBeforePost(DataSet: TDataSet);
70527047
Begin
70537048
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer <> Nil Then
70547049
Begin
7055-
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges <> Nil Then
7056-
Begin
7057-
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges.Count = 0 Then
7058-
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
7059-
Else
7060-
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
7061-
End
7050+
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChangesCount = 0 Then
7051+
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
70627052
Else
7063-
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
7053+
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
70647054
End
70657055
Else
70667056
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
@@ -11318,7 +11308,7 @@ procedure TRESTDWClientSQL.SetActiveDB(Value: Boolean);
1131811308
Begin
1131911309
vInDesignEvents := False;
1132011310
SetInBlockEvents(True);
11321-
TRESTDWMemTable(Self).EmptyTable;
11311+
Inherited Active := False;
1132211312
If Not InLoadFromStream Then
1132311313
Begin
1132411314
vActive := False;

CORE/Source/Basic/uRESTDWServerContext.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,9 @@ interface
209209
Procedure SetBeforeRenderer (Value : TRESTDWBeforeRenderer);
210210
Procedure SetBaseURL(Value : String);
211211
Public
212-
Function GetDisplayName : String; {$IFNDEF FPC}Override;{$ENDIF}
213-
Procedure SetDisplayName(Const Value : String); {$IFNDEF FPC}Override;{$ENDIF}
214-
Function GetNamePath : String; {$IFNDEF FPC}Override;{$ENDIF}
212+
Function GetDisplayName : String; Override;
213+
Procedure SetDisplayName(Const Value : String); Override;
214+
Function GetNamePath : String; Override;
215215
Procedure Assign (Source : TPersistent); Override;
216216
Procedure CompareParams (Var Dest : TRESTDWParams);
217217
Constructor Create (aCollection : TCollection); Override;

CORE/Source/Basic/uRESTDWServerEvents.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@ interface
9393
Procedure SetContentType(Value : String);
9494
Procedure SetDataMode (Value : TDataMode);
9595
Public
96-
Function GetDisplayName : String; {$IFNDEF FPC}Override;{$ENDIF}
97-
Procedure SetDisplayName(Const Value : String); {$IFNDEF FPC}Override;{$ENDIF}
96+
Function GetDisplayName : String; Override;
97+
Procedure SetDisplayName(Const Value : String); Override;
9898
Procedure CompareParams (Var Dest : TRESTDWParams);
9999
Procedure Assign (Source : TPersistent); Override;
100100
Constructor Create (aCollection : TCollection); Override;
101-
Function GetNamePath : String; {$IFNDEF FPC}Override;{$ENDIF}
101+
Function GetNamePath : String; Override;
102102
Destructor Destroy; Override;
103103
Published
104104
Property Routes : TRESTDWRoutes Read vDWRoutes Write vDWRoutes;

CORE/Source/Basic/uRESTDWServerMethodClass.pas

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,18 +167,16 @@ implementation
167167
Try
168168
ctempURI := ParamsURI;
169169
pAux1 := Pos('?', ctempURI);
170+
vIsQuery := pAux1 > 0;
170171
// params com /
171172
If vIsQuery Then
172173
Begin
174+
sAux2 := Copy(ctempURI, pAux1 + 1, Length(ctempURI));
175+
Delete(ctempURI, pAux1, Length(ctempURI));
173176
If Pos('/', ctempURI) > 0 Then
174177
Begin
175178
sAux2 := Copy(ctempURI, pAux1 + 1, Pos('/', ctempURI) -2);
176179
Delete(ctempURI, pAux1, Pos('/', ctempURI));
177-
End
178-
Else
179-
Begin
180-
sAux2 := Copy(ctempURI, pAux1 + 1, Length(ctempURI));
181-
Delete(ctempURI, pAux1, Length(ctempURI));
182180
End;
183181
End
184182
Else

CORE/Source/Basic/uRESTDWStorageBin.pas

Lines changed: 31 additions & 6 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

@@ -502,7 +502,7 @@ interface
502502
vString := '';
503503
If vInt64 > 0 Then
504504
Begin
505-
SetLength(vString, sizeOf(vInt64));
505+
SetLength(vString, vInt64);
506506
{$IFDEF FPC}
507507
stream.Read(Pointer(vString)^, vInt64);
508508
If EncodeStrs Then
@@ -515,9 +515,9 @@ interface
515515
stream.Read(vString[InitStrPos], vInt64);
516516
If EncodeStrs Then
517517
vString := DecodeStrings(vString);
518-
vInt64 := (Length(vString) + 1) * SizeOf(WideChar);
518+
//vInt64 := (Length(vString) + 1) * SizeOf(WideChar);
519519
If aField <> Nil Then
520-
Move(DWWideString(vString)[InitStrPos], pData^, vInt64);
520+
Move(vString[InitStrPos], pData^, vInt64);
521521
{$ENDIF}
522522
End;
523523
End;
@@ -913,6 +913,8 @@ interface
913913
{$ENDIF}
914914
//{$ELSE}
915915
// FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
916+
{$ELSE}
917+
FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
916918
{$ENDIF}
917919
End;
918920
End;
@@ -1359,8 +1361,31 @@ interface
13591361
Case vDWFieldType Of
13601362
dwftFixedChar,
13611363
dwftWideString,
1362-
dwftString,
13631364
dwftFixedWideChar : Begin
1365+
{$IFDEF RESTDWANDROID}
1366+
vString := MarshaledAString(PData);
1367+
{$ELSE}
1368+
SetLength(vRESTDWBytes, vDataSet.Fields[B].Size);
1369+
Try
1370+
Move(PRESTDWBytes(@Pdata)^[0], vRESTDWBytes[0], vDataSet.Fields[B].Size);
1371+
vString := StringReplace(BytesToString(vRESTDWBytes, false), #0, '', [rfReplaceAll]);
1372+
Finally
1373+
SetLength(vRESTDWBytes, 0);
1374+
End;
1375+
{$ENDIF}
1376+
If EncodeStrs Then
1377+
vString := EncodeStrings(vString{$IFDEF RESTDWLAZARUS}, csUndefined{$ENDIF});
1378+
vInt64 := Length(vString)* SizeOf(vString[1]);
1379+
Stream.Write(vInt64, Sizeof(vInt64));
1380+
{$IFNDEF FPC}
1381+
If vInt64 <> 0 Then
1382+
Stream.Write(vString[InitStrPos], vInt64);
1383+
{$ELSE}
1384+
If vInt64 <> 0 Then
1385+
Stream.Write(vString[1], vInt64);
1386+
{$ENDIF}
1387+
End;
1388+
dwftString : Begin
13641389
{$IFDEF RESTDWANDROID}
13651390
vString := MarshaledAString(PData);
13661391
{$ELSE}
@@ -1575,7 +1600,7 @@ interface
15751600
If DatabaseCharSet <> csUndefined Then
15761601
vWideString := GetStringDecode(vString, DatabaseCharSet);
15771602
{$ENDIF}
1578-
vInt64 := Length(vWideString);
1603+
vInt64 := Length(vWideString)* sizeof(vWideString[1]);
15791604
AStream.Write(vInt64, SizeOf(vInt64));
15801605
If vInt64 <> 0 Then
15811606
AStream.Write(vWideString[InitStrPos], vInt64);

CORE/Source/Database_Drivers/uRESTDWDriverBase.pas

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
unit uRESTDWDriverBase;
1+
unit uRESTDWDriverBase;
22

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

@@ -1310,16 +1310,20 @@ procedure TRESTDWDriverBase.SetUpdateBuffer(var Query: TRESTDWDrvQuery;
13101310
vParam.AsInteger := StrToInt(MassiveReplyValue.NewValue);
13111311
end;
13121312
end;
1313-
1314-
if (MassiveReplyValue = nil) and
1315-
(not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then begin
1316-
if vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] then
1317-
vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value)
1318-
else if vParam.DataType = ftSmallInt then
1319-
vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value)
1320-
else
1321-
vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value);
1322-
end;
1313+
If vParam.IsNull Then
1314+
Begin
1315+
If (MassiveReplyValue = Nil) And
1316+
(MassiveDataset.AtualRec.PrimaryValues[X] <> Nil) And
1317+
(Not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) Then
1318+
Begin
1319+
If vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] Then
1320+
vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value)
1321+
Else If vParam.DataType = ftSmallInt Then
1322+
vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value)
1323+
Else
1324+
vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value);
1325+
End;
1326+
End;
13231327
end
13241328
else if vParam.RESTDWDataTypeParam in [dwftFloat, dwftCurrency, dwftBCD, dwftFMTBcd, dwftSingle] then begin
13251329
if (not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then
@@ -4030,7 +4034,7 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery;
40304034
else
40314035
vLineSQL := Format('UPDATE %s ',[MassiveDataset.TableName + ' SET %s %s']);
40324036
if not MassiveDataset.ReflectChanges then begin
4033-
for I := 0 to MassiveDataset.AtualRec.UpdateFieldChanges.Count - 1 do begin
4037+
for I := 0 to MassiveDataset.AtualRec.UpdateFieldChangesCount - 1 do begin
40344038
if Lowercase(MassiveDataset.AtualRec.UpdateFieldChanges[I]) <> Lowercase(RESTDWFieldBookmark) then begin
40354039
if vFields = '' then
40364040
vFields := MassiveDataset.AtualRec.UpdateFieldChanges[I] + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I]
@@ -4439,13 +4443,15 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
44394443
vStringStream := Nil;
44404444
If Massivedataset.MassiveMode = mmUpdate Then
44414445
Begin
4442-
For I := 0 To Massivedataset.AtualRec.UpdateFieldChanges.Count -1 Do
4446+
For I := 0 To Massivedataset.AtualRec.UpdateFieldChangesCount -1 Do
44434447
Begin
44444448
MassiveField := MassiveDataset.Fields.FieldByName(Massivedataset.AtualRec.UpdateFieldChanges[I]);
4445-
If (Lowercase(MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
4446-
Continue;
4447-
If (MassiveField <> Nil) Then
4449+
If MassiveField = Nil Then
4450+
Continue
4451+
Else
44484452
Begin
4453+
If (Lowercase(MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
4454+
Continue;
44494455
If MassiveField.IsNull Then
44504456
vTempValue := ''
44514457
Else
@@ -4469,8 +4475,10 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
44694475
End;
44704476
If Not MassiveField.IsNull Then
44714477
vTempValue := MassiveReplyValue.NewValue
4478+
Else If MassiveReplyValue.OldValue <> Null Then
4479+
vTempValue := MassiveReplyValue.OldValue
44724480
Else
4473-
vTempValue := MassiveReplyValue.OldValue;
4481+
vTempValue := '';
44744482
End
44754483
Else
44764484
Begin

0 commit comments

Comments
 (0)