1 {*********************************************************}
3 { Zeos Database Objects }
4 { Native Plain Drivers for Firebird }
6 { Originally written by Sergey Seroukhov }
8 {*********************************************************}
10 {@********************************************************}
11 { Copyright (c) 1999-2012 Zeos Development Group }
13 { License Agreement: }
15 { This library is distributed in the hope that it will be }
16 { useful, but WITHOUT ANY WARRANTY; without even the }
17 { implied warranty of MERCHANTABILITY or FITNESS FOR }
18 { A PARTICULAR PURPOSE. See the GNU Lesser General }
19 { Public License for more details. }
21 { The source code of the ZEOS Libraries and packages are }
22 { distributed under the Library GNU General Public }
23 { License (see the file COPYING / COPYING.ZEOS) }
24 { with the following modification: }
25 { As a special exception, the copyright holders of this }
26 { library give you permission to link this library with }
27 { independent modules to produce an executable, }
28 { regardless of the license terms of these independent }
29 { modules, and to copy and distribute the resulting }
30 { executable under terms of your choice, provided that }
31 { you also meet, for each linked independent module, }
32 { the terms and conditions of the license of that module. }
33 { An independent module is a module which is not derived }
34 { from or based on this library. If you modify this }
35 { library, you may extend this exception to your version }
36 { of the library, but you are not obligated to do so. }
37 { If you do not wish to do so, delete this exception }
38 { statement from your version. }
41 { The project web site is located on: }
42 { http://zeos.firmos.at (FORUM) }
43 { http://sourceforge.net/p/zeoslib/tickets/ (BUGTRACKER)}
44 { svn://svn.code.sf.net/p/zeoslib/code-0/trunk (SVN) }
46 { http://www.sourceforge.net/projects/zeoslib. }
49 { Zeos Development Group. }
50 {********************************************************@}
52 unit ZPlainFirebirdDriver;
59 {$IFDEF INTERBASE_CRYPT}
60 {$DEFINE ENABLE_INTERBASE_CRYPT}
64 uses ZClasses, ZCompatibility, ZPlainDriver, ZPlainLoader, ZPlainFirebirdInterbaseConstants;
68 WINDOWSIB6_DLL_LOCATION = 'gds32.dll';
69 LINUXIB6_DLL_LOCATION = 'libgds'+SharedSuffix;
71 WINDOWS_DLL_LOCATION = 'gds32.dll';
72 LINUX_DLL_LOCATION = 'libgds32'+SharedSuffix;
73 LINUX_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix;
75 WINDOWS2_DLL_LOCATION = 'fbclient.dll';
76 WINDOWS2_DLL_LOCATION_EMBEDDED = 'fbclientd.dll';
78 LINUX2_DLL_LOCATION = 'libfbclient'+SharedSuffix;
79 LINUX2_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix;
80 LINUX2_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix;
82 WINDOWS15_DLL_LOCATION = 'fbclient15.dll';
83 WINDOWS15_DLL_LOCATION_EMBEDDED = 'fbclientd15.dll';
84 LINUX15_DLL_LOCATION = 'libfbclient'+SharedSuffix+'.15';
85 LINUX15_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix+'.15';
86 LINUX15_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix+'.15';
88 WINDOWS20_DLL_LOCATION = 'fbclient20.dll';
89 WINDOWS20_DLL_LOCATION_EMBEDDED = 'fbclientd20.dll';
90 LINUX2_DLL_LOCATION2 = 'libfbclient'+SharedSuffix+'.2';
91 LINUX20_DLL_LOCATION = 'libfbclient'+SharedSuffix+'.20';
92 LINUX20_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix+'.20';
93 LINUX20_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix+'.20';
95 WINDOWS21_DLL_LOCATION = 'fbclient21.dll';
96 WINDOWS21_DLL_LOCATION_EMBEDDED = 'fbclientd21.dll';
97 LINUX21_DLL_LOCATION = 'libfbclient'+SharedSuffix+'.21';
98 LINUX21_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix+'.21';
99 LINUX21_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix+'.21';
101 WINDOWS25_DLL_LOCATION = 'fbclient25.dll';
102 WINDOWS25_DLL_LOCATION_EMBEDDED = 'fbclientd25.dll';
103 LINUX25_DLL_LOCATION = 'libfbclient'+SharedSuffix+'.25';
104 LINUX25_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix+'.25';
105 LINUX25_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix+'.25';
109 {** Represents a generic interface to Interbase native API. }
110 IZInterbasePlainDriver = interface (IZPlainDriver)
111 ['{AE2C4379-4E47-4752-BC01-D405ACC337F5}']
113 function GetFirebirdAPI: TZFirebird_API;
115 function ZPlainString(const AStr: String; ConSettings: PZConSettings; const ToCP: Word): RawByteString; overload;
116 function ZPlainString(const AStr: WideString; ConSettings: PZConSettings; const ToCP: Word): RawByteString; overload;
118 function isc_attach_database (status_vector: PISC_STATUS;
119 db_name_length: Short; db_name: PAnsiChar; db_handle: PISC_DB_HANDLE;
120 parm_buffer_length: Short; parm_buffer: PAnsiChar): ISC_STATUS;
121 function isc_detach_database(status_vector: PISC_STATUS;
122 db_handle: PISC_DB_HANDLE): ISC_STATUS;
123 function isc_drop_database(status_vector: PISC_STATUS;
124 db_handle: PISC_DB_HANDLE): ISC_STATUS;
125 function isc_database_info(status_vector: PISC_STATUS;
126 db_handle: PISC_DB_HANDLE; item_list_buffer_length: Short;
127 item_list_buffer: PByte; result_buffer_length: Short;
128 result_buffer: PAnsiChar): ISC_STATUS;
129 function isc_array_gen_sdl(status_vector: PISC_STATUS;
130 isc_array_desc: PISC_ARRAY_DESC; isc_arg3: PShort;
131 isc_arg4: PAnsiChar; isc_arg5: PShort): ISC_STATUS;
132 function isc_array_get_slice(status_vector: PISC_STATUS;
133 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
134 array_id: PISC_QUAD; descriptor: PISC_ARRAY_DESC;
135 dest_array: PVoid; slice_length: ISC_LONG): ISC_STATUS;
136 function isc_array_lookup_bounds(status_vector: PISC_STATUS;
137 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
138 table_name, column_name: PAnsiChar;
139 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
140 function isc_array_lookup_desc(status_vector: PISC_STATUS;
141 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
142 table_name, column_name: PAnsiChar;
143 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
144 function isc_array_set_desc(status_vector: PISC_STATUS;
145 table_name: PAnsiChar; column_name: PAnsiChar;
146 sql_dtype, sql_length, sql_dimensions: PShort;
147 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
148 function isc_array_put_slice(status_vector: PISC_STATUS;
149 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
150 array_id: PISC_QUAD; descriptor: PISC_ARRAY_DESC;
151 source_array: PVoid; slice_length: PISC_LONG): ISC_STATUS;
152 function isc_free(isc_arg1: PAnsiChar): ISC_LONG;
153 function isc_sqlcode(status_vector: PISC_STATUS): ISC_LONG;
154 procedure isc_sql_interprete(sqlcode: Short; buffer: PAnsiChar; buffer_length: Short);
155 function isc_interprete(buffer: PAnsiChar; status_vector: PPISC_STATUS): ISC_STATUS;
156 function isc_start_transaction(status_vector: PISC_STATUS;
157 tran_handle: PISC_TR_HANDLE; db_handle_count: Short;
158 db_handle: PISC_DB_HANDLE; tpb_length: Word; tpb_address: PAnsiChar): ISC_STATUS;
159 function isc_start_multiple(status_vector: PISC_STATUS;
160 tran_handle: PISC_TR_HANDLE; db_handle_count: Short;
161 teb_vector_address: PISC_TEB): ISC_STATUS;
162 function isc_rollback_transaction(status_vector: PISC_STATUS;
163 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
164 function isc_rollback_retaining(status_vector: PISC_STATUS;
165 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
166 function isc_commit_retaining(status_vector: PISC_STATUS;
167 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
168 function isc_commit_transaction(status_vector: PISC_STATUS;
169 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
170 function isc_dsql_allocate_statement(status_vector: PISC_STATUS;
171 db_handle: PISC_DB_HANDLE; stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
172 function isc_dsql_alloc_statement2(status_vector: PISC_STATUS;
173 db_handle: PISC_DB_HANDLE; stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
174 function isc_dsql_describe(status_vector: PISC_STATUS;
175 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
176 function isc_dsql_describe_bind(status_vector: PISC_STATUS;
177 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
178 function isc_dsql_execute(status_vector: PISC_STATUS;
179 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
180 xsqlda: PXSQLDA): ISC_STATUS;
181 function isc_dsql_execute2(status_vector: PISC_STATUS;
182 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
183 in_xsqlda, out_xsqlda: PXSQLDA): ISC_STATUS;
184 function isc_dsql_execute_immediate(status_vector: PISC_STATUS;
185 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE; length: Word;
186 statement: PAnsiChar; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
187 function isc_dsql_fetch(status_vector: PISC_STATUS;
188 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
189 function isc_dsql_free_statement(status_vector: PISC_STATUS;
190 stmt_handle: PISC_STMT_HANDLE; options: Word): ISC_STATUS;
191 function isc_dsql_prepare(status_vector: PISC_STATUS;
192 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE;
193 length: Word; statement: PAnsiChar; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
194 function isc_dsql_set_cursor_name(status_vector: PISC_STATUS;
195 stmt_handle: PISC_STMT_HANDLE; cursor_name: PAnsiChar; _type: Word): ISC_STATUS;
196 function isc_dsql_sql_info(status_vector: PISC_STATUS;
197 stmt_handle: PISC_STMT_HANDLE; item_length: Short; items: PAnsiChar;
198 buffer_length: Short; buffer: PAnsiChar): ISC_STATUS;
199 function isc_open_blob2(status_vector: PISC_STATUS;
200 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
201 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
202 bpb_buffer: PAnsiChar): ISC_STATUS;
203 function isc_create_blob2(status_vector: PISC_STATUS;
204 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
205 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
206 bpb_address: PAnsiChar): ISC_STATUS;
207 function isc_blob_info(status_vector: PISC_STATUS;
208 blob_handle: PISC_BLOB_HANDLE; item_list_buffer_length: Short;
209 item_list_buffer: PAnsiChar; result_buffer_length: Short; result_buffer: PAnsiChar): ISC_STATUS;
210 function isc_close_blob(status_vector: PISC_STATUS;
211 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
212 function isc_cancel_blob(status_vector: PISC_STATUS;
213 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
214 function isc_get_segment(status_vector: PISC_STATUS;
215 blob_handle: PISC_BLOB_HANDLE; actual_seg_length: PWord;
216 seg_buffer_length: Word; seg_buffer: PAnsiChar): ISC_STATUS;
217 function isc_put_segment(status_vector: PISC_STATUS;
218 blob_handle: PISC_BLOB_HANDLE; seg_buffer_len: Word; seg_buffer: PAnsiChar): ISC_STATUS;
219 function isc_event_block(event_buffer: PPAnsiChar; result_buffer: PPAnsiChar;
220 id_count: Word; event_list: array of PAnsiChar): ISC_LONG;
221 procedure isc_event_counts(status_vector: PISC_STATUS;
222 buffer_length: Short; event_buffer: PAnsiChar; result_buffer: PAnsiChar);
223 function isc_cancel_events(status_vector: PISC_STATUS;
224 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG): ISC_STATUS;
225 function isc_que_events(status_vector: PISC_STATUS;
226 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG; length: Short;
227 event_buffer: PAnsiChar; event_function: TISC_CALLBACK;
228 event_function_arg: PVoid): ISC_STATUS;
229 procedure isc_decode_date(ib_date: PISC_QUAD; tm_date: PCTimeStructure);
230 procedure isc_encode_date(tm_date: PCTimeStructure; ib_date: PISC_QUAD);
231 function isc_vax_integer(buffer: PAnsiChar; length: Short): ISC_LONG;
232 function isc_portable_integer(ptr: pbyte; length: Short): ISC_INT64;
234 procedure isc_decode_sql_date(ib_date: PISC_DATE; tm_date: PCTimeStructure);
235 procedure isc_decode_sql_time(ib_time: PISC_TIME; tm_date: PCTimeStructure);
236 procedure isc_decode_timestamp(ib_timestamp: PISC_TIMESTAMP;
237 tm_date: PCTimeStructure);
238 procedure isc_encode_sql_date(tm_date: PCTimeStructure;
240 procedure isc_encode_sql_time(tm_date: PCTimeStructure;
242 procedure isc_encode_timestamp(tm_date: PCTimeStructure;
243 ib_timestamp: PISC_TIMESTAMP);
246 {** Implements a base driver for Firebird}
248 { TZFirebirdBaseDriver }
250 TZFirebirdBaseDriver = class (TZAbstractPlainDriver, IZPlainDriver,
251 IZInterbasePlainDriver)
252 FIREBIRD_API : TZFIREBIRD_API;
254 FPreLoader : TZNativeLibraryLoader;
255 procedure LoadCodePages; override;
256 function GetUnicodeCodePageName: String; override;
257 {$IFDEF ENABLE_INTERBASE_CRYPT}
258 procedure Initialize; virtual;
260 procedure LoadApi; override;
263 {$IFDEF ENABLE_INTERBASE_CRYPT}
264 destructor Destroy; override;
267 function GetFirebirdAPI: TZFirebird_API;
268 function isc_attach_database (status_vector: PISC_STATUS;
269 db_name_length: Short; db_name: PAnsiChar; db_handle: PISC_DB_HANDLE;
270 parm_buffer_length: Short; parm_buffer: PAnsiChar): ISC_STATUS;
271 function isc_detach_database(status_vector: PISC_STATUS;
272 db_handle: PISC_DB_HANDLE): ISC_STATUS;
273 function isc_drop_database(status_vector: PISC_STATUS;
274 db_handle: PISC_DB_HANDLE): ISC_STATUS;
275 function isc_database_info(status_vector: PISC_STATUS;
276 db_handle: PISC_DB_HANDLE; item_list_buffer_length: Short;
277 item_list_buffer: PByte; result_buffer_length: Short;
278 result_buffer: PAnsiChar): ISC_STATUS;
279 function isc_transaction_info(status_vector: PISC_STATUS;
280 tr_handle: PISC_TR_HANDLE; item_list_buffer_length: Short;
281 item_list_buffer: PAnsiChar; result_buffer_length: Short;
282 result_buffer: PAnsiChar): ISC_STATUS;
283 function isc_array_gen_sdl(status_vector: PISC_STATUS;
284 isc_array_desc: PISC_ARRAY_DESC; isc_arg3: PShort;
285 isc_arg4: PAnsiChar; isc_arg5: PShort): ISC_STATUS;
286 function isc_array_get_slice(status_vector: PISC_STATUS;
287 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
288 array_id: PISC_QUAD; descriptor: PISC_ARRAY_DESC;
289 dest_array: PVoid; slice_length: ISC_LONG): ISC_STATUS;
290 function isc_array_lookup_bounds(status_vector: PISC_STATUS;
291 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
292 table_name, column_name: PAnsiChar;
293 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
294 function isc_array_lookup_desc(status_vector: PISC_STATUS;
295 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
296 table_name, column_name: PAnsiChar;
297 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
298 function isc_array_set_desc(status_vector: PISC_STATUS;
299 table_name: PAnsiChar; column_name: PAnsiChar;
300 sql_dtype, sql_length, sql_dimensions: PShort;
301 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
302 function isc_array_put_slice(status_vector: PISC_STATUS;
303 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE;
304 array_id: PISC_QUAD; descriptor: PISC_ARRAY_DESC;
305 source_array: PVoid; slice_length: PISC_LONG): ISC_STATUS;
306 function isc_free(isc_arg1: PAnsiChar): ISC_LONG;
307 function isc_sqlcode(status_vector: PISC_STATUS): ISC_LONG;
308 procedure isc_sql_interprete(sqlcode: Short; buffer: PAnsiChar;
309 buffer_length: Short);
310 function isc_interprete(buffer: PAnsiChar; status_vector: PPISC_STATUS): ISC_STATUS; virtual;
311 function isc_start_transaction(status_vector: PISC_STATUS;
312 tran_handle: PISC_TR_HANDLE; db_handle_count: Short;
313 db_handle: PISC_DB_HANDLE; tpb_length: Word; tpb_address: PAnsiChar): ISC_STATUS;
314 function isc_start_multiple(status_vector: PISC_STATUS;
315 tran_handle: PISC_TR_HANDLE; db_handle_count: Short;
316 teb_vector_address: PISC_TEB): ISC_STATUS;
317 function isc_rollback_transaction(status_vector: PISC_STATUS;
318 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
319 function isc_rollback_retaining(status_vector: PISC_STATUS;
320 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
321 function isc_commit_retaining(status_vector: PISC_STATUS;
322 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
323 function isc_commit_transaction(status_vector: PISC_STATUS;
324 tran_handle: PISC_TR_HANDLE): ISC_STATUS;
325 function isc_dsql_allocate_statement(status_vector: PISC_STATUS;
326 db_handle: PISC_DB_HANDLE; stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
327 function isc_dsql_alloc_statement2(status_vector: PISC_STATUS;
328 db_handle: PISC_DB_HANDLE; stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
329 function isc_dsql_describe(status_vector: PISC_STATUS;
330 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
331 function isc_dsql_describe_bind(status_vector: PISC_STATUS;
332 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
333 function isc_dsql_execute(status_vector: PISC_STATUS;
334 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
335 xsqlda: PXSQLDA): ISC_STATUS;
336 function isc_dsql_execute2(status_vector: PISC_STATUS;
337 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
338 in_xsqlda, out_xsqlda: PXSQLDA): ISC_STATUS;
339 function isc_dsql_execute_immediate(status_vector: PISC_STATUS;
340 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE; length: Word;
341 statement: PAnsiChar; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
342 function isc_dsql_fetch(status_vector: PISC_STATUS;
343 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
344 function isc_dsql_free_statement(status_vector: PISC_STATUS;
345 stmt_handle: PISC_STMT_HANDLE; options: Word): ISC_STATUS;
346 function isc_dsql_prepare(status_vector: PISC_STATUS;
347 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE;
348 length: Word; statement: PAnsiChar; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
349 function isc_dsql_set_cursor_name(status_vector: PISC_STATUS;
350 stmt_handle: PISC_STMT_HANDLE; cursor_name: PAnsiChar; _type: Word): ISC_STATUS;
351 function isc_dsql_sql_info(status_vector: PISC_STATUS;
352 stmt_handle: PISC_STMT_HANDLE; item_length: Short; items: PAnsiChar;
353 buffer_length: Short; buffer: PAnsiChar): ISC_STATUS;
354 function isc_open_blob2(status_vector: PISC_STATUS;
355 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
356 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
357 bpb_buffer: PAnsiChar): ISC_STATUS;
358 function isc_create_blob2(status_vector: PISC_STATUS;
359 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
360 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
361 bpb_address: PAnsiChar): ISC_STATUS;
362 function isc_blob_info(status_vector: PISC_STATUS;
363 blob_handle: PISC_BLOB_HANDLE; item_list_buffer_length: Short;
364 item_list_buffer: PAnsiChar; result_buffer_length: Short; result_buffer: PAnsiChar): ISC_STATUS;
365 function isc_close_blob(status_vector: PISC_STATUS;
366 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
367 function isc_cancel_blob(status_vector: PISC_STATUS;
368 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
369 function isc_get_segment(status_vector: PISC_STATUS;
370 blob_handle: PISC_BLOB_HANDLE; actual_seg_length: PWord;
371 seg_buffer_length: Word; seg_buffer: PAnsiChar): ISC_STATUS;
372 function isc_put_segment(status_vector: PISC_STATUS;
373 blob_handle: PISC_BLOB_HANDLE; seg_buffer_len: Word; seg_buffer: PAnsiChar): ISC_STATUS;
374 function isc_event_block(event_buffer: PPAnsiChar; result_buffer: PPAnsiChar;
375 id_count: Word; event_list: array of PAnsiChar): ISC_LONG;
376 procedure isc_event_counts(status_vector: PISC_STATUS;
377 buffer_length: Short; event_buffer: PAnsiChar; result_buffer: PAnsiChar);
378 function isc_cancel_events(status_vector: PISC_STATUS;
379 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG): ISC_STATUS;
380 function isc_que_events(status_vector: PISC_STATUS;
381 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG; length: Short;
382 event_buffer: PAnsiChar; event_function: TISC_CALLBACK;
383 event_function_arg: PVoid): ISC_STATUS;
384 procedure isc_decode_date(ib_date: PISC_QUAD; tm_date: PCTimeStructure);
385 procedure isc_encode_date(tm_date: PCTimeStructure; ib_date: PISC_QUAD);
386 procedure isc_decode_sql_date(ib_date: PISC_DATE; tm_date: PCTimeStructure);
387 procedure isc_decode_sql_time(ib_time: PISC_TIME; tm_date: PCTimeStructure);
388 procedure isc_decode_timestamp(ib_timestamp: PISC_TIMESTAMP;
389 tm_date: PCTimeStructure);
390 procedure isc_encode_sql_date(tm_date: PCTimeStructure;
392 procedure isc_encode_sql_time(tm_date: PCTimeStructure;
394 procedure isc_encode_timestamp(tm_date: PCTimeStructure;
395 ib_timestamp: PISC_TIMESTAMP);
396 function isc_vax_integer(buffer: PAnsiChar; length: Short): ISC_LONG;
397 function isc_portable_integer(ptr: pbyte; length: Short): ISC_INT64;
400 {** Implements a native driver for Interbase6}
401 TZInterbase6PlainDriver = class (TZFirebirdBaseDriver)
403 function Clone: IZPlainDriver; override;
407 function GetProtocol: string; override;
408 function GetDescription: string; override;
411 {** Implements a native driver for Firebird 1.0}
412 TZFirebird10PlainDriver = class (TZFirebirdBaseDriver)
414 function Clone: IZPlainDriver; override;
418 function GetProtocol: string; override;
419 function GetDescription: string; override;
422 {** Implements a native driver for Firebird 1.5}
423 TZFirebird15PlainDriver = class (TZFirebirdBaseDriver)
425 function Clone: IZPlainDriver; override;
426 procedure LoadCodePages; override;
430 function GetProtocol: string; override;
431 function GetDescription: string; override;
434 TZFirebirdD15PlainDriver = class (TZFirebird15PlainDriver)
436 function Clone: IZPlainDriver; override;
440 function GetProtocol: string; override;
441 function GetDescription: string; override;
445 {** Implements a native driver for Firebird 2.0}
446 TZFirebird20PlainDriver = class (TZFirebirdBaseDriver)
448 function Clone: IZPlainDriver; override;
449 function GetUnicodeCodePageName: String; override;
450 procedure LoadCodePages; override;
454 function GetProtocol: string; override;
455 function GetDescription: string; override;
458 TZFirebirdD20PlainDriver = class (TZFirebird20PlainDriver)
460 function Clone: IZPlainDriver; override;
464 function GetProtocol: string; override;
465 function GetDescription: string; override;
468 {** Represents class to Interbase 6+ native API. }
470 { TZFirebird21PlainDriver }
472 TZFirebird21PlainDriver = class (TZFirebirdBaseDriver)
474 function Clone: IZPlainDriver; override;
476 function GetUnicodeCodePageName: String; override;
477 procedure LoadCodePages; override;
478 procedure LoadApi; override;
482 function GetProtocol: string; override;
483 function GetDescription: string; override;
485 function isc_interprete(buffer: PAnsiChar; status_vector: PPISC_STATUS): ISC_STATUS; override;
488 TZFirebirdD21PlainDriver = class (TZFirebird21PlainDriver)
490 function Clone: IZPlainDriver; override;
494 function GetProtocol: string; override;
495 function GetDescription: string; override;
498 { TZFirebird25PlainDriver }
500 TZFirebird25PlainDriver = class (TZFirebirdBaseDriver)
502 function Clone: IZPlainDriver; override;
503 function GetUnicodeCodePageName: String; override;
504 procedure LoadCodePages; override;
505 procedure LoadApi; override;
509 function GetProtocol: string; override;
510 function GetDescription: string; override;
512 function isc_interprete(buffer: PAnsiChar; status_vector: PPISC_STATUS): ISC_STATUS; override;
515 { TZFirebirdD25PlainDriver }
517 TZFirebirdD25PlainDriver = class (TZFirebird25PlainDriver)
519 function Clone: IZPlainDriver; override;
523 function GetProtocol: string; override;
524 function GetDescription: string; override;
528 function XSQLDA_LENGTH(Value: LongInt): LongInt;
532 uses SysUtils, ZEncoding;
534 function XSQLDA_LENGTH(Value: LongInt): LongInt;
536 Result := SizeOf(TXSQLDA) + ((Value - 1) * SizeOf(TXSQLVAR));
539 procedure AddFireBird15CodePages(PlainDriver: TZAbstractPlainDriver);
541 PlainDriver.AddCodePage('DOS737', CS_DOS737, ceAnsi, zCP_DOS737); {Greek}
542 PlainDriver.AddCodePage('DOS775', CS_DOS775, ceAnsi, zCP_DOS775); {Baltic}
543 PlainDriver.AddCodePage('DOS858', CS_DOS858, ceAnsi, zCP_DOS858); {Latin I + Euro symbol}
544 PlainDriver.AddCodePage('DOS862', CS_DOS862, ceAnsi, zCP_DOS862); {Hebrew}
545 PlainDriver.AddCodePage('DOS864', CS_DOS864, ceAnsi, zCP_DOS864); {Arabic}
546 PlainDriver.AddCodePage('DOS866', CS_DOS866, ceAnsi, zCP_DOS866); {Russian}
547 PlainDriver.AddCodePage('DOS869', CS_DOS869, ceAnsi, zCP_DOS869); {Modern Greek}
548 PlainDriver.AddCodePage('ISO8859_2', CS_ISO8859_2, ceAnsi, zCP_L2_ISO_8859_2); {Latin 2 — Latin3 — Southern European (Maltese, Esperanto)}
549 PlainDriver.AddCodePage('ISO8859_3', CS_ISO8859_3, ceAnsi, zCP_L3_ISO_8859_3); {Latin 1}
550 PlainDriver.AddCodePage('ISO8859_4', CS_ISO8859_4, ceAnsi, zCP_L4_ISO_8859_4); {Latin 4 — Northern European (Estonian, Latvian, Lithuanian, Greenlandic, Lappish)}
551 PlainDriver.AddCodePage('ISO8859_5', CS_ISO8859_5, ceAnsi, zCP_L5_ISO_8859_5); {Cyrillic (Russian)}
552 PlainDriver.AddCodePage('ISO8859_6', CS_ISO8859_6, ceAnsi, zCP_L6_ISO_8859_6); {Arabic}
553 PlainDriver.AddCodePage('ISO8859_7', CS_ISO8859_7, ceAnsi, zCP_L7_ISO_8859_7); {Greek}
554 PlainDriver.AddCodePage('ISO8859_8', CS_ISO8859_8, ceAnsi, zCP_L8_ISO_8859_8); {Hebrew}
555 PlainDriver.AddCodePage('ISO8859_9', CS_ISO8859_9, ceAnsi, zCP_L5_ISO_8859_9); {Latin 5}
556 PlainDriver.AddCodePage('ISO8859_13', CS_ISO8859_13, ceAnsi, zCP_L7_ISO_8859_13); {Latin 7 — Baltic Rim}
557 PlainDriver.AddCodePage('WIN1255', CS_WIN1255, ceAnsi, zCP_WIN1255); {ANSI Hebrew}
558 PlainDriver.AddCodePage('WIN1256', CS_WIN1256, ceAnsi, cCP_WIN1256); {ANSI Arabic}
559 PlainDriver.AddCodePage('WIN1257', CS_WIN1257, ceAnsi, zCP_WIN1257); {ANSI Baltic}
562 procedure AddFireBird2CodePages(PlainDriver: TZAbstractPlainDriver);
564 PlainDriver.AddCodePage('WIN1258', CS_WIN1258, ceAnsi, zCP_WIN1258); {Vietnamese}
565 PlainDriver.AddCodePage('KOI8R', CS_KOI8R, ceAnsi, zCP_KOI8R); {Russian}
566 PlainDriver.AddCodePage('KOI8U', CS_KOI8U, ceAnsi, zCP_KOI8U); {Ukrainian}
567 PlainDriver.AddCodePage('UTF8', CS_UTF8, ceUTF8, zCP_UTF8, '', 4); {All}
570 procedure AddFireBird21CodePages(PlainDriver: TZAbstractPlainDriver);
572 PlainDriver.AddCodePage('CP943C', CS_CP943C, ceAnsi, 943, '', 2); {Japanese}
573 PlainDriver.AddCodePage('GBK', CS_GBK, ceAnsi, zCP_GB2312, '', 2); {Chinese}
574 PlainDriver.AddCodePage('TIS620', CS_TIS620, ceAnsi, zCP_IBM_Thai); {Thai}
577 { IZFirebirdPlainDriver }
579 function TZFirebirdBaseDriver.GetUnicodeCodePageName: String;
581 Result := 'UNICODE_FSS';
584 procedure TZFirebirdBaseDriver.LoadCodePages;
586 Self.AddCodePage('ASCII', CS_ASCII, ceAnsi, zCP_WIN1252); {English}
587 Self.AddCodePage('BIG_5', CS_BIG_5, ceAnsi, zCP_Big5); {Chinese, Vietnamese, Korean}
588 Self.AddCodePage('CYRL', CS_CYRL, ceAnsi, zCP_WIN1251, '', 2); {Russian}
589 Self.AddCodePage('DOS437', CS_DOS437, ceAnsi, zCP_DOS437); {English (USA)}
590 Self.AddCodePage('DOS850', CS_DOS850, ceAnsi, zCP_DOS850); {Latin I (no Euro symbol)}
591 Self.AddCodePage('DOS852', CS_DOS852, ceAnsi, zCP_DOS852); {Latin II}
592 Self.AddCodePage('DOS857', CS_DOS857, ceAnsi, zCP_DOS857); {Turkish}
593 Self.AddCodePage('DOS860', CS_DOS860, ceAnsi, zCP_DOS860); {Portuguese}
594 Self.AddCodePage('DOS861', CS_DOS861, ceAnsi, zCP_DOS861); {Icelandic}
595 Self.AddCodePage('DOS863', CS_DOS863, ceAnsi, zCP_DOS863); {French (Canada)}
596 Self.AddCodePage('DOS865', CS_DOS865, ceAnsi, zCP_DOS865); {Nordic}
597 Self.AddCodePage('EUCJ_0208', CS_EUCJ_0208, ceAnsi, zCP_EUC_JP, '', 2); {EUC Japanese}
598 Self.AddCodePage('GB_2312', CS_GB_2312, ceAnsi, zCP_GB2312, '', 2); {Simplified Chinese (Hong Kong, PRC)}
599 Self.AddCodePage('ISO8859_1', CS_ISO8859_1, ceAnsi, zCP_L1_ISO_8859_1); {Latin 1}
600 Self.AddCodePage('KSC_5601', CS_KSC_5601, ceAnsi, zCP_EUCKR, '', 2); {Korean (Unified Hangeul)}
601 Self.AddCodePage('NEXT', CS_NEXT); {NeXTSTEP encoding}
602 Self.AddCodePage('NONE', CS_NONE, ceAnsi, ZDefaultSystemCodePage, '', 1, False); {Codepage-neutral. Uppercasing limited to ASCII codes 97-122}
603 Self.AddCodePage('OCTETS', CS_BINARY); {Binary character}
604 Self.AddCodePage('SJIS_0208', CS_SJIS_0208, ceAnsi, zCP_EUC_JP, '', 2); {Japanese}
605 Self.AddCodePage('UNICODE_FSS', CS_UNICODE_FSS, ceUTF8, zCP_UTF8, '', 3); {UNICODE}
606 Self.AddCodePage('WIN1250', CS_WIN1250, ceAnsi, zCP_WIN1250); {ANSI — Central European}
607 Self.AddCodePage('WIN1251', CS_WIN1251, ceAnsi, zCP_WIN1251); {ANSI — Cyrillic}
608 Self.AddCodePage('WIN1252', CS_WIN1252, ceAnsi, zCP_WIN1252); {ANSI — Latin I}
609 Self.AddCodePage('WIN1253', CS_WIN1253, ceAnsi, zCP_WIN1253); {ANSI Greek}
610 Self.AddCodePage('WIN1254', CS_WIN1254, ceAnsi, zCP_WIN1254); {ANSI Turkish}
613 {$IFDEF ENABLE_INTERBASE_CRYPT}
614 procedure TZFirebirdBaseDriver.Initialize;
616 If Assigned(FPreLoader) and not FPreLoader.Loaded then
617 FPreLoader.LoadNativeLibrary;
618 inherited Initialize;
622 procedure TZFirebirdBaseDriver.LoadApi;
627 @FIREBIRD_API.isc_sqlcode := GetAddress('isc_sqlcode');
628 @FIREBIRD_API.isc_sql_interprete := GetAddress('isc_sql_interprete');
629 @FIREBIRD_API.isc_interprete := GetAddress('isc_interprete');
630 @FIREBIRD_API.isc_vax_integer := GetAddress('isc_vax_integer');
631 @FIREBIRD_API.isc_portable_integer:= GetAddress('isc_portable_integer');
633 @FIREBIRD_API.isc_array_gen_sdl := GetAddress( 'isc_array_gen_sdl');
634 @FIREBIRD_API.isc_array_get_slice := GetAddress( 'isc_array_get_slice');
635 @FIREBIRD_API.isc_array_lookup_bounds := GetAddress( 'isc_array_lookup_bounds');
636 @FIREBIRD_API.isc_array_lookup_desc := GetAddress( 'isc_array_lookup_desc');
637 @FIREBIRD_API.isc_array_set_desc := GetAddress( 'isc_array_set_desc');
638 @FIREBIRD_API.isc_array_put_slice := GetAddress( 'isc_array_put_slice');
640 @FIREBIRD_API.isc_blob_info := GetAddress('isc_blob_info');
641 @FIREBIRD_API.isc_open_blob2 := GetAddress('isc_open_blob2');
642 @FIREBIRD_API.isc_close_blob := GetAddress('isc_close_blob');
643 @FIREBIRD_API.isc_cancel_blob := GetAddress('isc_cancel_blob');
644 @FIREBIRD_API.isc_get_segment := GetAddress('isc_get_segment');
645 @FIREBIRD_API.isc_put_segment := GetAddress('isc_put_segment');
646 @FIREBIRD_API.isc_create_blob2 := GetAddress('isc_create_blob2');
647 @FIREBIRD_API.isc_decode_date := GetAddress('isc_decode_date');
648 @FIREBIRD_API.isc_encode_date := GetAddress('isc_encode_date');
649 @FIREBIRD_API.isc_dsql_free_statement := GetAddress('isc_dsql_free_statement');
650 @FIREBIRD_API.isc_dsql_execute2 := GetAddress('isc_dsql_execute2');
651 @FIREBIRD_API.isc_dsql_execute := GetAddress('isc_dsql_execute');
652 @FIREBIRD_API.isc_dsql_set_cursor_name := GetAddress('isc_dsql_set_cursor_name');
653 @FIREBIRD_API.isc_dsql_fetch := GetAddress('isc_dsql_fetch');
654 @FIREBIRD_API.isc_dsql_sql_info := GetAddress('isc_dsql_sql_info');
655 @FIREBIRD_API.isc_dsql_allocate_statement := GetAddress('isc_dsql_allocate_statement');
656 @FIREBIRD_API.isc_dsql_alloc_statement2 := GetAddress('isc_dsql_alloc_statement2');
657 @FIREBIRD_API.isc_dsql_prepare := GetAddress('isc_dsql_prepare');
658 @FIREBIRD_API.isc_dsql_describe_bind := GetAddress('isc_dsql_describe_bind');
659 @FIREBIRD_API.isc_dsql_describe := GetAddress('isc_dsql_describe');
660 @FIREBIRD_API.isc_dsql_execute_immediate := GetAddress('isc_dsql_execute_immediate');
661 @FIREBIRD_API.isc_drop_database := GetAddress('isc_drop_database');
662 @FIREBIRD_API.isc_detach_database := GetAddress('isc_detach_database');
663 @FIREBIRD_API.isc_attach_database := GetAddress('isc_attach_database');
664 @FIREBIRD_API.isc_database_info := GetAddress('isc_database_info');
665 @FIREBIRD_API.isc_transaction_info := GetAddress('isc_transaction_info');
666 @FIREBIRD_API.isc_start_multiple := GetAddress('isc_start_multiple');
667 @FIREBIRD_API.isc_start_transaction := GetAddress('isc_start_transaction');
668 @FIREBIRD_API.isc_commit_transaction := GetAddress('isc_commit_transaction');
670 @FIREBIRD_API.isc_commit_retaining := GetAddress('isc_commit_retaining');
671 @FIREBIRD_API.isc_rollback_transaction := GetAddress('isc_rollback_transaction');
672 @FIREBIRD_API.isc_cancel_events := GetAddress('isc_cancel_events');
673 @FIREBIRD_API.isc_que_events := GetAddress('isc_que_events');
674 @FIREBIRD_API.isc_event_counts := GetAddress('isc_event_counts');
675 @FIREBIRD_API.isc_event_block := GetAddress('isc_event_block');
676 @FIREBIRD_API.isc_free := GetAddress('isc_free');
678 @FIREBIRD_API.isc_rollback_retaining := GetAddress( 'isc_rollback_retaining');
679 @FIREBIRD_API.isc_decode_sql_date := GetAddress('isc_decode_sql_date');
680 @FIREBIRD_API.isc_decode_sql_time := GetAddress('isc_decode_sql_time');
681 @FIREBIRD_API.isc_decode_timestamp := GetAddress('isc_decode_timestamp');
682 @FIREBIRD_API.isc_encode_sql_date := GetAddress('isc_encode_sql_date');
683 @FIREBIRD_API.isc_encode_sql_time := GetAddress('isc_encode_sql_time');
684 @FIREBIRD_API.isc_encode_timestamp := GetAddress('isc_encode_timestamp');
688 constructor TZFirebirdBaseDriver.Create;
691 FLoader := TZNativeLibraryLoader.Create([]);
692 {$IFDEF ENABLE_INTERBASE_CRYPT}
693 FPreLoader := TZNativeLibraryLoader.Create([LINUX_IB_CRYPT_LOCATION]);
697 {$IFDEF ENABLE_INTERBASE_CRYPT}
698 destructor TZFirebirdBaseDriver.Destroy;
705 function TZFirebirdBaseDriver.GetFirebirdAPI: TZFirebird_API;
707 result := FIREBIRD_API;
710 function TZFirebirdBaseDriver.isc_array_gen_sdl(status_vector: PISC_STATUS;
711 isc_array_desc: PISC_ARRAY_DESC; isc_arg3: PShort;
712 isc_arg4: PAnsiChar; isc_arg5: PShort): ISC_STATUS;
714 Result := FIREBIRD_API.isc_array_gen_sdl(status_vector, isc_array_desc,
715 isc_arg3, isc_arg4, isc_arg5);
718 function TZFirebirdBaseDriver.isc_array_get_slice(status_vector: PISC_STATUS;
719 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE; array_id: PISC_QUAD;
720 descriptor: PISC_ARRAY_DESC; dest_array: PVoid;
721 slice_length: ISC_LONG): ISC_STATUS;
723 Result := FIREBIRD_API.isc_array_get_slice(status_vector, db_handle,
724 trans_handle, array_id, descriptor, dest_array, slice_length);
727 function TZFirebirdBaseDriver.isc_array_lookup_bounds(
728 status_vector: PISC_STATUS; db_handle: PISC_DB_HANDLE;
729 trans_handle: PISC_TR_HANDLE; table_name, column_name: PAnsiChar;
730 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
732 Result := FIREBIRD_API.isc_array_lookup_bounds(status_vector, db_handle,
733 trans_handle, table_name, column_name, descriptor);
736 function TZFirebirdBaseDriver.isc_array_lookup_desc(
737 status_vector: PISC_STATUS; db_handle: PISC_DB_HANDLE;
738 trans_handle: PISC_TR_HANDLE; table_name, column_name: PAnsiChar;
739 descriptor: PISC_ARRAY_DESC): ISC_STATUS;
741 Result := FIREBIRD_API.isc_array_lookup_desc(status_vector, db_handle,
742 trans_handle, table_name, column_name, descriptor);
745 function TZFirebirdBaseDriver.isc_array_put_slice(status_vector: PISC_STATUS;
746 db_handle: PISC_DB_HANDLE; trans_handle: PISC_TR_HANDLE; array_id: PISC_QUAD;
747 descriptor: PISC_ARRAY_DESC; source_array: PVoid;
748 slice_length: PISC_LONG): ISC_STATUS;
750 Result := FIREBIRD_API.isc_array_put_slice(status_vector, db_handle,
751 trans_handle, array_id, descriptor, source_array, slice_length);
754 function TZFirebirdBaseDriver.isc_array_set_desc(status_vector: PISC_STATUS;
755 table_name: PAnsiChar; column_name: PAnsiChar; sql_dtype, sql_length,
756 sql_dimensions: PShort; descriptor: PISC_ARRAY_DESC): ISC_STATUS;
758 Result := FIREBIRD_API.isc_array_set_desc(status_vector, table_name,
759 column_name, sql_dtype, sql_length, sql_dimensions, descriptor);
762 function TZFirebirdBaseDriver.isc_attach_database(status_vector: PISC_STATUS;
763 db_name_length: Short; db_name: PAnsiChar; db_handle: PISC_DB_HANDLE;
764 parm_buffer_length: Short; parm_buffer: PAnsiChar): ISC_STATUS;
767 Result := FIREBIRD_API.isc_attach_database(status_vector, db_name_length,
768 db_name, db_handle, parm_buffer_length, parm_buffer);
772 function TZFirebirdBaseDriver.isc_blob_info(status_vector: PISC_STATUS;
773 blob_handle: PISC_BLOB_HANDLE; item_list_buffer_length: Short;
774 item_list_buffer: PAnsiChar; result_buffer_length: Short;
775 result_buffer: PAnsiChar): ISC_STATUS;
777 Result :=FIREBIRD_API.isc_blob_info(status_vector, blob_handle,
778 item_list_buffer_length, item_list_buffer, result_buffer_length,
782 function TZFirebirdBaseDriver.isc_cancel_blob(status_vector: PISC_STATUS;
783 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
785 Result := FIREBIRD_API.isc_cancel_blob(status_vector, blob_handle);
788 function TZFirebirdBaseDriver.isc_cancel_events(status_vector: PISC_STATUS;
789 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG): ISC_STATUS;
791 Result := FIREBIRD_API.isc_cancel_events(status_vector, db_handle,
795 function TZFirebirdBaseDriver.isc_close_blob(status_vector: PISC_STATUS;
796 blob_handle: PISC_BLOB_HANDLE): ISC_STATUS;
798 Result := FIREBIRD_API.isc_close_blob(status_vector, blob_handle);
801 function TZFirebirdBaseDriver.isc_commit_retaining(
802 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE): ISC_STATUS;
804 Result := FIREBIRD_API.isc_commit_retaining(status_vector, tran_handle);
807 function TZFirebirdBaseDriver.isc_commit_transaction(
808 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE): ISC_STATUS;
810 Result := FIREBIRD_API.isc_commit_transaction(status_vector, tran_handle);
813 function TZFirebirdBaseDriver.isc_create_blob2(status_vector: PISC_STATUS;
814 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
815 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
816 bpb_address: PAnsiChar): ISC_STATUS;
818 Result := FIREBIRD_API.isc_create_blob2(status_vector, db_handle,
819 tran_handle, blob_handle, blob_id, bpb_length, bpb_address);
822 function TZFirebirdBaseDriver.isc_database_info(status_vector: PISC_STATUS;
823 db_handle: PISC_DB_HANDLE; item_list_buffer_length: Short;
824 item_list_buffer: PByte; result_buffer_length: Short;
825 result_buffer: PAnsiChar): ISC_STATUS;
827 Result := FIREBIRD_API.isc_database_info(status_vector, db_handle,
828 item_list_buffer_length, item_list_buffer, result_buffer_length,
832 function TZFirebirdBaseDriver.isc_transaction_info(status_vector: PISC_STATUS;
833 tr_handle: PISC_TR_HANDLE; item_list_buffer_length: Short;
834 item_list_buffer: PAnsiChar; result_buffer_length: Short;
835 result_buffer: PAnsiChar): ISC_STATUS;
837 Result := FIREBIRD_API.isc_transaction_info(status_vector, tr_handle,
838 item_list_buffer_length, item_list_buffer, result_buffer_length,
842 procedure TZFirebirdBaseDriver.isc_decode_date(ib_date: PISC_QUAD;
843 tm_date: PCTimeStructure);
845 FIREBIRD_API.isc_decode_date(ib_date, tm_date);
848 procedure TZFirebirdBaseDriver.isc_decode_sql_date(ib_date: PISC_DATE;
849 tm_date: PCTimeStructure);
851 FIREBIRD_API.isc_decode_sql_date(ib_date, tm_date);
854 procedure TZFirebirdBaseDriver.isc_decode_sql_time(ib_time: PISC_TIME;
855 tm_date: PCTimeStructure);
857 FIREBIRD_API.isc_decode_sql_time(ib_time, tm_date);
860 procedure TZFirebirdBaseDriver.isc_decode_timestamp(
861 ib_timestamp: PISC_TIMESTAMP; tm_date: PCTimeStructure);
863 FIREBIRD_API.isc_decode_timestamp(ib_timestamp, tm_date);
866 function TZFirebirdBaseDriver.isc_detach_database(status_vector: PISC_STATUS;
867 db_handle: PISC_DB_HANDLE): ISC_STATUS;
869 Result := FIREBIRD_API.isc_detach_database(status_vector, db_handle);
872 function TZFirebirdBaseDriver.isc_drop_database(status_vector: PISC_STATUS;
873 db_handle: PISC_DB_HANDLE): ISC_STATUS;
875 Result := FIREBIRD_API.isc_drop_database(status_vector, db_handle);
878 function TZFirebirdBaseDriver.isc_dsql_alloc_statement2(
879 status_vector: PISC_STATUS; db_handle: PISC_DB_HANDLE;
880 stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
882 Result := FIREBIRD_API.isc_dsql_alloc_statement2(status_vector,
883 db_handle, stmt_handle);
886 function TZFirebirdBaseDriver.isc_dsql_allocate_statement(
887 status_vector: PISC_STATUS; db_handle: PISC_DB_HANDLE;
888 stmt_handle: PISC_STMT_HANDLE): ISC_STATUS;
890 Result := FIREBIRD_API.isc_dsql_allocate_statement(status_vector,
891 db_handle, stmt_handle);
894 function TZFirebirdBaseDriver.isc_dsql_describe(status_vector: PISC_STATUS;
895 stmt_handle: PISC_STMT_HANDLE; dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
897 Result := FIREBIRD_API.isc_dsql_describe(status_vector, stmt_handle,
901 function TZFirebirdBaseDriver.isc_dsql_describe_bind(
902 status_vector: PISC_STATUS; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
903 xsqlda: PXSQLDA): ISC_STATUS;
905 Result := FIREBIRD_API.isc_dsql_describe_bind(status_vector, stmt_handle,
909 function TZFirebirdBaseDriver.isc_dsql_execute(status_vector: PISC_STATUS;
910 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE; dialect: Word;
911 xsqlda: PXSQLDA): ISC_STATUS;
913 Result := FIREBIRD_API.isc_dsql_execute(status_vector, tran_handle,
914 stmt_handle, dialect, xsqlda);
917 function TZFirebirdBaseDriver.isc_dsql_execute_immediate(
918 status_vector: PISC_STATUS; db_handle: PISC_DB_HANDLE;
919 tran_handle: PISC_TR_HANDLE; length: Word; statement: PAnsiChar;
920 dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
922 Result := FIREBIRD_API.isc_dsql_execute_immediate(status_vector,
923 db_handle, tran_handle, length, statement, dialect, xsqlda);
926 function TZFirebirdBaseDriver.isc_dsql_execute2(status_vector: PISC_STATUS;
927 tran_handle: PISC_TR_HANDLE; stmt_handle: PISC_STMT_HANDLE;
928 dialect: Word; in_xsqlda, out_xsqlda: PXSQLDA): ISC_STATUS;
930 Result := FIREBIRD_API.isc_dsql_execute2(status_vector, tran_handle,
931 stmt_handle, dialect, in_xsqlda, out_xsqlda);
934 function TZFirebirdBaseDriver.isc_dsql_fetch(status_vector: PISC_STATUS;
935 stmt_handle: PISC_STMT_HANDLE; dialect: Word;
936 xsqlda: PXSQLDA): ISC_STATUS;
938 Result := FIREBIRD_API.isc_dsql_fetch(status_vector, stmt_handle, dialect,
942 function TZFirebirdBaseDriver.isc_dsql_free_statement(
943 status_vector: PISC_STATUS; stmt_handle: PISC_STMT_HANDLE;
944 options: Word): ISC_STATUS;
946 Result := FIREBIRD_API.isc_dsql_free_statement(status_vector, stmt_handle,
950 function TZFirebirdBaseDriver.isc_dsql_prepare(
951 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE;
952 stmt_handle: PISC_STMT_HANDLE; length: Word; statement: PAnsiChar;
953 dialect: Word; xsqlda: PXSQLDA): ISC_STATUS;
955 Result := FIREBIRD_API.isc_dsql_prepare(status_vector, tran_handle,
956 stmt_handle, length, statement, dialect, xsqlda);
959 function TZFirebirdBaseDriver.isc_dsql_set_cursor_name(
960 status_vector: PISC_STATUS; stmt_handle: PISC_STMT_HANDLE;
961 cursor_name: PAnsiChar; _type: Word): ISC_STATUS;
963 Result := FIREBIRD_API.isc_dsql_set_cursor_name(status_vector,
964 stmt_handle, cursor_name, _type);
967 function TZFirebirdBaseDriver.isc_dsql_sql_info(
968 status_vector: PISC_STATUS; stmt_handle: PISC_STMT_HANDLE;
969 item_length: Short; items: PAnsiChar; buffer_length: Short;
970 buffer: PAnsiChar): ISC_STATUS;
972 Result := FIREBIRD_API.isc_dsql_sql_info(status_vector, stmt_handle,
973 item_length, items, buffer_length, buffer);
976 procedure TZFirebirdBaseDriver.isc_encode_date(tm_date: PCTimeStructure;
979 FIREBIRD_API.isc_encode_date(tm_date, ib_date);
982 procedure TZFirebirdBaseDriver.isc_encode_sql_date(
983 tm_date: PCTimeStructure; ib_date: PISC_DATE);
985 FIREBIRD_API.isc_encode_sql_date(tm_date, ib_date);
988 procedure TZFirebirdBaseDriver.isc_encode_sql_time(
989 tm_date: PCTimeStructure; ib_time: PISC_TIME);
991 FIREBIRD_API.isc_encode_sql_time(tm_date, ib_time);
994 procedure TZFirebirdBaseDriver.isc_encode_timestamp(
995 tm_date: PCTimeStructure; ib_timestamp: PISC_TIMESTAMP);
997 FIREBIRD_API.isc_encode_timestamp(tm_date, ib_timestamp);
1000 function TZFirebirdBaseDriver.isc_event_block(event_buffer: PPAnsiChar;
1001 result_buffer: PPAnsiChar; id_count: Word; event_list: array of PAnsiChar
1004 Result := FIREBIRD_API.isc_event_block(event_buffer, result_buffer,
1005 id_count, event_list);
1008 procedure TZFirebirdBaseDriver.isc_event_counts(
1009 status_vector: PISC_STATUS; buffer_length: Short; event_buffer,
1010 result_buffer: PAnsiChar);
1012 FIREBIRD_API.isc_event_counts(status_vector, buffer_length,
1013 event_buffer, result_buffer);
1016 function TZFirebirdBaseDriver.isc_free(isc_arg1: PAnsiChar): ISC_LONG;
1018 Result := FIREBIRD_API.isc_free(isc_arg1);
1021 function TZFirebirdBaseDriver.isc_get_segment(
1022 status_vector: PISC_STATUS; blob_handle: PISC_BLOB_HANDLE;
1023 actual_seg_length: PWord; seg_buffer_length: Word;
1024 seg_buffer: PAnsiChar): ISC_STATUS;
1026 Result := FIREBIRD_API.isc_get_segment(status_vector, blob_handle,
1027 actual_seg_length, seg_buffer_length, seg_buffer);
1030 function TZFirebirdBaseDriver.isc_interprete(buffer: PAnsiChar;
1031 status_vector: PPISC_STATUS): ISC_STATUS;
1033 Result := FIREBIRD_API.isc_interprete(buffer, status_vector);
1036 function TZFirebirdBaseDriver.isc_open_blob2(status_vector: PISC_STATUS;
1037 db_handle: PISC_DB_HANDLE; tran_handle: PISC_TR_HANDLE;
1038 blob_handle: PISC_BLOB_HANDLE; blob_id: PISC_QUAD; bpb_length: Short;
1039 bpb_buffer: PAnsiChar): ISC_STATUS;
1041 Result := FIREBIRD_API.isc_open_blob2(status_vector, db_handle,
1042 tran_handle, blob_handle, blob_id, bpb_length, bpb_buffer);
1045 function TZFirebirdBaseDriver.isc_put_segment(
1046 status_vector: PISC_STATUS; blob_handle: PISC_BLOB_HANDLE;
1047 seg_buffer_len: Word; seg_buffer: PAnsiChar): ISC_STATUS;
1049 Result := FIREBIRD_API.isc_put_segment(status_vector, blob_handle,
1050 seg_buffer_len, seg_buffer);
1053 function TZFirebirdBaseDriver.isc_que_events(status_vector: PISC_STATUS;
1054 db_handle: PISC_DB_HANDLE; event_id: PISC_LONG; length: Short;
1055 event_buffer: PAnsiChar; event_function: TISC_CALLBACK;
1056 event_function_arg: PVoid): ISC_STATUS;
1058 Result := FIREBIRD_API.isc_que_events(status_vector, db_handle,
1059 event_id, length, event_buffer, event_function, event_function_arg)
1062 function TZFirebirdBaseDriver.isc_rollback_retaining(
1063 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE): ISC_STATUS;
1065 Result := FIREBIRD_API.isc_rollback_retaining(status_vector, tran_handle);
1068 procedure TZFirebirdBaseDriver.isc_sql_interprete(sqlcode: Short; buffer: PAnsiChar; buffer_length: Short);
1070 FIREBIRD_API.isc_sql_interprete(sqlcode, buffer, buffer_length);
1073 function TZFirebirdBaseDriver.isc_sqlcode(status_vector: PISC_STATUS): ISC_LONG;
1075 Result := FIREBIRD_API.isc_sqlcode(status_vector);
1078 function TZFirebirdBaseDriver.isc_rollback_transaction(
1079 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE): ISC_STATUS;
1081 Result := FIREBIRD_API.isc_rollback_transaction(status_vector, tran_handle);
1084 function TZFirebirdBaseDriver.isc_start_multiple(
1085 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE;
1086 db_handle_count: Short; teb_vector_address: PISC_TEB): ISC_STATUS;
1088 Result := FIREBIRD_API.isc_start_multiple(status_vector, tran_handle,
1089 db_handle_count, teb_vector_address);
1092 function TZFirebirdBaseDriver.isc_start_transaction(
1093 status_vector: PISC_STATUS; tran_handle: PISC_TR_HANDLE;
1094 db_handle_count: Short; db_handle: PISC_DB_HANDLE; tpb_length: Word;
1095 tpb_address: PAnsiChar): ISC_STATUS;
1097 Result := FIREBIRD_API.isc_start_transaction(status_vector, tran_handle, db_handle_count, db_handle, tpb_length, tpb_address);
1100 function TZFirebirdBaseDriver.isc_vax_integer(buffer: PAnsiChar;
1101 length: Short): ISC_LONG;
1103 Result := FIREBIRD_API.isc_vax_integer(buffer, length);
1106 function TZFirebirdBaseDriver.isc_portable_integer(ptr: pbyte;
1107 length: Short): ISC_INT64;
1109 Result := FIREBIRD_API.isc_portable_integer(ptr, length);
1111 { TZInterbase6PlainDriver }
1112 function TZInterbase6PlainDriver.Clone: IZPlainDriver;
1114 Result := TZInterbase6PlainDriver.Create;
1117 constructor TZInterbase6PlainDriver.Create;
1121 FLoader.AddLocation(WINDOWSIB6_DLL_LOCATION);
1123 FLoader.AddLocation(LINUXIB6_DLL_LOCATION);
1124 {$IFDEF ENABLE_INTERBASE_CRYPT}
1125 FPreLoader.AddLocation(LINUX_IB_CRYPT_LOCATION);
1131 function TZInterbase6PlainDriver.GetDescription: string;
1133 Result := 'Native Plain Driver for Interbase 6';
1136 function TZInterbase6PlainDriver.GetProtocol: string;
1138 Result := 'interbase-6';
1141 function TZFirebird10PlainDriver.Clone: IZPlainDriver;
1143 Result := TZFirebird10PlainDriver.Create;
1146 constructor TZFirebird10PlainDriver.Create;
1150 FLoader.AddLocation(WINDOWS_DLL_LOCATION);
1152 FLoader.AddLocation(LINUX_DLL_LOCATION);
1153 {$IFDEF ENABLE_INTERBASE_CRYPT}
1154 FPreLoader.AddLocation(LINUX_IB_CRYPT_LOCATION);
1160 function TZFirebird10PlainDriver.GetDescription: string;
1162 Result := 'Native Plain Driver for Firebird 1.0';
1165 function TZFirebird10PlainDriver.GetProtocol: string;
1167 Result := 'firebird-1.0';
1170 { IZFirebird15PlainDriver }
1172 function TZFirebird15PlainDriver.Clone: IZPlainDriver;
1174 Result := TZFirebird15PlainDriver.Create;
1177 procedure TZFirebird15PlainDriver.LoadCodePages;
1180 AddFireBird15CodePages(Self);
1183 constructor TZFirebird15PlainDriver.Create;
1187 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1188 FLoader.AddLocation(WINDOWS2_DLL_LOCATION);
1190 FLoader.AddLocation(WINDOWS15_DLL_LOCATION);
1192 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1193 FLoader.AddLocation(LINUX2_DLL_LOCATION);
1195 FLoader.AddLocation(LINUX15_DLL_LOCATION);
1196 {$IFDEF ENABLE_INTERBASE_CRYPT}
1197 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1198 FPreLoader.AddLocation(LINUX2_IB_CRYPT_LOCATION);
1200 FPreLoader.AddLocation(LINUX15_IB_CRYPT_LOCATION);
1206 function TZFirebird15PlainDriver.GetDescription: string;
1208 Result := 'Native Plain Driver for Firebird 1.5';
1211 function TZFirebird15PlainDriver.GetProtocol: string;
1213 Result := 'firebird-1.5';
1216 { IZFirebird15PlainDriver }
1218 function TZFirebirdD15PlainDriver.Clone: IZPlainDriver;
1220 Result := TZFirebirdD15PlainDriver.Create;
1223 constructor TZFirebirdD15PlainDriver.Create;
1227 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1228 FLoader.AddLocation(WINDOWS2_DLL_LOCATION_EMBEDDED);
1230 FLoader.AddLocation(WINDOWS15_DLL_LOCATION_EMBEDDED);
1232 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1233 FLoader.AddLocation(LINUX2_DLL_LOCATION_EMBEDDED);
1235 FLoader.AddLocation(LINUX15_DLL_LOCATION_EMBEDDED);
1239 function TZFirebirdD15PlainDriver.GetProtocol: string;
1241 Result := 'firebirdd-1.5';
1244 function TZFirebirdD15PlainDriver.GetDescription: string;
1246 Result := 'Native Plain Driver for Firebird Embedded 1.5';
1249 { IZFirebird20PlainDriver }
1251 function TZFirebird20PlainDriver.Clone: IZPlainDriver;
1253 Result := TZFirebird20PlainDriver.Create;
1256 function TZFirebird20PlainDriver.GetUnicodeCodePageName: String;
1261 procedure TZFirebird20PlainDriver.LoadCodePages;
1263 inherited LoadCodePages;
1264 AddFireBird15CodePages(Self);
1265 AddFireBird2CodePages(Self);
1268 constructor TZFirebird20PlainDriver.Create;
1272 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1273 FLoader.AddLocation(WINDOWS2_DLL_LOCATION);
1275 FLoader.AddLocation(WINDOWS20_DLL_LOCATION);
1277 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1278 FLoader.AddLocation(LINUX2_DLL_LOCATION);
1280 FLoader.AddLocation(LINUX20_DLL_LOCATION);
1281 FLoader.AddLocation(LINUX2_DLL_LOCATION2);
1282 {$IFDEF ENABLE_INTERBASE_CRYPT}
1283 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1284 FPreLoader.AddLocation(LINUX2_IB_CRYPT_LOCATION);
1286 FPreLoader.AddLocation(LINUX20_IB_CRYPT_LOCATION);
1292 function TZFirebird20PlainDriver.GetDescription: string;
1294 Result := 'Native Plain Driver for Firebird 2.0';
1297 function TZFirebird20PlainDriver.GetProtocol: string;
1299 Result := 'firebird-2.0';
1302 { IZFirebirdD20PlainDriver }
1303 function TZFirebirdD20PlainDriver.Clone: IZPlainDriver;
1305 Result := TZFirebirdD20PlainDriver.Create;
1308 constructor TZFirebirdD20PlainDriver.Create;
1312 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1313 FLoader.AddLocation(WINDOWS2_DLL_LOCATION_EMBEDDED);
1315 FLoader.AddLocation(WINDOWS20_DLL_LOCATION_EMBEDDED);
1317 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1318 FLoader.AddLocation(LINUX2_DLL_LOCATION_EMBEDDED);
1320 FLoader.AddLocation(LINUX20_DLL_LOCATION_EMBEDDED);
1324 function TZFirebirdD20PlainDriver.GetProtocol: string;
1326 Result := 'firebirdd-2.0';
1329 function TZFirebirdD20PlainDriver.GetDescription: string;
1331 Result := 'Native Plain Driver for Firebird Embedded 2.0';
1334 { IZFirebird21PlainDriver }
1336 function TZFirebird21PlainDriver.Clone: IZPlainDriver;
1338 Result := TZFirebird21PlainDriver.Create;
1341 function TZFirebird21PlainDriver.GetUnicodeCodePageName: String;
1346 procedure TZFirebird21PlainDriver.LoadCodePages;
1349 AddFireBird15CodePages(Self);
1350 AddFireBird2CodePages(Self);
1351 AddFireBird21CodePages(Self);
1354 procedure TZFirebird21PlainDriver.LoadApi;
1360 @FIREBIRD_API.fb_interpret := GetAddress('fb_interpret');
1364 constructor TZFirebird21PlainDriver.Create;
1368 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1369 FLoader.AddLocation(WINDOWS2_DLL_LOCATION);
1371 FLoader.AddLocation(WINDOWS21_DLL_LOCATION);
1373 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1374 FLoader.AddLocation(LINUX2_DLL_LOCATION);
1376 FLoader.AddLocation(LINUX21_DLL_LOCATION);
1377 FLoader.AddLocation(LINUX2_DLL_LOCATION2);
1378 {$IFDEF ENABLE_INTERBASE_CRYPT}
1379 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1380 FPreLoader.AddLocation(LINUX2_IB_CRYPT_LOCATION);
1382 FPreLoader.AddLocation(LINUX21_IB_CRYPT_LOCATION);
1389 function TZFirebird21PlainDriver.GetDescription: string;
1391 Result := 'Native Plain Driver for Firebird 2.1';
1394 function TZFirebird21PlainDriver.GetProtocol: string;
1396 Result := 'firebird-2.1';
1399 function TZFirebird21PlainDriver.isc_interprete(buffer: PAnsiChar;
1400 status_vector: PPISC_STATUS): ISC_STATUS;
1405 Result := FIREBIRD_API.fb_interpret(buffer, bufsize, status_vector);
1408 { IZFirebirdD21PlainDriver }
1409 function TZFirebirdD21PlainDriver.Clone: IZPlainDriver;
1411 Result := TZFirebirdD21PlainDriver.Create;
1414 constructor TZFirebirdD21PlainDriver.Create;
1418 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1419 FLoader.AddLocation(WINDOWS2_DLL_LOCATION_EMBEDDED);
1421 FLoader.AddLocation(WINDOWS21_DLL_LOCATION_EMBEDDED);
1423 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1424 FLoader.AddLocation(LINUX2_DLL_LOCATION_EMBEDDED);
1426 FLoader.AddLocation(LINUX21_DLL_LOCATION_EMBEDDED);
1430 function TZFirebirdD21PlainDriver.GetProtocol: string;
1432 Result := 'firebirdd-2.1';
1435 function TZFirebirdD21PlainDriver.GetDescription: string;
1437 Result := 'Native Plain Driver for Firebird Embedded 2.1';
1440 { TZFirebird25PlainDriver }
1441 function TZFirebird25PlainDriver.Clone: IZPlainDriver;
1443 Result := TZFirebird25PlainDriver.Create;
1446 function TZFirebird25PlainDriver.GetUnicodeCodePageName: String;
1451 procedure TZFirebird25PlainDriver.LoadCodePages;
1454 AddFireBird15CodePages(Self);
1455 AddFireBird2CodePages(Self);
1456 AddFireBird21CodePages(Self);
1457 ResetCodePage(CS_BIG_5, 'BIG_5', CS_BIG_5, ceAnsi, zCP_BIG5, '', 2); {Chinese, Vietnamese, Korean} //Changed Bytes
1458 Self.AddCodePage('GB18030', CS_GB18030, ceAnsi, zCP_GB18030, '', 4); {Chinese}
1461 procedure TZFirebird25PlainDriver.LoadApi;
1467 @FIREBIRD_API.fb_interpret := GetAddress('fb_interpret');
1471 constructor TZFirebird25PlainDriver.Create;
1475 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1476 FLoader.AddLocation(WINDOWS2_DLL_LOCATION);
1478 FLoader.AddLocation(WINDOWS25_DLL_LOCATION);
1480 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1481 FLoader.AddLocation(LINUX2_DLL_LOCATION);
1483 FLoader.AddLocation(LINUX25_DLL_LOCATION);
1484 FLoader.AddLocation(LINUX2_DLL_LOCATION2);
1485 {$IFDEF ENABLE_INTERBASE_CRYPT}
1486 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1487 FPreLoader.AddLocation(LINUX2_IB_CRYPT_LOCATION);
1489 FPreLoader.AddLocation(LINUX25_IB_CRYPT_LOCATION);
1495 function TZFirebird25PlainDriver.GetProtocol: string;
1497 Result := 'firebird-2.5';
1500 function TZFirebird25PlainDriver.GetDescription: string;
1502 Result := 'Native Plain Driver for Firebird 2.5';
1505 function TZFirebird25PlainDriver.isc_interprete(buffer: PAnsiChar;
1506 status_vector: PPISC_STATUS): ISC_STATUS;
1508 Result:=inherited isc_interprete(buffer, status_vector);
1511 { TZFirebirdD25PlainDriver }
1512 function TZFirebirdD25PlainDriver.Clone: IZPlainDriver;
1514 Result := TZFirebirdD25PlainDriver.Create;
1517 constructor TZFirebirdD25PlainDriver.Create;
1521 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1522 FLoader.AddLocation(WINDOWS2_DLL_LOCATION_EMBEDDED);
1524 FLoader.AddLocation(WINDOWS25_DLL_LOCATION_EMBEDDED);
1526 {$IFNDEF FIREBIRD_STRICT_DLL_LOADING}
1527 FLoader.AddLocation(LINUX2_DLL_LOCATION_EMBEDDED);
1529 FLoader.AddLocation(LINUX25_DLL_LOCATION_EMBEDDED);
1533 function TZFirebirdD25PlainDriver.GetProtocol: string;
1535 Result := 'firebirdd-2.5';
1538 function TZFirebirdD25PlainDriver.GetDescription: string;
1540 Result := 'Native Plain Driver for Firebird Embedded 2.5';