OOFILE 1.4 Release Notes - 2002101/16 ===================================== Refer to the respective CodeChange diaries for full details of all changes, and discussion of the thinking behind those changes in the Design Decisions diaries. MAJOR NEW FEATURES OF THIS RELEASE ================================== Documentation ------------- Move to Doxygen to generate full reference manual covering every class, being steadily improved with extra comments as we maintain the code. This release includes descriptions of every macro used by OOFILE as well as a package breakdown so you can easily see which classes are related. ALL PACKAGES ------------ Mac version brought up to date with CodeWarrior Pro7.1 and Carbonised to work under Mac OS/X. Windows version working with Visual C++ version 6. Code for using the SmartHeap memory debugger generalised to allow use of: - SmartHeap - Visual C++ debug CRT - CodeWarrior DebugNew Cope with problems with codewarrior pro6/7 parsing temporary streams - compiler/MSL bugs causing OOFILE crashes. CORE database ------------- First release of our Faircom Server support incorporated into OOFILE Professional. Add dbTableAssigner for fast single-line creation of records, eg: People << "Andy" << "Dent" << "37"; Transactions added for single-user c-tree transaction mode (previously only on server). dbTable::union_with_no_overlap added for applications performing massive, non-intersecting union_with. (dangerous if data intersects but a HUGE performance boost). dbTable now has new setSaveOption of dbTable::bufferForever which means ANY changes are kept in the dirty record cache and saves are ignored. This is used to implement the report editing mode for the preview window so that changes in the preview are local to that report (the user being expected to save the report back out as an XML document). Gareth White's fix to cope with suspect dbase files from MS Access after Y2K. Relationships now detect if you inadvertently point them at the wrong classes and give runtime warning, as this was a subtle error that had caught a few users. setRelatedRecordMatching(query expression) added to make it much easier to change relationships and establish links to lookup tables. dbTable::makeView virtual added so a default view for one-line report construction or linking tables to listboxes is possible, with easy override in user tables. Fully instrumented oofile with logging and invariants to main internal database state. You can now dump a trail of all database operations. sDefaultFormatMask added to specify default date formats for dbDateTime, dbDate and dbTime persistent date/time fields. Improved XML schema storage to preserve original table and field names. dbSelection more robust - now prevents application programmer accidentally taking a selection from one table and applying to another. Word searching enhanced to make it trivial to connect an entry field with custom oofWordParser to searches such as hasAnyWordsOf, hasAllWordsOf, hasAnyWordsStartsWithOf... Keyword data and hidden fields are now skipped by default when creating default dbViews for reporting or casual data export. Change macros so you can write your own type-safe relationship fields, rather than using the macros DECLARE_REF or DECLARE_SET. dBase backend more robust if crash application, with data flushed to disk after blob writes and deleteRecord. dbTable::recordNumberOfOID and dbRelRef::setRelatedRecord added to make it very easy to have lookup tables linked directly to controls, where the relationship will change depending on user selection. Make it possible to allocate and write directly to a buffer in a dbBLOB for better memory use when creating huge blobs. c-tree Plus backend will warn if compiled with NO_IDXENT mode that improves some record addition/deletion for indexes but is incompatible with indexes that ignore nulls. Memory leaks fixed in keyword indexing, related blob files and c-tree index definition when reopening files. CORE database - utility classes ------------------------------- Separated out the XML writing code of oofXMLwriter and other classes so it can be used to write generic XML without an OOFILE database or even compiling in the database code. Directory iteration enhanced to: - work on all platforms - simplify subclassing oofDirectoryVisitor, reducing number of mandatory overrides - allow post-processing of directory symmetric with enterDir, eg: deleting on departure oofFileRef can now return lastModifiedDate() on a file as an oofDateTime for cross-platform file scanning. Relative path conversion added via oofPathString to convert relative paths specified in Mac, Windows or Unix syntax to any of those platforms. oofFileRef::setFileType added to set Mac file type and creator codes, defaulting to current process so can automatically create databases stamped as belonging to app. oofString - case sensitive replace functions added. - replaceStringWholeWord added Added early version of code to read an existing c-tree Plus schema and create OOFILE database directly. Also allows saving an OOFILE database schema into a schema file so you can blindly open databases. GUI --- Automatically uses transactions if built with transactions in backend, so each data entry form wraps a transaction around the edit session. Allows linking checkboxes and other controls to database fields. Remove use of obsolete LGADialogBox in PowerPlant 2.1 (pro5) Add related data entry via popups, for lookup lists. Prevent messages about invalid fields when cancelling record. Reports ------- Support editing in the Mac and Windows preview windows, with a default edit dialog supplied to edit content on cell-by-cell basis. The editor can be easily overridden for a user-supplied edit dialog. Content is automatically reflowed after editing and the edit dialog includes navigation buttons to step through different areas of the report. Mac preview window now scrolls via keys (page up/down etc.). Graphing -------- Debug state dumping added. MAJOR BUG FIXES OF THIS RELEASE =============================== CORE database ------------- dBase backend failed to reload blob fields (variable length text) Prevent assert if add more than 2048 records before searching. Finish temporary database storage cleanup, was leaking. Lots of minor unix fixes so compiles and runs samples. Relationship fixes including: - fix crash if never used relationship before selectAllRelated - fix non-indexed join traversals (with new records in cache) - M:N relationship traversal - propagating deletes included N:1 New records which are not otherwise updated (ie: not dirty) are now added into the dirty record cache rather than being dropped. Remove leak with indexed c-tree leaking c-tree IFIL and IIDX structures once per table creation (usually not a problem as application-level leak). Cope with null string arguments to many field classes, caused Pro7 crashes. Fix saving dbConnect_ramp databases - wasn't writing all data. CORE database - utility classes ------------------------------- Make line endings conversions reliably return 0 for no change. Number of XML fixes including - remove double decode sometimes mangling element contents - correctly handle UTF8 Several oofString find and replacement bugs fixed, including - crash replacing \r\n\n with \r - incorrect handling overlapping strings - single char insert in middle of string - case insensitive searches broken in general - replace string by itself GUI --- MFC builds don't require c-tree or dBase database backends. Fix PowerPlant bug in new hier browser - failure to select single column tables fix bugs - size of database field no longer limits number of characters in control. Reports ------- Fix inability to cope if Mac has never had a printer defined, where report preview will crash or just appear blank. Fix failure to write xml schema for standalone field if no table in view. When parsing reports back from XML, sometimes assigned wrong style ID to blocks in layout bands, eg: in headers. If user supplies empty strings to headers, to override default fieldnames don't lose those headers when going to XML and back. Correctly set the file type of XML reports to the user-specified type. Fix windows print after preview not drawing column headers Fixes to tsv and csv text file output to prevent crash if use without preview. RTF fix failure to draw rtf headers for multiple reports & header/footer size. Fix inconsistent multiple col width calcs. Fix crash in calcColHeaders in sample col alignent (views without col headers). Fix parsing XML for names with apostrophes, complex xml files & unknown serialised elements. Fix windows - page setup changes to orientation prior report not shown in report. Fix windows scaling errors with different resolutions. Fix crash after going over page on complex reports. Graphing -------- Mac text wrapping bugs fixed. KNOWN BUGS IN 1.4 ================= CORE database ------------- ooftst46 will crash on traversing and storing a database of a HUGE directory tree (eg: an entire MacOS/X system disk). --- Automatic saves of related data multiple levels down currently drops records under some circumstances. Explicit saving is required. eg: a tree must be built in the order below. As record B2 is added, the leaves C1 and C2 are discarded from the cache. A B1 C1 C2 B2 C3 NOTE: This is a very high priority problem but this is the first user report in 5 years that the bug has been there and although we have a candidate solution it failed regression testing - OOFILE 1.4 release has already been delayed 2 weeks due to this bug. Given the lack of other users being affected, we decided to release this version and continue our analysis. Reports ------- The report preview window will trigger an edit session on returning to the window, as if the click that brought the window to the front was a click on an item to edit. CANDIDATE FEATURES FOR 1.4.1 AND LATER RELEASES IN 2002 ======================================================= Mach-O compatibility with CodeWarrior Pro7. Additional transaction models for Faircom Server. Seamless HUGE database support for c-tree Plus version 7. XML-RPC and SOAP integration with OOFILE. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- OOFILE 1.3b4d21 Release Notes - 99/06/13 ======================================== As we move back into more frequent releases, the release notes will become cumulative and include the date of each release. MAJOR NEW FEATURES OF THIS RELEASE ================================== Compiling under Windows (including DLL) and Unix. CodeWarrior Pro5 users now that Pro5 has added the 'source trees' feature, all projects will start assuming you have defined 'oofile' and 'faircom' in your global preferences. This allows you to copy our sample projects out from under the OOFILE hierarchy without breaking relative references. 'oofile' contains folders such as 'source' & 'codewarrior' 'faircom' contains your c-tree Plus headers and libraries eg: on my system oofile = BigDisk:Dev:OOFILE Development:OOFILE code: faircom = BigDisk:Dev:c-tree for CW: -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- OOFILE 1.3b4d20 Release Notes - 99/06/05 ======================================== This is a major release in terms of new functionality, for most of our customers. Please look at the diaries for detailed changes, design decisions etc. The next releases will include - possible improvements to Windows report rendering - ability to edit report content in the preview window - completion of the directory iteration and creation logic on Unix & Windows The feature set for 1.3 is frozen at the above. MAJOR NEW FEATURES OF THIS RELEASE ================================== CORE database Y2K behaviour improved handling 2 digit date conversion depending on user conversion threshold years. Fields and tables can be looked up by name. Temporary databases are supported, automatically deleting files on close. Export and import to XML is supported (using the expatpp free wrapper for James Clark's expat, which are now bundled with OOFILE.) Relationship fields can now be named and dumps of views and tables to streams show relationships more clearly to help debugging. Exception handling optionally used throughout for error reporting. oofString is now a lot more useful, with more searching features and ability to encode and decode XML entities. GUI Reimplemented with new dbGuiAdapter paradigm and using generic oofGUI files for most of the implementation. This simplifies the task of porting the GUI to new frameworks and makes it a LOT easier to hook OOFILE up to custom control types (one client has been using the Led WP engine). Outline table much more flexible on Mac - able to easily map recursive databases (see SimpleOutline sample) Reports Multiple reports can be bundled into a single oofRepMulti. They create individual sections in RTF files and appear continuously in the preview window, although page numbers can change for each report. Reports can write layout and data to XML files and read them back in for later preview. Reports are a lot smarter in layout, being able to squish graphs to fit and make a set of bands 'keep together' so they break to a new page as a unit. Reports allow you to provide a custom drawer for individual columns of a table, eg: if you have formatted text information stored in dbText or dbBLOB fields. SUMMARY OF FILE ADDITIONS, RENAMING =================================== GUI - oofync.cpp renamed to oofppyn.cpp on Mac, oofmfcyn.cpp on Windows - oofync.h moved up to GUI level, no longer separate copy in PPlant and MFC subdirs - oofgui.h and oofgui.cpp added REPORTS - oofrpXML.cpp, .h added to 'reports' dir to export reports to XML - oofriXML.cpp, .h added to 'reports' dir to read IN reports from XML - oofadXML.cpp, .h added to 'utils' dir to support report export CORE - oofxml.cpp, .h added to 'core' dir, although used only in reports at present XML - see the separate expatpp folder in parallel to the source folder NEW PRACTICES ============= An AAReadme.txt file will appear in most folders from now on The core OOFILE is released as a free product, including the persistent RAM backend. The OOFILE Personal edition provides the additional benefits of support, the dBase backend and simple HTML and character-mode report writers. It will continue to be enhanced to add value. The OOFILE Professional version will continue to exist to provide c-tree Plus support. NEW MACROS ========== (this misses some less important ones which will be fully documented later) OOF_EXTRACT_OIDS is an optional new define which controls dbTable::extract dumping out record oids. This is a useful technique for debugging but has been changed to default to off because it complicates regression testing. Version number macros are now defined for all the major packages: oof0.h OOFVERS_CORE core version oofrep.h OOFVERS_REP report writer oofGrphs.h OOFVERS_GRAPH graphing engine oofgui.h OOFVERS_GUI generic GUI classes used by PP, MFC and other framework integrations oofpp.h OOFVERS_PP PowerPlant framework (Metrowerks CodeWarrior, on Mac) oofmfc.h OOFVERS_MFC MFC GUI framework OOF_FIRST_SYNTHETIC_RECORD_OFFSET defines the first record offset used for cached new records and currently allowing for up to 2kb temporary records (that's number of not total size!). WINDOWS INSTALLATION NOTES ========================== OOFILE projects have all been changed for the libraries so you will have to either modify yours to match, or use ours. In most cases the change is just removing and adding files as per the code change diaries. you will have to add the path \oofile\source\gui to all projects MAC INSTALLATION NOTES ====================== This release has been tested with CodeWarrior Pro4 (installed from the CD) and Pro5 beta with Universal Headers 3.2. Projects are included covering both these versions. The xxx.pro4.mcp projects will be upgraded if you open with Pro 4.1 (the net-based update to IDE 3.3 and later compilers). If you open xxx.mcp projects with Pro4 or earlier there may be unpredictable results - look carefully to see if there is an xxx.pro4.mcp version first. Pro5 is very highly recommended as an improvement over Pro4 with better compilers, IDE and standard libraries. With this release we are also trying to make it a lot easier to use OOFILE on multiple projects, so projects have been included to build OOFILE and PowerPlant libraries. MAJOR BUGS FIXED ================ dbView cleanup of owned fields, affects reports which create concrete dbViews and pass in oofXXX classes or literal text Significant bugs with RAM databases affecting BLOBs and related records. Rendering reports under Windows massively improved with abandoning metafiles and adding our own oofDrawDE paradigm. dBase deleteAll bugs fixed. CHANGES IN GUI FUNCTION ======================= A new paradigm for linking database fields to controls follows the Adapter pattern. This enables you to provide a dbGUIAdapter object to connect a custom control of your own to any OOFILE field. There are no assumptions about the base class of your control (unlike the past, where PowerPlant controls had to descend from LPane). This new paradigm has been used to provide OOFILE support for all the edit control/field combinations possible in CodeWarrior Pro4. It has also easily been used by a local user to provide an adaptor to the Led cross-platform WP engine (mailto:brunot@mercator.com.au). Delete record handling in Windows has been implemented as a copy of the Mac version which means it can't delete multiple records if the dominant table handler has a multiple selection. The Mac hierarchical table support has been considerably enhanced (see SimpleOutline sample) and now allows for defining recursive trees and with 'leaf' nodes at any level of the tree. As several users have suggested tree-based presentation is a powerful UI technique we will be making further changes and supplying examples to make it easier to hook databases up to such controls.