ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/fbintf/client/FBStatement.pas
(Generate patch)

Comparing ibx/trunk/fbintf/client/FBStatement.pas (file contents):
Revision 401 by tony, Mon Jan 10 10:13:17 2022 UTC vs.
Revision 402 by tony, Mon Aug 1 10:07:24 2022 UTC

# Line 82 | Line 82 | type
82      procedure CheckChangeBatchRowLimit; virtual;
83      procedure CheckHandle; virtual; abstract;
84      procedure CheckTransaction(aTransaction: ITransaction);
85 +    procedure DoJournaling(force: boolean);
86 +    function GetJournalIntf: IJournallingHook;
87 +    function GetStatementIntf: IStatement; virtual; abstract;
88      procedure GetDsqlInfo(info_request: byte; buffer: ISQLInfoResults); overload; virtual; abstract;
89      procedure InternalPrepare(CursorName: AnsiString='');  virtual; abstract;
90      function InternalExecute(Transaction: ITransaction): IResults;  virtual; abstract;
# Line 171 | Line 174 | begin
174      IBError(ibxeNotInTransaction,[]);
175   end;
176  
177 + procedure TFBStatement.DoJournaling(force: boolean);
178 +  function doGetRowsAffected: integer;
179 +  var a,i,u,d: integer;
180 +  begin
181 +    GetRowsAffected(a,i,u,d);
182 +    Result := i + u + d;
183 +  end;
184 +
185 + var RowsAffected: integer;
186 + begin
187 +  RowsAffected := doGetRowsAffected;
188 +  with GetAttachment do
189 +    if JournalingActive and (force or
190 +      (((joReadOnlyQueries in GetJournalOptions) and (RowsAffected = 0)) or
191 +      ((joModifyQueries in GetJournalOptions) and (RowsAffected > 0)))) then
192 +      GetJournalIntf.ExecQuery(GetStatementIntf);
193 + end;
194 +
195 + function TFBStatement.GetJournalIntf: IJournallingHook;
196 + begin
197 +  GetAttachment.QueryInterface(IJournallingHook,Result)
198 + end;
199 +
200   function TFBStatement.TimeStampToMSecs(const TimeStamp: TTimeStamp): Int64;
201   begin
202    Result := TimeStamp.Time + Int64(timestamp.date)*msecsperday;
# Line 330 | Line 356 | end;
356  
357   function TFBStatement.Execute(aTransaction: ITransaction): IResults;
358   begin
359 <  if aTransaction = nil then
360 <    Result :=  InternalExecute(FTransactionIntf)
361 <  else
362 <    Result := InternalExecute(aTransaction);
359 >  try
360 >    if aTransaction = nil then
361 >      Result :=  InternalExecute(FTransactionIntf)
362 >    else
363 >      Result := InternalExecute(aTransaction);
364 >  finally
365 >    DoJournaling(ExceptObject <> nil);
366 >  end;
367   end;
368  
369   procedure TFBStatement.AddToBatch;
# Line 387 | Line 417 | function TFBStatement.OpenCursor(Scrolla
417    ): IResultSet;
418   begin
419    Close;
420 <  if aTransaction = nil then
421 <    Result := InternalOpenCursor(FTransactionIntf,Scrollable)
422 <  else
423 <    Result := InternalOpenCursor(aTransaction,Scrollable);
420 >  try
421 >    if aTransaction = nil then
422 >      Result := InternalOpenCursor(FTransactionIntf,Scrollable)
423 >    else
424 >      Result := InternalOpenCursor(aTransaction,Scrollable);
425 >  finally
426 >    DoJournaling(ExceptObject <> nil);
427 >  end;
428   end;
429  
430   function TFBStatement.CreateBlob(paramName: AnsiString): IBlob;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines