home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-09-28 | 17.6 KB | 787 lines | [TEXT/ttxt] |
- This is changes.txt
- CHANGES SINCE BETA 1.03 released
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- DOCUMENTATION
- appmaker.txt
- - added to describe how the Mac tool AppMaker is used to design and generate
- OOFILE-based gui applications (at this stage just for PowerPlant framework)
-
- gui.txt
- - added to describe common GUI integration philosophy in detail
-
- guicases.txt
- - added to describe GUI integration in terms of Use Cases
-
- guihooks.txt
- - added to describe points where you can hook in to easily customise
- gui integration behaviour, particularly editing records
-
- pplant.txt
- - added to describe PowerPlant GUI integration
-
- srcfiles.txt
- - changed to reflect new classes & shift in responsibilities
-
- testplan.txt
- - added
-
- relation.txt
- - reworded for the changes from dbRelation to dbRelationship (to avoid
- confusing people with an RDBMS background) and including simpler syntax
- for establishing a dbRelationship in a single declaration
-
- zapp.txt
- - updated to describe new zApp GUI integration
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- VALIDATION SUITE
-
- The Results directory contains output files from all standard tests, where
- this makes sense (ie: skipping ooftest3 & 5 which vary per run).
-
- The source of the validation suite has been moved into the Source directory.
-
- ooftst02.inc
- - added a member of dbPeople to generate the test data (previously in main() in
- ooftest2.cpp)
- - define the relationship between People and Visits. This simplifies the main()
- in any test programs using ooftest2.inc.
-
- ooftst08.cpp
- - added to test dbConnect::raise()
-
- ooftst09.cpp
- - added to test deleting records
-
- ooftst10.cpp
- - added to test importing data from streams
-
- ooftst11.cpp
- - added to demonstrate using the test data generator
-
- ooftst12.cpp
- - added to demonstrate compound indexes & virtual fields
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- DETAILED CODE CHANGES - SEE README.TXT FOR A SUMMARY
-
- 95/06/24
- FIXING CodeWarrior v6 complaints & reviewed inlines
-
- As a general change, changed two forms of expressions, eg:
-
- (dbChar::operator const char*)()
- to
- (const char*)*this
-
-
- (operator=)(n);
- to
- *this = n;
-
-
- Made the following non-inline
- dbChar::operator const char*()
- const void* dbField::binaryContents
- void dbBLOB::SetLength(const unsigned long len)
-
-
- CLASS dbConnect
- Method raise(ostream& os)
- - remove special case
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- Bug Fix 95/06/25
- Prevents errors using dbChar fields in related tables (eg: change the dbText to a dbChar in ooftest2)
-
- class OOF_Context_ctree, change
- mBlobFieldBodies(new OOF_ExpandableLongArray(*(rhs->mBlobFieldBodies)))
-
- to
-
- mBlobFieldBodies(rhs->mBlobFieldBodies ?
- new OOF_ExpandableLongArray(*(rhs->mBlobFieldBodies))
- : 0)
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- Minor fixes to get demo lib working 95/08/05
-
- CLASS dbConnect_ctree
- Method SetupConnection
- - correct the number of files passed into InitISAM so it only adds 2 if
- using superfiles (doesn't assume always)
-
- Method raise(ostream& os)
- - put back the Metrowerks special case, CW6 didn't fix lack of
- operator<<(streambuf*)
-
- Method MakeTableBackend
- - enforce 2 table limit
-
-
- CLASS OOF_tableBackend_ctree
- Method buildSchema
- - enforce 10 indexes/table limit
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- MINOR MODS FOR PACKAGING & GUI SUPPORT 95/08/14-21
- Changed all c-tree inclusions to use "" instead of <> in case people using folder outside their compiler tree.
-
- CLASS OOF_Dctionary
- Method deleteAll
- - added
-
-
- CLASS dbText
- Method operator Ptr
- - added for Mac only, just a cast of operator char*
- - removed 95/08/26 as it's a recursive cast - the real problem was
- casting away constness
-
-
- CLASS dbChar
- Method operator Ptr
- - added for Mac only, just a cast of operator char*
- - removed 95/08/26
-
- Method asStr255
- - added for Mac only, to update a Str255 Pascal string
-
- Method setStr255
- - added for Mac only, to set from a Str255 Pascal string
-
-
- FILES oof1.hpp, oof1.inl
- Pulled classes OOF_DictRep, OOF_Dictionary & dbClass out to oof0.* to give a
- much lighter set of root headers to include in the gui stuff.
-
-
- CLASS OOF_MacString
- - added subclass to enable explicit construction from a Str63.
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ADDING ALERT-BASED "raise" FOR MAC, INSTEAD OF USING CONSOLE
- 95/08/23
- FILES
- oofile.hpp
- - define kBigErrAlert
-
- oofmac.rsrc
- - create Alert resource
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- MINOR FIXES
- 95/08/31
- CLASS dbTable
-
- Method atLast
- - added simple forwarder to backend
-
- Method atFirst
- - added simple forwarder to backend
-
-
- CLASS OOF_tableBackend
- Method atLast
- - added pure virtual
-
- Method atFirst
- - added pure virtual
-
-
- CLASS OOF_tableBackend_ctree
- - set enums kDataExtendSize=0, kIndexExtendSize=0 (were default)
-
- Method prev
- - implemented using gotoRelativeRecord
-
- Method start
- - set mNoMore correctly for case of All records with only 1 in file!
-
- Method next
- - fixed bug for selection of All records - mNoMore wasn't been set
- on last record, but when we iterated past it. This was inconsistent
- with other selection states.
-
- Method atLast
- - added simple forwarder to backend
-
- Method atFirst
- - added simple forwarder to backend
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ADDING DELETION OF RECORDS & FIXING ITERATORS
- 95/09/14 - 17
-
- CLASS dbTable
- Method deleteRecord
- - added with call to propagateDelete before forwarding
- - only delete if record loaded
-
- Method deleteSelection
- - added to iterate over selection, calling deleteRecord
- - fixed bug, shouldn't iterate over selection but calls start() N times
- as we're always deleting the first record
-
- Method deleteAll
- - added to call deleteSelection for all recs
-
- Method selectNone
- - added as simple forwarder
-
- Method returnToContext
- - added as simple forwarder
-
-
-
- CLASS OOF_tableBackend
- Method selectNone
- - added pure virtual
-
- Method returnToContext
- - added pure virtual
-
-
- CLASS OOF_tableBackend_ctree
- - mNoMore removed, including logic to set it in many methods
-
- Method selectNone
- - added
-
- Method EnsureOurContextMatchesISAM
- - added to cope with clones of this table changing selection
-
- Method SetISAMtoContext(OOF_Context_ctree* ctx)
- - added
-
- Method SaveContext
- use SetISAMtoContext
-
- Method start
- - call CompleteMoveToRecForAllRecs for allRecs
-
- Method next
- - call EnsureOurContextMatchesISAM before NextRecord()
- - call CompleteMoveToRecForAllRecs for allRecs
-
- Method more
- - change from just using mNoMore flag to checking the database state
-
- Method invert
- - call EnsureOurContextMatchesISAM before NextRecord()
-
- Method count
- - call countAll instead of ctree function
-
- Method isRecordLoaded
- - use mRecordState instead of testing curr offset
-
- Method LoadRecordAtOffset
- - set mRecordState
- - call CompleteLoadFromOffset
-
- Method newRecord
- - set mRecordState
-
- Method ReplaceThisContextWith
- - copy rhs->mRecordState
-
- Method copy constructor
- - copy rhs->mRecordState
-
- Method unloadRecord
- - set mRecordState
- - don't call ClearContext
-
- Method BuildKey (all versions)
- - made const as it is a utility method, not changing state
-
- Method CompleteLoadFromOffset
- - added to contain some common state-setting
-
- Method CompleteMoveToRecForAllRecs
- - added to contain some common error logic & call to
- CompleteLoadFromOffset & MaybeLoadRecordFromCache
- - also handle VPNT_ERR (159) indicating have iterated off end, if last
- rec was a deleted rec
-
- Method MaybeLoadRecordFromCache
- - move logic here from LoadRecordAtOffset
-
- Method ReplaceThisContextWith
- - renamed to returnToContext as will now be publicly available
-
-
- CLASS OOF_ctreeSelection
- Method EmptySelection - renamed as selectNone
-
- Method deleteEntry
- - added to implement deleteRecord, changing state if appropriate
- (oneRec->empty) and deleting a cell in the record pointers array
-
-
- CLASS OOF_relChainList
- Method propagateDelete
- - added simple copy of propagateSave
-
-
- CLASS OOF_Context_ctree
- - added enum ERecordState
- - replace all use of mNew with mRecordState.
-
- Method ClearContext - deleted
-
-
- CLASS dbRelationship
- Method constructor
- - added that takes joinFields so can have entire relationship declared
- in a constructor call, rather than requiring a followup method call
-
-
- FILES ooftest2.inc
- - included the global variable and dbRelationship defs' normally inside
- main() of the various test programs
- - added dbPeople.AddTest2Data to wrap generation of 4 test records
-
-
- CLASS dbRelChain
- Method deleteRecord
- - call validateContext as may not have been any field access for the
- current record, before deleting, so related context could be invalid
- - don't deleteRecord, deleteSelection
-
- FUNC operator<<(ostream& os, dbConnect_ctree& connect)
- - don't call describe(), just dump all tables
-
-
- CLASS stPreserveOOFILEcontext
- - added simple stack wrapper to create and restore a context
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- CLEANING UP UNDEFINED METHODS & WORDING
- 95/09/16-17
-
- CLASS dbTable
- Method createContext
- - added simple forwarder
-
- Method contextChangedFrom
- - added simple forwarder
-
- Method updateContext
- - added simple forwarder
-
-
- CLASS dbUlong
- Method operator==(const unsigned long)
- - added as copy from dbNumericField::operator==(const long)
-
-
- CLASS dbRelationship
- Method BuildRelation renamed to BuildRelationship
-
-
- CLASS dbRelHalf
- Method BuildRelation renamed to BuildRelationship
-
-
- CLASS OOF_tableBackend
- Method StackDirtyBuffer renamed to CacheDirtyBuffer (it's not a stack)
-
-
- CLASS OOF_tableBackend_ctree
- Method StackDirtyBuffer renamed to CacheDirtyBuffer
-
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ADDING INPUT FROM STREAMS
- 95/09/18
-
- generally, for all dbField subclasses
- Method outputOnStream
- - renamed to "extract", as consistency (eg: Teale's "C++ IOStreams")
-
- MACRO CLASS_TABLE(tbl)
- friend operator>>
- - added to call tbl::insert(istream)
-
-
- CLASS dbTable
- func operator>>
- - added to call dbTable::insert(istream)
-
- Method dumpFieldData
- - renamed to extract(), for consistency
-
- Method insert
- - added
-
-
- CLASS dbField
- Method insert
- - added default to just consume the stream up to the next separator
-
-
- CLASS dbChar
- Method insert
- - added to read from stream
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- 95/09/19-20
- MINOR FIXES
- CLASS dbTable
- Method sortBy(dbField*)
- - added to complement sortBy(dbField&)
-
-
- CLASS dbChar
- Method insert
- - fixed bug in that it could go one char past buffer if exactly maxLen
- chars read
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- IMPLEMENTING COMPOUND INDEXES and VIRTUAL FIELDS
- 95/09/21
-
- FUNC operator<<(dbCompoundField, dbField)
- - added to call dbCompoundField::addSegment
-
-
- CLASS dbField
- Method fieldIsVirtual
- - added default false
-
-
- CLASS dbCompoundField
- Method fieldIsVirtual
- - added to return true
-
- Method fieldIsBinary
- - added to return false
- - later removed - we DO allow binary fields and can't tell!
-
- Method segment
- - added to return a const dbField* of a segment
-
-
- CLASS OOF_tableBackend_ctree
- Method BuildBackendTables
- - check fieldIsVirtual & don't advance DODA numbers
- - removed unnecessary second retrieval of current field pointer
-
- Method CompleteIIDX
- - build multiple segment keys for compound fields
- - use fieldLen() calls instead of DODA length in defining segments -
- don't include the terminating nulls on chars! (particularly in compounds)
-
- Method FieldAlignsTo
- - return 1 for compoundFields - they should have no padding
-
- Method BuildDODA
- - skip virtual fields
-
-
-
- CLASS dbField
- Method extract
- - change from returning "#####" to an empty string
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- IMPLEMENTING REUSE OF COMPOUND INDEXES BY OTHER FIELDS
- 95/09/23
- General
- - went through all dbField classes & made search ops const (a few weren't)
-
-
- CLASS dbCompoundField
- Method operator<<
- - converted function to this after g++ complained and realised that,
- unlike stream ops, this has the class on the lhs
-
- Method startsWith
- - added as copy of dbChar method
-
-
- CLASS OOF_Dictionary
- - mOwnsContents added
- Method destructor
- - if mOwnsContents, deleteAll
-
- Method ownsContents
- - added to set variable
-
-
- CLASS OOF_ctreeIndexDictionary
- - added subclass of OOF_Dictionary, with ownsContents set, to manage a list of OOF_ctreeIndexSegList
-
-
- CLASS OOF_ctreeIndexSegList
- - added to store & retrieve an array of index file numbers
-
-
-
- CLASS OOF_tableBackend_ctree
- - added mIndexDictionary
-
- Method CompleteIIDX
- - add entries to mIndexDictionary for indexed compound fields
-
- Method BuildSchema
- - for non-indexed fields, if we have an mIndexDictionary, try to find
- compound indices that will do
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- IMPLEMENTING COMPOUND SEARCHING & COMBINATORIAL SEARCHES
- 95/09/23-25
- CLASS dbQueryClause
- enum QueryClauseTypes
- - add binaryCombination
-
- Method operator&&
- Method operator&
- Method operator||
- Method operator|
- - add to create a dbQueryBinaryCombo
-
-
- CLASS dbQueryBinaryCombo
- - added mTempKeyStoreToDispose
-
- Method pairFieldsIfCouldUseCompoundIndex
- - added to work out if fields can be combined (first is AND clause)
- and return their field No's so another can match to a compound index
-
- Method makeCompoundSearch
- - added to create the key (updating mTempKeyStoreToDispose) and make a
- search much like the dbField operators
-
- Method destructor
- - added to delete mTempKeyStoreToDispose
-
-
-
- CLASS dbQueryBinary
- Method destructor
- - added as had leak
-
- Method literalClause
- - now also return the clause if type is atomicStrLiteral
-
- CLASS dbQueryLiteralBLOB
- - added to contain a binary literal, for use with compound queries
- ending in binary numbers
-
- CLASS dbQueryTrinary
- Method destructor
- - added as had leak
-
-
- CLASS dbQueryLiteralStr
- Method binaryContents
- - added to let dbQueryBinaryCombo treat strings and binaries the same
-
- Method literalLen() added to
- dbQueryLiteralStr
- dbQueryLiteralShort
- dbQueryLiteralUshort
- dbQueryLiteralLong
- dbQueryLiteralUlong
- dbQueryLiteralDouble
-
-
- CLASS OOF_ctreeSelection
- Method adopt
- - add to let one selection totally take over the other, leaving the
- other with a new empty representation
-
- Method DropSelection
- - change state to empty
-
- Method currentItem
- - added copy of operator() that's easier to call internally
-
- Method value
- - added as const method to return a value, not a reference
-
-
- - take over from OOF_tableBackend_ctree & rewrite to use for loops and value()
- instead of selection iterators (made const clean)
- difference_with
- intersection_with
- union_With
-
- - marked const
- more
- state
- isEmpty
- count
- oneRecOffset
- isMember
-
- Method isMember
- - don't use iterators to scan a selection - shouldn't change state
-
-
- CLASS OOF_tableBackend_ctree
- - change into shell methods calling OOF_ctreeSelection
- difference_with
- intersection_with
- union_With
-
- - marked const
- more
- count
- countAll
- atFirst
- atLast
-
- Method SearchCombineSubclauses
- - added
-
- Method Search
- - call SearchCombineSubclauses for binaryCombination clauses
- - check if have compound index that could satisfy search
-
- Method unloadRecord
- - don't delete ctx->mBuffer as it is deleted in the context destructor
- - added SmartHeap check
-
- Method SaveContext
- - added lots more SmartHeap checks
-
- Method returnToContext
- - added lots more SmartHeap checks
- - set the context we're taking over to have a zero mBuffer
-
-
- CLASS OOF_tableBackend
- - marked const
- more
- count
- countAll
- atFirst
- atLast
-
-
-
- CLASS dbTable
- - marked const
- more
- count
- countAll
- atFirst
- atLast
-
-
- CLASS OOF_List
- - marked const
- isEmpty
- member
- count
-
-
- CLASS OOF_ExpandableLongArray
- Method value
- - added as const method to return a value, not a reference
-
- Method destructor
- - moved guts into DeleteBits
-
- Method operator=
- - use DeleteBits
-
- Method copyContents
- - added to copy the array from another object
-
-
- GENERALLY
- Removed unnecessary 'const' from value parameters & return types such as int.
-
-
- CLASS OOF_ctreeIndexDictionary
- Method fieldMatchingPair
- - added to search segment list
-
-
- CLASS OOF_ctreeIndexSegList
- - added mIndexField
-
- Method destructor
- - made virtual (naughty boy!)
-
- Method constructor
- - also take dbField param
-
- Method startsWith(unsigned long)
- - added
-
-
- CLASS OOF_List
- Method sortedInsertNoDups
- - fixed bug with dup values that truncated the list at the dup! (missing
- return from dup detection, so linked deleted element at end of chain)
-
-
- CLASS dbDate
- Method checkDate
- - added simple sanity checking
-
- Method istream2ymd
- - use checkDate
-
- Method ymd2long
- - use checkDate (if OOF_Debug)
-
- Method chars2Long
- - return 0 if istream2ymd fails
-
-
- -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- FIXING CROSS-PLATFORM BLOBS (don't write a binary structure to file)
- 95/09/27
-
- CLASS OOF_ctreeDVref - removed
-
- CLASS OOF_tableBackend_ctree
- Method BlobPosFromBuffer
- - added
-
- Method SetBlobLenInBuffer
- - added
-
- Method SetBlobPosInBuffer
- - added
-
- Method setBlobLength
- - rewrite using a direct write rather than a OOF_ctreeDVref structure
-
- Method blobPointerReferenceSize
- - rewrite to calc size without referring to OOF_ctreeDVref
-
- Method saveContext
- - use new blob info setters
-
- Method deleteRecord
- - use BlobPosFromBuffer
-
- Method fieldDataLen
- - use BlobLenFromBuffer
-
- Method loadBlob
- - use BlobPosFromBuffer & BlobLenFromBuffer
-
-
- all the above fixed a logic bug bug there was a more subtle bug
-
- Method BuildDODA
- - replace sizeof(CT_INT4) with 4
- (CT_INT4 is a numeric constant, not a 4byte integer type, and thus
- varied in size cross-platform)