ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/udr/changelog
Revision: 349
Committed: Mon Oct 18 08:39:40 2021 UTC (2 years, 6 months ago) by tony
Original Path: ibx/trunk/fbintf/changelog
File size: 23280 byte(s)
Log Message:
FIxes Merged

File Contents

# Content
1 FBINTF Change Log version (1.3-2 Build 12832) Fri, 15 Oct 2021 12:03:18 +0100
2
3 1. TFBClientAPI.GetProcAddr. Add check for nil reference.
4
5 2. IStatement: new methods:
6 procedure SetStaleReferenceChecks(Enable:boolean); {default true}
7 function GetStaleReferenceChecks: boolean;
8
9 In previous versions, stale reference checks were always enabled. This allows the
10 user to disable them on a per statement basis. Note this can risk out-of-date
11 statement BLR. See User Guide.
12
13 3. IBUtils: TSQLwithNamedParamsTokeniser now recognises a CASE...END block within a
14 stored procedure and hence avoids replacing named parameters within a containing
15 BEGIN..END block.
16
17 4. ISQLParam: using a string value to set an integer field with a scale factor of
18 zero is now treated as a special case to avoid the risk of floating point
19 rounding errors affecting pure integers.
20
21 5. ISQLParam: Review and tidy-up of SetAsString for numeric types.
22
23 6. ISQLParam is now subclassed from IParamMetaData, which provides access to the mutable
24 SQL Parameter metadata (methods moved from ISQLParam).
25
26 7. ISQLParam: new method
27 function getColMetadata: IParamMetaData;
28 This instance of IParamMetaData returns the original column metadata which is unmutable.
29 Note: ISQLParam metadata can change after a parameter value has been set e.g when
30 setting a VARCHAR column to an integer value.
31
32
33 FBINTF Change Log version (1.3-1 Build 12776) Mon, 23 Aug 2021 11:09:33 +0100
34
35 1. Integer decodes in information blocks (e.g. IDBInfoItem) widened from 32 bit to 64-bit integers.
36
37 2. Support for inline blob encoding. Blob values pass using the "SetAsString" method
38 will now be encoded inline (i.e. as part of the parameter buffer) if they are
39 shorter than a pre-set limit. Longer values continue to be saved as blobs as a
40 separate server interaction. This is intended as a performance optimisation.
41
42 The pre-set limit defaults to 8192 bytes and can be inspected/modified using the new
43 IAttachment interface functions:
44
45 function GetInlineBlobLimit: integer;
46 procedure SetInlineBlobLimit(limit: integer);
47
48 3. Support for Firebird 4 IBatch interface added. This is largely transparent to the API
49 user as the functionality is embedded in the implementation of the IStatement
50 interface. Three new functions are defined:
51
52 procedure AddToBatch;
53 function ExecuteBatch(aTransaction: ITransaction=nil): IBatchCompletion;
54 procedure CancelBatch;
55 function GetBatchCompletion: IBatchCompletion;
56 function GetBatchRowLimit: integer;
57 procedure SetBatchRowLimit(aLimit: integer);
58
59 Also
60
61 function IsInBatchMode: boolean; {true after call to execute(eaDefer)}
62 function HasBatchMode: boolean; {true if and only if IBatch Supported}
63
64 For more information see the User Guide.
65
66 4. Default error message contents. Now aligned with User Guide section 10.2 i.e. error messages
67 provided with the EIBInterBaseError now include all three parts.
68
69 5. Firebird.pas and include files updated to Firebird 4.0.0
70
71 6. New IStatement method: function GetSQLStatementTypeName: AnsiString;
72 Returns SQL Statement type as a text string;
73
74 7. ISQLData.AsInteger and AsInt64 now use "Round" to convert a float field to
75 an integer instead of "trunc". This is for compatibility with TFloatField.AsInteger.
76
77 FBINTF Change Log version (1.2-1 Build 12552) Wed, 09 Jun 2021 13:05:40 +0100
78
79 1. Big fix for Firebird 4.0. A internal change in Firebird 4.0.0 from RC1 flushed out a
80 typo in FB30Statement.pas that caused an unknown parameter error.
81
82 FBINTF Change Log version (1.2-0 Build 12520) Fri, 19 Feb 2021 13:27:23 +0000
83
84 1. Imported (Firebird) constants updated for Firebird 4.
85
86 2. Firebird.pas from Firebird 4 integrated into source code tree.
87
88 3. Added Support for TIMETAMP WITH TIME ZONE and TIME WITH TIME ZONE data types.
89
90 4. Added Support for SQL_DEC16, SQL_DEC34 and extended NUMERIC precision.
91
92 5. New unit 'FBClientLib.pas' added and provides new interface IFBIMasterProvider.
93 QueryInterface may be used to coerce this interface from IFirebirdAPI. The
94 interface provides a single method "function GetIMasterIntf: IMaster". This provides
95 type safe access to the Firebird IMaster interface and avoids the need to turn
96 off object checks when coercing "function GetIMaster: TObject" to IMaster.
97
98 6. New IFirebirdAPI Calls:
99 function HasLocalTZDB: boolean;
100 function HasTimeZoneSupport: boolean;
101 function HasExtendedTZSupport: boolean;
102 procedure SQLDecFloatEncode(aValue: tBCD; SQLType: cardinal; bufptr: PByte);
103 function SQLDecFloatDecode(SQLType: cardinal; scale: integer; bufptr: PByte): tBCD;
104
105 7. New IAttachment Calls:
106 function HasDecFloatSupport: boolean;
107 function GetTimeZoneServices: ITimeZoneServices;
108 function HasTimeZoneSupport: boolean;
109
110 8. New Interface ITimeZoneServices.
111
112 9. New ISQLData API Calls:
113 procedure GetAsDateTime(var aDateTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID); overload;
114 procedure GetAsDateTime(var aDateTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString); overload;
115 procedure GetAsTime(var aTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID; OnDate: TDateTime); overload;
116 procedure GetAsTime(var aTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString; OnDate: TDateTime); overload;
117 function GetAsUTCDateTime: TDateTime;
118 function GetAsBCD: tBCD;
119
120 10. New ISQLParam API Calls
121 procedure GetAsDateTime(var aDateTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID); overload;
122 procedure GetAsDateTime(var aDateTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString); overload;
123 procedure GetAsTime(var aTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID; OnDate: TDateTime); overload;
124 procedure GetAsTime(var aTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString; OnDate: TDateTime); overload;
125 function GetAsUTCDateTime: TDateTime;
126 function GetAsBCD: tBCD;
127 function GetStatement: IStatement;
128 function GetTransaction: ITransaction;
129 procedure SetAsTime(aValue: TDateTime; OnDate: TDateTime; aTimeZoneID: TFBTimeZoneID); overload;
130 procedure SetAsTime(aValue: TDateTime; OnDate: TDateTime; aTimeZone: AnsiString); overload;
131 procedure SetAsDateTime(aValue: TDateTime; aTimeZoneID: TFBTimeZoneID); overload;
132 procedure SetAsDateTime(aValue: TDateTime; aTimeZone: AnsiString); overload;
133 procedure SetAsUTCDateTime(aUTCTime: TDateTime);
134 procedure SetAsBcd(aValue: tBCD);
135
136 11. New IArray API Calls
137 procedure GetAsDateTime(index: array of integer; var aDateTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID); overload;
138 procedure GetAsDateTime(index: array of integer; var aDateTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString); overload;
139 procedure GetAsTime(index: array of integer; var aTime: TDateTime; var dstOffset: smallint; var aTimezoneID: TFBTimeZoneID; OnDate: TDateTime); overload;
140 procedure GetAsTime(index: array of integer; var aTime: TDateTime; var dstOffset: smallint; var aTimezone: AnsiString; OnDate: TDateTime); overload;
141 function GetAsUTCDateTime(index: array of integer): TDateTime;
142 procedure SetAsDateTime(index: array of integer; aValue: TDateTime; aTimeZoneID: TFBTimeZoneID); overload;
143 procedure SetAsDateTime(index: array of integer; aValue: TDateTime; aTimeZone: AnsiString); overload;
144 procedure SetAsTime(index: array of integer; aValue: TDateTime; OnDate: TDateTime; aTimeZoneID: TFBTimeZoneID); overload;
145 procedure SetAsTime(index: array of integer; aValue: TDateTime; OnDate: TDateTime; aTimeZone: AnsiString); overload;
146
147 12. Utility functions in IBUtils
148 function ParseDateTimeTZString(aDateTimeStr: Ansistring; var aDateTime: TDateTime;
149 var aTimezone: AnsiString; aFormatSettings: TFormatSettings; TimeOnly: boolean=false): boolean;
150 procedure FBDecodeTime(aTime: TDateTime; var Hour, Minute, Second: word; var DeciMillisecond: cardinal);
151 function FBEncodeTime(Hour, Minute, Second, DeciMillisecond: cardinal): TDateTime;
152 function FBFormatDateTime(fmt: AnsiString; aDateTime: TDateTime): AnsiString;
153 function FormatTimeZoneOffset(EffectiveTimeOffsetMins: integer): AnsiString;
154 function DecodeTimeZoneOffset(TZOffset: AnsiString; var dstOffset: integer): boolean;
155
156 13. IDPB, ITPB and ISPB: new interface method
157 function AddByTypeName(ParamTypeName: AnsiString): IDPBItem/ITPBItem/ISPBItem;
158 This is used to add a parameter block item by the string equivalent of its
159 symbolic type name. e.g. DPB.AddByTypeName('isc_dpb_user_name').AsString := '...'
160
161 14. IDPBItem/ITPBItem/ISPBItem: new interface method:
162 function getParamTypeName: AnsiString;
163
164 15. fb_shutdown now called before unloading Firebird library. This can avoid a
165 SIGEVENT error when a programme using the embeded server is unloaded.
166
167 FBINTF Change Log version (1.1-6 Build 12237) Tue, 21 Jul 2020 08:54:21 +0100
168
169 1. GetImplementationVersion now correctly returns '3.0' for Firebird 3 API
170 with a Firebrid 3 client library.
171
172 2. Linux Only: FIREBIRD environment variable is now checked when loading the client library.
173 If a client library path is not explicitly provided and the FIREBIRD environment
174 variable is set then the directory given by this variable and any 'lib' subdirectory
175 are searched for the Firebird client library. Only if none is found, is the default
176 client library used.
177
178 3. IUtil.FormatStatus now used to format error messages when using new API
179
180 4. Fixed Array SDL: array_desc_scale now correctly encoded as a signed integer.
181
182 5. SQL_TEXT handling changed. When the value of an SQL_TEXT (i.e. fixed width string) column is
183 returned using GetAsString and the string codepage is UTF8, the string is truncated so
184 that the byte length corresponds to the number of characters specified for the column.
185 SQL_TEXT strings are no longer automatically trimmed to remove all trailing white space. This is
186 correct behaviour but may affect some implementations that relied upon automatic
187 trimming of trailing white space.
188
189 6. New IFirebirdAPI Calls:
190 function GetClientMajor: integer;
191 function GetClientMinor: integer;
192
193 7. IColumnMetaData and IArrayMetaData: new method
194 function GetCharSetWidth: integer;
195
196 FBINTF Change Log version (1.1-5 Build 12022) Fri, 17 Apr 2020 10:35:55 +0100
197
198 1. ISQLParams.GetHasCaseSensitiveParams added. Returns true if param names are
199 case sensitive
200
201 2. Single line SQL comments starting with '--' are now recognised by SQL Parser.
202
203 3. New API Calls:
204 IColumnMetaData.GetStatement
205 IColumnMetaData.GetTransaction
206 ISQLData.GetStrDataLength
207 IResults.GetStatement
208 IAttachment.OpenBlob (using Blob metadata)
209 IAttachment.OpenArray (using array metadata)
210
211 4. FBMessages: removal of unused messages
212
213 5. TFBArray.Create (2nd case): ensure that FFirebirdClientAPI is correctly set.
214
215 6. TIBSQLStatementType: SQLSavePoint added to end of enumeration.
216
217 FBINTF Change Log version (1.1-4 Build 11515) Fri, 28 Dec 2018 10:04:19 +0000
218
219 1. Fix a problem with the SQL parameter parser that failed to recognise parameters
220 where the second character of the parameter name is a numeric.
221
222 2. New method for IAttachment: procedure getFBVersion(version: TStrings);
223 This returns the isc_version connection information as one or more lines.
224 This is the same information as returned by isql with the -z option.
225
226 3. If -dFIREBIRD3APIONLY is used as a compiler option then the legacy Firebird API
227 is no longer compiled in. Likewise, if -dLEGACYFIREBIRDAPIONLY is used as a
228 compiler option then the Firebird 3 API is no longer compiled in.
229
230 4. IColumnMetaData: new method.
231
232 TIBDateTimeFormats = (dfTimestamp, {SQL TIMESTAMP}
233 dfDateTime, {SQL DATETIME}
234 dfTime);
235
236 function GetDateTimeStrLength(DateTimeFormat: TIBDateTimeFormats): integer;
237
238 This returns the max. number of characters returned by the "AsString" method
239 when the SQL type of the column is respectively TIMESTAMP, DATETIME or TIME.
240
241 5. Additional argument for IAttachment.PrepareWithNamedParameters -
242 CaseSensitiveParams: boolean = false
243
244 If this argument is set to true then SQL parameter names are assumed to be case
245 sensitive and must be referenced (using ISQLParams.ByName) using the case
246 sensitive name.
247
248 6. Bug fix: when setting a query parameter, it is now possible, when the parameter
249 is of type VarChar or Char to set the parameter to a numeric value (e.g. using
250 .AsCurrency) and then subsequently to update the value to a non-numeric string
251 using .AsString.
252
253
254
255 FBINTF Change Log version (1.1-3) Wed, 05 Dec 2018 14:28:10 +0000
256
257 1. DARWIN only syntax error: fix missing semi-colon in TFBClientAPI.LoadIBLibrary
258
259 2. Restrict IsMultiThread check to Unix only for compatibility with
260 https://bugs.freepascal.org/view.php?id=30535
261
262 3. New SQL Tokeniser added to IBUtils. This is used to pre-process SQL with
263 named parameters and is intended to avoid problems with (e.g.) Execute Block
264 and processing internal parameters as statement parameters.
265
266 4. New interface IFirebirdLibrary provides access to the underlying firebird DLL
267 or shared object. Available via a new member (GetFBLibrary) of IFirebirdAPI.
268
269 5. New function added to IB.pas
270
271 function LoadFBLibrary(aLibPathName: string): IFirebirdLibrary
272
273 This allows a Firebird Library to be loaded from an explicit path. use the
274 IFirebirdLibrary.GetFirebirdAPI member function to get the Firebird API using
275 the library. It is possible to load Firebird libraries from different locations
276 simultaneously, each with a distinct IFirebirdAPI.
277
278 FBINTF Change Log version (1.1-2) Mon, 16 Apr 2018 09:30:32 +0100
279
280 1. Firebird.pas: {$OBJECTCHECKS OFF} added to file to avoid runtime error when
281 program compiled with -CR command line switch.
282
283 2. IServiceManager additions (informational):
284 function getProtocol: TProtocol;
285 function getPortNo: AnsiString;
286
287 3. IServiceManager improved error handling. Interfaces changed:
288 function Start(Request: ISRB; RaiseExceptionOnError: boolean=true): boolean;
289 function Query(SQPB: ISQPB; Request: ISRB; RaiseExceptionOnError: boolean=true) :IServiceQueryResults; overload;
290 function Query(Request: ISRB; RaiseExceptionOnError: boolean=true) :IServiceQueryResults; overload;
291
292 4. IAttachment addition (informational)
293 function GetSecurityDatabase: AnsiString;
294
295 5. IStatement: performance counters now updated after each Fetch. GetPerfStatistics
296 thus now returns accumulated stats for a select statement from opening a cursor
297 up to the last fetch.
298
299 6. DARWIN: uloadlibrary.inc bug fix. Many thanks to Luigi Naimi for correcting
300 the problem.
301
302 7. Type change: "TPerfCounters = array[TPerfStats] of Int64". Note "Int64"
303 replaces deprecated "comp" type.
304
305 10. Testsuite Test10 updated to include thread synchronisation for event reporting.
306
307 11. URL Connection Strings: inet4 and inet6 now recognised.
308
309 12. IBUtils: Parse and Make Connect String now recognise URL style loopback syntax.
310
311 13. IAttachment.CharSetName2CharSetID is now performed case insensitive.
312
313
314 FBINTF Change Log version (1.1-1) Tue, 27 Feb 2018 16:51:16 +0000
315
316 1. IBUtils.QuoteIdentifierIfNeeded: Add check for space character.
317
318 2. IAttachment: add two new methods
319 function HasDefaultCharSet: boolean;
320 function GetDefaultCharSetID: integer;
321
322 These return, respectively, true if a connection default character set was
323 specified and the character set id of the connection default character set.
324 The DefaultCharSetID is cached when the connection is opened and hence does not
325 require a database lookup.
326
327 3. Avoid exception when a text blob is a stored procedure parameter.
328
329 4. Update test suite to include a test for a stored proc returning a text blob.
330
331 5. IAttachment: add
332 function GetRemoteProtocol: AnsiString;
333 function GetODSMajorVersion: integer;
334 function GetODSMinorVersion: integer;
335 function GetAuthenticationMethod: AnsiString;
336
337 These results are cached when the connection is opened and hence do not
338 require a database lookup.
339
340 6. IAttachment: add "function GetConnectString: AnsiString;" This returns the
341 connect string used to create/connect to the database.
342
343 7. IAttachment: Create Database using SQL statement. The username and password
344 are now extracted and used to populate a DPB made available via IAttachment.getDPB.
345 It is now possible to use IAttachment disconnect/connect to reconnect to
346 a database for which the initial connection was established by a create
347 database sql statement. Available in FPC only.
348
349 8. Update Test 1 to test 5, 6 and 7 above.
350
351 9. IBUtils code tidy up.
352
353 10. Parameter Block interfaces "find" method. As documented, this should have
354 returned a nil interface when the item could not be found. Instead, an empty
355 interface item was returned. "Find" now works as documented and will return
356 a nil interface if the item cannot be found.
357
358 11. DBInformation: support added for isc_info_active_tran_count and isc_info_creation_date.
359
360 12. DBInformation: New interfaces: IDIRB and IDIRBItem added to support DB Information
361 requests with additional parameters. This is to enable support for fb_info_page_contents
362 (return of page contents). Response to fb_info_page_contents returned as
363 a string with code page CP_NONE.
364
365 13. DBInformation: Support for fb_info_pages_used and fb_info_pages_free added, plus
366 test suite updated.
367
368 14. DBInformation: Support for fb_info_crypt_key (Firebird 3.0.3 onwards) added as
369 a string type, and fb_info_conn_flags (Firebird 3.0.3 onwards) added as an integer type.
370
371 15. Service Manager: List of protocols supported expanded to include inet, wnet and xnet.
372 An overloaded version of IIFirebirdAPI.GetServiceManager also allows a non
373 default connection port to be specified.
374
375 FBINTF Change Log version (1.1-0) Sun, 07 Jan 2018 15:20:02 +0000
376
377 1. Fix issues with setting SQL Param values using SetAsString with Numeric types.
378 Scale is no longer ignored.
379
380 2. Fix issues with setting SQL Param values using SetAsString with Date values
381 not in locale format but which are recognised by Firebird. Date values that
382 cannot be converted to a string using Pascal library are now passed through
383 to Firebird as Text Strings.
384
385 3. Lookup character set name by codepage amended to ensure that CP_UTF8 returns
386 UTF8 and not UNICODE_FSS.
387
388 4. Charset ID problem. When using Firebird 3, with no default database character set
389 and a column has a non-default collation specified, an incorrect character set
390 id was being reported that could result in a 'division by zero' error when
391 used by IBX. This has now been fixed.
392
393 5. Move GetCharsetName, CharSetID2CodePage, CodePage2CharSetID, CharSetName2CharSetID,
394 CharSetWidth from IFirebirdAPI to IAttachment. This is a better data model as
395 the character sets supported can be updated on a per database basis. That is
396 it is possible to add a (Firebird) user defined character set to a database.
397
398 6. Add RegisterCharSet to IAttachment. This is used to register a user defined character
399 set supported by Firebird with the API.
400
401 7. Add missing isc_info_db_read_only to list of decoded Database Information items
402 in FBOutputBlock.pas and update test suite to include this item.
403
404 8. FB30Client: avoid always using "StartMultiple" when only a single database attachment.
405
406 9. Loading Windows fbclient.dll: when using the FIREBIRD variable to locate the client
407 library or finding it by disk location, the PATH environment variable is now also set to
408 include the FIREBIRD directory. This is to ensure that the correct dlls in the
409 firebird client library dependencies are loaded.
410
411 10. Testsuite: Ensure consistent UTF-8 output on Windows console.
412
413 11. Testsuite: Update Windows script to include FPC 3.0.4 in search path.
414
415 12. FB30Statement: Protect call to "Move" and avoid calling with a nil pointer
416
417 13. FB30Statement: A check has been added to ensure that all SQL Parameters
418 have been given a value (including NULL). Previously, failing to set the
419 value of an SQL Parameter could give rise to unpredictable results or
420 an SQLDA error.
421
422 14. FB30Statement/FB25Statement: Set SQLParam "modified" when string value set.
423
424 15. FBAttachment: Avoid string reference count error when processing an Ansistring
425 parameter in an array of const passed to IAttachment.OpenCursor, etc.
426
427 16. FBAttachment: Allow for WideString and UnicodeString parameters in an array
428 of const passed to IAttachment.OpenCursor, etc.
429
430
431 FBINTF Change Log version (1.0-2) Sat, 04 Mar 2017 14:43:56 +0000
432
433 1. Change syntax to Mode Delphi
434
435 2. Change all uses of string type to explicit AnsiString in order to ensure
436 compatibility between Delphi and FPC.
437
438 3. Various syntax changes to ensure Delphi and FPC compilation including GUIDs
439 defined for each interface.
440
441 4. Generics syntax variations for Delphi added
442
443 5. PChar replaced with PByte expect where an actual string is being referenced,
444 where PAnsiChar is used instead.
445
446 6. Review of type definitions in IBExternals to ensure Delphi compatibility
447
448 7. Testsuite updated for Delphi
449
450 FBINTF Change Log version (1.0-1) Fri, 24 Feb 2017 12:17:57 +0000
451
452 1. Limit maximum Blob segment read/write to MaxuShort. Avoids data loss with
453 large blobs and the FB3 API.
454
455 2. Update Event Handling algorithm to avoid looping due to recreation of the
456 event block.
457
458 3. Avoid invalid XSQLDA error when the only parameter is updated to null
459
460 4. Array Handling: fix problem with text arrays with character set none. When the
461 DB connection has a default character set (e.g. UTF8), an error is raised by
462 Firebird if the space allocated is not enough to allow for transliteration, even
463 though it is not required for character set none.
464
465 5. IBUtils: List of reserved words brought up-to-date
466
467 6. Add ISQL style performance statistics collection to IStatement
468
469 7. Add IFirebirdAPI.CreateDatabase variant to allow execution of user provided
470 CREATE DATABASE statement.
471
472 8. Update SQL Statement parsing to allow for Array Dimensions. That is so that the ':' in
473 an array dimension is not mistaken for a named parameter prefix.
474
475 9. Trim function no longer applied to result of GetAsString for SQL_TEXT
476 when Character set is octets. Avoids loss of non printable characters at start of string.
477
478 10. Add function GetPerfStatistics to IStatement. This returns ISQL like performance
479 statistics for the last action. Requires use of procedure IStatement.EnableStatistics
480 to enable stats gathering.
481
482 11. API Version information added as constants to IB.pas
483
484 12. BlobMetaData character set id should now be the same as that given by IColumnMetaData.GetCharSetID
485
486 13. Firebird Character set "NONE" now interpreted as codepage CP_ACP.
487
488 FBINTF Change Log version (1.0-0) Tue, 06 Dec 2016 10:33:47 +0000
489
490 1. Initial Release
491