Subject | IBO 4.9.14 Build 41 released |
---|---|
Author | kylixguru |
Post date | 2012-02-21T07:39:38Z |
Here are the release notes since the last sub-release:
2/20/2012 4.9 Release 14 [Build 41]
I fixed a bug in the handling of the PessimisticLocking property. This bug was introduced in build 36f. This bug may cause changes to be lost because it clears the lock by doing a LosePoint after the edit has posted but prior to the transaction being activated. I closed this gap by adding the property ActivatePendingCount to the TIB_Transaction. This tracks the fact that a post was made and that the transaction is awaiting activation. It used to be activated immediately, but I needed to defer this and didn't take PessimisticLocking login into account at that time. I added this to the regression testing app so that this won't get broken in the future.
I made changes to allow for array columns to be edited in the memo popup from the IB_Grid when EditLinksAuto is set to true.
2/15/2012 Version 4.9 Release 14 [Build 40]
I fixed a bug in the handling of varchar array columns. I was not allocating sufficient buffer space to deal with them properly and so there was a footer overrun that FastMM4 handily detected and brought to my attention. This problem was showing up by causing the IB_ArrayGrid to have access violations due to the corrupted memory issue of overrunning its buffer space.
I enhanced the versatility of using KeyLinksAutoDefine. In some cases it would attempt to add in the RDB$DB_KEY of a table to work as the KeyLinks value. However, in some cases this would cause the statement to fail to prepare. I now detect this and set a flag to prevent IBO from adding in the DB_KEY and attempt to prepare the statement again without it. Thus, it will go ahead and work after a retry if the SQL statement is otherwise correct. No exception will be raised but there will be evidence of a failed prepare that shows up in the SQL trace monitor results.
2/14/2012 Version 4.9 Release 14 [Build 39]
I fixed a problem with TIBOTable and CachedUpdates. In one case it was possible to call ApplyUpdates and the associated transaction was not properly activated.
I added a new feature to the TIB_Script component so that it is possible to create a database, including array data, from a script file. This has been made possible by implementing the AsString property for the IB_ArrayColumn object. I added a new SET command called BATCH_EXECUTE that allows you to setup a prepared statement with ? input parameters. Here is an example of how you can use it:
SET BATCH_EXECUTE 'INSERT INTO COUNT_TEST( ID, COL1, COL2 ) ' +
'VALUES( ?COUNT_TEST.ID' +
', ?COUNT_TEST.COL1' +
', ?COUNT_TEST.COL2 )';
0, 'Zero', '0';
1, 'One', '1';
2, 'Two', '2';
3, 'Three', '3';
4, 'Four', '4';
5, 'Five', '5';
6, 'Six', '6';
7, 'Seven', '7';
8, 'Eight', '8';
9, 'Nine', '9';
SET BATCH_EXECUTE '';
COMMIT;
You pass in the raw data that you want executed as the following statements and set the BATCH_EXECUTE item to blank in order to resume normal script execution.
2/9/2012 Version 4.9 Release 14 [Build 38]
I made additional improvements to the handling of the Screen.Cursor to remove flickering.
I fixed a bug in the SchemaCache.IndexDefs SEGS param value. It was not formatted correctly.
I fixed a bug in the handling of VARCHAR array column values. If it was totally blank via all #0 characters, I needed to return a blank string instead of a full string of #0's.
I added functionality to make IBO more consistent about when a record is synchronized after an insert or an edit. There was a different behavior depending on the setting of PreparedInserts, for example. I also added the same logic to when you provide your own custom value for InsertSQL.
I tightened up the handling of AbortFetching and FetchingAborted so that it is possible to resume normal operations after calling AbortFetching. The flag will automatically be reset when a typical data navigation is requested. Thus, the FetchingAborted flag will only pertain to the last data navigation call. NOTE: You may need to make use of the FetchingAbortedGen property instead of the plain old FetchingAborted property so that you are not thrown off by other factors, such as a TIB_Grid repainting itself and clearing the flag before your code checking for that flag's value is executed. This property (FetchingAbortedGen) allows you to mark the level with a local variable storing its value prior to an operation (like a While not Eof do ... loop) and then to monitor it during its processing and to jump out if that value gets incremented by a call to AbortFetching.
I use the FetchingAbortedGen property this way because it's possible to have application "callbacks". These "callbacks" are really just Application.ProcessMessages() calls taking place inbetween fetches (depending on your CallbackInc property setting). Thus, if a mouse click results in something where AbortFetching is called, your process can detect that and act accordingly. For example, this happens with the TIB_Grid. If you click a cell while the dataset is fetching, it will automatically cause the dataset to cancel its fetching efforts by calling AbortFetching. The idea is to have the grid override so that the user can grab control away from a previous call, like when CTRL+END is pressed and the dataset is scrolling to the end and fetching records in the process.
Thus, code that used to look like this:
begin
IB_Query1.Open;
while ( IB_Query1.Active ) and
( not IB_Query1.Eof ) and
( not IB_Query1.FetchingAborted ) do
IB_Query1.Next;
end;
should now be rewritten as this to be robust:
var
FAGen: integer;
begin
FAGen := IB_Query1.FetchingAbortedGen;
IB_Query1.Open;
while ( IB_Query1.Active ) and
( not IB_Query1.Eof ) and
( FAGen = IB_Query1.FetchingAbortedGen ) do
IB_Query1.Next;
end;
1/30/2012 Version 4.9 Release 14 [Build 37]
I cleaned up the way the OnUpdateError notification is handled for the TDataset based components. I also added a protected virtual procedure UpdateError so that you can customize your own sub-class to handle errors in a more specific manner throughout your application.
I fixed a problem with TIBODataset and AssignSQLWithSearch when FieldsIndex is being used.
I fixed another problem with the screen cursor flickering between the busy state and the yield state.
2/20/2012 4.9 Release 14 [Build 41]
I fixed a bug in the handling of the PessimisticLocking property. This bug was introduced in build 36f. This bug may cause changes to be lost because it clears the lock by doing a LosePoint after the edit has posted but prior to the transaction being activated. I closed this gap by adding the property ActivatePendingCount to the TIB_Transaction. This tracks the fact that a post was made and that the transaction is awaiting activation. It used to be activated immediately, but I needed to defer this and didn't take PessimisticLocking login into account at that time. I added this to the regression testing app so that this won't get broken in the future.
I made changes to allow for array columns to be edited in the memo popup from the IB_Grid when EditLinksAuto is set to true.
2/15/2012 Version 4.9 Release 14 [Build 40]
I fixed a bug in the handling of varchar array columns. I was not allocating sufficient buffer space to deal with them properly and so there was a footer overrun that FastMM4 handily detected and brought to my attention. This problem was showing up by causing the IB_ArrayGrid to have access violations due to the corrupted memory issue of overrunning its buffer space.
I enhanced the versatility of using KeyLinksAutoDefine. In some cases it would attempt to add in the RDB$DB_KEY of a table to work as the KeyLinks value. However, in some cases this would cause the statement to fail to prepare. I now detect this and set a flag to prevent IBO from adding in the DB_KEY and attempt to prepare the statement again without it. Thus, it will go ahead and work after a retry if the SQL statement is otherwise correct. No exception will be raised but there will be evidence of a failed prepare that shows up in the SQL trace monitor results.
2/14/2012 Version 4.9 Release 14 [Build 39]
I fixed a problem with TIBOTable and CachedUpdates. In one case it was possible to call ApplyUpdates and the associated transaction was not properly activated.
I added a new feature to the TIB_Script component so that it is possible to create a database, including array data, from a script file. This has been made possible by implementing the AsString property for the IB_ArrayColumn object. I added a new SET command called BATCH_EXECUTE that allows you to setup a prepared statement with ? input parameters. Here is an example of how you can use it:
SET BATCH_EXECUTE 'INSERT INTO COUNT_TEST( ID, COL1, COL2 ) ' +
'VALUES( ?COUNT_TEST.ID' +
', ?COUNT_TEST.COL1' +
', ?COUNT_TEST.COL2 )';
0, 'Zero', '0';
1, 'One', '1';
2, 'Two', '2';
3, 'Three', '3';
4, 'Four', '4';
5, 'Five', '5';
6, 'Six', '6';
7, 'Seven', '7';
8, 'Eight', '8';
9, 'Nine', '9';
SET BATCH_EXECUTE '';
COMMIT;
You pass in the raw data that you want executed as the following statements and set the BATCH_EXECUTE item to blank in order to resume normal script execution.
2/9/2012 Version 4.9 Release 14 [Build 38]
I made additional improvements to the handling of the Screen.Cursor to remove flickering.
I fixed a bug in the SchemaCache.IndexDefs SEGS param value. It was not formatted correctly.
I fixed a bug in the handling of VARCHAR array column values. If it was totally blank via all #0 characters, I needed to return a blank string instead of a full string of #0's.
I added functionality to make IBO more consistent about when a record is synchronized after an insert or an edit. There was a different behavior depending on the setting of PreparedInserts, for example. I also added the same logic to when you provide your own custom value for InsertSQL.
I tightened up the handling of AbortFetching and FetchingAborted so that it is possible to resume normal operations after calling AbortFetching. The flag will automatically be reset when a typical data navigation is requested. Thus, the FetchingAborted flag will only pertain to the last data navigation call. NOTE: You may need to make use of the FetchingAbortedGen property instead of the plain old FetchingAborted property so that you are not thrown off by other factors, such as a TIB_Grid repainting itself and clearing the flag before your code checking for that flag's value is executed. This property (FetchingAbortedGen) allows you to mark the level with a local variable storing its value prior to an operation (like a While not Eof do ... loop) and then to monitor it during its processing and to jump out if that value gets incremented by a call to AbortFetching.
I use the FetchingAbortedGen property this way because it's possible to have application "callbacks". These "callbacks" are really just Application.ProcessMessages() calls taking place inbetween fetches (depending on your CallbackInc property setting). Thus, if a mouse click results in something where AbortFetching is called, your process can detect that and act accordingly. For example, this happens with the TIB_Grid. If you click a cell while the dataset is fetching, it will automatically cause the dataset to cancel its fetching efforts by calling AbortFetching. The idea is to have the grid override so that the user can grab control away from a previous call, like when CTRL+END is pressed and the dataset is scrolling to the end and fetching records in the process.
Thus, code that used to look like this:
begin
IB_Query1.Open;
while ( IB_Query1.Active ) and
( not IB_Query1.Eof ) and
( not IB_Query1.FetchingAborted ) do
IB_Query1.Next;
end;
should now be rewritten as this to be robust:
var
FAGen: integer;
begin
FAGen := IB_Query1.FetchingAbortedGen;
IB_Query1.Open;
while ( IB_Query1.Active ) and
( not IB_Query1.Eof ) and
( FAGen = IB_Query1.FetchingAbortedGen ) do
IB_Query1.Next;
end;
1/30/2012 Version 4.9 Release 14 [Build 37]
I cleaned up the way the OnUpdateError notification is handled for the TDataset based components. I also added a protected virtual procedure UpdateError so that you can customize your own sub-class to handle errors in a more specific manner throughout your application.
I fixed a problem with TIBODataset and AssignSQLWithSearch when FieldsIndex is being used.
I fixed another problem with the screen cursor flickering between the busy state and the yield state.