IBO Release 4
I was proud and delighted to announce the new release of IB Objects on 19 July 2001. With help from our marvellous community of contributors and beta-testers, IBO 4 brings in a raft of new features to take your InterBase® and Firebird database programming with Delphi and CPPB to new limits of performance and capability.
IMPORTANT :: DELPHI VERSION SUPPORT
- It is now possible to specify a base query which could output a dataset of more than 100K rows and, as a user navigates this large dataset, IBO automatically does the refinement necessary to pull in only those rows that are of interest. InfoPower® with the TDataset stuff totally rocks.
- Client-side filtering has been added, including the capability to change the filter logic and refresh the buffers without having to refresh the dataset from the server.
- New components for implementing Full Text (Fuzzy) search and Replication
- New classes for building NT Service applications
- New web components making it a snap for your Delphi web application to store and retrieve HTML chunks to and from database BLOBs
- Enhanced harmonization of Cached Updates with the server-centric nature of IBO, resulting in better accuracy and more efficient integration. A new option has been added to show cached deleted rows.
- New session level background processing mechanism architecture now hooks right into the idle CPU message notifications from Windows. Passive processes like automatic Transaction OAT management, IB events and TIB_Process class descendants thus get new capability to use idle CPU cycles.
- All-new packaging scheme to allow full granularity for selection of modules to register and simpler integration with contributed and third-party packages
- Delphi 2 is not supported in Release 4 and higher
- Delphi 3 users depending on the embedded controls features of the native IBO grid should stay with Release 3. The Release 4 controls utilize object interfaces and, unfortunately, the implementation of object interfacing in Delphi 3 has proven to be seriously flawed.
- IBO Release 3.6Dk continues to be supported for all Delphi versions 2 through 6.
DETAILS OF THE NEW FEATURES
Changes you need to be aware of:
- The session level background processing mechanisms have been greatly enhanced: a new architecture now hooks right into the IDLE cpu message notifications from Windows to fuel things like automatic Transaction OAT management. The result is much more fluid and efficient handling of the background tasks that IBO relies upon for efficiency. The timer mechanism is retained but is now necessary just to keep the idle messages flowing during a "wait and see" condition.
I have tied other components into this new architecture. The IB_Events component and all components which descend from the TIB_Process class are hooked into the session's new capability to use idle CPU cycles to fuel passive processes. Part of the session's new architecture includes a WakeUp notification system designed to take care of the synchronization of the event notifications. With TTimer components no longer necessary, setup is reduced to a minimum.
- A new base class and application framework has been included for writing NT Services with IBO that uses the new session architecture for passive processing to resolve some difficult points that had been holding up progress towards getting it just right. The new architecture fits the service application's passive manner of execution very well. Use it to build descendant NT Service apps. A subclass of the standard TService module, it takes care of all the plumbing to coordinate the creation and management of the service worker thread and to hook into the service events. Built in is a very easy and efficient mechanism for feeding information off into log files. It is designed to mesh with the replication and full text searching synchronization components or any other IBO-related processes.
You can install this framework right into your IDE, in the Delphi Repository. To do this, follow these simple steps:
- In your Delphi installation ..\bin directory, open the file delphi32.dro as a plain text file.
- Scroll to the end of the file and make a new entry just before before the [Repository Pages] entries:
Name=IB Service Base Module
Icon=E:\IBO_4\IB_SVCAPP.ICO //your IBO main installation directory
Description=Base module for IB/Firebird Service apps
- Now, add an entry to
- Save the file. Now you should find the Service App framework ready to use for your own applications.
- Use as you would any object you create in Delphi using File | New..
- A new group of components provides a top to bottom full (fuzzy) text searching solution. It is not 100% server-based, since the index needs to be maintained by a client process. It can be used any client, even one not using IBO. You just need to have an IBO application running somewhere to maintain the index. All of the triggers to do it are built automatically. It does logging of searches too, including internal server statistics for performance metering. Full help file.
- A simple replication module follows the same pattern as the search index maintenance components. Some significant similarities exist between in the maintenance processes for index tables and replicated tables. It's a fully working module that can actually be used to set up your replication system. One-way replication that runs hands-off on the server. The target database can be set up to duplicate source tables or to store selected or aggregated data. Powerful macro engine allows you to set up generic replication processing, multiple tasks and more. Package includes application, complete help file and components TIB_RPL_Meta and TIB_RPL_Sync.
- Two brand-new web components. TIB_ChunkProvider links page producers (chunk producers) to the database. TIB_ChunkProvider gets HTML chunks from the database instead of from the DFM. Other than that, they are just what you are used to when using ordinary TPageProducers.
- Horizontal dataset refinement: substantial changes here mean you can now specify a base query which could output a significantly large dataset, for example, more than 100K rows. As you issue commands to the dataset to navigate among these rows IBO will automatically do the refinement necessary to pull in only those rows that are of interest.
The improved refinement is implemented in your applications by using the POS attribute in the dataset's OrderingLinks property. Where, previously, you entered: MYCOL=1 you can now enter MYCOL=ITEM=1;POS=0.
It requires supporting indexes both ascending and descending and it cannot be used on any columns which might contain NULL. TIBOTable will make these entries internally, automatically.
Internally, horizontal dataset refinenment affects the buffers significantly. Previously, it could always be assumed that the buffer had the BOF position and that it wouldn't grow "backwards" from there. Now, buffers have to be aware that they may need to pull in rows at the beginning or the end, or both if you have done a locate out in the middle somewhere.
As long as you have proper indexes, any dataset navigation commands should complete within 1 or two seconds. It makes using things like InfoPower with the TDataset stuff totally rock. Incremental searching, for example, is amazingly fast.
The TDataset components handle these changes in dataset buffering architecture but, unfortunately, the native IBO controls like TIB_Grid were much less tolerant to the changes. TIB_Grid has undergone significant alterations to support this more flexible buffering architecture. A positive side-effect is a much smoother and more efficient grid, thanks to the finer level of control demanded by the dataset enhancements.
- Client-side filtering has been added, including the capability to change the filter logic and refresh the buffers without having to refresh the dataset from the server. A new RefreshFilteredRows method, which works with exclusively with the OnFilterRecord event, will recalculate the Filtered status of all rows in the buffer and adjust the dataset accordingly, as if a refresh had been done.
- CachedUpdates has received a lot of attention, resulting in improvements to its integration with the server-centric nature of IBO. These two opposed models have been harmonized considerably, resulting in better accuracy and more efficient integration. A new option has been added to show cached deleted rows.
- The connection component has a new property, DefaultNoTrimming, to control the trimming behavior for character columns when datasets are fetched. If it is set True, all default trimming will be disabled and your application would need to control the trimming explicitly, case by case, using SQLType, Domains, column names and/or table/column name pairs. To minimize the impact of porting existing applications to IBO4, the default behavior remains as it was, to right-trim.
- IBO is now split into separate packages to give better support for runtime packages. There are four main runtime packages - core components, tools/utility components, visual components and forms/dialogs. There are now specific designtime packages too - one to bring the runtime packages for the native and TDataset-compatible components into the IDE. There is an additional run-time just for the TDataset-based classes and a separate designtime-only package to bring them into the IDE. There are separate packages for the IBOWeb internet stuff, replication components and the full text components.
- The use of object interfaces has been introduced by Geoff Worboys to make it easier to integrate controls into TIB_Grid and to bring other external processing, such as mask handling, into core IBO classes, without requiring the necessary files be compiled and hard-linked to IBO. Geoff can now maintain his enhanced components in packages separately from the IBO components. In general, it means core releases can be more "stable" and third-party developers can integrate their products with IBO more effectively.
Because of serious flaws in object interfacing in Delphi 3, users of Delphi 3 whose applications depend on embedded controls should either upgrade Delphi or stay with Release 3 of IB Objects.
- Support for macro processing has been added for the SQL and other properties of statements/datasets and scripts.
- The IB_WISQL project has been renamed IB_SQL. This tool has a new ColumnAttributes tab to enable you to set client-side defaults, NOTREQUIRED and so on, when editing your data interactively.
- The Scrollbars property of TIB_LookupCombo is gone. You can simply ignore this property when it is reported on opening forms that use this control.
- The old IBDataset.pas unit has been renamed IBODataset.pas to bring it into line with the components it contains. The old name was a legacy from before Borland hijacked my registered prefix 'TIB' and applied it to their InterBaseXpress components. If you have built applications using the TIBO (dataset-compatible) components, please open your units in a text editor and replace IBDataset with IBODataset in all uses clauses containing it. GReplace is a free tool you can download to peform this task very quickly as a search-and-replace. See the Object Software Technology site.
- Delphi 3 applications using the native controls may be broken by upgrading to IBO 4. Please refer to the notes above on object interfacing.