|Subject||RE: [IBO] IBO 5.9.3 Build 2620 Release Candidate 1|
|Author||IBO Support List|
All IBO customers and enthusiasts,
I should add that the new development that was included with IBO for the next release has to do with horizontal dataset refinement. I haven’t gotten a release out as frequently as I would like because these changes were rather extensive and took a significant amount of time to accomplish. Thankfully, I have achieved this awesome landmark now!
In the past I only made use of a single column (the first column in the ORDER BY clause) when partitioning out dataset record streams. So, for example, if you had a dataset ordered by LASTNAME and then FIRSTNAME and there were several millions of records and you did a search for last name of SMITH and the first name of JOHN, the horizontal refinement would only be able to get to the first SMITH but then all of the SMITH records would have to be fetched until the record with the first name of JOHN was located. The way it is now, IBO will take both SMITH and JOHN and the horizontal dataset refinement will take you directly to the first record with both SMITH as the last name and JOHN as the firs name. Therefore, IBO is now quite fluid when dealing with extremely large datasets that have a sorting based upon up to three columns. I actually have had to add additional internal cursors that will submit the various cursors in order to piece together the finished record stream so that the dataset appears to be one whole contiguous query, except that it is brought to the client piece by piece in SELECT statements that are all easily optimized if there are both ASCENDING and DESCENDING indexes for all of the columns involved in the record ordering.
I also adjusted the TIBOTable to use horizontal dataset refinement, provided there are descending indexes for the columns the dataset is sorted by, more permissively. In the past many have discouraged people from using the TIBOTable component but with IBO this component is actually a total powerhouse that overcomes the problems and pitfalls that the BDE had with its TTable performance. IBO has greatly improved the manner in which a TIBOTable functions. It’s what the BDE was trying to be and was supposed to be but just couldn’t put it all together.
Also, another point of interest here is
you can do a call to Locate() and Lookup() for values in columns that are not
part of the ORDER BY. What happens is a special SELECT statement is
performed on the server (after in memory records are checked and the
information isn’t already in the buffers) and then the appropriate
refinement criteria is derived so that the record that matches the Locate() or
Lookup() criteria can be found quickly as if it was based on the sorted criteria.
This is an under utilized feature of IBO that I hope to get better documented. I plan to include an updated document “Optimizing Queries and Transactions” to include a description of these new capabilities and benefits.
Sent: Saturday, June 03, 2017 12:05 AM
Subject: [IBO] IBO 5.9.3 Build 2620 Release Candidate 1
I have recently release a new version of IBO for final testing. Here is an excerpt from the release notes.
6/2/2017 Version 5.9.3 [Build 2620]
This release is considered a Release Candidate only and is not an official release!
(Many of these fixes are due to recent development destabilizing the code. Major changes were done internally in order to implement new optimizations in buffering. Therefore, many of these bugs have never been part of an official release of IBO. In the future I plan to delineaate between bugs that have been in released code vs. bugs that are just a part of new development efforts.)
Fixed a problem with TIB_Cursor.Append method.
Fixed a problem with IBF_Browse form. The query with the index names was getting closed unexpectedly.
Improved the TIBOTable implementation of horizontal dataset refinement.
Fixed a bug with the ControlsReadOnly property.
Fixed Unidirectional property in TIB_Query and TIBODataset components.
Touched up DML Caching regression test.
Adjusted TIB_ColumnMemo to use UTF8 encoding instead of MBCS encoding.
Fixed up SearchingLinks and the sample apps that go along with it.
Improved OAT transaction processing to respect ActivatePendingCount.
Fixed code in FPC so that it handles the CharUpper() routine properly.
Small improvement to the TIB_ArrayGrid control.
Fixed a problem having to do with refreshing with refinement criteria.
Fixed a problem where calling InvalidateSQL could cause the dataset to close unexpectedly.
Caused warning messages to not be treated as exceptions.
Added a new regression test to make sure SELECT statements with in-line SELECT statements are still able to be able to be inserted into.
I reworked several parts of the code to compile with strict pointer types.