* Loading

This commit is contained in:
michael 2019-09-27 13:14:58 +00:00
parent 816d7bd3e1
commit 6219494a7a

View File

@ -1121,10 +1121,13 @@ type
FChangeList : TFPList; FChangeList : TFPList;
FBatchList : TFPList; FBatchList : TFPList;
FInApplyupdates : Boolean; FInApplyupdates : Boolean;
FLoadCount : Integer;
FMinLoadID : Integer;
Procedure DoInsertAppend(DoAppend : Boolean); Procedure DoInsertAppend(DoAppend : Boolean);
Procedure DoInternalOpen; Procedure DoInternalOpen;
Function GetBuffer (Index : longint) : TDataRecord; Function GetBuffer (Index : longint) : TDataRecord;
function GetDataProxy: TDataProxy; function GetDataProxy: TDataProxy;
function GetIsLoading: Boolean;
Procedure RegisterDataSource(ADataSource : TDataSource); Procedure RegisterDataSource(ADataSource : TDataSource);
procedure SetConstraints(Value: TCheckConstraints); procedure SetConstraints(Value: TCheckConstraints);
procedure SetDataProxy(AValue: TDataProxy); procedure SetDataProxy(AValue: TDataProxy);
@ -1138,7 +1141,7 @@ type
procedure DoInsertAppendRecord(const Values: array of jsValue; DoAppend : boolean); procedure DoInsertAppendRecord(const Values: array of jsValue; DoAppend : boolean);
// Callback for Tdataproxy.DoGetData; // Callback for Tdataproxy.DoGetData;
function ResolveRecordUpdate(anUpdate: TRecordUpdateDescriptor): Boolean; function ResolveRecordUpdate(anUpdate: TRecordUpdateDescriptor): Boolean;
procedure HandleRequestresponse(ARequest: TDataRequest); procedure HandleRequestResponse(ARequest: TDataRequest);
protected protected
// Proxy methods // Proxy methods
// Override this to integrate package in local data // Override this to integrate package in local data
@ -1290,6 +1293,7 @@ type
procedure InternalInitFieldDefs; virtual; abstract; procedure InternalInitFieldDefs; virtual; abstract;
function IsCursorOpen: Boolean; virtual; abstract; function IsCursorOpen: Boolean; virtual; abstract;
property DataProxy : TDataProxy Read GetDataProxy Write SetDataProxy; property DataProxy : TDataProxy Read GetDataProxy Write SetDataProxy;
Property LoadCount : Integer Read FLoadCount;
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
@ -1347,11 +1351,13 @@ type
procedure Prior; procedure Prior;
procedure Refresh; procedure Refresh;
procedure Resync(Mode: TResyncMode); virtual; procedure Resync(Mode: TResyncMode); virtual;
Procedure CancelLoading;
procedure SetFields(const Values: array of JSValue); procedure SetFields(const Values: array of JSValue);
procedure UpdateCursorPos; procedure UpdateCursorPos;
procedure UpdateRecord; procedure UpdateRecord;
Function GetPendingUpdates : TResolveInfoArray; Function GetPendingUpdates : TResolveInfoArray;
function UpdateStatus: TUpdateStatus; virtual; function UpdateStatus: TUpdateStatus; virtual;
Property Loading : Boolean Read GetIsLoading;
property BlockReadSize: Integer read FBlockReadSize write SetBlockReadSize; property BlockReadSize: Integer read FBlockReadSize write SetBlockReadSize;
property BOF: Boolean read FBOF; property BOF: Boolean read FBOF;
property Bookmark: TBookmark read GetBookmark write GotoBookmark; property Bookmark: TBookmark read GetBookmark write GotoBookmark;
@ -3020,13 +3026,19 @@ begin
Result:=FDataProxy; Result:=FDataProxy;
end; end;
function TDataSet.GetIsLoading: Boolean;
begin
// Writeln(Name,' GetIsLoading Loadcount : ',LoadCount);
Result:=(FLoadCount>0);
end;
function TDataSet.DataPacketReceived(ARequest: TDataRequest): Boolean; function TDataSet.DataPacketReceived(ARequest: TDataRequest): Boolean;
begin begin
Result:=False; Result:=False;
end; end;
procedure TDataSet.HandleRequestresponse(ARequest: TDataRequest); procedure TDataSet.HandleRequestResponse(ARequest: TDataRequest);
Var Var
DataAdded : Boolean; DataAdded : Boolean;
@ -3034,6 +3046,14 @@ Var
begin begin
if Not Assigned(ARequest) then if Not Assigned(ARequest) then
exit; exit;
// Writeln(Name,' Check request response: ',ARequest.FRequestID,', min: ',FMinLoadID,' Loadcount:',FLoadCount);
if ARequest.FRequestID<=FMinLoadID then
begin
ARequest.Destroy;
Exit;
end;
Dec(FloadCount);
// Writeln(Name,' Handle request response: ',ARequest.FRequestID,', min: ',FMinLoadID,' Loadcount:',FLoadCount);
Case ARequest.Success of Case ARequest.Success of
rrFail: rrFail:
begin begin
@ -3551,7 +3571,6 @@ begin
begin begin
DoBeforeClose; DoBeforeClose;
SetState(dsInactive); SetState(dsInactive);
FDataRequestID:=0;
DoneChangeList; DoneChangeList;
CloseCursor; CloseCursor;
DoAfterClose; DoAfterClose;
@ -3850,7 +3869,10 @@ begin
{$ifdef dsdebug} {$ifdef dsdebug}
Writeln ('Active buffer requested. Returning record number: ',ActiveRecord); Writeln ('Active buffer requested. Returning record number: ',ActiveRecord);
{$endif} {$endif}
Result:=FBuffers[FActiveRecord]; if FactiveRecord<>-1 then
Result:=FBuffers[FActiveRecord]
else
Result:=Default(TDataRecord);
end; end;
function TDataSet.GetFieldData(Field: TField): JSValue; function TDataSet.GetFieldData(Field: TField): JSValue;
@ -4477,6 +4499,7 @@ Var
Request : TDataRequest; Request : TDataRequest;
begin begin
// Writeln(Name,' Load called. LoadCount ',LoadCount);
if not (loNoEvents in aOptions) then if not (loNoEvents in aOptions) then
DoBeforeLoad; DoBeforeLoad;
Result:=DataProxy<>Nil; Result:=DataProxy<>Nil;
@ -4488,7 +4511,11 @@ begin
Request.FBookmark:=GetBookmark; Request.FBookmark:=GetBookmark;
Inc(FDataRequestID); Inc(FDataRequestID);
Request.FRequestID:=FDataRequestID; Request.FRequestID:=FDataRequestID;
DataProxy.DoGetData(Request); if DataProxy.DoGetData(Request) then
Inc(FLoadCount)
else
Request.Free;
// Writeln(Name,' End of Load call. Count: ',LoadCount);
end; end;
@ -4752,6 +4779,12 @@ begin
DataEvent(deDatasetChange,0); DataEvent(deDatasetChange,0);
end; end;
procedure TDataSet.CancelLoading;
begin
FMinLoadID:=FDataRequestID;
FloadCount:=0;
end;
procedure TDataSet.SetFields(const Values: array of JSValue); procedure TDataSet.SetFields(const Values: array of JSValue);
Var I : longint; Var I : longint;