|
From: <na...@us...> - 2010-12-26 17:25:38
|
Revision: 939
http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=939&view=rev
Author: nandod
Date: 2010-12-26 17:25:31 +0000 (Sun, 26 Dec 2010)
Log Message:
-----------
* Burst load modes: fix for a bug that would prevent retrieving a list made of only one object with some brokers (some datasets have Eof = True even when the buffer is pointing to valid record data and there's only one record).
Modified Paths:
--------------
trunk/Source/Core/InstantBrokers.pas
Modified: trunk/Source/Core/InstantBrokers.pas
===================================================================
--- trunk/Source/Core/InstantBrokers.pas 2010-11-16 21:51:58 UTC (rev 938)
+++ trunk/Source/Core/InstantBrokers.pas 2010-12-26 17:25:31 UTC (rev 939)
@@ -1,4 +1,4 @@
- (*
+(*
* InstantObjects
* Broker and Connector Classes
*)
@@ -449,7 +449,6 @@
const AMap: TInstantAttributeMap);
procedure RetrieveMapFromDataSet(const AObject: TInstantObject;
const AObjectId: string; const AMap: TInstantAttributeMap;
- ConflictAction: TInstantConflictAction; AInfo: PInstantOperationInfo;
const ADataSet: TDataSet);
protected
procedure AddAttributeParam(Attribute: TInstantAttribute;
@@ -3421,7 +3420,9 @@
if Assigned(AObjectData) and (AObjectData is TInstantDataSetObjectData)
and TInstantDataSetObjectData(AObjectData).Locate(AObjectId) then
begin
- RetrieveMapFromDataSet(AObject, AObjectId, Map, ConflictAction, AInfo,
+ AInfo.Success := True;
+ AInfo.Conflict := not AInfo.Success;
+ RetrieveMapFromDataSet(AObject, AObjectId, Map,
TInstantDataSetObjectData(AObjectData).DataSet);
end
else
@@ -3432,8 +3433,12 @@
LDataSet := Broker.AcquireDataSet(SelectSQL, LParams);
try
LDataSet.Open;
- RetrieveMapFromDataSet(AObject, AObjectId, Map, ConflictAction,
- AInfo, LDataSet);
+ AInfo.Success := not LDataSet.Eof;
+ AInfo.Conflict := not AInfo.Success;
+ if AInfo.Success then
+ RetrieveMapFromDataSet(AObject, AObjectId, Map, LDataSet)
+ else
+ ResetAttributes(AObject, Map);
finally
Broker.ReleaseDataSet(LDataSet);
end;
@@ -3925,29 +3930,16 @@
Params.Delete(Param.Index);
end;
-procedure TInstantSQLResolver.RetrieveMapFromDataSet(const AObject: TInstantObject;
- const AObjectId: string; const AMap: TInstantAttributeMap;
- ConflictAction: TInstantConflictAction; AInfo: PInstantOperationInfo;
- const ADataSet: TDataSet);
-var
- LInfo: TInstantOperationInfo;
+procedure TInstantSQLResolver.RetrieveMapFromDataSet(
+ const AObject: TInstantObject; const AObjectId: string;
+ const AMap: TInstantAttributeMap; const ADataSet: TDataSet);
begin
Assert(Assigned(AObject));
Assert(Assigned(ADataSet));
- if not Assigned(AInfo) then
- AInfo := @LInfo;
-
- AInfo.Success := not ADataSet.Eof;
- AInfo.Conflict := not AInfo.Success;
- if AInfo.Success then
- begin
- if AMap.IsRootMap then
- Broker.SetObjectUpdateCount(AObject, ADataSet.FieldByName(InstantUpdateCountFieldName).AsInteger);
- ReadAttributes(AObject, AObjectId, AMap, ADataSet);
- end
- else
- ResetAttributes(AObject, AMap);
+ if AMap.IsRootMap then
+ Broker.SetObjectUpdateCount(AObject, ADataSet.FieldByName(InstantUpdateCountFieldName).AsInteger);
+ ReadAttributes(AObject, AObjectId, AMap, ADataSet);
end;
function TInstantSQLResolver.TranslateError(AObject: TInstantObject;
|