ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/changelog
Revision: 340
Committed: Wed Jul 7 11:53:54 2021 UTC (2 years, 9 months ago) by tony
File size: 74283 byte(s)
Log Message:
Fixes Merged

File Contents

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