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

Comparing ibx/trunk/fbintf/client/3.0/FB30Attachment.pas (file contents):
Revision 45 by tony, Tue Dec 6 10:33:46 2016 UTC vs.
Revision 117 by tony, Mon Jan 22 13:58:11 2018 UTC

# Line 25 | Line 25
25   *
26   *)
27   unit FB30Attachment;
28 + {$IFDEF MSWINDOWS}
29 + {$DEFINE WINDOWS}
30 + {$ENDIF}
31  
32   {$IFDEF FPC}
33 < {$mode objfpc}{$H+}
33 > {$mode delphi}
34   {$interfaces COM}
35   {$ENDIF}
36  
# Line 46 | Line 49 | type
49    protected
50      procedure CheckHandle; override;
51    public
52 <    constructor Create(DatabaseName: string; aDPB: IDPB;
52 >    constructor Create(DatabaseName: AnsiString; aDPB: IDPB;
53            RaiseExceptionOnConnectError: boolean);
54 <    constructor CreateDatabase(DatabaseName: string; aDPB: IDPB; RaiseExceptionOnError: boolean);
54 >    constructor CreateDatabase(DatabaseName: AnsiString; aDPB: IDPB; RaiseExceptionOnError: boolean);  overload;
55 >    constructor CreateDatabase(sql: AnsiString; aSQLDialect: integer;
56 >      RaiseExceptionOnError: boolean); overload;
57      destructor Destroy; override;
58      property AttachmentIntf: Firebird.IAttachment read FAttachmentIntf;
59  
# Line 56 | Line 61 | type
61      {IAttachment}
62      procedure Connect;
63      procedure Disconnect(Force: boolean=false); override;
64 <    function IsConnected: boolean;
64 >    function IsConnected: boolean; override;
65      procedure DropDatabase;
66      function StartTransaction(TPB: array of byte; DefaultCompletion: TTransactionCompletion): ITransaction; override;
67      function StartTransaction(TPB: ITPB; DefaultCompletion: TTransactionCompletion): ITransaction; override;
68 <    procedure ExecImmediate(transaction: ITransaction; sql: string; aSQLDialect: integer); override;
69 <    function Prepare(transaction: ITransaction; sql: string; aSQLDialect: integer): IStatement; override;
70 <    function PrepareWithNamedParameters(transaction: ITransaction; sql: string;
68 >    procedure ExecImmediate(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer); override;
69 >    function Prepare(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer): IStatement; override;
70 >    function PrepareWithNamedParameters(transaction: ITransaction; sql: AnsiString;
71                         aSQLDialect: integer; GenerateParamNames: boolean=false): IStatement; override;
72  
73      {Events}
# Line 70 | Line 75 | type
75  
76      {Blob - may use to open existing Blobs. However, ISQLData.AsBlob is preferred}
77  
78 <    function CreateBlob(transaction: ITransaction; RelationName, ColumnName: string; BPB: IBPB=nil): IBlob; overload;
78 >    function CreateBlob(transaction: ITransaction; RelationName, ColumnName: AnsiString; BPB: IBPB=nil): IBlob; overload;
79      function CreateBlob(transaction: ITransaction; BlobMetaData: IBlobMetaData; BPB: IBPB=nil): IBlob; overload;
80      function CreateBlob(transaction: ITransaction; SubType: integer; aCharSetID: cardinal=0; BPB: IBPB=nil): IBlob; overload;
81 <    function OpenBlob(transaction: ITransaction; RelationName, ColumnName: string; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob; overload;
82 <    function OpenBlob(transaction: ITransaction; BlobMetaData: IBlobMetaData; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob; override; overload;
81 >    function OpenBlob(transaction: ITransaction; RelationName, ColumnName: AnsiString; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob; overload;
82 >    function OpenBlob(transaction: ITransaction; BlobMetaData: IBlobMetaData; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob;  overload; override;
83  
84      {Array}
85 <    function OpenArray(transaction: ITransaction; RelationName, ColumnName: string; ArrayID: TISC_QUAD): IArray;
86 <    function CreateArray(transaction: ITransaction; RelationName, ColumnName: string): IArray; overload;
85 >    function OpenArray(transaction: ITransaction; RelationName, ColumnName: AnsiString; ArrayID: TISC_QUAD): IArray;
86 >    function CreateArray(transaction: ITransaction; RelationName, ColumnName: AnsiString): IArray; overload;
87      function CreateArray(transaction: ITransaction; ArrayMetaData: IArrayMetaData): IArray; overload;
88 +    function CreateArrayMetaData(SQLType: cardinal; tableName: AnsiString;
89 +      columnName: AnsiString; Scale: integer; size: cardinal; aCharSetID: cardinal;
90 +  dimensions: cardinal; bounds: TArrayBounds): IArrayMetaData;
91 +
92  
93      {Database Information}
94 <    function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: string): IBlobMetaData;
95 <    function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: string): IArrayMetaData;
96 <    function GetDBInformation(Requests: array of byte): IDBInformation; overload;
97 <    function GetDBInformation(Request: byte): IDBInformation; overload;
94 >    function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData;
95 >    function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData;
96 >    function GetDBInformation(Requests: array of byte): IDBInformation; overload; override;
97 >    function GetDBInformation(Request: byte): IDBInformation; overload; override;
98    end;
99  
100   implementation
101  
102   uses FB30Transaction, FB30Statement, FB30Array, FB30Blob, FBMessages,
103 <  FBOutputBlock, FB30Events;
103 >  FBOutputBlock, FB30Events, IBUtils;
104  
105   { TFB30Attachment }
106  
# Line 101 | Line 110 | begin
110      IBError(ibxeDatabaseClosed,[nil]);
111   end;
112  
113 < constructor TFB30Attachment.Create(DatabaseName: string; aDPB: IDPB;
113 > constructor TFB30Attachment.Create(DatabaseName: AnsiString; aDPB: IDPB;
114    RaiseExceptionOnConnectError: boolean);
115   begin
116    if aDPB = nil then
# Line 114 | Line 123 | begin
123    Connect;
124   end;
125  
126 < constructor TFB30Attachment.CreateDatabase(DatabaseName: string; aDPB: IDPB;
126 > constructor TFB30Attachment.CreateDatabase(DatabaseName: AnsiString; aDPB: IDPB;
127    RaiseExceptionOnError: boolean);
128   var Param: IDPBItem;
129 <    sql: string;
129 >    sql: AnsiString;
130      IsCreateDB: boolean;
131   begin
132    inherited Create(DatabaseName,aDPB,RaiseExceptionOnError);
124  FSQLDialect := 3;
133    IsCreateDB := true;
134    if aDPB <> nil then
135    begin
# Line 143 | Line 151 | begin
151      begin
152        Disconnect;
153        Connect;
154 <    end;
154 >    end
155 >    else
156 >      GetODSAndConnectionInfo;
157    end;
158   end;
159  
160 + constructor TFB30Attachment.CreateDatabase(sql: AnsiString; aSQLDialect: integer;
161 +  RaiseExceptionOnError: boolean);
162 + var IsCreateDB: boolean;
163 + begin
164 +  inherited Create('',nil,RaiseExceptionOnError);
165 +  FSQLDialect := aSQLDialect;
166 +  with Firebird30ClientAPI do
167 +  begin
168 +    FAttachmentIntf := UtilIntf.executeCreateDatabase(StatusIntf,Length(sql),
169 +                                       PAnsiChar(sql),aSQLDialect,@IsCreateDB);
170 +    if FRaiseExceptionOnConnectError then Check4DataBaseError;
171 +    if InErrorState then
172 +      FAttachmentIntf := nil;
173 +  end;
174 +  GetODSAndConnectionInfo;
175 +  ExtractConnectString(sql,FDatabaseName);
176 +  DPBFromCreateSQL(sql);
177 + end;
178 +
179   destructor TFB30Attachment.Destroy;
180   begin
181    inherited Destroy;
# Line 155 | Line 184 | begin
184   end;
185  
186   procedure TFB30Attachment.Connect;
158 var Param: IDPBItem;
187   begin
188    with Firebird30ClientAPI do
189    begin
# Line 166 | Line 194 | begin
194      if InErrorState then
195        FAttachmentIntf := nil
196      else
197 <    begin
170 <      Param := DPB.Find(isc_dpb_set_db_SQL_dialect);
171 <      if Param <> nil then
172 <        FSQLDialect := Param.AsByte;
173 <      Param :=  DPB.Find(isc_dpb_lc_ctype);
174 <      FHasDefaultCharSet :=  (Param <> nil) and
175 <                             CharSetName2CharSetID(Param.AsString,FCharSetID) and
176 <                             CharSetID2CodePage(FCharSetID,FCodePage) and
177 <                             (FCharSetID > 1);
178 <    end;
197 >      GetODSAndConnectionInfo;
198    end;
199   end;
200  
# Line 226 | Line 245 | begin
245    Result := TFB30Transaction.Create(self,TPB,DefaultCompletion);
246   end;
247  
248 < procedure TFB30Attachment.ExecImmediate(transaction: ITransaction; sql: string;
248 > procedure TFB30Attachment.ExecImmediate(transaction: ITransaction; sql: AnsiString;
249    aSQLDialect: integer);
250   begin
251    CheckHandle;
252    with Firebird30ClientAPI do
253    begin
254      FAttachmentIntf.execute(StatusIntf,(transaction as TFB30Transaction).TransactionIntf,
255 <                    Length(sql),PChar(sql),aSQLDialect,nil,nil,nil,nil);
255 >                    Length(sql),PAnsiChar(sql),aSQLDialect,nil,nil,nil,nil);
256      Check4DataBaseError;
257    end;
258   end;
259  
260 < function TFB30Attachment.Prepare(transaction: ITransaction; sql: string;
260 > function TFB30Attachment.Prepare(transaction: ITransaction; sql: AnsiString;
261    aSQLDialect: integer): IStatement;
262   begin
263    CheckHandle;
# Line 246 | Line 265 | begin
265   end;
266  
267   function TFB30Attachment.PrepareWithNamedParameters(transaction: ITransaction;
268 <  sql: string; aSQLDialect: integer; GenerateParamNames: boolean): IStatement;
268 >  sql: AnsiString; aSQLDialect: integer; GenerateParamNames: boolean): IStatement;
269   begin
270    CheckHandle;
271    Result := TFB30Statement.CreateWithParameterNames(self,transaction,sql,aSQLDialect,
# Line 260 | Line 279 | begin
279   end;
280  
281   function TFB30Attachment.CreateBlob(transaction: ITransaction; RelationName,
282 <  ColumnName: string; BPB: IBPB): IBlob;
282 >  ColumnName: AnsiString; BPB: IBPB): IBlob;
283   begin
284    CheckHandle;
285    Result := TFB30Blob.Create(self,transaction as TFB30Transaction,
# Line 282 | Line 301 | begin
301   end;
302  
303   function TFB30Attachment.OpenBlob(transaction: ITransaction; RelationName,
304 <  ColumnName: string; BlobID: TISC_QUAD; BPB: IBPB): IBlob;
304 >  ColumnName: AnsiString; BlobID: TISC_QUAD; BPB: IBPB): IBlob;
305   begin
306    CheckHandle;
307    Result := TFB30Blob.Create(self,transaction as TFB30transaction,
# Line 298 | Line 317 | begin
317   end;
318  
319   function TFB30Attachment.OpenArray(transaction: ITransaction; RelationName,
320 <  ColumnName: string; ArrayID: TISC_QUAD): IArray;
320 >  ColumnName: AnsiString; ArrayID: TISC_QUAD): IArray;
321   begin
322    CheckHandle;
323    Result := TFB30Array.Create(self,transaction as TFB30Transaction,
# Line 306 | Line 325 | begin
325   end;
326  
327   function TFB30Attachment.CreateArray(transaction: ITransaction; RelationName,
328 <  ColumnName: string): IArray;
328 >  ColumnName: AnsiString): IArray;
329   begin
330    CheckHandle;
331    Result := TFB30Array.Create(self,transaction as TFB30Transaction,
# Line 320 | Line 339 | begin
339    Result := TFB30Array.Create(self,transaction as TFB30Transaction,ArrayMetaData);
340   end;
341  
342 + function TFB30Attachment.CreateArrayMetaData(SQLType: cardinal; tableName: AnsiString; columnName: AnsiString;
343 +  Scale: integer; size: cardinal; aCharSetID: cardinal; dimensions: cardinal;
344 +  bounds: TArrayBounds): IArrayMetaData;
345 + begin
346 +  Result := TFB30ArrayMetaData.Create(self,SQLType,tableName,ColumnName,Scale,size,aCharSetID, dimensions,bounds);
347 + end;
348 +
349   function TFB30Attachment.GetBlobMetaData(Transaction: ITransaction; tableName,
350 <  columnName: string): IBlobMetaData;
350 >  columnName: AnsiString): IBlobMetaData;
351   begin
352    CheckHandle;
353    Result := TFB30BlobMetaData.Create(self,Transaction as TFB30Transaction,tableName,columnName);
354   end;
355  
356   function TFB30Attachment.GetArrayMetaData(Transaction: ITransaction; tableName,
357 <  columnName: string): IArrayMetaData;
357 >  columnName: AnsiString): IArrayMetaData;
358   begin
359    CheckHandle;
360    Result := TFB30ArrayMetaData.Create(self,Transaction as TFB30Transaction,tableName,columnName);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines