Subject New release IBO 4.9.3
Author Jason Wharton
I just put the following release in all download areas.



6/18/2009 Release 4.9 Build 3 (beta)

I made extensive fixes and improvements to full text searching. Most notable is the inclusion of two new search types. tstWordLike and tstWordContaining. I also made it so the AUX column can be left blank in the IB_FTS utility app. I also have the beginnings of an OR operator for word pairs, triplets, etc. This is bringing about a SQLUnionItems property that will work similar to the SQLWhereItems property. That is the only way to make it fully optimizable is to have a UNION for each OR condition.

I fixed the bug having to do with the TIB_Grid making use of the private members of TCustomGrid by way of a fake class patterned after it to poke into the values. I had not yet made it consistent with the new version of Delphi 2009.

I added the OnCustomizeTPB event to the TIB_Database component. This surfaced it from the underlying transation object it contains.

I ported over the unit for handling the log files for the service class and the web server base classes I use for the community web-site.

I ported over the unit for handling SQL tracing.

I finished up support for alternate key handling and integrated it into the IB_FTS (full text search) utility application so that keys can be selected more easily.

I added in support for calculated fields that are BLOB columns. This involved changing the FieldNo variable from type word to integer.

I altered the behavior of BlobNodes. A freshly initialized blob node will show a BlobSize of -1 for being uninitialized in order to distinguish from a BLOB being deliberately set to zero length.

I included some MD5 hashing routines in the IB_Utils.pas unit.

I added the following methods below for easier access to the values in the buffers. This is also a way to directly tweak the values in calculated and COMPUTED field buffers.

{: Similar as in TDataset }

function Lookup( const ABookmark: AnsiString;

const AResultFields: AnsiString ): Variant; overload;

{: PokeValues is a quick and dirty way to directly alter the contents of the

buffers without going through the whole process of going into an edit state and

posting. This is a way to tweak the values in the buffers and should only be

used under special circumstances that warrent such. <br><br>

The function returns true if the record is found in the buffer and the new values

were actually written in.}

function PokeValues( const AKeyFields: AnsiString;

const AKeyValues: Variant;

const APokeFields: AnsiString;

const APokeValues: Variant ): boolean; overload;

{: PokeValues is a quick and dirty way to directly alter the contents of the

buffers without going through the whole process of going into an edit state and

posting. This is a way to tweak the values in the buffers and should only be

used under special circumstances that warrent such. <br><br>

The function returns true if the record is found in the buffer and the new values

were actually written in.}

function PokeValues( const ABookmark: AnsiString;

const APokeFields: AnsiString;

const APokeValues: Variant ): boolean; overload;



I added the LikeCompare() function to simulate the server's LIKE operator on text in IB_Parse.pas.

function LikeCompare( const ALikeStr, AStr: ansistring;

AIgnoreCase: boolean = false;

AEscapeChar: ansichar = '\' ): boolean;

I included a fix from Paul Filmer who corrected a parsing problem having to do with returning the correct RelationAlias for some SQL statements.

I included the fix Andreas pointed out in IBODataset.pas where I converted a PChar to PAnsiString instead of PAnsiChar. This was in the SetBookmarkData() method. It was causing an access violation.



Enjoy,

Jason Wharton




[Non-text portions of this message have been removed]