ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/changelog
Revision: 353
Committed: Sat Oct 23 14:11:37 2021 UTC (3 years ago) by tony
File size: 76898 byte(s)
Log Message:
Fixes Merged

File Contents

# User Rev Content
1 tony 353 IBX Change Log version (2.4-3 Build 12875) Sat, 23 Oct 2021 14:43:01 +0100
2 tony 347
3     1. Add try-..except check when initially loading library in IDE. This should
4     ensure that IDE continues to load even when a failure occurs in IBX load
5     library.
6    
7 tony 348 2. IBXScript: now recognises a CASE...END block within a stored procedure and
8     hence will correctly detect end of the outer containing block when the block
9     contains a SELECT ... CASE ... END construct.
10    
11     3. IBExtract: some further tidying up to remove extraneous white space.
12    
13 tony 349 4. IBCustomDataSet: DefaultFieldClasses array declaration updated to avoid compile time
14     errors when extra elements are added to DB.TFieldType.
15    
16     5. IBUpdate: updated to reflect changes to ISQLParam.
17    
18     6. IBXScript: now correctly parses a DECLARE statement which includes a quoted string.
19    
20     7. IBExtract: for ODS >=13, increment generator value by one for ALTER SEQUENCE statement.
21    
22 tony 353 8. IBSQL: Support for scrollable cursors added (note: local databases only)
23    
24 tony 345 IBX Change Log version (2.4-2 Build 12773) Mon, 23 Aug 2021 11:59:42 +0100
25    
26     1. TIBDatabaseInfo: review and tidy-up of property types. Most widen to int64 with the
27     exception of those defined to be one byte wide e.g. DBImplementationNo.
28    
29     2. TIBSQL: Batch Update/Insert support added.
30    
31     3. TIBStoredProc: when generating the SQL, the value of the StoredProcName property
32     is no longer automatically converted to upper case when it is syntactically a
33     SQL Identifier. This is to support the use of stored procedures defined e.g.
34     as CREATE PROCEDURE "iCASE".
35    
36     There could be a backwards compatibility issue when the StoredProcName was entered
37     manually at design time. That is not selected from the drop down list. If the
38     StoredProcName is entered in mixed case and the procedure was declared e.g. as
39     CREATE PROCEDURE iCASE, then the SQL generation will be incorrect. You should
40     ensure that the value of the StoredProcName is all upper case, unless it was
41     declared under dialect 3 and explicitly as mixed case (i.e. delimited by double
42     quotes).
43    
44     Note that when a stored procedure name was declared delimited in double quotes,
45     as in the first example above, the value of the StoredProcName property must not
46     include the delimiters (double quotes).
47    
48     4. IBXUpgradeConfFile: an exception is now raised if a patch file specified in
49     upgrade.conf was not found. This replaces silently ignoring the problem.
50    
51     5. TIBLocalDBSupport: new property "SectionHeaderTemplate". This defaults to
52     'Version.%.3d' and is used to generate the section header names (for a given
53     version no.) in the upgrade.conf file.
54    
55 tony 340 IBX Change Log version (2.4-1 Build 12550) Wed, 23 Jun 2021 13:59:14 +0100
56    
57     1. -c command line option added to fbsql example program. Used to set connection
58     character set.
59    
60 tony 338 IBX Change Log version (2.4-0 Build 12543) Mon, 22 Feb 2021 11:00:08 +0000
61 tony 315
62     1. Firebird 4 support added.
63    
64     2. New FB4 data types TIME WITH TIME ZONE, TIMESTAMP WITH TIME ZONE, DECFLOAT and
65     extended precision NUMERIC fields are supported.
66    
67     3. TFmtBCDField is used to support access to DECFLOAT and extended precision NUMERIC fields.
68    
69     4. TIBDateTimeField and TIBTimeField are introduced in support of TIMESTAMP WITH TIME ZONE
70     and TIME WITH TIME ZONE fields. These inherit from TDateTimeField.
71    
72     5. IBExtract now supports FB4 enhancements:
73     - new data types as above
74     - Identity column extensions
75     - Default user role
76     - SQL Security clause for Database, Tables, Procedures, Functions and Triggers
77     - Internal Functions
78    
79     6. IBExtract: new event: OnExtractLines.
80    
81     7. IBExtract: revert create trigger to legacy syntax see Firebird CORE-6243, CORE-5545 and DOC-145
82    
83     8. IBXServices: Server version no. parsing now allows any letter before major version number
84     and is no longer restricted to 'V' e.g. "LI-T4.0.0.1436 Firebird 4.0 Beta 1"
85    
86     9. TIBDataSet and TIBQuery: new property TZTextOption. Used to determine the default
87     format for rendering a time zone.
88    
89     10. TIBDataSet and TIBQuery: new property DefaultTZDate. Used to provide the default date
90     to convert TIME WITH TIME ZONE data type values to and from GMT.
91    
92     11. Unit name IBTypes changed to IBInternals. Internal interfaces TIBGUIInterface and TIBTimerInf renamed to
93     IIBGUIInterface and IIBTimerInf respectively.
94    
95     12. Constants: DPBPrefix and TPBPrefix moved to IB unit. DPBConstantNames and TPBConstantNames
96     now accessible as properties of TIBDatabase and TIBTransaction respectively.
97    
98     13. String Fields: when a fixed character with (CHAR) field is returned, it is now
99     truncated to its fixed character width rather than being right padded with
100     white space to the maximum data size.
101    
102     14. TIBTable.Empty table. In additional to deleting all records in the underlying
103     table, the internal buffers are now also flushed ensuring that the TIBTable is
104     also empty.
105    
106     15. TBatchSQLStatementReader: Line buffer is now cleared on call to reset.
107    
108     16. TIBXControlService descendents: DatabaseName may now be set using a database
109     connect string. The database name is extracted from the connect string.
110    
111     17. DBControlGrid: Minor bug fixes. avoid AV on form closure, avoid black panel
112    
113     18. TIBExtract: Data type of COMPUTED By columns is no longer included in SQL.
114    
115     19. Local database on Linux and with legacy API and FB 2.5 embedded server: fixed problem with password
116     not being present as required.
117    
118     20. IBTreeView split into DBTreeView and IBTreeView. This former is an IBX indepedent
119     version that can be customised to work with other database drivers.
120    
121 tony 319 21. ISQLMonitor: use platform specific LineEnding to delimit messages. Avoids
122     unnecessary CR at end of line on Unix platforms.
123    
124     22. ISQLMonitor: Unix: Default semaphore timeout increased from 1 second to 10
125     seconds in order to reduce risk of message loss.
126    
127     23. ISQLMonitor: read and write count statistics now available via:
128     property TIBSQLMonitor.ReadCount;
129     IIBSQLMonitorHook.GetWriteCount: integer;
130    
131     24. ISQLMonitor tidy up and unit split. IPC functions moved to new unit IBIPC.
132    
133 tony 312 IBX Change Log version (2.3-5 Build 12350) Tue, 25 Aug 2020 16:11:02 +0100
134 tony 308
135     1. TIBStringField: when a string value is read from a dataset buffer, if the
136     number of UTF8 characters exceeds the string size then string is truncated
137     to the maximum string size. This is usually a problem with fixed width columns
138     right padded with white space.
139    
140     2. SQLFiltered and SQLFilterParams added to TIBQuery, TIBTable and TIBDataset.
141     If SQLFiltered is set then when a dataset is opened, each line in the
142     SQLFilterParams property is assumed to be a SQL condition clause and
143     ANDed into the Where clause of the SQL Select statement provided as a
144     dataset property. Each such SQL condition thus acts as an additional filter
145 tony 315 on the dataset.
146 tony 308
147     3. The Filtered property inherited from TDataset is no longer used for SQL (server
148     side filters).
149    
150 tony 311 4. IBLookupComboEditBox: Selection should no longer reset to start of text when
151     text matches complete entry.
152    
153     5. TIBDataLink: Detail Dataset params not refreshed unless both master and detail
154     dataset are active (avoids risk of access violation if master is inactive)
155    
156     6. TIBEvents: Registered property can now be set at design time even if database not open
157    
158     7. TIBEvents: component now correctly re-initialised after call to UnregisterEvents.
159     This should prevent "spillover" of events between sessions.
160    
161     8. TIBCustomDataset: GetNextRecord now called when reseting to first record of a unidirectional dataset.
162     This should ensure that the internal buffer is set up correctly and avoids
163     a duplicate initial row.
164    
165     9. TIBStringField: DataSize now given as byte size of string less trailing any zero character.
166     That is, the DataSize should be the field size * character set width. The
167     value returned by DataSize is now the same as the Dataset buffer size reserved
168     for the field.
169    
170 tony 312 10. IBExtract: Tidyup of SQL generation. Avoid unnecessary double quotes.
171 tony 311
172     11. TIBCustomDataset: Add checks on buffer sizes when copying data from row to field buffer
173     and vice-versa. This may result in an exception being raised (correctly) for
174     older programs when using dataset fields added to a form and the database has been
175     upgraded. For example, computed fields can change from 32-bit to 64-bit integers.
176     In such cases, the field needs to be deleted in the IDE fields editor and then
177     added back in.
178    
179 tony 312 12. IBCustomDataSet: CanInsert, CanEdit, CanDelete and CanRefresh updated to return
180 tony 315 false if query contains only white space and not just empty.
181 tony 312
182 tony 311 12. IBCustomDataset: Blob data is now cleared when TDataSet.Cancel is called. This
183     should ensure that (e.g.) a TDBMemo is correctly refreshed after a dataset edit
184     is cancelled.
185    
186 tony 315 13. IBCustomDataset: SetArrayIntf should no longer cause an access violation if
187     called on a null field.
188    
189     14. IBCustomDataSet: An access violation should no longer occur when calling CancelUpdates
190     results in an empty dataTC86 Client side Filtered Dataset 1 X
191     set.
192    
193     15. IBCustomDataSet: OnUpdateError should now be called in all circumstances when
194     a cached update is applied and an exception is raised.
195    
196     16. IBCustomDataSet: Avoid access violation when SetBookmarkData called with nil pointer.
197    
198     17. Console Mode Local Database support: backup/restore should now work correctly.
199    
200     18. Local Database Support: if an upgrade fails, a downgrade is now performed if
201     possible and an exception raised.
202    
203     19. MinimumVersionNo added to Local Database Support. Database will not open if
204     below this version no. and upgrade not possible.
205    
206 tony 307 IBX Change Log version (2.3-4 Build 12041) Fri, 17 Apr 2020 14:00:32 +0100
207 tony 306
208 tony 307 1. TIBXDataSet and Generators: Generator Names that are not all upper case or
209     not SQL Identifiers are now supported.
210 tony 306
211 tony 307 2. TIBXScript: Set Generator is no longer rejected as unrecognised SQL and is
212     passed to the Firebird engine for execution.
213 tony 306
214 tony 307 3. TIBDataSet: Unidirectional datasets now give an error message if an attempt
215     is made to scroll back.
216 tony 306
217 tony 307 4. New unit: IBMessages.pas. Contains only messages used by IBX and not FBIntf
218 tony 306
219 tony 307 5. TIBLookupComboEditBox: When generating auto-complete SQL, the ListField is now
220     only enclosed in double quotes in SQL dialect 3 and when it needs to be.
221 tony 306
222 tony 307 6. TIBLookupComboEditBox: when the list source opens, the ListField name is now
223     validated. If no match is found in the list of field names and the database has
224     been opened in SQL Dialect 3, then the ListField Name is converted to upper case
225     if it then matches a field name. Otherwise, a Listfield not valid exception occurs.
226 tony 306
227 tony 307 7. IBGeneratoreditor.pas: Add missing parenthesis around "IS" statement for compliance
228     with fpc 3.2.
229 tony 306
230 tony 307 IBX Change Log version (2.3-3 Build 11512) Fri, 28 Dec 2018 10:04:17 +0000
231 tony 287
232    
233 tony 307 1. New property for TIBDatabase and TIBXServicesConnection. This is "ConfigOverrides"
234     and is used to override the default settings in the client side "firebird.conf" This
235     includes "WireCompression" and "WireCrypt". The value of this property is a "TStrings".
236     Each line of the string list should be a setting in the same format as "firebird.conf".
237     For example "WireCompression = true" in order to request wire compression on the client side.
238 tony 287
239 tony 307 Note: explicit settings in the client side "firebird.conf" appear to take precedence
240     over settings given in TIBDatabase and TIBXServicesConnection. Many client side settings
241     also require a compatible setting in the server side "firebird.conf". For example
242     "WireCompression = true" must also be set in the server's "firebird.conf" for wire
243     compression to be used.
244 tony 291
245 tony 307 Whether or not WireCompression or WireCrypt are in use can be checked using the information
246     returned with the Client/Server protocol version. See ibx/examples/dbadmin and
247     ibx/examples/dbinfo for examples of how to display this information.
248 tony 291
249 tony 307 2. New property for TIBDatabase and TIBXServicesConnection: "WireCompression". This
250     is a "convenience" property. If set the "WireCompression=true" is added to the
251     ConfigOverrides. If unchecked then this setting is removed.
252 tony 291
253 tony 307 3. TIBExtract: 64-bit integer types are now correctly extracted as "BIGINT" and
254     not "INT64".
255 tony 291
256 tony 307 4. New published properties for TIBCSVDataOut, TIBInsertStmtsOut and TIBBlockFormatOut
257     These are:
258     property TimestampFormat: string;
259     property DateFormat: string;
260     property TimeFormat: string;
261 tony 291
262 tony 307 Respectively, these provide the date time format templates for SQL types: TIMESTAMP,
263     DATETIME and TIME. The format strings use the standard FPC date/time format
264     characters (see https://www.freepascal.org/docs-html/rtl/sysutils/formatchars.html).
265 tony 266
266 tony 307 If any of the above properties are set to an empty string, then the locale default
267     is used. This uses the ShortDateFormat and the LongTimeFormat. In timestamp, the
268     locale default is extended by appending '.zzz' to include milliseconds.
269 tony 272
270 tony 307 TIBCSVDataOut by default sets these properties to the empty string, while the other
271     two use: 'yyyy.mm.dd hh:nn:ss.zzz', 'yyyy.mm.dd' and 'hh:nn:ss.zzz' respectively.
272 tony 266
273 tony 307 5. New published property for TIBCSVDataOut:
274     property QuoteStrings: boolean (default true)
275 tony 266
276 tony 307 If false then strings are unquoted, otherwise, the QuoteChar property value is
277     used to delimit each and every string in the output.
278 tony 263
279 tony 307 6. New published properties for TIBCSVDataOut:
280     property FieldSeparator: string;
281     property HeaderSeparator: string;
282 tony 267
283 tony 307 Respectively, these provide the separator character(s) used to separate fields
284     in data and header rows. Both default to ','.
285 tony 270
286 tony 307 7. New published properties for TIBCSVDataOut and TIBBlockFormatOut:
287     TOnFormatTextString = procedure(sender: TObject; var TextString: string) of object;
288     property OnFormatTextString;
289 tony 270
290 tony 307 This event handler can be used to process text strings before they are included
291     in the output e.g. to replace unprintable characters with alternative strings.
292     This only applies to columns with an SQL Type of SQL_VARYING and SQL_TEXT.
293 tony 270
294 tony 307 8. TIBDataSet now raises an exception when ParamByName called with an invalid parameter name.
295     Uses "FindParam" if in order to find out if a parameter with a given name exists
296     and without raising and exception if it does not.
297 tony 270
298 tony 307 9. TIBQuery now uses IBX SQL Parser instead of the TParams SQL parser in order to ensure
299     consistency with SQL queries.
300 tony 270
301 tony 307 10. CaseSensitiveParameterNames property added to TIBSQL, TIBDataSet and TIBQuery.
302     When true, SQL statement parameter names are parsed case sensitive. Note for
303     TIBDataSet only applies to Select query.
304 tony 270
305 tony 307 11. IBEvents: removing a TIBEvent component from a form should no longer result in
306     an IDE exception.
307 tony 270
308 tony 307 12. LocalDBSupport: initial database creation should now work correctly
309     when the schema source is an sql file.
310 tony 270
311 tony 307 13. TIBCMLocalDBSupport: new event handler "property OnProgressEvent: TOnProgressEvent"
312     when defined, this handler will be called by the internal TIBXScript during
313     initial database creation when the schema source is an sql file and may be used
314     to provide a visual indication of progress in console mode.
315 tony 270
316 tony 307 14. TCustomIBLocalDBSupport: new public property "InOnCreateDB: boolean". This is set
317     to true while a new local database is being created and its schema populated.
318     Useful in (e.g.) TIBDatabase.OnAfterConnect handler to suppress actions
319     when the database is disconnected/connected during the create DB procedure.
320 tony 270
321 tony 307 15. TIBXScript: any User/password parameters found in a CREATE DATABASE statement
322     are now always ignored and replaced by the user name and password provided as
323     the login parameters for the TIBDatabase referenced from the TIBXScript. The
324     IgnoreCreateDatabase property still applies and the CREATE DATABASE statement is
325     completely ignored if this property is true.
326 tony 270
327 tony 307 16. Code tidyup in IBTreeView: Node properties initialisation moved from TIBTreeView.AddNodes
328     to TIBTreeView.Added. An OnAddition event handler is no longer needed to initialise
329     ImageIndex and SelectImageIndex values on AddNode.
330 tony 270
331 tony 307 17. TIBDatabase.Attachment and TIBXServicesConnection.ServicesIntf properties are now
332     read/write. This should enabled (e.g.) multiple instances of TIBDatabase to share
333     the same database connection.
334 tony 270
335 tony 307 18. TIBDataSet and TIBQuery now support the TDataSet "Filter" property.
336     if provided, this should be an conditional SQL expression suitable for
337     including in an SQL Select statement "where" clause. If non-empty and the
338     "Filtered" property is true then the SQL expression provided as the value of
339     the "Filter" property is "ANDed" with any existing condition statement
340     in the SQL statement's "Where" clause.
341 tony 270
342 tony 307 If the "Filter" property is set at run time, the "Filtered" property is true
343     and the dataset is already open, then the dataset is closed and re-opened automatically.
344 tony 271
345 tony 307 The "Filter" condition may include IBX style parameters. In which case, their
346     value must be set by the dataset's "OnBeforeOpen" event handler.
347 tony 272
348 tony 307 This is a public property for TIBDataSet and TIBQuery query and intended for
349     use at run time.
350 tony 272
351 tony 307 Note: The property is a published property of TIBTable. The TIBTable functionality
352     is unaffected by this change.
353 tony 272
354 tony 307 IBX Change Log version (2.3-2) Wed, 05 Dec 2018 12:19:23 +0000
355 tony 272
356 tony 307 1. Remove need to check for IsMultiThread by providing access to GUI timers via
357     IBGUIInterface. Note: master/detail delay timer does not apply to console
358     mode apps.
359 tony 272
360 tony 307 2. TIBCustomDataSet: SQLParser ignored if it does not contain a valid select
361     statement. This avoids problems if "Execute Block" is used as the Query.
362 tony 272
363 tony 307 3. IBSQLParser now uses the common SQL tokeniser from fbintf. This replaces the
364     internal SQL tokeniser routines.
365 tony 272
366 tony 307 4. IBSQLParser: new property NotaSelectStmt. Set to true if SQL fails to parse
367     as a select statement, with or without CTEs.
368 tony 272
369 tony 307 5. IBSQLParser: parser now recognises the "ROWS" clause.
370 tony 272
371 tony 307 6. TIBXScript now uses the common SQL tokeniser from fbintf. This replaces the
372     internal SQL tokeniser routines.
373 tony 272
374 tony 307 7. Fix error in TIBXScript processing of "set" statements. This avoids exceptions
375     being raised for valid set statements processed by a data formatter.
376 tony 272
377 tony 307 8. New published property for TIBDatabase and TIBXServicesConnection. This is
378     FirebirdLibraryPathName: string. If not empty it is used to explicitly specify
379     the path of the Firebird Library used by the database/services connection.
380 tony 267
381 tony 307 9. New read only public property for TIBDatabase and TIBXServicesConnection. This
382     is FirebirdAPI and returns the IFirebirdAPI interface used by the database/
383     services connection.
384 tony 263
385 tony 307 10.SQL Property editors now quote parameter names if "Quote identifier" is selected
386     or param name is not a valid SQL identifier.
387 tony 263
388 tony 307 11. IBLookupComboEditBox: In Lazarus 2.0, TDBLookupComboBox takes a more restrictive
389     view of whether the text box should be editable when no DataSource is specified.
390     TIBLookupComboEditBox has been updated to workaround this problem. As long as
391     ReadOnly is false, the text box is editable when no DataSource is specified.
392 tony 263
393 tony 307 12. AllowUseOfFBLIB is now set to "true" at design time. This is to allow use of
394     the FBLIB environment variable. If you do not want to permit this then you
395     must modify the Register procedure in the design/IBDBReg.pas unit to remove
396     this setting.
397 tony 263
398 tony 307 IBX Change Log version (2.3-1) Thu, 25 Oct 2018 14:39:45 +0100
399 tony 263
400 tony 307 1. IBCustomDataset: replace deprecated function ValidUTF8String with call to
401     Utf8EscapeControlChars
402 tony 263
403 tony 307 IBX Change Log version (2.3-0) Mon, 16 Apr 2018 09:48:06 +0100
404 tony 263
405 tony 307 IMPORTANT: the source code tree has been re-organised for IBX 2.3. Please remove
406     all previous copies of the IBX source code tree before installing this release.
407 tony 263
408 tony 307 The IBX packages used by most users have not changed, with one exception. The
409     IBServices unit has been moved to the package iblegacyServices.lpk. To continue
410     to use the IBServices unit in your applications, please add the iblegacyServices
411     to the list of dependencies. To do this, open the Project Inspector and select
412     Add->New Requirement and select "ibLegacyServices" from the list of available
413     packages.
414 tony 263
415 tony 307 1. New unit IBXServices. The IBXServices unit is a re-architectured update of
416     the IBServices unit providing what is intended to be a clearer and easier to
417     use set of IB Services components. See Chapter 10 of the IBX User Guide for
418     more information and the guide to "Firebird Service Management Using IBX".
419     As indicated above, the legacy services components are still available and
420     provided in a separate package. There is no need to update working applications
421     using the older versions except for an additional package dependency.
422 tony 263
423 tony 307 2. The IBX packages and source code tree have been re-organised in an attempt to
424     finally get rid of the "duplicate ppu" warnings. This re-organisation should
425     not affect existing users. Section 2.3 of the IBX User Guide describes the
426     new set of IBX packages.
427 tony 263
428 tony 307 3. The ibx/examples/DBAdmin and the ibx/examples/services example have been
429     updated to use the new Services API components.
430 tony 263
431 tony 307 4. The iblocal package has been updated to use the new Services API components.
432 tony 241
433 tony 307 5. procedure SetAutoAdmin; in the new IBX Services this method is now a member of
434     TIBXSecurityService. It had been wrongly classified in the previous version
435     as a per database configuration item. It is global to a server and hence
436     correctly positioned as part of the Security Package. In the DBAdmin example,
437     the setting has moved to the mappings page.
438 tony 241
439 tony 307 6. TIBXScript: IgnoreCreateDatabase added. If true then CREATE DATABASE statements
440     are ignored.
441 tony 101
442 tony 307 7. TIBDatabase: DropDatabase now ensures that all transactions have been properly
443     closed before the database is dropped. Before and After Disconnect event handlers
444     are also fired.
445 tony 209
446 tony 307 8. TIBTransaction: OnStartTransaction event now fires every time the transaction
447     is started and not just the first time.
448 tony 209
449 tony 307 9. IBDataOutput: Use FormatFloat for all performance statistics to avoid platform
450     depenendency with comp type.
451 tony 209
452 tony 307 10. IBDataOutput: select query data output is now sent to stdout instead of stderr.
453 tony 209
454 tony 307 11. TIBDatabase: Remove regression. If a user login dialog changes the DatabaseName
455     then this is recognised and not ignored.
456 tony 209
457 tony 307 12. TIBDataSet, TIBQuery, TIBTable: additions:
458     function GetRowsAffected(var SelectCount, InsertCount, UpdateCount, DeleteCount: integer): boolean;
459     function GetPerfStatistics(var stats: TPerfCounters): boolean;
460     property EnableStatistics: boolean read FEnableStatistics write SetEnableStatistics;
461 tony 209
462 tony 307 GetRowsAffected returns the affected row counts from the last insert/update/delete
463     if EnableStatistics = true then GetPerfStatistics returns the current stats
464     counters for the select query. Note: stats accumulate after each fetch from
465     the database. To get total query cost after open, call the "Last" method
466     and then GetPerfStatistics.
467 tony 209
468 tony 307 See ibx/examples/consolemode for an example of the use of GetPerfStatistics
469 tony 209
470 tony 307 13. TIBExtract: Identity columns DDL. "Start with clause" now correctly encapsulated
471     in parenthesises.
472 tony 209
473 tony 307 14. TIBExtract: new published property "AlwaysQuoteIdentifiers". If true then in dialect 3
474     SQL identifiers are always delimited by double quotes. If false, then they are
475     only delimited if the identifier is a reserved word, contains lower case or special
476     characters. Set this property to true to retain previous behaviour.
477 tony 209
478 tony 307 15. Insert SQL Property Editor. In Insert Returning Clause, Identity column names
479     are now inserted in double quotes if not Reserved Words or valid SQL Identifiers.
480 tony 209
481 tony 307 16. TIBDataSet, TIBQuery, TIBTable: addition:
482     property MasterDetailDelay: integer {defaults to zero}
483 tony 209
484 tony 307 When non-zero and the dataset is a detail table referencing a master table
485     through either a MasterSource (TIBTable) or a DataSource (TIBDataSet, TIBQuery)
486     then a synchronisation delay is added (in milliseconds) between the master
487     row changing and the detail dataset being re-opened. If the master dataset
488     is scrolled before the delay expires then the delay is reset. This can be used
489     to avoid performance overheads when scrolling through a large master dataset.
490 tony 209
491 tony 307 Note: uses fptimer and hence requires a thread manager. Under Linux the
492     chreads unit must be included in your project. TTimer is not used in order
493     to avoid an LCL dependency. Requires FPC 3.0.2 or later.
494 tony 209
495 tony 307 17. TIBExtract: User role grants now excluded when etGrantsToUser not specified
496     with Extract Option eoDatabase.
497 tony 209
498 tony 307 18. TIBLookupComboEditBox: Workaround added for https://bugs.freepascal.org/view.php?id=33428
499     When a deLayoutChanged event is reported on the ListSource dataset, the
500     combobox text is updated. This allows a listsource (detail) to be in a Master/Detail
501     relationship with the control's datasource (master).
502 tony 209
503 tony 307 19. TIBExtract: Full BigInt value range now supported for Generators/Sequences.
504 tony 209
505 tony 307 20. TIBExtract: Select Procedures (Procedure type 1) now include "SUSPEND;" clause in their
506     stubs. Pedantic fix really, as procedures output in dependency order anyway.
507 tony 209
508 tony 307 21. TIBExtract: Package Headers and Package Bodies are now included in the extracted
509     DDL (Firebird 3 and later only).
510 tony 209
511 tony 307 22. TIBLookupComboBox Autocomplete Fixes:
512     i. Only appended text is now selected after autocomplete.
513     ii. Uppercase keys no longer ignored for autocomplete.
514     iii. Retain Prefix case is now honoured correctly.
515     iv. When a DataSource is assigned, typing after autocomplete now extends prefix
516     before autocomplete performed. i.e. behaviour now the same as when
517     no DataSource assigned.
518 tony 209
519 tony 307 23. TIBXScript: Single Line Comments starting with '--' are now ignored when occurring
520     between SQL statements.
521 tony 209
522 tony 307 24. TIBExtract: New published property CaseSensitiveObjectNames. If false (default) then
523     ObjectNames are converted to upper case before matching against metadata object
524     names, unless the objectname is delimited by double quotes, in which case, the
525     double quotes are removed and the remaining string is used (unmodified) to match
526     against the metadata object name.
527 tony 209
528 tony 307 If true then the ObjectName is used as is without modification and matched
529     against the metadata object name. No attempt is made to remove double quotes.
530 tony 209
531 tony 307 25. TIBExtract: New Extract Types: etDatabaseTriggers and etDDLTriggers. When used
532     with eoTrigger, these extract types can be used to select only Database Triggers,
533     or DDL Triggers or both. Ignored when etTable or etTrigger included in Extract Types.
534 tony 209
535 tony 307 26. TIBXScript: If an exception occurs during the processing of a statement, the
536     statement separate character is now reset to the default (';').
537 tony 221
538 tony 307 27. TIBDatabase: Reconnect method added and used by TIBXScript for reconnect.
539 tony 221
540 tony 307 28. TIBXScript: Transaction is no longer automatically reactivated immediately processing
541     a commit or reconnect statement and instead activated only when next SQL statement
542     is executed.
543 tony 221
544 tony 307 29. TIBSQL.HasField should no longer generate and exception when the field does not exist.
545 tony 225
546 tony 307 30. TIBXScript: case insensitive regex now used when matching statements instead of
547     converting statement to upper case.
548 tony 225
549 tony 307 31. TIBExtract: metadata comments now supported. New published property
550     IncludeMetaDataComments (default true). If true then metadata comments included
551     in extracted DDL. New Extract Object member eoComments. This may be used with
552     ExtractObject method to list all metadata comments.
553 tony 225
554 tony 307 32. TIBExtract: ListObjectNames method added.
555 tony 225
556 tony 307 33. Updated Database component editor to support additional connection string
557     types.
558 tony 226
559 tony 307 IBX Change Log version (2.2-0) Wed, 28 Feb 2018 10:57:45 +0000
560 tony 227
561 tony 307 NOTE: THE LOCATIONS OF SOME OF THE UNIT DIRECTORIES HAS CHANGED FROM IBX 2.1. THIS IS TO
562     AVOID DUPLICATE PPU WARNINGS. PLEASE REMOVE EARLIER VERSIONS OF IBX BEFORE INSTALLING THIS
563     RELEASE.
564 tony 229
565 tony 307 NOTE: THE DBADMIN DEMO REQUIRES THAT THE MemDSLaz PACKAGE IS INSTALLED IN THE LAZARUS IDE.
566 tony 229
567 tony 307 1. IBExtract: Identity columns - add additional check for null column for generator name.
568 tony 229
569 tony 307 2. IBCustomDataSet: Insert and Modify (Update) queries now recognise and process SQL RETURNING clauses.
570     The main use for this is for Firebird 3 Identity columns (see IBXDocumentation 6.6.8 for further
571     information). However, this is also a very useful mechanism for returning updated computed by
572     column values. Values returned as a result of executing an Insert or Update statement
573     replace existing values in the current row for each corresponding column.
574 tony 229
575 tony 307 Previously, if a dataset's select query included read only (computed by) fields then
576     an automatic row refresh was performed after an insert or update query had been processed,
577     irrespective of the setting of the "ForcedUpdates" property. This has changed such
578     that an automatic refresh is no longer performed if an insert or update query contains
579     a returning clause that updates one or more fields on the current row. A full row
580     refresh is only performed if (a) ForcedRefresh is true or (b) the query does not return any
581     field values and the select query contains read only fields. Use of Insert/update
582     returning should be significantly more efficient than executing a refresh query.
583 tony 229
584 tony 307 This behaviour change is intended to be backwards compatible and there should be no need to change
585     existing programs, other than to improve performance by using the new capability.
586 tony 229
587 tony 307 3. IBCustomDataSet: DELETE...RETURNING queries are now also recognised. However, as
588     they are called when the dataset row is being deleted, there is no value in
589     updating the current record from the query result. Instead, a new event handler
590     "OnDeleteReturning" is provided. If a DELETE...RETURNING query is execute and
591     an OnDeleteReturning event handler is provided then it is called with the IResults returned
592     by the query. The event handler can then interrogate the query results and
593     perform whatever action is necessary. For example to confirm, to the user,
594     the deletion of a row with the returned values.
595 tony 231
596 tony 307 4. TIBTable: generated Insert and Update SQL now include a RETURNING clause for
597     any Computed By or Identity Columns. The IBTables example has been updated to
598     illustrate the computation of the employee Full Name on update.
599 tony 209
600 tony 307 5. TIBTable: The GeneratorField property is now published.
601 tony 151
602 tony 307 6. The InsertSQL property editor now shows Firebird 3 Identity columns separate from the Field List.
603     When InsertSQL is generated, the Identity columns are not included in the list of values to
604     be inserted. A RETURNING clause is added to the insert statement to return the value of
605     each Identity column after the insert is executed.
606 tony 151
607 tony 307 7. The Modify Property Editor now generates Update SQL with Computed By fields in Update..Returning clause.
608     Similarly Insert Property Editor now generates Insert SQL with Computed By fields in
609     Insert..Returning clause.
610 tony 101
611 tony 307 8. TIBGenerator: small performance improvement by not preparing query each time
612     a new value is generated.
613 tony 101
614 tony 307 9. TIBSQL: Free resources when transaction changed - ensures new transaction is used.
615    
616     10. Property editors will now sync table name to a System Table when "Include System
617     Tables" is selected and the query is for a System Table.
618    
619     11. Minor Performance improvement to handling of Date/Time types in IBX datasets. Field
620     values are no longer converted to milliseconds from TDateTime and then back again
621     to TDateTime (the conversion to milliseconds is the default TDataset approach).
622    
623     12. Property Editors handling of Stored Procedures.
624     * Select and Refresh: only show a list of stored procedures that return multiple rows (proc type 1) and
625     which have a non-empty list of output parameters (i.e. stored procedures that may be used in a select
626     query).
627     * Modify and Insert: only show a list of stored procedures that return at most a singleton row (proc type 2).
628    
629     13. IBStoredProc: Now supports Firebird 3 Package Names. A new published property PackageName
630     can be used to select a package. If non-empty, the stored procedure name is
631     expected to be a stored procedure defined in the specified package and the
632     generated SQL will be as required for a stored procedure located in a package.
633    
634     14. Select, Refresh, Insert, Modify, Delete and TIBSQL SQL Property Editors now include
635     a "Package Name" drop down box to allow selection of a Firebird 3 Package from
636     which a stored procedure can be selected. With no package name selected, non-package
637     stored procedures are listed.
638    
639     15. TIBXScript: turn off database login prompt when reconnecting - this avoids prompting
640     for password on reconnect.
641    
642     16. TIBDatabase: use IAttachment for connection default character set id, code page
643     and character set name.
644    
645     17. TIBDatabaseInfo: cache ODS Version information on first request in order to minimise
646     DB info lookups"
647    
648     18. IBExtract: now supports DDL Triggers and Grants to DDL objects.
649    
650     19. Add a property Editor for TIBUpdate.RefreshSQL.
651    
652     20. IBUpdate: Ignore non-data (e.g. calculated) fields when assembling list of input
653     parameters. This stops an exception being raised when the field cannot be
654     located in the record buffer.
655    
656     21. Property Editors now automatically include System Tables when opened and when the query table
657     is a System Table.
658    
659     22. IBServices: SQRB and SRB buffers are now reset when service query throws an exception.
660     This avoids errors due to a stale SQRB or SRB being used for the next query.
661    
662     23. IBServices: Service attach parameters now include "expected_db". This is used to
663     add the SPB item isc_spb_expected_db. This names a database using
664     an alternative Security Database (FB3 onwards) and allows (e.g. backup/restore) using such a
665     database. examples/services re-written to illustrate use of "expected_db".
666    
667     24. IBServices: TIBControlAndQueryService.WriteNextChunk no longer ignores isc_info_svc_timeout.
668     This avoids truncated backups when the server returns a timeout (busy) response.
669    
670     25. TIBDatabase: isc_dpb_page_size now supported as a database parameter when using TIBDatabase.CreateDatabase.
671    
672     26. TIBDatabase: DatabaseName property may now be prefixed by $TEMP$ or $DATADIR$ for local
673     databasenames. These are respectively expanded to the local system's temp directory
674     (including trailing delimiter) or to a prescribed data directory (including
675     trailing delimiter). Under Unix systems the data directory is a hidden directory
676     in the user's home directory. The hidden directory name is either the string returned
677     from the SysUtils "Vendor Name" or "IBX" if empty. In either case prefixed by a '.'.
678     Under Windows, the directory is the same as the Data Directory as decribed
679     above but instead prefixed by the User's application data path. These may be
680     used to improve application portability for Personal Databases.
681    
682     27. TIBTable: FieldDefs property is no longer published. Due to the use of TIBFieldDef
683     this has not worked for a long time and is not useful either. FieldDefs should be
684     managed using the Fields Editor as with any other dataset. To access the fields
685     editor for a TIBTable component, double click on the component. The fields editor
686     is then displayed.
687    
688     28. TIBDatabaseInfo: new properties/function
689     * DateDBCreated (returns date/time database created)
690     * TransactionCount (returns no. of active transactions)
691     * GetDatabasePage(PageNo: integer) (returns contents of specified database page - SYSDBA only).
692     * PagesFree (Firebird 3 or later)
693     * PagesUsed (Firebird 3 or later)
694     * Encrypted (returns true if database encrypted. (Firebird 3.0.3 or later only)
695     * EncryptionKeyName (returns the name of the encryption key if any (Firebird 3.0.3 or later only)
696    
697     29. IBServices classes now provided the decoded release number in the (array) property ServerVersionNo.
698    
699     30. TIBSecurityService now supports display/modification of the User Admin Role (Firebird 2.5 and later).
700    
701     31. TIBConfigService now has a procedure SetAutoAdmin(Value: boolean) to enable/disable
702     the automtic mapping of privileged OS users to the RDB$ADMIN role (Firebird 2.5 and later).
703    
704     32. TIBBackupService: New Option - NoDBTriggers equivalent to -nodbtriggers switch introduced
705     in the gbak utility at V.2.1 to prevent database-level and transaction-level triggers from
706     firing during backup and restore.
707    
708     33. Both TIBBackupService and TIBRestoreService now support backup/restore statistics options
709     for verbose output using the new property "StatisticsRequested".
710     see https://firebirdsql.org/file/documentation/release_notes/html/en/2_5/rnfb25-util-gbak.html#rnfb25-util-gbakstats
711    
712     34. TIBRestoreService: now supports new options RestoreMetaDataOnly (Firebird 2.5 and later).
713    
714     35. TIBOnlineValidationService component added to the IBServices and the "Firebird Admin"
715     palette. This uses the online validation feature added in Firebird 2.5. The
716     services's properties enable inclusion/exclusion of tables and indexes using
717     regular expressions. See.
718     https://firebirdsql.org/file/documentation/release_notes/html/en/2_5/rnfb25-apiods-api.html#rnfb25-apiods-api-onlinevalidation
719    
720     36. IBServices: procedure TIBConfigService.SetNoLinger added to set no linger
721     option on a database.
722    
723     37. TIBCustomService: Assign method implemented to allow copying of service login
724     context between service API components. "Detach" method now only detaches
725     service when last reference to the service interface detaches. Tidy up of
726     code for SetActive and Attach methods including password hiding.
727    
728     38. TIBDatabase: new properties: AuthenticationMethod and RemoteProtocol. Read only
729     and used to determine the auth method and protocol used for the connection.
730    
731     39. TIBDatabase: ensure that SQLDialect setting is used when creating a database using
732     a Create Database Statement generated by IBX.
733    
734     40. All IBServices now have an additional published property "PortNo". This may
735     be set to a non-standard port number when necessary. If zero then the default
736     port number is used.
737    
738     41: TIBLookupComboeditBox: Ensure dataset updated when change selected with the keyboard
739     and not just the mouse.
740    
741     42. TIBCustomDataset: reopen query if already active when a TIBControlLink is added.
742    
743     43. TIBTreeview: new ImageIndexField and SelectedIndexField Property allows the
744     image index and selected image index for each node to be set from a database field.
745    
746     44. TIBExtract: new extract type (etGrantsToUser) for use with eoDatabase. If included
747     then database schema includes grants to all users. If not present then the
748     only user grants included are those to User PUBLIC.
749    
750     45. TIBTreeView: performance improvement. When expanding include both expanded node
751     and child nodes in dataset.
752    
753    
754     IBX Change Log version (2.1-0) Fri, 15 Dec 2017 12:20:11 +0000
755    
756     1. IBCustomDataset: Minor change of PChar to PByte for compatibility with fbintf
757     changes.
758    
759     2. IBCustomDataset: Fixed use of incorrect datasize in TIBStringField.SetAsString.
760     Bug could result in truncated multi-byte character set values.
761    
762     3. Changes consequential on moving fbintf character set utility functions from
763     IFirebirdAPI to IAttachment.
764    
765     4. Avoid "Object is nil" error when opening a database with DefaultSystemCodePage = true
766    
767     5. IBLookupComboEditBox: avoid race condition when autocompleting text that occasionally
768     results in autocomplete ignoring prefix text.
769    
770     6. IBLookupComboEditBox: Ensure that cursor is not reset to start of text when
771     entering a new name into the text box.
772    
773     7. IBCustomDataset: ensure that TIBStringField uses the field size reported by
774     Firebird rather than recomputing it.
775    
776     8. Property Editor positioning tidy up: All IBX Property editors should now be
777     screen centre. Previously some were "poDesigned" which may be inappropriate
778     for multi monitor desktops.
779    
780     10. TIBTreeView.FindNode: protect against error if zero length path or empty tree node.
781    
782     11. TIBTransaction: On Force Disconnect do not raise an exception when problem ending
783     a transaction and always reset the object.
784    
785     12. TIBQuery tidyup: remove unnecessary call to GetAffectedRows.
786    
787     13. TIBXScript: Allow for override of database filename in Create Database statements.
788    
789     14. IBLocaldb: Support initialisation of the database from an SQL script in addition
790     to a gbak format archive.
791    
792     15. IBLocaldb: fix problem that stopped the OnSharedDataDir event from being recognised.
793    
794     16. IBLocaldb: Drop database if error creating an empty database.
795    
796     17. TIBTreeView: improve performance when selecting node - avoid refreshing dataset
797     unless selected node not in current dataset.
798    
799     18. IBServices: SetDBParams method moved from TCustomIBLocalDBSupport (in IBLocalDB package)
800     to TIBCustomService, and IBlocalDB code tidy up.
801    
802     19. IBTreeView: Initialise TIBTreeNode KeyValue to null to avoid unpredictable
803     behaviour due to uninitialised variable.
804    
805     20. IBServices: Correct encoding of isc_spb_prp_write_mode in TIBConfigService from
806     integer to byte. Ditto isc_spb_prp_reserve_space and isc_spb_prp_access_mode.
807    
808     21. IBSQL: When Database changed ensure that all resources are freed.
809    
810     22. IBCustomDataset: When database changed ensure that queries an unprepared.
811    
812     23. SQL Property Editors now use SynEdit with SQL Highlighter. New features include:
813     * Line Wrap on SQL Token boundaries (on user command)
814     * auto-complete table names in drop down list of table names
815     * Double click on tablename or field name adds to SQL text
816    
817     24. IBDataOutput: print statistics using float (%f) format instead of decimal (%d).
818    
819     25. IBTreeView: Call to FindNode: param type change from "array of Variant" to
820     TVariantArray. Seems to avoid memory corruption in Windows (probably a
821     workaround for a problem in fpc 3.0.4 win64).
822    
823     26. IBDatabaseInfo: Code tidy up. Add check for database not assigned or not open.
824    
825     27. IBDatabaseInfo: Remove memory leak when accessing database operation counts.
826    
827     IBX Change Log version (2.0-2) Fri, 24 Feb 2017 12:17:53 +0000
828    
829     1. TIBDatabase.CreateDatabase: extract full DB Name from SQL using reg ex in order to
830     include remote system name.
831    
832     2. TIBExtract: No longer include comment header and COMMIT statement for empty
833     tables when data included in output.
834    
835     3. Profiling: IBSQL now has conditional compilation flags to enable query performance
836     and timing information to be written to stdout. This may be used to locate
837     performance bottlenecks.
838    
839     4. SQLParser: only call "OnChanging" event handler when value is different.
840    
841     5. IBDynamicGrid: Update handling of navigation keys for a TDateEdit
842    
843     6. IBCustomDataset: Set internalunprepared flag when transaction ends. This ensures
844     that BindFields is called when the query is next activated. Avoids FieldName
845     not found error.
846    
847     7. IBUpdate: This is a new IBX component similar to TIBUpdateSQL. It is more general
848     purpose and allows the programmer to define any action they want for Update, Insert
849     or Delete. This may be complex SQL (similar to a Trigger), application specific
850     filtering of updates, or use of statements such as Grant or Revoke instead of
851     normal DML. See User Manual for more information.
852    
853     IBX Change Log version (2.0-1) Mon, 09 Jan 2017 15:31:49 +0000
854    
855     1. TIBEvents: Fix uninitialised variable that could result in lost events.
856    
857     2. TIBExtract: Added support for FB3 "USAGE" privilege.
858    
859     3. TIBExtract: data formatted as Charset set "octets" is now output using
860     hexadecimal notation.
861    
862     4. TIBExtract: Binary Blobs and array data can now be embedded in INSERT statements
863     using a simple XML format.
864    
865     5. TIBExtract: extract of individual Triggers and Stored Procedures can now include
866     grants to these objects.
867    
868     6. TIBExtract: Stored Procedures and Views output in dependency order to avoid
869     dependency problems restoring complex databases.
870    
871     7. TIBXScript: This component has been restructured to allow for the processing of
872     embedded XML in INSERT statements and to support interactive sources in addition
873     to non-interactive data sources such as files.
874    
875     8. TIBXScript: CREATE DATABASE, DROP DATABASE, CONNECT statements are now supported.
876    
877     9. TIBXScript: ISQL compatiable Set statements are now supported:
878     SET SQL DIALECT
879     SET TERM
880     SET AUTODDL
881     SET BAIL
882     SET ECHO
883     SET COUNT
884     SET STATS
885     SET NAMES <character set>
886    
887     10. IBVersion unit added to hold current IBX Version Number information.
888    
889     11. TIBExtract: Use character rather than byte length for VarChar procedure arguments.,
890     and domain definitions.
891    
892     12. TIBExtract: Triggers now use SQL2003 syntax and database and transaction triggers
893     fully supported.
894    
895     13. TIBExtract: when a database dump includes data, the generator values are now also set.
896    
897     14: IBSQLEdit: Unit LCLPlatformDef added to uses clauses for lazarus 1.7 and later.
898    
899     IBX Change Log version (2.0-0) Tue, 06 Dec 2016 10:33:44 +0000
900    
901     See also doc/IBX4LazarusGuide.pdf for important information on
902     upgrading to IBX2.
903    
904     1. Size property of TIBStringField is now the width in characters of the field
905     and not the byte length. This applies only to multi-byte character sets such
906     as UTF8. The original approach aligned with TStringField. However, the TStringField
907     code is not recognised as a bug and hence this change to align the behaviour.
908     The TStringField change is expected in fpc 3.2.0.
909    
910     2. A new property AutoFieldSize: boolean has been added to TIBStringField. When
911     true (default) then Size property value saved in the lfm is ignored. Size is
912     always set from the dynamic information read from the database. It is unclear
913     why anyone would want to override this and set Size to false.
914    
915     3. ibxscript: should now handle correctly a Case..End statement within a procedure
916     block.
917    
918     4. IBDatabase: new property - CreateIfNotExists. If true and database does not
919     exist when an attempt is made to connect to it (run time only) then an attempt
920     is made to create the database.
921    
922     5. IBDatabase: new event - OnCreateDatabase. This event is called after a database
923     has been successfully created as a result of a call to CreateDatabase or when
924     creating a database after it was found not to exist.
925    
926     6. DBControlGrid: a race condition could result in the wrong row image being
927     written to the cache. This has been avoided by a trip round the message
928     loop before rendering the row image.
929    
930     7. DBControlGrid: It is strongly recommended not to open the source DataSet for
931     a DBControlGrid during a Form's "OnShow" event handler. Under GTK2 this is
932     known to risk corrupt rendering of row images when the control is first
933     displayed. If necessary use "Application.QueueAsyncCall" to delay opening
934     of the dataset (see DBControlGrid examples) until the Form's Window has been created.
935    
936     8. DBControlGrid & IBDynamicGrid: Navigation keys should now work correctly with
937     a TDateEdit control located on an editor panel.
938    
939     9. TIBExtract: brought up-to-date plus many bug fixes.
940    
941     10. DBControlGrid: Removed memory leak when updating rows.
942    
943     11. TIBCMLocalDBSupport: fixed invalid free on upgrade.
944    
945     IBX Change Log version (1.4-3) Thu, 22 Sep 2016 18:10:15 +0100
946    
947     1. IBCustomDataset: When calling SetCodePage, no longer request transliteration
948     when target codepage is CP_NONE. This is a workaround for
949     http://bugs.freepascal.org/view.php?id=30622.
950    
951     2. DBLog option removed from TIBStatisticalService - not supported by server
952     since Firebird 1.5.
953    
954     3. ibxscript: An error is no longer generated for "on commit preserve rows" or
955     similar.
956    
957     4. IBCodePage: updated mapping between codepages and character id.
958    
959     5. ftWideString and ftWideMemo withdrawn. There is no UTF16 character set in
960     Firebird. Character sets with a char width of two are not UTF16.
961    
962     6. Strings received from the database are now always transliterated into UTF8
963     regardless of the database character set or connection character set. This
964     is for compatibility with the LCL.
965    
966     IBX Change Log version (1.4-2) Thu, 22 Sep 2016 15:25:27 +0100
967    
968     1. IBBlob: Defer reading of blob until read method called. This avoids having to
969     read in an entire blob just to get the size of the blob. General performance
970     improvement when opening datasets containing blobs.
971    
972     2. Clearing a Blob now sets the corresponding field's modified flag.
973    
974     3. IBLookupCombo: When not performing auto-complete, original query sort order
975     is now used.
976    
977     4. IBDynamicGrid: Add OnSelectEditor event. Allows editor panel to be dynamically
978     determined.
979    
980     5. IBDynamicGrid: Recompute column widths after dataset closed and re-opened.
981    
982     6. IBLookupCombo: LazUTF8 added to uses clause to avoid compilation problems post
983     lazarus 1.6.0
984    
985     7. IBControls. Removed "runtime" from list of paths to avoid "multiple packages"
986     compilation error.
987    
988     IBX Change Log version (1.4-1) Tue, 17 May 2016 09:14:51 +0100
989    
990     1. No character set specified for connection: when a text blob is retrieved, the
991     character set is determined by looking up the native character set using then
992     Firebird API. Otherwise a text mode blob is assumed to have the same character
993     set as the connection.
994    
995     2. TIBGUIInterface: this is an internal interface. Minor type changes to allow
996     for Login Dialog returing a change to the database path.
997    
998     3. Design Time Database and Server login Dialogs now allow the Database Name/Server Name
999     to be changed from that given in the TIBDatabase/TIBServer component and for the
1000     entered value to be saved on a project specific basis (design time only).
1001    
1002     4. IBDynamicGrid: TDBLookupCellEditor now compares its DataFieldName with the
1003     column fieldname. If they are the same then it is acts as a look up for the KeyValue
1004     Otherwise, it sets the column text to the selected ListField Value.
1005    
1006     5. IBDynamicGrid: Only visible columns are now taken into account When recalculating
1007     column width.
1008    
1009     6. IBLookupComboEditBox: Fix error with autocomplete query when a RelationName is given
1010     and a case insensitive search is requested.
1011    
1012     7. IBDynamicGrid: No longer ignores notifications removing Column Totals controls
1013     or column ListSource.
1014    
1015     8. IBQuery: no longer performs unnecessary refresh of SQL Text (and hence avoids an
1016     unprepare) when closing and the text has not changed.
1017    
1018     9. IBSQL: Base the cursor name on a GUID instead of a hexstr version of the class pointer.
1019     Less likely to cause a cursor re-use error on Windows.
1020    
1021     10.SV5IPC: include workaround for OSX. FPC 3.0.0 has broken ipc module for darwin.
1022     Expected to be fixed in 3.0.2. Hence workaround only applies to 3.0.0.
1023    
1024     11. TIBTreeView: Guard against nil destination on record changed
1025    
1026     12. AnsiString Code page support: TIBStringField.AsString and TIBMemoField.AsString now return a
1027     string type with the code page set to reflect the returned field encoding after
1028     Firebird driver transliteration, if any. FPC 3.0.0 onwards only. Behaviour unchanged for
1029     earlier versions.
1030    
1031     13. AnsiString Code page support: Assigning to TIBStringField.AsString and TIBMemoField.AsString
1032     will now result in transliteration to the code page specified for the Firebird driver
1033     if the assigned string has a different code page. FPC 3.0.0 onwards only.
1034    
1035     14. TIBDatabase: new property UseDefaultSystemCodePage. When set any lc_ctype parameter
1036     is ignored and the lc_ctype value, when the database is opened, is set to align with
1037     the DefaultSystemCodePage (FPC 3.0.0 onwards). Normally, this is what you want and should ensure
1038     platform independence. Note: this applies to FPC 3.0.0 and earlier versions. Pre FPC
1039     3.0.0, when this property is true, the lc_ctype is UTF8 except under windows when
1040     the GETACP is used to determine the Windows code page.
1041    
1042     15. TIBDatabase: new property DefaultCharSetName. This is the Firebird character set
1043     name used as the lc_ctype when the database was opened. Only valid while the
1044     Database is connected.
1045    
1046     16. TIBDatabase: new property DefaultCodePage (FPC >=3.0.0 only). This is the codepage
1047     id that corresponds to the DefaultCharSetName.
1048    
1049     IBX Change Log version (1.4-0) Mon, 15 Feb 2016 14:44:24 +0000
1050    
1051     1. Unix: If Firebird Embedded Server shared object is loaded and a local database
1052     path is given and database attach fails due to access permission issues on the
1053     temp directory or security database, then the attach is retried with "localhost:"
1054     prefixing the databasename. This should avoid problems when the database has to
1055     be accessed by a local (e.g. classic) server and libfbembed is used.
1056    
1057     2. Windows: revised search order for Firebird DLL:
1058     i. The Firebird Embedded Server in the application Directory.
1059     ii. If the FIREBIRD environment variable is set then the directory this
1060     points to is searched for the FB Client DLL and then then underlying
1061     "bin" directory.
1062     iii. Registry Key HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
1063     is used to locate the Firebird installation directory and the underlying
1064     "bin" directory is searched for the FB Client DLL.
1065     iv. The Default installation directories C:\Program Files\Firebird\Firebird_2_x
1066     are searched for the FB Client DLL.
1067     v. The PATH Environment variable is used to search for the FB Client DLL.
1068     vi. Finally the PATH Environment variable is used to search for IBASE.DLL.
1069    
1070     3. New Component: TIBXScript. This is an ISQL compatible SQL script execution engine.
1071     See doc/readme.scriptengine and example applications.
1072    
1073     4. New Component: TIBlocalDBSupport. This is a TIBDatabase support component intended to
1074     simplify the use of the embedded firebird server on both Linux and Windows platforms.
1075     See dpc/readme.localdatabase and example applications.
1076    
1077     5. IBDynamicGrid: Reordering on column header click should now also work for
1078     dynamic columns.
1079    
1080     6. ISQLMonitor: (Windows only). Mutex added to TMultilockGate to avoid race condition
1081     between incrementing/decrementing the lock count and signalling the event.
1082    
1083     IBX Change Log version (1.3-2) Tue, 26 Jan 2016 14:39:54 +0000
1084    
1085     1.3.2 was never formally released and only made available as beta copies.
1086    
1087     1. DBControlGrid,IBDynamicGrid: Ignore down arrow and up arrow in TCustomMemo
1088    
1089     2. IBDynamicGrid: Now deals correctly with a single column grid which has no indicator and autosize column
1090    
1091     3. IBLookupComboEditBox: reset timer on each key press - avoids timer going off too early
1092    
1093     4. IBDynamicGrid: Call event OnUpdateSortOrder even when aliasname not found in dataset
1094     i.e. when it is a calculated field
1095    
1096     5. IBDynamicGrid: Fix problem selecting a different row when expanded row at end of grid.
1097     This problem was due to a race condition between recalculating row heights and
1098     determining which row was selected by the mouse click. The row height calculation
1099     is now deferred by an extra trip round the message loop allowing the row to
1100     be always calculated on the current grid layout rather than risking it being
1101     calculated on the grid layout after the expanded row has been shrunk.
1102    
1103     6. IBLookupComboEditBox: avoid race condition between cm_killfocus and cm_exit on
1104     Windows.
1105    
1106     7. TIBStringField: Now has two new public properties: CharacterSetName: string and CharacterSetSize: integer;
1107     These properties allow the (Firebird) character set name for the field and the max number of bytes per character
1108     to be determined at runtime. See doc/readme.charactersets.html.
1109    
1110     8. TIBWideStringField: This is a new field type with the same additional public properties as above and subclassed from
1111     TWideStringField. This field type is used with the character size reported by Firebird is two. See doc/readme.charactersets.html.
1112    
1113     9. TIBMemoField and TIBWideMemoField: new field types with the same additional public properties as above and subclassed from
1114     TMemoField and TWideMemoField respectively. These field types are used with Blob subtype 1 and a characterset size of
1115     1, 3 or 4 (TIBMemoField) or 2 (TIBWideMemoField). See doc/readme.charactersets.html.
1116    
1117     Both also have a new published property "DisplayTextAsClassName". If false (default) the displaytext is generated
1118     from the blob text by truncating the string to the displaywidth (in characters not bytes). A displaywidth of zero
1119     implies no truncation.
1120    
1121     10. IBLookupComboEditBox: Force autocomplete when EditingDone called and timer active.
1122    
1123     11. IBDynamicGrid: Call DataSet.Append when entering edit mode and dataset empty and not in insert state
1124     (avoids "Not in Edit Mode" error).
1125    
1126     12. IBDynamicGrid: Correctly resize grid when one column width plus indicator.
1127    
1128     13. IBDynamicGrid: Ensure Editor Panel has focus when shown - avoids Windows API calling
1129     DBGrid.DoExit on subsequent mouse click (e.g. on child control such as a tabbed page control.
1130    
1131     14. IBDynamicGrid: ignore up, down tab and return when editorpanel open and focus in a TCustomGrid descendent.
1132    
1133     15. DBControlGrid: Stop flashing grid when dataset closed and then re-opened while DisabledControls
1134    
1135     16. IBQuery: Bug fixed that prevented SQL being set programmatically once the Parser had been invoked.
1136    
1137     17. IBCustomDataSet: On close, parser is now freed and Select SQL reverts to value before DataSet Opened.
1138    
1139     IBX Change Log version (1.3-1) Sat, 18 Jul 2015 13:30:50 +0100
1140    
1141     1. OnCloseUp Event Handler added to TDBLookupProperties
1142    
1143     2. IBDynamicGrid: Call to OnEditorPanelHide is now last editor hide action - avoids
1144     problem with row size when exception is called.
1145    
1146     3. IBLookupComboEditBox: Force pending autocomplete on combobox exit.
1147    
1148     4. IBDynamicGrid and DBControlGrid: Keyhandler now ignores up, down, escape and return keys if
1149     in a TCustomComboBox and ignores return key if in a TCustomMemo
1150    
1151     5. IBLookupComboEditBox: Ensure that KeyValue is set correctly when full text
1152     keyed in i.e. when autocomplete not performed
1153    
1154     6. Cleanup of "Uses" clauses and add console mode support. IBX should now support
1155     console mode applications with all LCL required functions (builtin dialogs and
1156     cursor management) centralised in the IBDialogs unit. As long as "IBDialogs" is
1157     not included in your project, IBX should compile and link with a console mode program.
1158     See consolemode example and its "readme"for further guidence. DO NOT add the ibexpress package to a
1159     console mode application or the IDE will automatically assume that your
1160     application is GUI based. Instead, you should include the ibexpressconsolemode package.
1161    
1162     IMPORTANT NOTE: IBDialogs must be included in GUI applications in order
1163     to use the built in dialogs and cursor management. IBDialogs is
1164     included by default if "ibexpress" is in your project source's "uses" clause.
1165     This should be the case for all projects created through the IDE. This is why
1166     you do not want to add the ibexpress package to console mode applications. The
1167     ibexpressconsolemode package has been created to allow console mode programs
1168     to avoid adding LCL dependencies when using IBX, while still having the
1169     unit search paths set up correctly.
1170    
1171     Existing users should check to ensure that the "ibexpress" unit is included in
1172     each project's source file (*.lpr).
1173    
1174     You may find that in order for the IDE to recognise that ibexpressconsolemode
1175     exists, you have to first open the package in the IDE and then close it. This
1176     adds it to the most recently accessed packages list. To make it permanently
1177     available, add the package name to lazarus' staticpackages.inc file.
1178    
1179     Thanks to Julio Jiménez for suggesting support of console mode.
1180    
1181     7. SQL Parser can now accept quoted strings that include new lines
1182    
1183     8. IBDynamicGrid: Lookup Cell Editor - the cursor is now positioned at end
1184     of text on start of edit. This is particularly useful when tabbing to a
1185     column and then inserting text.
1186    
1187     9. New Examples provided for IB Services and ISQLMonitor.
1188    
1189     10. Fix error when writing to blob streams that recorded only the last buffer
1190     write in the blob stream. In most cases, this did not cause a problem as the
1191     IB Blob Stream is written in a single write. However, with the TDBImage, write
1192     of a graphic type prefix was lost which caused a problem when the image could
1193     not be automatically recognised.
1194    
1195     11. Improve generation of random cursor names in TIBSQL - avoid risk of "cursor
1196     already open" errors due to random numbers used for the cursor name being identical.
1197    
1198     12. IBTable: corrected error that could result in an "Index out of bounds" error
1199     when opening the table and the Primary Key is the last or only column in the
1200     table. Thanks to Rick Hoover for the fix.
1201    
1202     13. Fix TIBDatabase initialisation of lc_ctype under unix. Set to "UTF8" instead
1203     of "UTF-8", and update list of available database character sets. Existing
1204     users should check the current lc_ctype setting in their applications.
1205    
1206     IBX Change Log version (1.2-4) Sat, 09 May 2015 12:38:29 +0100
1207    
1208     1. Firebird Services: avoid List Index error when opening a service with an
1209     empty Params property.
1210    
1211     2. IBControls: Fix problem with new link mechanism introduced in 1.2.3.
1212     Link now set up in Loaded method - avoids occasional failure to apply
1213     SQL markup on initial open.
1214    
1215     3. "Employees" example performance improvements when scrolling.
1216    
1217     4. DBControlGrid: Correctly handle edit panel removal when panel is child control of a
1218     TFrame. Force recaching of selected frame to avoid GTK race (results in a
1219     random image cached).
1220    
1221     5. DBControlGrid: Should now react to changes in panel height at run time.
1222    
1223     6. IBDynamicGrid: Redraws rows below on panel editor hide - avoids blank space at end of grid
1224     even when further rows exist.
1225    
1226     7. DBControlGrid: DefaultRowHeight is no longer a published property as it should
1227     always be derived from panel height and setting this property can cause confusion.
1228     Note for existing projects: to avoid a missing property error at run time,
1229     each form using the DBControlGrid must be opened, updated and saved in the IDE
1230     in order to remove the property value from the lfm.
1231    
1232    
1233     IBX Change Log version (1.2-3) Tue, 14 Apr 2015 14:11:17 +0100
1234    
1235     1. TIBStoredProc. Prepare now called by ParamByName to avoid need to always
1236     call Prepare before setting parameter values.
1237    
1238     2. Error message on ParamByName (all cases) not found now includes name of missing parameter.
1239    
1240     3. Code tidyup and more robust handling of dsql information result vector.
1241    
1242     4. Support for centralised handling of transaction status changes. TIBTransaction
1243     has been given additional events "AfterEdit", "AfterInsert", "AfterDelete", "AfterPost"
1244     and "AfterExecQuery". The first three are called after the same event is called
1245     for an IBCustomDataSet descendent using the Transaction. The fourth is called
1246     after a call to TIBSQL.ExecQuery, again using this transaction. These new events
1247     enable monitoring of transaction status changes for a given transaction to be
1248     handled in a single place. For example, when a change to the dataset occurs
1249     an indicator can be set that shows the user that in order to save changes,
1250     the transaction should be committed. Rather than doing this per dataset, this
1251     can now be done per transaction.
1252    
1253     5. TDataSet.CheckBrowseMode automatically posts changes to the current row when
1254     the dataset is scrolled. However, any changes to the current row are, by default,
1255     discarded when the dataset is closed. TIBDataSet, TIBQuery and TIBTable now
1256     have a new property "DataSetCloseAction" that adds automatic posting of changes
1257     on dataset close. If this property is set to dcDiscardChanges (default) then the
1258     behaviour is unchanged from previous versions. if the value is set to dcSaveChanges
1259     then IBX will attempt to post any unsaved changes before the dataset is closed
1260     (and after the BeforeClose event handler is called). The exception is when the
1261     dataset is being closed as a result of a transaction rollback. In this case,
1262     no action is taken and any unsaved changes are discarded. This avoids both
1263     unnecessary overhead and the risk that a validation error may occur in the Post
1264     raising an exception and thereby preventing a rollback.
1265    
1266     6. String Field sizes and Display Widths should now be correct for multi-byte character sets.
1267     In earlier versions, the Display Width was set to the maximum byte width rather than the character
1268     width. Display Widths are now corrected by dividing by the max byte width per character.
1269     For UTF8 character sets, the byte width is four and hence the Display Width will be
1270     the byte width divided by 4. The byte width of each character set is determined
1271     dynamically when the database connection is estabished from the RDB$CHARACTER_SETS
1272     system table. (see also http://bugs.freepascal.org/view.php?id=27766).
1273    
1274     7. SQLParser will now correctly parse SQL Text which contains ':' within quoted string.
1275    
1276     8. IBLookupComboEditBox: List should now always be restored to full list when the
1277     control loses focus. Default Key press default interval reduced to 200ms.
1278    
1279     9. DBControlGrid: Ensure that selection is changed to newly appended row, even
1280     when dataset rows are less than visible rows.
1281    
1282     10. IBDynamicGrid: Editor Panel is not shown on indicator click if Datasource
1283     does not exist or DataSet is empty. More responsive on dataset open. New event
1284     OnRestorePosition. Column sort disabled if no header row.
1285    
1286     11. IBTreeView: improved handling of response to "Add Node". Avoid scrolling dataset
1287     while dataset state is dsInsert. Avoids posting errors.
1288    
1289     12. IBControls: New mechanism for distributing UpdateSQL and UpdateParams events. This is to
1290     avoid conflict with DisableControls/EnableControls with Master/Detail linked tables.
1291    
1292     13. IBLookupComboEditBox: Now avoids SQL Errors when combo box text contains single quotes.
1293    
1294     14. TIBDataSet and TIBQuery: new Event - OnValidatePost. This event has been introduced
1295     to solve a specific problem. That is when the dataset cursor is moved (e.g. by
1296     a grid mouse click and the current row is being edited or inserted. In this case, TDataset
1297     always "posts" the current record regardless or whether or not it may be more appropriate
1298     to cancel any changes; the post occurs before the "BeforeScroll" event fires due to the way the
1299     "MoveBy" function is implemented by TDataSet. The OnValidatePost event is called
1300     as the first action of the "Post" method and allows the handler to convert the Post
1301     into a Cancel if that is the appropriate action on moving to a different row. This is
1302     achieved by returning with "CancelPost" argument set to true. Note that an exception could be
1303     raised here, but it may still be more appropriate to validate a post and signal
1304     a problem in the "BeforePost" event handler. See readme.automaticposts.xhtml)
1305    
1306     15. On Unix derived systems, the Firebird library name can now be given as a colon
1307     separated list. Each library name on the list is tried in turn, in left to right
1308     order with the first found being used as the firebird library. By default, on Linux,
1309     the library name list is 'libfbembed.so.2.5:libfbembed.so.2.1:libfbclient.so.2'. This can be
1310     overidden by the FBLIB environment variable or the OnGetLibraryName function.
1311    
1312     Note: when using the libfbembed.so, if you prefix the database name with "localhost:"
1313     then it will still attempt to access the database via the Firebird Server and will
1314     require a username and password. If only the pathname is given, then the username
1315     and password should be omitted and the unix file permissions are used to grant
1316     access.
1317    
1318     IBX Change Log version (1.2-2) Sat, 14 Mar 2015 11:35:04 +0000
1319    
1320     1. A new IBControl - TDBControlGrid has been added. TDBControlGrid a lookalike
1321     rather than a clone for the Delphi TDBCrtlGrid. TDBControlGrid is a single column grid
1322     that replicates a TWinControl - typically a TPanel or a TFrame in each row. Each row
1323     corresponds to a row of the linked DataSource. Any data aware control on the
1324     replicated (e.g.) TPanel will then appear to have the appropriate value for the row.
1325    
1326     2. As suggested by Julio Jiménez, a new property "SQLHourGlass" has been added to TIBDatabase.
1327     When set to false (default true), the Hour Glass cursor is supcpressed and no cursor change
1328     takes place during database access. This may be useful when there are performance issues with
1329     the change of cursor. Setting the property to false suppresses the change of cursor.
1330    
1331     3. As suggested by Julio Jiménez, a new property "AutoCommit" has been added to TIBDataSet, TIBQuery
1332     and TIBTable. When set to acCommitRetaining (Default: acDisabled), a call is made to
1333     Transaction.CommitRetaining immediately after every Post or Delete. This has the effect of
1334     making all changes permanent immediately rather than when the transaction is explicitly
1335     committed.
1336    
1337     4. Experimental support for the Firebird 3 SQL_BOOLEAN type has been added while still
1338     using the legacy Firebird API. Thanks to Gabor Boros for helping to test this feature.
1339    
1340     IBX Change Log version (1.2-1) Fri, 13 Mar 2015 11:14:15 +0000
1341    
1342     Development version only.
1343    
1344     IBX Change Log version (1.2-0) Thu, 26 Feb 2015 10:34:04 +0000
1345    
1346     1. An internal select SQL Parser is now available for TIBCustomDataset descendents.
1347     This is typically used during an "OnBeforeOpen" event handler to manipulate the
1348     "Where" and "Having" clauses to implement user specified filters of arbitrary
1349     complexity.
1350    
1351     2. A new Component Palette entry "Firebird Data Controls" is now available. This has
1352     three new data aware controls dependent on IBX and which make use of the SQL Parser.
1353     These are:
1354    
1355     - TIBLookupComboEditBox
1356     - TIBDynamicGrid
1357     - TIBTreeview
1358    
1359     TIBLookupComboEditBox is a TDBLookupComboBox descendent that implements "autocomplete"
1360     of typed in text and "autoinsert" of new entries. Autocomplete uses SQL manipulation
1361     to revise the available list and restrict it to items that are prefixed by the
1362     typed text (either case sensitive or case insensitive). Autoinsert allows a
1363     newly typed entry to be added to the list dataset and included in the available
1364     list items.
1365    
1366     TIBDynamicGrid is a TDBGrid descendent that provides for:
1367     - automatic resizing of selected columns to fill the available row length
1368     - automatic positioning and sizing of a "totals" control, typically at the
1369     column footer, on a per column basis.
1370     - DataSet resorting on header row click, sorting the dataset by the selected column.
1371     A second click on the same header cell reversed the sort order.
1372     - Support for a "Panel Editor". That is on clicking the indicator column, the row
1373     is automatically expanded and a panel superimposed on it. The panel can have any
1374     number of child controls, typically data aware controls with the same datasource
1375     as the grid allowing for editing of additional fields and more complex editors.
1376     - Reselection of the same row following resorting.
1377     - A new cell editor that provides the same functionality as TIBLookupComboEditBox.
1378     Its properties are specified on a per column basis and allows for one or more
1379     columns to have their values selected from a list provided by a dataset.
1380     Autocomplete and autoinsert are also available. The existing picklist editor
1381     is unaffected by the extension.
1382    
1383     TIBTreeView is a data aware TCustomTreeView.
1384    
1385     3. When getting a field value using FieldByName.AsVariant, an SQL_INT64 with a
1386     zero scale will no longer return an error. An Int64 will be returned instead.
1387    
1388     4. TIBTransaction now has events for Before and After Transaction End and a new function
1389     "GetEndAction" allowing the EndAction to be accessed by these event handlers.
1390    
1391     5. TIBQuery can now handle correctly queries which contain the same keyword parameter
1392     repeated multiple times.
1393    
1394     6. TIBUpdateSQL will no longer return an error when "RowsAffected" is <> 1. This error
1395     check used to get in the way of using Stored Procedures, and "Update or Insert"
1396     statements.
1397    
1398     7. Insert, Modify and Delete property Editors now support Query Generation from
1399     Stored Procedures.
1400    
1401     8. Three new examples illustrate the use of the new IB Controls
1402    
1403    
1404     IBX Change Log version (1.1-0) Mon, 07 Jul 2014 14:01:07 +0100
1405    
1406     1. TIBXSQLVAR code clean up and optimisation to improve client side "prepare" and parameter
1407     setting performance. See "readme.field+param.names in the doc folder.(Thanks to
1408     Gabor Boros for reporting this problem and for testing the improvements).
1409    
1410     2. IBX can now support dialect 3 quoted column names that contain spaces and which differ only in their case.
1411     See readme.field+param.names in the doc folder.
1412    
1413     3. IBX SQL Editors will now automatically add double quotes around column names when the database
1414     dialect is "3" and the column name contains spaces or is a Firebird 2.5 SQL Reserved Word.
1415    
1416     4. Param Type LargeInt now supported in TIBQuery and TIBStoredProc
1417    
1418     5. TIBSQL.ExecQuery retry on failure removed to avoid problems with "at most once"
1419     actions.
1420    
1421     6. TIBTransaction.SetDefaultDatabase uses SetObjectProp instead of mis-using SetOrdProp (with
1422     thanks to Yuriy Kopnin for pointing this out).
1423    
1424     7. GenerateParamName is now a published property of TIBSQL, TIBQuery and TIBDataSet.
1425    
1426     8. varWord, varShortInt and varInt64 added to TIBXSQLVAR.SetAsVariant and hence now available as variant types
1427     for both fields and parameter setting.
1428    
1429     9. Changes to the Select SQL in an IBCustomDataset descendent should now be
1430     visible in the Fields Editor immediately afterwards - rather than only after cycling the "active" property.
1431    
1432     10. TIBSQL SQL editor will operate correctly and not report an SQL syntax error on SQL test,
1433     when DSQL ('?') parameter placeholders are used and the TIBSQL.GenerateParamNames property is set to true.
1434    
1435     11. TIBTable now has a property editor for "MasterFields"
1436    
1437     12. SQL Property Editors now include a checkbox "Allow DSQL Placeholder". This corresponds to the
1438     GenerateParamNames property and should be set when using DSQL (i.e. '?') style parameters.
1439    
1440     13. The IBTransaction editor now has a radio button ("Unspecified") which is set when the combination
1441     of settings is unrecognised. Selecting this radio button has no effect on the settings.
1442    
1443    
1444     IBX Change Log version (1.0-5) Sat, 28 Dec 2013 19:22:23 +0000
1445    
1446     1. TBookmark change conditional compile changed to >= 2.7.0 to match revised availability of change.
1447    
1448     IBX Change Log version (1.0-4) Thu, 28 Feb 2013 16:56:13 +0000
1449    
1450     1. In a TIBCustomDataset descendent, a generator now only sets the value when
1451     it is null. This allows for alternative user defined setting of the generator
1452    
1453     Many thanks to Julio Jiménez for this fix
1454    
1455     2. An Error Dialog is now displayed in the Lazarus IDE if IBX cannot find the Firebird Library
1456     and suggests that the user may have forgotten to install it.
1457    
1458     IBX Change Log version (1.0-3) Thu, 22 Nov 2012 22:53:39 +0000
1459    
1460     1. Conditional compilation used to limit registration of TIntegerField to
1461     Lazarus versions less than 1.1
1462    
1463     2. When a database connection is created, character set is now by default set
1464     to UTF8 (Unix) or to the current Windows code page (Windows) if in the range
1465     1250 to 1254.
1466    
1467    
1468     IBX Change Log version (1.0-2) Tue, 09 Oct 2012 09:10:30 +0100
1469    
1470     1. TBookmark change conditional compile changed to > 2.6.2 to match expected availability of change.
1471    
1472    
1473     IBX Change Log version (1.0-1) Sun, 05 Aug 2012 20:00:04 +0100
1474    
1475     1. In IBCustomDataset. Changed CurBookmark from string to TBookmark for compiler versions > 2.6.0
1476     Necessary because of TBookmark type and TDataSet.Bookmark property change in fpc 2.7.1
1477    
1478     2. IBX now registers TIntegerField as a "No Icon" component. This may be removed if the fpc DB
1479     package is changed to do this (which it should do).
1480    
1481     IBX Change Log version (1.0-0) Sat, 28 Apr 2012 16:43:00 +0100
1482    
1483     1. Add "if active then active := false" to TIBCustomDataset destructor. (Avoid error on database close).
1484    
1485     2. Make use of $STATIC conditional in IBSQLMonitor (Needed for FPC 2.6.0 compliance)
1486    
1487     3. Database Property Editor: Character Set drop down box now uses "OnChange" rather than "OnCloseUp" to react to changes
1488    
1489     4. Property editors should now correctly resize.
1490    
1491     5. In IBDatabaseEdit.TestClick, the LoginPrompt is now set to the state of the LoginPrompt Checkbox
1492     (restored original functionality)
1493    
1494     6. Under OSX, if IBX fails to load libfbclient.dylib, it will now try and load the firebird
1495     library using the absolute path /Library/Frameworks/Firebird.framework/Firebird.