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

Comparing ibx/trunk/fbintf/client/3.0/FB30Attachment.pas (file contents):
Revision 143 by tony, Fri Feb 23 12:11:21 2018 UTC vs.
Revision 267 by tony, Fri Dec 28 10:44:23 2018 UTC

# Line 46 | Line 46 | type
46    TFB30Attachment = class(TFBAttachment,IAttachment, IActivityMonitor)
47    private
48      FAttachmentIntf: Firebird.IAttachment;
49 +    FFirebird30ClientAPI: TFB30ClientAPI;
50    protected
51      procedure CheckHandle; override;
52    public
53 <    constructor Create(DatabaseName: AnsiString; aDPB: IDPB;
53 >    constructor Create(api: TFB30ClientAPI; 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: TFB30ClientAPI; DatabaseName: AnsiString; aDPB: IDPB; RaiseExceptionOnError: boolean);  overload;
56 >    constructor CreateDatabase(api: TFB30ClientAPI; sql: AnsiString; aSQLDialect: integer;
57        RaiseExceptionOnError: boolean); overload;
58      destructor Destroy; override;
59      function GetDBInfo(ReqBuffer: PByte; ReqBufLen: integer): IDBInformation;
60        override;
61      property AttachmentIntf: Firebird.IAttachment read FAttachmentIntf;
62 +    property Firebird30ClientAPI: TFB30ClientAPI read FFirebird30ClientAPI;
63  
64    public
65      {IAttachment}
# Line 89 | Line 91 | type
91      function CreateArray(transaction: ITransaction; ArrayMetaData: IArrayMetaData): IArray; overload;
92      function CreateArrayMetaData(SQLType: cardinal; tableName: AnsiString;
93        columnName: AnsiString; Scale: integer; size: cardinal; aCharSetID: cardinal;
94 <  dimensions: cardinal; bounds: TArrayBounds): IArrayMetaData;
94 >      dimensions: cardinal; bounds: TArrayBounds): IArrayMetaData;
95  
96  
97      {Database Information}
98      function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData;
99      function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData;
100 +    procedure getFBVersion(version: TStrings);
101    end;
102  
103   implementation
# Line 102 | Line 105 | implementation
105   uses FB30Transaction, FB30Statement, FB30Array, FB30Blob, FBMessages,
106    FBOutputBlock, FB30Events, IBUtils;
107  
108 + type
109 +  { TVersionCallback }
110 +
111 +  TVersionCallback = class(Firebird.IVersionCallbackImpl)
112 +  private
113 +    FOutput: TStrings;
114 +  public
115 +    constructor Create(output: TStrings);
116 +    procedure callback(status: Firebird.IStatus; text: PAnsiChar); override;
117 +  end;
118 +
119 + { TVersionCallback }
120 +
121 + constructor TVersionCallback.Create(output: TStrings);
122 + begin
123 +  inherited Create;
124 +  FOutput := output;
125 + end;
126 +
127 + procedure TVersionCallback.callback(status: Firebird.IStatus; text: PAnsiChar);
128 + begin
129 +  FOutput.Add(text);
130 + end;
131 +
132 +
133   { TFB30Attachment }
134  
135   procedure TFB30Attachment.CheckHandle;
# Line 110 | Line 138 | begin
138      IBError(ibxeDatabaseClosed,[nil]);
139   end;
140  
141 < constructor TFB30Attachment.Create(DatabaseName: AnsiString; aDPB: IDPB;
141 > constructor TFB30Attachment.Create(api: TFB30ClientAPI; DatabaseName: AnsiString; aDPB: IDPB;
142    RaiseExceptionOnConnectError: boolean);
143   begin
144 +  FFirebird30ClientAPI := api;
145    if aDPB = nil then
146    begin
147      if RaiseExceptionOnConnectError then
148         IBError(ibxeNoDPB,[nil]);
149      Exit;
150    end;
151 <  inherited Create(DatabaseName,aDPB,RaiseExceptionOnConnectError);
151 >  inherited Create(api,DatabaseName,aDPB,RaiseExceptionOnConnectError);
152    Connect;
153   end;
154  
155 < constructor TFB30Attachment.CreateDatabase(DatabaseName: AnsiString; aDPB: IDPB;
155 > constructor TFB30Attachment.CreateDatabase(api: TFB30ClientAPI; DatabaseName: AnsiString; aDPB: IDPB;
156    RaiseExceptionOnError: boolean);
157   var Param: IDPBItem;
158      sql: AnsiString;
159      IsCreateDB: boolean;
160   begin
161 <  inherited Create(DatabaseName,aDPB,RaiseExceptionOnError);
161 >  inherited Create(api,DatabaseName,aDPB,RaiseExceptionOnError);
162 >  FFirebird30ClientAPI := api;
163    IsCreateDB := true;
164    if aDPB <> nil then
165    begin
# Line 138 | Line 168 | begin
168        FSQLDialect := Param.AsByte;
169    end;
170    sql := GenerateCreateDatabaseSQL(DatabaseName,aDPB);
171 <  with Firebird30ClientAPI do
171 >  with FFirebird30ClientAPI do
172    begin
173      FAttachmentIntf := UtilIntf.executeCreateDatabase(StatusIntf,Length(sql),
174                                         PAnsiChar(sql),FSQLDialect,@IsCreateDB);
# Line 157 | Line 187 | begin
187    end;
188   end;
189  
190 < constructor TFB30Attachment.CreateDatabase(sql: AnsiString; aSQLDialect: integer;
190 > constructor TFB30Attachment.CreateDatabase(api: TFB30ClientAPI; sql: AnsiString; aSQLDialect: integer;
191    RaiseExceptionOnError: boolean);
192   var IsCreateDB: boolean;
193   begin
194 <  inherited Create('',nil,RaiseExceptionOnError);
194 >  inherited Create(api,'',nil,RaiseExceptionOnError);
195 >  FFirebird30ClientAPI := api;
196    FSQLDialect := aSQLDialect;
197 <  with Firebird30ClientAPI do
197 >  with FFirebird30ClientAPI do
198    begin
199      FAttachmentIntf := UtilIntf.executeCreateDatabase(StatusIntf,Length(sql),
200                                         PAnsiChar(sql),aSQLDialect,@IsCreateDB);
# Line 185 | Line 216 | end;
216  
217   function TFB30Attachment.GetDBInfo(ReqBuffer: PByte; ReqBufLen: integer): IDBInformation;
218   begin
219 <  Result := TDBInformation.Create;
220 <  with Firebird30ClientAPI, Result as TDBInformation do
219 >  Result := TDBInformation.Create(Firebird30ClientAPI);
220 >  with FFirebird30ClientAPI, Result as TDBInformation do
221    begin
222      FAttachmentIntf.getInfo(StatusIntf, ReqBufLen, BytePtr(ReqBuffer),
223                                 getBufSize, BytePtr(Buffer));
# Line 196 | Line 227 | end;
227  
228   procedure TFB30Attachment.Connect;
229   begin
230 <  with Firebird30ClientAPI do
230 >  with FFirebird30ClientAPI do
231    begin
232      FAttachmentIntf := ProviderIntf.attachDatabase(StatusIntf,PAnsiChar(FDatabaseName),
233                           (DPB as TDPB).getDataLength,
# Line 212 | Line 243 | end;
243   procedure TFB30Attachment.Disconnect(Force: boolean);
244   begin
245    if IsConnected then
246 <    with Firebird30ClientAPI do
246 >    with FFirebird30ClientAPI do
247      begin
248        EndAllTransactions;
249        FAttachmentIntf.Detach(StatusIntf);
# Line 233 | Line 264 | end;
264   procedure TFB30Attachment.DropDatabase;
265   begin
266    if IsConnected then
267 <    with Firebird30ClientAPI do
267 >    with FFirebird30ClientAPI do
268      begin
269        EndAllTransactions;
270        FAttachmentIntf.dropDatabase(StatusIntf);
# Line 246 | Line 277 | function TFB30Attachment.StartTransactio
277    DefaultCompletion: TTransactionCompletion): ITransaction;
278   begin
279    CheckHandle;
280 <  Result := TFB30Transaction.Create(self,TPB,DefaultCompletion);
280 >  Result := TFB30Transaction.Create(FFirebird30ClientAPI,self,TPB,DefaultCompletion);
281   end;
282  
283   function TFB30Attachment.StartTransaction(TPB: ITPB;
284    DefaultCompletion: TTransactionCompletion): ITransaction;
285   begin
286    CheckHandle;
287 <  Result := TFB30Transaction.Create(self,TPB,DefaultCompletion);
287 >  Result := TFB30Transaction.Create(FFirebird30ClientAPI,self,TPB,DefaultCompletion);
288   end;
289  
290   procedure TFB30Attachment.ExecImmediate(transaction: ITransaction; sql: AnsiString;
291    aSQLDialect: integer);
292   begin
293    CheckHandle;
294 <  with Firebird30ClientAPI do
294 >  with FFirebird30ClientAPI do
295    begin
296      FAttachmentIntf.execute(StatusIntf,(transaction as TFB30Transaction).TransactionIntf,
297                      Length(sql),PAnsiChar(sql),aSQLDialect,nil,nil,nil,nil);
# Line 371 | Line 402 | begin
402    Result := TFB30ArrayMetaData.Create(self,Transaction as TFB30Transaction,tableName,columnName);
403   end;
404  
405 + procedure TFB30Attachment.getFBVersion(version: TStrings);
406 + var bufferObj: TVersionCallback;
407 + begin
408 +  version.Clear;
409 +  bufferObj := TVersionCallback.Create(version);
410 +  try
411 +    with FFirebird30ClientAPI do
412 +    begin
413 +       UtilIntf.getFbVersion(StatusIntf,FAttachmentIntf,bufferObj);
414 +       Check4DataBaseError;
415 +    end;
416 +  finally
417 +    bufferObj.Free;
418 +  end;
419 + end;
420 +
421   end.
422  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines