Skip to content

Commit 63cde96

Browse files
authored
Correções e Melhorias Gerais (#401)
### **Correções e Melhorias Gerais** * Correção de compilação em Delphi e Lazarus. * Correções de instalação em Delphi antigos. * Correções de declarações e ajustes internos. * Ajuste na declaração da procedure `TRESTDWMemTable.InternalAddRecord` para Android. * Correção de invalid pointer em campos `SQLTimestamp`. * Correção para campos calculados. * Correções nos campos `Float` (Lazarus) e `Timestamp` (Delphi). * Correção de `IndexFieldNames` e do `Filter`. * Início do ajuste do evento `OnCalcFields`. * Sistema de **charset** ajustado em Delphi e Lazarus. * Correções de JSON. * Correções no `ClientSQL` para Delphi e Lazarus. * Correções no `Server Delphi/FPC` com `ApplyUpdates`. * `MemoryDataset` atualizado com correções para Delphi e Lazarus. * Binário compatível entre Delphi e Lazarus para REST Dataware. ### **Demos e Exemplos** * Ajuste no **demo FileTransfer** para Delphi e Lazarus. * Correção do client **FMX**. * Correção do demo **WebPascal Delphi**, ajustado para ficar igual ao do Lazarus. * Atualização do demo **WebPascal** no Lazarus. * Commit do arquivo `www.rar` com os arquivos da pasta `www` para o WebPascal. ### **Compatibilidade e Testes** * Testado no **Lazarus 4.0**. * Início de ajustes para o novo `ClientSQL` no Delphi. Fixed #196 Fixed #197 Fixed #201 Fixed #203 Fixed #218 Fixed #296 Fixed #298 Fixed #299 Fixed #328 Fixed #346 Fixed #364
2 parents bcca791 + 7f67518 commit 63cde96

16 files changed

+861
-675
lines changed

CORE/Source/Basic/Mechanics/uRESTDWBuffer.pas

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ implementation
173173
If AByteCount > 0 Then
174174
Begin
175175
ExtractToBytes(LBytes, AByteCount);
176-
Result := BytesToString(LBytes);
176+
Result := BytesToStringInternal(LBytes);
177177
End
178178
Else
179179
Result := '';
@@ -484,7 +484,7 @@ implementation
484484

485485
Function TRESTDWBuffer.GetAsString: string;
486486
Begin
487-
Result := BytesToString(FBytes);
487+
Result := BytesToStringInternal(FBytes);
488488
End;
489489

490490
End.

CORE/Source/Basic/uRESTDWBasic.pas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7804,3 +7804,4 @@ destructor TRESTDWServerIpVersionConfig.Destroy;
78047804
end;
78057805

78067806
end.
7807+

CORE/Source/Basic/uRESTDWBasicDB.pas

Lines changed: 36 additions & 31 deletions
Large diffs are not rendered by default.

CORE/Source/Basic/uRESTDWParams.pas

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5738,14 +5738,16 @@ procedure TRESTDWJSONParam.SetParamContentType(const bValue: String);
57385738

57395739
Function TRESTDWParams.GetRecName(Index : String) : TRESTDWJSONParam;
57405740
Var
5741-
I : Integer;
5741+
I : Integer;
5742+
vParamName : String;
57425743
Begin
57435744
Result := Nil;
57445745
If Assigned(Self) And (Lowercase(Index) <> '') Then
57455746
Begin
57465747
For i := 0 To Self.Count - 1 Do
57475748
Begin
5748-
If (Uppercase(Index) = Uppercase(TRESTDWJSONParam(TList(Self).Items[i]^).vParamName)) Or
5749+
vParamName := Uppercase(TRESTDWJSONParam(TList(Self).Items[i]^).vParamName);
5750+
If (Uppercase(Index) = vParamName) Or
57495751
(Lowercase(Index) = Lowercase(TRESTDWJSONParam(TList(Self).Items[i]^).vAlias)) Then
57505752
Begin
57515753
Result := TRESTDWJSONParam(TList(Self).Items[i]^);

CORE/Source/Basic/uRESTDWServerEvents.pas

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,3 +1110,5 @@ procedure TRESTDWClientEvents.SeTRESTClientPoolerBase(const Value: TRESTClientPo
11101110
RegisterClass(TRESTDWClientEvents);
11111111
end.
11121112

1113+
1114+

CORE/Source/Basic/uRESTDWStorageBin.pas

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ interface
4646
FFieldTypes,
4747
FFieldAttrs : Array of Byte;
4848
FFieldExists : Array of Boolean;
49-
Public
5049
Procedure SaveRecordToStream (ADataset : TDataset;
5150
Var AStream : TStream);
5251
Procedure LoadRecordFromStream (ADataset : TDataset;
@@ -168,12 +167,17 @@ interface
168167
// field precision
169168
AStream.Read(vInt, SizeOf(vInt));
170169
FFieldPrecision[I] := vInt;
171-
If (FFieldTypes[I] In [dwftFloat, dwftCurrency, dwftExtended, dwftSingle]) Then
170+
If (FFieldTypes[I] In [dwftFloat, dwftCurrency, dwftExtended]) Then
172171
vFieldDef.Precision := FFieldPrecision[I]
173172
Else If (vFieldType In [dwftBCD, dwftFMTBcd]) Then
174173
Begin
174+
{$IFDEF FPC}
175+
vFieldDef.Size := 0;
176+
vFieldDef.Precision := FFieldPrecision[I];
177+
{$ELSE}
175178
vFieldDef.Size := 0;
176179
vFieldDef.Precision := 0;
180+
{$ENDIF}
177181
End;
178182
// field required + provider flag
179183
AStream.Read(vByte, SizeOf(Byte));
@@ -255,9 +259,22 @@ interface
255259
dwftSingle : VFDef.Precision := FFieldPrecision[Index];
256260
dwftBCD,
257261
dwftFMTBcd : Begin
262+
{$IFNDEF FPC}
258263
VFDef.Size := 0;
259264
VFDef.Precision := 0;
265+
{$ELSE}
266+
VFDef.Precision := FFieldPrecision[Index];
267+
{$ENDIF}
260268
End;
269+
{
270+
dwftWideString : Begin
271+
If VFDef.Size > 7100 Then
272+
Begin
273+
VFDef.Size := 7100;
274+
FFieldSize[Index] := VFDef.Size;
275+
End;
276+
End;
277+
}
261278
End;
262279
End;
263280
End;
@@ -317,11 +334,24 @@ interface
317334
// field precision
318335
AStream.Read(vFieldPrecision, SizeOf(vFieldPrecision));
319336
{$IFDEF FPC}
320-
If vFieldType = dwftSingle Then
321-
If vFieldPrecision < 8 Then
322-
FFieldPrecision[I] := 8;
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;
323350
{$ELSE}
324351
FFieldPrecision[I] := vFieldPrecision;
352+
If vFieldType in [dwftSingle] Then
353+
If vFieldPrecision < 12 Then
354+
FFieldPrecision[I] := 12;
325355
{$ENDIF}
326356
// required + provider flags
327357
AStream.Read(vFieldProviderFlags, SizeOf(Byte));
@@ -625,16 +655,16 @@ interface
625655
End;
626656
// 4 - Bytes - Flutuantes
627657
dwftSingle :Begin // Gledston
628-
vLength := SizeOf(vSingle);
629-
stream.Read(vSingle, vLength);
658+
vLength := SizeOf(vDouble);
659+
stream.Read(vDouble, vLength);
630660
If aField <> Nil Then
631661
Begin
632662
//Move(vSingle,PData^,Sizeof(vSingle));
633-
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vSingle));
663+
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
634664
//Move Null para Bytes
635665
Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
636666
//Move Bytes do Dado para Bytes
637-
Move(vSingle, vVarBytes[1], Sizeof(vSingle));
667+
Move(vDouble, vVarBytes[1], Sizeof(vDouble));
638668
//Move Bytes para Buffer
639669
Move(vVarBytes[0], PData^, Length(vVarBytes));
640670
End;
@@ -694,18 +724,6 @@ interface
694724
stream.Read(vDouble, SizeOf(vDouble));
695725
If aField <> Nil Then
696726
Begin
697-
// Case vDataType Of
698-
// ftDate : vDateTimeRec.Date := DateTimeToTimeStamp(vDouble).Date;
699-
// ftTime : vDateTimeRec.Time := DateTimeToTimeStamp(vDouble).Time;
700-
// Else vDateTimeRec.DateTime := TimeStampToMSecs(DateTimeToTimeStamp(vDouble));
701-
// End;
702-
// SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDateTimeRec));
703-
// //Move Null para Bytes
704-
// Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
705-
// //Move Bytes do Dado para Bytes
706-
// Move(vDateTimeRec, vVarBytes[1], SizeOf(vDateTimeRec));
707-
// //Move Bytes para Buffer
708-
// Move(vVarBytes[0], PData^, Length(vVarBytes));
709727
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
710728
//Move Null para Bytes
711729
Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
@@ -780,7 +798,7 @@ interface
780798
If aField <> Nil Then
781799
Begin
782800
{$IFDEF FPC}
783-
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vInt));
801+
SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vCurrency));
784802
//Move Null para Bytes
785803
Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
786804
//Move Bytes do Dado para Bytes
@@ -1155,6 +1173,7 @@ interface
11551173
Case vByte Of
11561174
dwftFixedWideChar,
11571175
dwftWideString : vByte := FieldTypeToDWFieldType(ftString);
1176+
dwftSingle : vByte := FieldTypeToDWFieldType(ftFloat);
11581177
End;
11591178
AStream.Write(vByte, SizeOf(vByte));
11601179
// field size
@@ -1255,7 +1274,12 @@ interface
12551274
AStream.Write(vString[InitStrPos], vByte);
12561275
// datatype
12571276
vByte := FieldTypeToDWFieldType(ADataset.Fields[i].DataType);
1258-
AStream.Write(vByte, SizeOf(vByte));
1277+
Case vByte Of
1278+
dwftFixedWideChar,
1279+
dwftWideString : vByte := FieldTypeToDWFieldType(ftString);
1280+
dwftSingle : vByte := FieldTypeToDWFieldType(ftFloat);
1281+
End;
1282+
AStream.Write(vByte, SizeOf(vByte));
12591283
// fieldsize
12601284
vInt := ADataset.Fields[i].Size;
12611285
AStream.Write(vInt, SizeOf(vInt));
@@ -1434,8 +1458,8 @@ interface
14341458
End;
14351459
// 4 - Bytes - Flutuantes
14361460
dwftSingle : Begin
1437-
Move(PData^, vSingle, Sizeof(vSingle));
1438-
Stream.Write(vSingle, Sizeof(vSingle));
1461+
Move(PData^, vDouble, Sizeof(vDouble));
1462+
Stream.Write(vDouble, Sizeof(vDouble));
14391463
End;
14401464
// 8 - Bytes - Inteiros
14411465
dwftLargeint,
@@ -1651,11 +1675,7 @@ interface
16511675
End;
16521676
// 4 - Bytes - Flutuantes
16531677
dwftSingle : Begin
1654-
{$IFDEF DELPHIXEUP}
1655-
vSingle := ADataset.Fields[i].AsSingle;
1656-
{$ELSE}
1657-
vSingle := ADataset.Fields[i].AsFloat;
1658-
{$ENDIF}
1678+
vSingle := ADataset.Fields[i].Value;
16591679
AStream.Write(vSingle, SizeOf(vSingle));
16601680
End;
16611681
// 8 - Bytes - Inteiros

CORE/Source/Consts/uRESTDWConsts.pas

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060

6161
// controle de versão
6262
RESTDWVersionINFO = 'v2.1.0-';
63-
RESTDWRelease = '3933';
64-
RESTDWCodeProject = 'Galaga - Github';
63+
RESTDWRelease = '3857';
64+
RESTDWCodeProject = 'Galaga - SourceForge';
6565
RESTDWVersao = RESTDWVersionINFO + RESTDWRelease + '(' + RESTDWCodeProject + ')';
6666
RESTDWDialogoTitulo = 'REST DataWare Components ' + RESTDWVersao;
6767
RESTDWSobreTitulo = 'REST DataWare '+ RESTDWVersao;
@@ -206,6 +206,7 @@
206206
TDecimalChar = 'D';
207207
TFormdataParamName = 'content-disposition: form-data; name';
208208
TJsonDatasetHeader = '{"Field":"%s", "Type":"%s", "Primary":"%s", "Required":"%s", "Size":%d, "Precision":%d, "ReadOnly":"%s", "Autogeneration":"%s"}';
209+
TJsonNumValue = '"%d"';
209210
TJsonStringValue = '"%s"';
210211
TJsonValueFormat = '%s';
211212
TMassiveFormatJSON = '{"%s":"%s", "%s":"%s", "%s":"%s", "%s":"%s", "%s":"%s", "%s":[%s], ' +

CORE/Source/Database_Drivers/uRESTDWDriverBase.pas

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@
2323
Fernando Banhos - Refactor Drivers REST Dataware.
2424
}
2525

26-
{$IFNDEF RESTDWLAZARUS}
27-
{$IFDEF FPC}
28-
{$MODE OBJFPC}{$H+}
29-
{$ENDIF}
26+
{$IFDEF FPC}
27+
{$MODE OBJFPC}{$H+}
3028
{$ENDIF}
3129

3230
Interface
@@ -188,11 +186,11 @@ TRDWDrvParam = class(TObject)
188186
Property TableName : String Read getTableName Write setTableName;
189187
End;
190188

191-
TRESTDWDrvQuery = Class(TRESTDWDrvDataset)
189+
TRESTDWDrvQuery = Class(TRESTDWDrvDataset)
192190
Private
193191
Function getSQL : TStrings; Virtual;
194192
Public
195-
Function GetInsertID : int64; Virtual;
193+
Function GetInsertID : Int64; Virtual;
196194
Published
197195
Property SQL : TStrings Read getSQL;
198196
End;
@@ -262,45 +260,45 @@ TRDWDrvParam = class(TObject)
262260
constructor Create(AOwner : TComponent); override;
263261
destructor Destroy; override;
264262

265-
Function compConnIsValid(comp : TComponent) : boolean; virtual;
266-
Function getConectionType : TRESTDWDatabaseType; Virtual;
263+
Function compConnIsValid (comp : TComponent) : Boolean;Virtual;
264+
Function getConectionType : TRESTDWDatabaseType; Virtual;
267265
Procedure setConectionType(aValue : TRESTDWDatabaseType); Virtual;
268-
Function getDatabaseInfo : TRESTDWDatabaseInfo; Virtual;
269-
Function getQuery : TRESTDWDrvQuery; Overload; Virtual;
270-
Function getQuery(AUnidir : boolean) : TRESTDWDrvQuery; Overload; Virtual;
271-
Function getTable : TRESTDWDrvTable; Virtual;
272-
Function getStoreProc : TRESTDWDrvStoreProc; Virtual;
273-
Procedure Connect; Virtual;
274-
Procedure Disconect; Virtual;
275-
Function ConnectionSet : Boolean; Virtual;
276-
Function GetGenID (Query : TRESTDWDrvQuery;
277-
GenName : String;
278-
valor : Integer = 1): Integer;Overload;Virtual;
279-
Function GetGenID (GenName : String;
280-
valor : Integer = 1): Integer;Overload;Virtual;
281-
Function ApplyUpdates (MassiveStream : TStream;
282-
SQL : String;
283-
Params : TRESTDWParams;
284-
Var Error : Boolean;
285-
Var MessageError : String;
286-
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
287-
Function ApplyUpdates (Massive,
288-
SQL : String;
289-
Params : TRESTDWParams;
290-
Var Error : Boolean;
291-
Var MessageError : String;
292-
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
293-
Function ApplyUpdatesTB (MassiveStream : TStream;
294-
SQL : String;
295-
Params : TRESTDWParams;
296-
Var Error : Boolean;
297-
Var MessageError : String;
298-
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
299-
Function ApplyUpdatesTB (Massive : String;
300-
Params : TRESTDWParams;
301-
Var Error : Boolean;
302-
Var MessageError : String;
303-
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
266+
Function getDatabaseInfo : TRESTDWDatabaseInfo; Virtual;
267+
Function getQuery : TRESTDWDrvQuery; Overload; Virtual;
268+
Function getQuery (AUnidir : Boolean) : TRESTDWDrvQuery; Overload; Virtual;
269+
Function getTable : TRESTDWDrvTable; Virtual;
270+
Function getStoreProc : TRESTDWDrvStoreProc; Virtual;
271+
Procedure Connect; Virtual;
272+
Procedure Disconect; Virtual;
273+
Function ConnectionSet : Boolean; Virtual;
274+
Function GetGenID (Query : TRESTDWDrvQuery;
275+
GenName : String;
276+
valor : Integer = 1): Integer;Overload;Virtual;
277+
Function GetGenID (GenName : String;
278+
valor : Integer = 1): Integer;Overload;Virtual;
279+
Function ApplyUpdates (MassiveStream : TStream;
280+
SQL : String;
281+
Params : TRESTDWParams;
282+
Var Error : Boolean;
283+
Var MessageError : String;
284+
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
285+
Function ApplyUpdates (Massive,
286+
SQL : String;
287+
Params : TRESTDWParams;
288+
Var Error : Boolean;
289+
Var MessageError : String;
290+
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
291+
Function ApplyUpdatesTB (MassiveStream : TStream;
292+
SQL : String;
293+
Params : TRESTDWParams;
294+
Var Error : Boolean;
295+
Var MessageError : String;
296+
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
297+
Function ApplyUpdatesTB (Massive : String;
298+
Params : TRESTDWParams;
299+
Var Error : Boolean;
300+
Var MessageError : String;
301+
Var RowsAffected : Integer) : TRESTDWJSONValue;Overload;Virtual;
304302
Function ApplyUpdates_MassiveCache (MassiveStream : TStream;
305303
Var Error : Boolean;
306304
Var MessageError : String) : TRESTDWJSONValue;Overload;Virtual;

0 commit comments

Comments
 (0)