OOFILE Version 1.3b3 Release Notes

Back to index

State of the beta

This beta includes the Persistent RAM (ramp) and dBase backends. For Mac GUI customers, it includes the current PowerPlant interface classes, the new report-writer and graphing engine.

The graphing engine is cross-platform, compilable on either Mac or Windows.

The report-writer includes a comprehensive RTF export, including graphs, and a partial HTML export (mainly just lacking graphs). The next beta will include graphs in HTML and a working Windows GUI model. A Windows report-writer is in alpha and mainly needs integrating with the new multi-render report-writer.

The MFC integration classes will be developed to beta state before any significant changes to the PowerPlant integration classes, to avoid design changes due to cross-platform issues.


OOFILE Version 1.3b3 PowerPlant Release Notes

The entire GUI model has changed from the original 1.2 release. That model was very limited, based on assumptions of browser windows which displayed records, taking you off to single editing dialogs. In particular, it failed to cope with a mixture of browsing and editing on the same window.

The current model makes use of a central coordinating dbGUI object to handle the interaction between editing and browsing records.

A copy of our current version of LTextTableView and associated classes is included which adds features since the official PowerPlant release on CW11.


Changes needed in your code

Header files renamed
all files are now consistently named with a .cpp or .h extension. However, if you leave the #include oofblah.hpp names in your files there should be no problems as the hpp directory has been added to contain a number of files that redirect these to #include oofblah.h
stream includes removed
The main oofile headers don't include streams so if you include something like oof4.h and expect it to supply iostreams you will now have to also include oofios.h. The change enables precompilation of the main OOFILE headers.


New Features since 1.3b2

debug logging
if you #define OOF_DEBUG_LOG_NAME to a valid filename, debug logging will occur for all OOFILE code (the define must be in a compiler setting so seen by the oofblah.cp sources). If you want to include comments from your own code in the debug log, use the macro OOF_DEBUG_LOG which takes either an ostrstream or a constant string. This macro preprocesses to nothing if you don't define OOF_DEBUG_LOG_NAME.
clone methods don't need downcasting
methods such as cloneWithoutSelection now return a pointer to your table type (eg: dbPeople*) and don't need downcasting.
duplicate record handling added
dbTable methods ignoreDuplicateRecords and noticeDuplicateRecords added to control duplicate handling, eg: if importing large numbers of records and don't care about duplicates, you may wish the duplicates to just be skipped.
New Field Types
dbDateTime and dbTime have been added. dbDateTime stores a number of seconds since a (resettable) base year, which implies a range of about 130 years. It only takes up a single unsigned long in the database and so is highly suited to logfiles.
OOF_String extended
many operators added to make it more useful as a general string type, including shorten(numChars), operator[] and operator+= and several convertNumber() functions to convert ints or doubles with optional printf masks.
dbDate formatting
masks added as shown in ooftst33 to give a lot of control over presentation of dates.
field dirty status now tracked
This mainly impacts on GUI behaviour but also avoids unnecessary saves and keyword updates if fields are not dirtied.
dbView takes constant fields and no table
a dbView can now be constructed without a dbTable parameter. This view will iterate once over its fields. You can pass in constant strings and standalone oofXXX objects to any view and they will be iterated alongside any other fields.
new keyword searches
hasAnyWord, hasAllWords, hasWordStartsWith, hasAnyWordStartsWith, hasAllWordsStartsWith searches added to search for combinations of words in one call.
table-level keyword searches
searchTable, searchTableAllWords & searchTableAnyWords searches added on dbTable, which have the effect of searching all keyword indices associated with fields of that table.
oofDirectory expanded to include file launching
Currently a Mac-only function, openFile() will launch the specified file as if double-clicked.
 
MakeQueryLiteral on numeric fields made public makeQueryLiteral
Suggested change from Jesse Jones that makes it lot easier to write your own front-end to build queries.
fields return null values if no record
If there is no record loaded and selection is empty, instead of an error the dbTable behaves as if an empty object is loaded, with fields returning 0 or null values. This was found to be necessary by people writing reports with related data included in the report.
default field calculators added
You can now attach a default calculator with a second parameter to calculateWith, or later calling useCalculatorOnlyForDefaults(). Default calculators are great for things like auto-generated ID fields that the user can override and are used to generate the value stored in new records, if never set directly.
MN relationship propagations fixed
join relationships were propagating join value updates through to the far rhs, instead of just to the intermediate table. Deletions were being propagated down the entire chain.
selections now own their sort order
This implies that cloned dbTables with a shared selection have the same sort order. eg: a browser and edit dialog will have the same sort order, so clicking the next record button in one advances the other to the same record.


Major Bugfixes since 1.3b2

err 42 on adding records
Fix bug so we guarantee unlocking, and we set a write lock before AddRecord to ensure c-tree unlocks. If there is no locking in effect c-tree assumes you are using low-level locks and creates a lock that you must free.
1-1 pointer relationships failed to handle missing related records
the rhs selection was left pointing at the previous record, instead of being empty
dbChar left garbage after terminating null
effect in c-tree indexed fields was to no longer match keys exactly as they search to the end of the field
 
imports with calculated fields failed
the calculated fields were not skipped, causing the import to fail. Now tests fieldIsVirtual().
keyword indices smarter about updates
adding keyworded records attempted to find existing keywords to delete them. Large performance hit in searching for non-existent keywords.
sorting related tables not triggered
the sorter was not copied to the cloned rhs table, and broadcasting messages to trigger the sort didn't reach the rhs table.
dbTable copy ctor
fixes from Jesse Jones to prevent leaks and copy fields such as mConnection
record loading triggered by field access
field accessors now force loading of current record. If did a search or other change of selection on a parent record then only accessed fields in the related records the related selection was not being updated.
searchEqual(both)
fix bug spotted by Tobias Herbert, that batchReq.btotal is wrong if not found, not reliably set to zero, so test that err==INOT_ERR
conflict with 'reverse' in the STL file algo.h fixed
our class 'reverse' used to declare sort orders and compound indices renamed as 'reversed'
related records now dirty their parent
adding related records, or just setting their fields, now dirties the parent record so it will be saved, in case you never dirty the parent directly.


Known Bugs

MN relationship right-to-left traversals
Traversing an MN relationship backwards (as in a related search) fails as relateFromRecord uses the prototypical OOF_RelMN pointed to by the lhs of the relationship, rather than the actual OOF_RelMN pointed to by the rhs.
Global dbViews cause errors
Creating a global dbView without specifying no shared selection (ie: don't have a second ctor param of false), before the connection is opened, causes an error as the database cannot yet be cloned.
indexed search on "no dups" numeric indices fails for == searches
(See ooftst7) the record is not found for the various searches on nodups indices. Indices allowing duplicates are working.
searches on compound indices of two char fields fails
(See ooftst12) the record is not found for the search on OtherName + LastName.
dbase backend fails to ignore deleted records
In tests 6 and 9 the dBase backend fails to handle deleted records correctly. In test 6 related deleted records are sometimes retrieved when they should have been ignored, or their space reused. In test9, the database fails to move on to the next record when a record is deleted.
dbase backend does not support pointer relationships
The dbase backend does not yet support pointer relationships. It needs to store them as a long integer equivalent.
dbase backend does not support dbTime fields
The dbase backend does not yet support dbTime. It needs a character storage format defining similarly to how dbDateTime is stored, and the backend I/O routines extending to cope.
dbase backend does not support dbBLOB fields
The dbase backend does not yet support dBLOB other than the dbText subclass. It needs a standard way to hexify, or just blindly store the blobs in the dbt files (breaking dBase compatability).
PowerPlant fails to update highlighted record
If you have edited a record so its position in the sorted browser changes, or you have created a new record, the highlighting in the browser doesn't change to match the new location.


NOTE: a full diary of all changes since 1.2 is in chg13b3.txt.

Previous Version 1.3b2 Release Notes


Back to index


(c) Copyright A.D. Software 1994-1997 (All Rights Reserved).
Last Updated: 3rd April 1997