Skip to content

Commit

Permalink
Atualização
Browse files Browse the repository at this point in the history
- Correção de serialização de PATCH parâmetro
- Correção do Eventname e do ContextName em LAzarus.
- Correção para uso de ISAPI/CGI no IIS
- Correção Binario physics driver
- Ajuste feito no DM de RESTDW pelo Brito reproduzido na ServerMethodClass.
- Correção de bookmark do novo dwmemtable para lazarus.
- Correção Binario Clientsql
- Correções no RESTDWmemtable para uso no Lazarus.
- Massive Edit, Delete e Insert Fix.
- Reopen data Fix.
- CloseData fix.
- Correções de memleak no Lazarus no dwmem
  • Loading branch information
ronierys2@hotmail.com committed Apr 1, 2024
1 parent f1fcbd8 commit 6d00994
Show file tree
Hide file tree
Showing 14 changed files with 214 additions and 124 deletions.
28 changes: 18 additions & 10 deletions CORE/Source/Basic/uRESTDWBasic.pas
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ TRESTDWServerIpVersionConfig = class(TPersistent)
BinaryCompatibleMode : Boolean;
CompareContext : Boolean) : Boolean;
Public
Procedure SetSocketKind (SocketKind : String);
Procedure SetActive (Value : Boolean);Virtual;
Procedure ClearDataRoute;
Procedure AddDataRoute (DataRoute : String;
Expand Down Expand Up @@ -3418,8 +3419,8 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
vRequestHeader := TStringList.Create;
vCompareContext := False;
{ TODO 1 -oRoniery -ccorreção : função para fazer decode de url utf8 para ascii }
RawHTTPCommand := DecodeURL(RawHTTPCommand);
QueryParams := DecodeURL(QueryParams);
RawHTTPCommand := DecodeURL(RawHTTPCommand);
QueryParams := DecodeURL(QueryParams);
Cmd := RemoveBackslashCommands(Trim(RawHTTPCommand));
vUrlToExec := '';
Try
Expand Down Expand Up @@ -3827,20 +3828,19 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
End;
{$ENDIF}
If vAuthenticator <> Nil Then
Begin
Begin
If vToken = '' Then
vToken := Token;
vAcceptAuth := False;
vErrorCode := 401;
vErrorMessage := cInvalidAuth;
//Roniery ajuste para encontrar o evento na lista de eventos,
//para assim determinar se passa ou não no validador de permissão
if not (vUrlToExec='') then
Begin
if vUrlToExec[Length(vUrlToExec)] = '/' then
delete(vUrlToExec, Length(vUrlToExec), 1);
end;

If Not (vUrlToExec='') Then
Begin
If vUrlToExec[Length(vUrlToExec)] = '/' Then
Delete(vUrlToExec, Length(vUrlToExec), 1);
End;
// verifica se precisa autenticação
vNeedAuthorization := False;
{$IFNDEF RESTDWLAZARUS}
Expand Down Expand Up @@ -3975,7 +3975,7 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
PCustomHeaders := @ResponseHeaders;
BuildCORS(TRESTDWAuthToken(vAuthenticator).GetTokenRoutes, TStrings(PCustomHeaders^));
End;
End
End
Else
Begin
{$IFNDEF RESTDWLAZARUS}
Expand Down Expand Up @@ -4524,6 +4524,8 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
End;
End;
Finally
If Not (Assigned(ResultStream)) Then
ResultStream := TStringStream.Create(vDefaultPage.Text);
DestroyComponents;
End;
End;
Expand Down Expand Up @@ -4632,6 +4634,12 @@ procedure TRESTClientPoolerBase.SetIpVersion(IpV: TRESTDWClientIpVersions);
End;
End;

Procedure TRESTDWBasicReceptor.SetSocketKind(SocketKind : String);
Begin
FSocketKind := SocketKind;
End;


Procedure TRESTDWBasicReceptor.SetActive(Value : Boolean);
Begin
vActive := Value;
Expand Down
24 changes: 7 additions & 17 deletions CORE/Source/Basic/uRESTDWBasicDB.pas
Original file line number Diff line number Diff line change
Expand Up @@ -6968,15 +6968,10 @@ procedure TRESTDWClientSQL.ProcBeforeOpen(DataSet: TDataSet);
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer <> Nil Then
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges <> Nil Then
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges.Count = 0 Then
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
Else
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
End
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChangesCount = 0 Then
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
Else
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
End
Else
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
Expand Down Expand Up @@ -7052,15 +7047,10 @@ procedure TRESTDWClientSQL.ProcBeforePost(DataSet: TDataSet);
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer <> Nil Then
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges <> Nil Then
Begin
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChanges.Count = 0 Then
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
Else
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
End
If TMassiveDatasetBuffer(vMassiveDataset).TempBuffer.UpdateFieldChangesCount = 0 Then
TMassiveDatasetBuffer(vMassiveDataset).ClearLine
Else
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
TMassiveDatasetBuffer(vMassiveDataset).SaveBuffer(Self, TMassiveDatasetBuffer(vMassiveDataset).MassiveMode = mmExec);
End
Else
TMassiveDatasetBuffer(vMassiveDataset).ClearLine;
Expand Down Expand Up @@ -11318,7 +11308,7 @@ procedure TRESTDWClientSQL.SetActiveDB(Value: Boolean);
Begin
vInDesignEvents := False;
SetInBlockEvents(True);
TRESTDWMemTable(Self).EmptyTable;
Inherited Active := False;
If Not InLoadFromStream Then
Begin
vActive := False;
Expand Down
6 changes: 3 additions & 3 deletions CORE/Source/Basic/uRESTDWServerContext.pas
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,9 @@ interface
Procedure SetBeforeRenderer (Value : TRESTDWBeforeRenderer);
Procedure SetBaseURL(Value : String);
Public
Function GetDisplayName : String; {$IFNDEF FPC}Override;{$ENDIF}
Procedure SetDisplayName(Const Value : String); {$IFNDEF FPC}Override;{$ENDIF}
Function GetNamePath : String; {$IFNDEF FPC}Override;{$ENDIF}
Function GetDisplayName : String; Override;
Procedure SetDisplayName(Const Value : String); Override;
Function GetNamePath : String; Override;
Procedure Assign (Source : TPersistent); Override;
Procedure CompareParams (Var Dest : TRESTDWParams);
Constructor Create (aCollection : TCollection); Override;
Expand Down
6 changes: 3 additions & 3 deletions CORE/Source/Basic/uRESTDWServerEvents.pas
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,12 @@ interface
Procedure SetContentType(Value : String);
Procedure SetDataMode (Value : TDataMode);
Public
Function GetDisplayName : String; {$IFNDEF FPC}Override;{$ENDIF}
Procedure SetDisplayName(Const Value : String); {$IFNDEF FPC}Override;{$ENDIF}
Function GetDisplayName : String; Override;
Procedure SetDisplayName(Const Value : String); Override;
Procedure CompareParams (Var Dest : TRESTDWParams);
Procedure Assign (Source : TPersistent); Override;
Constructor Create (aCollection : TCollection); Override;
Function GetNamePath : String; {$IFNDEF FPC}Override;{$ENDIF}
Function GetNamePath : String; Override;
Destructor Destroy; Override;
Published
Property Routes : TRESTDWRoutes Read vDWRoutes Write vDWRoutes;
Expand Down
8 changes: 3 additions & 5 deletions CORE/Source/Basic/uRESTDWServerMethodClass.pas
Original file line number Diff line number Diff line change
Expand Up @@ -167,18 +167,16 @@ implementation
Try
ctempURI := ParamsURI;
pAux1 := Pos('?', ctempURI);
vIsQuery := pAux1 > 0;
// params com /
If vIsQuery Then
Begin
sAux2 := Copy(ctempURI, pAux1 + 1, Length(ctempURI));
Delete(ctempURI, pAux1, Length(ctempURI));
If Pos('/', ctempURI) > 0 Then
Begin
sAux2 := Copy(ctempURI, pAux1 + 1, Pos('/', ctempURI) -2);
Delete(ctempURI, pAux1, Pos('/', ctempURI));
End
Else
Begin
sAux2 := Copy(ctempURI, pAux1 + 1, Length(ctempURI));
Delete(ctempURI, pAux1, Length(ctempURI));
End;
End
Else
Expand Down
37 changes: 31 additions & 6 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 @@ -502,7 +502,7 @@ interface
vString := '';
If vInt64 > 0 Then
Begin
SetLength(vString, sizeOf(vInt64));
SetLength(vString, vInt64);
{$IFDEF FPC}
stream.Read(Pointer(vString)^, vInt64);
If EncodeStrs Then
Expand All @@ -515,9 +515,9 @@ interface
stream.Read(vString[InitStrPos], vInt64);
If EncodeStrs Then
vString := DecodeStrings(vString);
vInt64 := (Length(vString) + 1) * SizeOf(WideChar);
//vInt64 := (Length(vString) + 1) * SizeOf(WideChar);
If aField <> Nil Then
Move(DWWideString(vString)[InitStrPos], pData^, vInt64);
Move(vString[InitStrPos], pData^, vInt64);
{$ENDIF}
End;
End;
Expand Down Expand Up @@ -913,6 +913,8 @@ interface
{$ENDIF}
//{$ELSE}
// FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
{$ELSE}
FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
{$ENDIF}
End;
End;
Expand Down Expand Up @@ -1359,8 +1361,31 @@ interface
Case vDWFieldType Of
dwftFixedChar,
dwftWideString,
dwftString,
dwftFixedWideChar : Begin
{$IFDEF RESTDWANDROID}
vString := MarshaledAString(PData);
{$ELSE}
SetLength(vRESTDWBytes, vDataSet.Fields[B].Size);
Try
Move(PRESTDWBytes(@Pdata)^[0], vRESTDWBytes[0], vDataSet.Fields[B].Size);
vString := StringReplace(BytesToString(vRESTDWBytes, false), #0, '', [rfReplaceAll]);
Finally
SetLength(vRESTDWBytes, 0);
End;
{$ENDIF}
If EncodeStrs Then
vString := EncodeStrings(vString{$IFDEF RESTDWLAZARUS}, csUndefined{$ENDIF});
vInt64 := Length(vString)* SizeOf(vString[1]);
Stream.Write(vInt64, Sizeof(vInt64));
{$IFNDEF FPC}
If vInt64 <> 0 Then
Stream.Write(vString[InitStrPos], vInt64);
{$ELSE}
If vInt64 <> 0 Then
Stream.Write(vString[1], vInt64);
{$ENDIF}
End;
dwftString : Begin
{$IFDEF RESTDWANDROID}
vString := MarshaledAString(PData);
{$ELSE}
Expand Down Expand Up @@ -1575,7 +1600,7 @@ interface
If DatabaseCharSet <> csUndefined Then
vWideString := GetStringDecode(vString, DatabaseCharSet);
{$ENDIF}
vInt64 := Length(vWideString);
vInt64 := Length(vWideString)* sizeof(vWideString[1]);
AStream.Write(vInt64, SizeOf(vInt64));
If vInt64 <> 0 Then
AStream.Write(vWideString[InitStrPos], vInt64);
Expand Down
42 changes: 25 additions & 17 deletions CORE/Source/Database_Drivers/uRESTDWDriverBase.pas
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
unit uRESTDWDriverBase;
unit uRESTDWDriverBase;

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

Expand Down Expand Up @@ -1310,16 +1310,20 @@ procedure TRESTDWDriverBase.SetUpdateBuffer(var Query: TRESTDWDrvQuery;
vParam.AsInteger := StrToInt(MassiveReplyValue.NewValue);
end;
end;

if (MassiveReplyValue = nil) and
(not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then begin
if vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] then
vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value)
else if vParam.DataType = ftSmallInt then
vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value)
else
vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value);
end;
If vParam.IsNull Then
Begin
If (MassiveReplyValue = Nil) And
(MassiveDataset.AtualRec.PrimaryValues[X] <> Nil) And
(Not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) Then
Begin
If vParam.RESTDWDataTypeParam in [dwftLongWord,dwftLargeint] Then
vParam.AsLargeInt := StrToInt64(MassiveDataset.AtualRec.PrimaryValues[X].Value)
Else If vParam.DataType = ftSmallInt Then
vParam.AsSmallInt := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value)
Else
vParam.AsInteger := StrToInt(MassiveDataset.AtualRec.PrimaryValues[X].Value);
End;
End;
end
else if vParam.RESTDWDataTypeParam in [dwftFloat, dwftCurrency, dwftBCD, dwftFMTBcd, dwftSingle] then begin
if (not (MassiveDataset.AtualRec.PrimaryValues[X].IsNull)) then
Expand Down Expand Up @@ -4030,7 +4034,7 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery;
else
vLineSQL := Format('UPDATE %s ',[MassiveDataset.TableName + ' SET %s %s']);
if not MassiveDataset.ReflectChanges then begin
for I := 0 to MassiveDataset.AtualRec.UpdateFieldChanges.Count - 1 do begin
for I := 0 to MassiveDataset.AtualRec.UpdateFieldChangesCount - 1 do begin
if Lowercase(MassiveDataset.AtualRec.UpdateFieldChanges[I]) <> Lowercase(RESTDWFieldBookmark) then begin
if vFields = '' then
vFields := MassiveDataset.AtualRec.UpdateFieldChanges[I] + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I]
Expand Down Expand Up @@ -4439,13 +4443,15 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
vStringStream := Nil;
If Massivedataset.MassiveMode = mmUpdate Then
Begin
For I := 0 To Massivedataset.AtualRec.UpdateFieldChanges.Count -1 Do
For I := 0 To Massivedataset.AtualRec.UpdateFieldChangesCount -1 Do
Begin
MassiveField := MassiveDataset.Fields.FieldByName(Massivedataset.AtualRec.UpdateFieldChanges[I]);
If (Lowercase(MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
Continue;
If (MassiveField <> Nil) Then
If MassiveField = Nil Then
Continue
Else
Begin
If (Lowercase(MassiveField.FieldName) = Lowercase(RESTDWFieldBookmark)) then
Continue;
If MassiveField.IsNull Then
vTempValue := ''
Else
Expand All @@ -4469,8 +4475,10 @@ procedure TRESTDWDriverBase.BuildDatasetLine(var Query : TRESTDWDrvDataset; Mass
End;
If Not MassiveField.IsNull Then
vTempValue := MassiveReplyValue.NewValue
Else If MassiveReplyValue.OldValue <> Null Then
vTempValue := MassiveReplyValue.OldValue
Else
vTempValue := MassiveReplyValue.OldValue;
vTempValue := '';
End
Else
Begin
Expand Down
Loading

0 comments on commit 6d00994

Please sign in to comment.