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

Comparing ibx/trunk/fbintf/client/FBStatement.pas (file contents):
Revision 345 by tony, Mon Aug 23 14:22:29 2021 UTC vs.
Revision 359 by tony, Tue Dec 7 09:37:32 2021 UTC

# Line 59 | Line 59 | type
59    protected
60      FTransactionIntf: ITransaction;
61      FExecTransactionIntf: ITransaction;
62 +    FStaleReferenceChecks: boolean;
63      FSQLStatementType: TIBSQLStatementTypes;         { Select, update, delete, insert, create, alter, etc...}
64      FSQLDialect: integer;
65      FOpen: boolean;
# Line 82 | Line 83 | type
83      procedure CheckHandle; virtual; abstract;
84      procedure CheckTransaction(aTransaction: ITransaction);
85      procedure GetDsqlInfo(info_request: byte; buffer: ISQLInfoResults); overload; virtual; abstract;
86 <    procedure InternalPrepare;  virtual; abstract;
86 >    procedure InternalPrepare(CursorName: AnsiString='');  virtual; abstract;
87      function InternalExecute(Transaction: ITransaction): IResults;  virtual; abstract;
88 <    function InternalOpenCursor(aTransaction: ITransaction): IResultSet;   virtual; abstract;
88 >    function InternalOpenCursor(aTransaction: ITransaction; Scrollable: boolean): IResultSet;   virtual; abstract;
89      procedure ProcessSQL(sql: AnsiString; GenerateParamNames: boolean; var processedSQL: AnsiString); virtual; abstract;
90      procedure FreeHandle;  virtual; abstract;
91      procedure InternalClose(Force: boolean); virtual; abstract;
# Line 111 | Line 112 | type
112      function GetSQLText: AnsiString;
113      function GetProcessedSQLText: AnsiString;
114      function GetSQLDialect: integer;
115 +    function GetFlags: TStatementFlags; virtual;
116  
117      {GetDSQLInfo only supports isc_info_sql_stmt_type, isc_info_sql_get_plan, isc_info_sql_records}
118 <    procedure Prepare(aTransaction: ITransaction=nil); virtual;
118 >    procedure Prepare(aTransaction: ITransaction=nil);  overload;
119 >    procedure Prepare(CursorName: AnsiString; aTransaction: ITransaction=nil); overload; virtual;
120      function Execute(aTransaction: ITransaction=nil): IResults;
121 <    function OpenCursor(aTransaction: ITransaction=nil): IResultSet;
121 >    function OpenCursor(aTransaction: ITransaction=nil): IResultSet; overload;
122 >    function OpenCursor(Scrollable: boolean; aTransaction: ITransaction=nil): IResultSet; overload;
123      function CreateBlob(paramName: AnsiString): IBlob; overload;
124      function CreateBlob(index: integer): IBlob; overload;
125      function CreateBlob(column: TColumnMetaData): IBlob; overload; virtual; abstract;
# Line 138 | Line 142 | type
142      function GetBatchCompletion: IBatchCompletion; virtual;
143      function GetBatchRowLimit: integer;
144      procedure SetBatchRowLimit(aLimit: integer);
145 +    {Stale Reference Check}
146 +    procedure SetStaleReferenceChecks(Enable:boolean); {default true}
147 +    function GetStaleReferenceChecks: boolean;
148    public
149      property ChangeSeqNo: integer read FChangeSeqNo;
150      property SQLParams: ISQLParams read GetSQLParams;
# Line 179 | Line 186 | begin
186    FSQLDialect := SQLDialect;
187    FSQL := sql;
188    FBatchRowLimit := DefaultBatchRowLimit;
189 +  FStaleReferenceChecks := true;
190   end;
191  
192   constructor TFBStatement.CreateWithParameterNames(Attachment: IAttachment;
# Line 282 | Line 290 | end;
290  
291   function TFBStatement.GetProcessedSQLText: AnsiString;
292   begin
293 <  if FProcessedSQL = '' then
294 <    ProcessSQL(FSQL,FGenerateParamNames,FProcessedSQL);
295 <  Result := FProcessedSQL
293 >  if not FHasParamNames then
294 >    Result := FSQL
295 >  else
296 >  begin
297 >    if FProcessedSQL = '' then
298 >      ProcessSQL(FSQL,FGenerateParamNames,FProcessedSQL);
299 >    Result := FProcessedSQL;
300 >  end;
301   end;
302  
303   function TFBStatement.GetSQLDialect: integer;
# Line 292 | Line 305 | begin
305    Result := FSQLDialect;
306   end;
307  
308 + function TFBStatement.GetFlags: TStatementFlags;
309 + begin
310 +  Result := [];
311 + end;
312 +
313   procedure TFBStatement.Prepare(aTransaction: ITransaction);
314   begin
315 +  Prepare('',aTransaction);
316 + end;
317 +
318 + procedure TFBStatement.Prepare(CursorName: AnsiString;
319 +  aTransaction: ITransaction);
320 + begin
321    if FPrepared then FreeHandle;
322    if aTransaction <> nil then
323    begin
# Line 301 | Line 325 | begin
325      FTransactionIntf := aTransaction;
326      AddMonitor(FTransactionIntf as TFBTransaction);
327    end;
328 <  InternalPrepare;
328 >  InternalPrepare(CursorName);
329   end;
330  
331   function TFBStatement.Execute(aTransaction: ITransaction): IResults;
# Line 344 | Line 368 | begin
368    FBatchRowLimit := aLimit;
369   end;
370  
371 + procedure TFBStatement.SetStaleReferenceChecks(Enable: boolean);
372 + begin
373 +  FStaleReferenceChecks := Enable;
374 + end;
375 +
376 + function TFBStatement.GetStaleReferenceChecks: boolean;
377 + begin
378 +  Result := FStaleReferenceChecks;
379 + end;
380 +
381   function TFBStatement.OpenCursor(aTransaction: ITransaction): IResultSet;
382   begin
383 +  Result := OpenCursor(false,aTransaction);
384 + end;
385 +
386 + function TFBStatement.OpenCursor(Scrollable: boolean; aTransaction: ITransaction
387 +  ): IResultSet;
388 + begin
389    Close;
390    if aTransaction = nil then
391 <    Result := InternalOpenCursor(FTransactionIntf)
391 >    Result := InternalOpenCursor(FTransactionIntf,Scrollable)
392    else
393 <    Result := InternalOpenCursor(aTransaction);
393 >    Result := InternalOpenCursor(aTransaction,Scrollable);
394   end;
395  
396   function TFBStatement.CreateBlob(paramName: AnsiString): IBlob;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines