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