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

Comparing ibx/trunk/fbintf/client/FBTransaction.pas (file contents):
Revision 263 by tony, Thu Dec 6 15:55:01 2018 UTC vs.
Revision 315 by tony, Thu Feb 25 11:56:36 2021 UTC

# Line 116 | Line 116 | type
116      property TransactionSeqNo: integer read FSeqNo;
117    end;
118  
119 +  {The transaction user interface is used to force an action on the end of the
120 +   transaction.}
121 +
122 +  ITransactionUser = interface
123 +    ['{156fcdc9-a326-44b3-a82d-f23c6fb9f97c}']
124 +    procedure TransactionEnding(aTransaction: ITransaction; Force: boolean);
125 +  end;
126 +
127 +  { TTPBItem }
128 +
129 +  TTPBItem = class(TParamBlockItem,ITPBItem)
130 +  public
131 +    function getParamTypeName: AnsiString; override;
132 +  end;
133 +
134 +  { TTPB }
135 +
136 +  TTPB = class (TCustomParamBlock<TTPBItem,ITPBItem>, ITPB)
137 +  protected
138 +    function LookupItemType(ParamTypeName: AnsiString): byte; override;
139 +  public
140 +    constructor Create(api: TFBClientAPI);
141 +    function GetDPBParamTypeName(ParamType: byte): Ansistring;
142 +  end;
143 +
144   implementation
145  
146 < uses FBMessages, FBStatement;
146 > uses FBMessages;
147 >
148 > const
149 >  isc_tpb_last_tpb_constant = isc_tpb_at_snapshot_number;
150 >
151 >  TPBConstantNames: array[1..isc_tpb_last_tpb_constant] of string = (
152 >    'consistency',
153 >    'concurrency',
154 >    'shared',
155 >    'protected',
156 >    'exclusive',
157 >    'wait',
158 >    'nowait',
159 >    'read',
160 >    'write',
161 >    'lock_read',
162 >    'lock_write',
163 >    'verb_time',
164 >    'commit_time',
165 >    'ignore_limbo',
166 >    'read_committed',
167 >    'autocommit',
168 >    'rec_version',
169 >    'no_rec_version',
170 >    'restart_requests',
171 >    'no_auto_undo',
172 >    'lock_timeout',
173 >    'read_consistency',
174 >    'at_snapshot_number'
175 >  );
176  
177   { TFBTransaction }
178  
# Line 193 | Line 247 | end;
247  
248   procedure TFBTransaction.DoDefaultTransactionEnd(Force: boolean);
249   var i: integer;
250 <    intf: TInterfacedObject;
250 >    intf: IUnknown;
251 >    user: ITransactionUser;
252   begin
253    if InTransaction then
254    begin
255      for i := 0 to InterfaceCount - 1 do
256      begin
257        intf := GetInterface(i);
258 <      if (intf <> nil) and  (intf is TFBStatement) then
259 <        TFBStatement(intf).TransactionEnding(self,Force);
258 >      if (intf <> nil) and  (intf.QueryInterface(ITransactionUser,user) = S_OK) then
259 >        user.TransactionEnding(self,Force);
260      end;
261      case FDefaultCompletion of
262      taRollback:
# Line 237 | Line 292 | begin
292    Start(DefaultCompletion);
293   end;
294  
295 + { TTPBItem }
296 +
297 + function TTPBItem.getParamTypeName: AnsiString;
298 + begin
299 +  Result :=  TPBPrefix + TPBConstantNames[getParamType];
300 + end;
301 +
302 +
303 + {TTPB}
304 +
305 + constructor TTPB.Create(api: TFBClientAPI);
306 + begin
307 +  inherited Create(api);
308 +  FDataLength := 1;
309 +  FBuffer^ := isc_tpb_version3;
310 + end;
311 +
312 + function TTPB.GetDPBParamTypeName(ParamType: byte): Ansistring;
313 + begin
314 +  if ParamType <= isc_tpb_last_tpb_constant then
315 +    Result := TPBConstantNames[ParamType]
316 +  else
317 +    Result := '';
318 + end;
319 +
320 + function TTPB.LookupItemType(ParamTypeName: AnsiString): byte;
321 + var i: byte;
322 + begin
323 +  Result := 0;
324 +  ParamTypeName := LowerCase(ParamTypeName);
325 +  if (Pos(TPBPrefix, ParamTypeName) = 1) then
326 +    Delete(ParamTypeName, 1, Length(TPBPrefix));
327 +
328 +  for i := 1 to isc_tpb_last_tpb_constant do
329 +    if (ParamTypeName = TPBConstantNames[i]) then
330 +    begin
331 +      Result := i;
332 +      break;
333 +    end;
334 + end;
335 +
336   end.
337  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines