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

Comparing ibx/trunk/fbintf/client/2.5/FB25Attachment.pas (file contents):
Revision 117 by tony, Mon Jan 22 13:58:11 2018 UTC vs.
Revision 266 by tony, Wed Dec 26 18:34:32 2018 UTC

# Line 46 | Line 46 | type
46    TFB25Attachment = class(TFBAttachment, IAttachment, IActivityMonitor)
47    private
48      FHandle: TISC_DB_HANDLE;
49 +    FFirebird25ClientAPI: TFB25ClientAPI;
50    protected
51      procedure CheckHandle; override;
52    public
53 <    constructor Create(DatabaseName: AnsiString; aDPB: IDPB;
53 >    constructor Create(api: TFB25ClientAPI; DatabaseName: AnsiString; aDPB: IDPB;
54        RaiseExceptionOnConnectError: boolean);
55 <    constructor CreateDatabase(DatabaseName: AnsiString; aDPB: IDPB; RaiseExceptionOnError: boolean); overload;
56 <    constructor CreateDatabase(sql: AnsiString; aSQLDialect: integer;
55 >    constructor CreateDatabase(api: TFB25ClientAPI; DatabaseName: AnsiString; aDPB: IDPB; RaiseExceptionOnError: boolean); overload;
56 >    constructor CreateDatabase(api: TFB25ClientAPI; sql: AnsiString; aSQLDialect: integer;
57        RaiseExceptionOnError: boolean); overload;
58 +    function GetDBInfo(ReqBuffer: PByte; ReqBufLen: integer): IDBInformation; override;
59      property Handle: TISC_DB_HANDLE read FHandle;
60 +    property Firebird25ClientAPI: TFB25ClientAPI read FFirebird25ClientAPI;
61  
62    public
63      {IAttachment}
# Line 89 | Line 92 | type
92  
93      function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData;
94      function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData;
95 <    function GetDBInformation(Requests: array of byte): IDBInformation; overload; override;
93 <    function GetDBInformation(Request: byte): IDBInformation; overload; override;
95 >    procedure getFBVersion(version: TStrings);
96    end;
97  
98   implementation
99  
100   uses FB25Events,FB25Transaction, FBMessages, FB25Blob,
101 <  FB25Statement, FB25Array, IBUtils;
101 >  FB25Statement, FB25Array, IBUtils, IBExternals;
102  
103    { TFB25Attachment }
104  
# Line 106 | Line 108 | begin
108      IBError(ibxeDatabaseClosed,[nil]);
109   end;
110  
111 < constructor TFB25Attachment.Create(DatabaseName: AnsiString; aDPB: IDPB;
111 > constructor TFB25Attachment.Create(api: TFB25ClientAPI; DatabaseName: AnsiString; aDPB: IDPB;
112    RaiseExceptionOnConnectError: boolean);
113   begin
114 +  FFirebird25ClientAPI := api;
115    if aDPB = nil then
116    begin
117      if RaiseExceptionOnConnectError then
118         IBError(ibxeNoDPB,[nil]);
119      Exit;
120    end;
121 <  inherited Create(DatabaseName,aDPB,RaiseExceptionOnConnectError);
121 >  inherited Create(api,DatabaseName,aDPB,RaiseExceptionOnConnectError);
122    Connect;
123   end;
124  
125 < constructor TFB25Attachment.CreateDatabase(DatabaseName: AnsiString; aDPB: IDPB;
125 > constructor TFB25Attachment.CreateDatabase(api: TFB25ClientAPI; DatabaseName: AnsiString; aDPB: IDPB;
126    RaiseExceptionOnError: boolean);
127   var sql: AnsiString;
128      tr_handle: TISC_TR_HANDLE;
129   begin
130 <  inherited Create(DatabaseName,aDPB,RaiseExceptionOnError);
130 >  inherited Create(api,DatabaseName,aDPB,RaiseExceptionOnError);
131 >  FFirebird25ClientAPI := api;
132    sql := GenerateCreateDatabaseSQL(DatabaseName,aDPB);
133    tr_handle := nil;
134 <  with Firebird25ClientAPI do
134 >  with FFirebird25ClientAPI do
135    if (isc_dsql_execute_immediate(StatusVector, @FHandle, @tr_handle, 0, PAnsiChar(sql),
136                                    SQLDialect, nil) > 0) and RaiseExceptionOnError then
137      IBDataBaseError;
# Line 141 | Line 145 | begin
145      GetODSAndConnectionInfo;
146   end;
147  
148 < constructor TFB25Attachment.CreateDatabase(sql: AnsiString; aSQLDialect: integer;
148 > constructor TFB25Attachment.CreateDatabase(api: TFB25ClientAPI; sql: AnsiString; aSQLDialect: integer;
149      RaiseExceptionOnError: boolean);
150   var tr_handle: TISC_TR_HANDLE;
151   begin
152 <  inherited Create('',nil,RaiseExceptionOnError);
152 >  inherited Create(api,'',nil,RaiseExceptionOnError);
153 >  FFirebird25ClientAPI := api;
154    FSQLDialect := aSQLDialect;
155    tr_handle := nil;
156 <  with Firebird25ClientAPI do
156 >  with FFirebird25ClientAPI do
157    begin
158      if (isc_dsql_execute_immediate(StatusVector, @FHandle, @tr_handle, 0, PAnsiChar(sql),
159                                    aSQLDialect, nil) > 0) and RaiseExceptionOnError then
# Line 160 | Line 165 | begin
165    DPBFromCreateSQL(sql);
166   end;
167  
168 + function TFB25Attachment.GetDBInfo(ReqBuffer: PByte; ReqBufLen: integer
169 +  ): IDBInformation;
170 + begin
171 +  Result := TDBInformation.Create(FFirebird25ClientAPI);
172 +  with FFirebird25ClientAPI, Result as TDBInformation do
173 +     if isc_database_info(StatusVector, @(FHandle), ReqBufLen, ReqBuffer,
174 +                               getBufSize, Buffer) > 0 then
175 +          IBDataBaseError;
176 + end;
177 +
178   procedure TFB25Attachment.Connect;
179   begin
180    FSQLDialect := 3;
181  
182 <  with Firebird25ClientAPI do
182 >  with FFirebird25ClientAPI do
183    if DPB = nil then
184    begin
185      if (isc_attach_database(StatusVector, Length(FDatabaseName),
# Line 190 | Line 205 | begin
205  
206    EndAllTransactions;
207    {Disconnect}
208 <  with Firebird25ClientAPI do
208 >  with FFirebird25ClientAPI do
209      if (isc_detach_database(StatusVector, @FHandle) > 0) and not Force then
210        IBDatabaseError;
211    FHandle := nil;
# Line 208 | Line 223 | procedure TFB25Attachment.DropDatabase;
223   begin
224    CheckHandle;
225    EndAllTransactions;
226 <  with Firebird25ClientAPI do
226 >  with FFirebird25ClientAPI do
227      if isc_drop_database(StatusVector, @FHandle) > 0 then
228        IBDatabaseError;
229    FHandle := nil;
# Line 218 | Line 233 | function TFB25Attachment.StartTransactio
233    DefaultCompletion: TTransactionCompletion): ITransaction;
234   begin
235    CheckHandle;
236 <  Result := TFB25Transaction.Create(self,TPB,DefaultCompletion);
236 >  Result := TFB25Transaction.Create(FFirebird25ClientAPI,self,TPB,DefaultCompletion);
237   end;
238  
239   function TFB25Attachment.StartTransaction(TPB: ITPB;
240    DefaultCompletion: TTransactionCompletion): ITransaction;
241   begin
242    CheckHandle;
243 <  Result := TFB25Transaction.Create(self,TPB,DefaultCompletion);
243 >  Result := TFB25Transaction.Create(FFirebird25ClientAPI,self,TPB,DefaultCompletion);
244   end;
245  
246   function TFB25Attachment.CreateBlob(transaction: ITransaction; RelationName,
# Line 272 | Line 287 | var TRHandle: TISC_TR_HANDLE;
287   begin
288    CheckHandle;
289    TRHandle := (Transaction as TFB25Transaction).Handle;
290 <  with Firebird25ClientAPI do
290 >  with FFirebird25ClientAPI do
291      if isc_dsql_execute_immediate(StatusVector, @fHandle, @TRHandle, 0,PAnsiChar(sql), aSQLDialect, nil) > 0 then
292        IBDatabaseError;
293    SignalActivity;
# Line 343 | Line 358 | begin
358    Result := TFB25ArrayMetaData.Create(self,Transaction as TFB25Transaction,tableName,columnName);
359   end;
360  
361 < function TFB25Attachment.GetDBInformation(Requests: array of byte
347 <  ): IDBInformation;
348 < var ReqBuffer: PByte;
349 <    i: integer;
361 > procedure ISCVersionCallback(userArg: pointer; text: PAnsiChar); cdecl;
362   begin
363 <  CheckHandle;
352 <  if Length(Requests) = 1 then
353 <    Result := GetDBInformation(Requests[0])
354 <  else
355 <  begin
356 <    Result := TDBInformation.Create;
357 <    GetMem(ReqBuffer,Length(Requests));
358 <    try
359 <      for i := 0 to Length(Requests) - 1 do
360 <        ReqBuffer[i] := Requests[i];
361 <
362 <      with Firebird25ClientAPI, Result as TDBInformation do
363 <          if isc_database_info(StatusVector, @(FHandle), Length(Requests), ReqBuffer,
364 <                                 getBufSize, Buffer) > 0 then
365 <            IBDataBaseError;
366 <
367 <    finally
368 <      FreeMem(ReqBuffer);
369 <    end;
370 <  end;
363 >  TStrings(userArg).Add(text);
364   end;
365  
366 < function TFB25Attachment.GetDBInformation(Request: byte): IDBInformation;
366 > procedure TFB25Attachment.getFBVersion(version: TStrings);
367 > var callback: pointer;
368   begin
369 <  CheckHandle;
370 <  Result := TDBInformation.Create;
377 <  with Firebird25ClientAPI, Result as TDBInformation do
378 <    if isc_database_info(StatusVector, @(FHandle), 1, @Request,
379 <                           getBufSize, Buffer) > 0 then
380 <      IBDataBaseError;
369 >  callback := @ISCVersionCallback;
370 >  FFirebird25ClientAPI.isc_version(@FHandle,TISC_CALLBACK(callback),PVoid(version));
371   end;
372  
373   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines