home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Demos / OOFILE / docs / changes.txt < prev    next >
Encoding:
Text File  |  1995-09-28  |  17.6 KB  |  787 lines  |  [TEXT/ttxt]

  1. This is changes.txt
  2. CHANGES SINCE BETA 1.03 released
  3. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  4. DOCUMENTATION
  5. appmaker.txt
  6. - added to describe how the Mac tool AppMaker is used to design and generate 
  7.   OOFILE-based gui applications (at this stage just for PowerPlant framework)
  8.  
  9. gui.txt
  10. - added to describe common GUI integration philosophy in detail
  11.  
  12. guicases.txt
  13. - added to describe GUI integration in terms of Use Cases
  14.  
  15. guihooks.txt
  16. - added to describe points where you can hook in to easily customise 
  17.   gui integration behaviour, particularly editing records
  18.  
  19. pplant.txt
  20. - added to describe PowerPlant GUI integration
  21.  
  22. srcfiles.txt
  23. - changed to reflect new classes & shift in responsibilities
  24.  
  25. testplan.txt
  26. - added
  27.  
  28. relation.txt
  29. - reworded for the changes from dbRelation to dbRelationship (to avoid
  30.   confusing people with an RDBMS background) and including simpler syntax
  31.   for establishing a dbRelationship in a single declaration
  32.  
  33. zapp.txt
  34. - updated to describe new zApp GUI integration
  35.  
  36.  
  37. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  38. VALIDATION SUITE
  39.  
  40. The Results directory contains output files from all standard tests, where
  41. this makes sense (ie: skipping ooftest3 & 5 which vary per run).
  42.  
  43. The source of the validation suite has been moved into the Source directory.
  44.  
  45. ooftst02.inc
  46. - added a member of dbPeople to generate the test data (previously in main() in 
  47.   ooftest2.cpp)
  48. - define the relationship between People and Visits. This simplifies the main()
  49.   in any test programs using ooftest2.inc.
  50.  
  51. ooftst08.cpp
  52. - added to test dbConnect::raise()
  53.  
  54. ooftst09.cpp
  55. - added to test deleting records
  56.  
  57. ooftst10.cpp
  58. - added to test importing data from streams
  59.  
  60. ooftst11.cpp
  61. - added to demonstrate using the test data generator
  62.  
  63. ooftst12.cpp
  64. - added to demonstrate compound indexes & virtual fields
  65.  
  66. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  67. DETAILED CODE CHANGES - SEE README.TXT FOR A SUMMARY
  68.  
  69. 95/06/24
  70. FIXING CodeWarrior v6 complaints & reviewed inlines
  71.  
  72. As a general change, changed two forms of expressions, eg:
  73.  
  74. (dbChar::operator const char*)() 
  75. to 
  76. (const char*)*this
  77.  
  78.  
  79. (operator=)(n);
  80. to
  81. *this = n;
  82.  
  83.  
  84. Made the following non-inline
  85. dbChar::operator const char*() 
  86. const void* dbField::binaryContents
  87. void dbBLOB::SetLength(const unsigned long len)
  88.  
  89.  
  90. CLASS    dbConnect
  91. Method    raise(ostream& os)
  92.         - remove special case
  93.  
  94.  
  95. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  96. Bug Fix  95/06/25
  97. Prevents errors using dbChar fields in related tables (eg: change the dbText to a dbChar in ooftest2)
  98.  
  99. class OOF_Context_ctree, change
  100. mBlobFieldBodies(new OOF_ExpandableLongArray(*(rhs->mBlobFieldBodies)))
  101.  
  102. to
  103.  
  104. mBlobFieldBodies(rhs->mBlobFieldBodies ? 
  105.   new OOF_ExpandableLongArray(*(rhs->mBlobFieldBodies)) 
  106.   : 0)
  107.  
  108.  
  109. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  110. Minor fixes to get demo lib working 95/08/05
  111.  
  112. CLASS    dbConnect_ctree
  113. Method    SetupConnection
  114.         - correct the number of files passed into InitISAM so it only adds 2 if 
  115.           using superfiles (doesn't assume always)
  116.  
  117. Method    raise(ostream& os)
  118.         - put back the Metrowerks special case, CW6 didn't fix lack of 
  119.           operator<<(streambuf*)
  120.  
  121. Method    MakeTableBackend
  122.         - enforce 2 table limit
  123.  
  124.  
  125. CLASS    OOF_tableBackend_ctree
  126. Method    buildSchema
  127.         - enforce 10 indexes/table limit
  128.  
  129.  
  130. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  131. MINOR MODS FOR PACKAGING & GUI SUPPORT 95/08/14-21
  132. Changed all c-tree inclusions to use "" instead of <> in case people using folder outside their compiler tree.
  133.  
  134. CLASS    OOF_Dctionary
  135. Method    deleteAll
  136.         - added
  137.  
  138.  
  139. CLASS    dbText
  140. Method    operator Ptr
  141.         - added for Mac only, just a cast of operator char*
  142.         - removed 95/08/26 as it's a recursive cast - the real problem was 
  143.           casting away constness
  144.  
  145.  
  146. CLASS    dbChar
  147. Method    operator Ptr
  148.         - added for Mac only, just a cast of operator char*
  149.         - removed 95/08/26
  150.  
  151. Method    asStr255
  152.         - added for Mac only, to update a Str255 Pascal string
  153.  
  154. Method    setStr255
  155.         - added for Mac only, to set from a Str255 Pascal string
  156.  
  157.  
  158. FILES    oof1.hpp, oof1.inl
  159. Pulled classes OOF_DictRep, OOF_Dictionary & dbClass out to oof0.* to give a 
  160. much lighter set of root headers to include in the gui stuff.
  161.  
  162.  
  163. CLASS    OOF_MacString
  164. - added subclass to enable explicit construction from a Str63.
  165.  
  166.  
  167. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  168. ADDING ALERT-BASED "raise" FOR MAC, INSTEAD OF USING CONSOLE
  169. 95/08/23
  170. FILES
  171. oofile.hpp
  172. - define kBigErrAlert
  173.  
  174. oofmac.rsrc
  175. - create Alert resource 
  176.  
  177.  
  178. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  179. MINOR FIXES
  180. 95/08/31
  181. CLASS    dbTable
  182.  
  183. Method    atLast
  184.         - added simple forwarder to backend
  185.  
  186. Method    atFirst
  187.         - added simple forwarder to backend
  188.  
  189.  
  190. CLASS    OOF_tableBackend
  191. Method    atLast
  192.         - added pure virtual
  193.  
  194. Method    atFirst
  195.         - added pure virtual
  196.  
  197.  
  198. CLASS    OOF_tableBackend_ctree
  199. - set enums kDataExtendSize=0, kIndexExtendSize=0  (were default)
  200.  
  201. Method    prev
  202.         - implemented using gotoRelativeRecord
  203.  
  204. Method    start
  205.         - set mNoMore correctly for case of All records with only 1 in file!
  206.  
  207. Method    next
  208.         - fixed bug for selection of All records - mNoMore wasn't been set
  209.           on last record, but when we iterated past it. This was inconsistent 
  210.           with other selection states.
  211.  
  212. Method    atLast
  213.         - added simple forwarder to backend
  214.  
  215. Method    atFirst
  216.         - added simple forwarder to backend
  217.  
  218.  
  219. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  220. ADDING DELETION OF RECORDS & FIXING ITERATORS
  221. 95/09/14 - 17
  222.  
  223. CLASS    dbTable
  224. Method    deleteRecord
  225.         - added with call to propagateDelete before forwarding
  226.         - only delete if record loaded
  227.  
  228. Method    deleteSelection
  229.         - added to iterate over selection, calling deleteRecord
  230.         - fixed bug, shouldn't iterate over selection but calls start() N times 
  231.           as we're always deleting the first record
  232.  
  233. Method    deleteAll
  234.         - added to call deleteSelection for all recs
  235.  
  236. Method    selectNone 
  237.         - added as simple forwarder
  238.  
  239. Method    returnToContext
  240.         - added as simple forwarder
  241.  
  242.  
  243.  
  244. CLASS    OOF_tableBackend
  245. Method    selectNone
  246.         - added pure virtual
  247.  
  248. Method    returnToContext
  249.         - added pure virtual
  250.  
  251.  
  252. CLASS    OOF_tableBackend_ctree
  253. - mNoMore removed, including logic to set it in many methods
  254.  
  255. Method    selectNone
  256.         - added
  257.  
  258. Method    EnsureOurContextMatchesISAM
  259.         - added to cope with clones of this table changing selection
  260.  
  261. Method    SetISAMtoContext(OOF_Context_ctree* ctx)
  262.         - added
  263.  
  264. Method    SaveContext
  265.         use SetISAMtoContext
  266.  
  267. Method    start
  268.         - call CompleteMoveToRecForAllRecs for allRecs
  269.  
  270. Method    next
  271.         - call EnsureOurContextMatchesISAM before NextRecord()
  272.         - call CompleteMoveToRecForAllRecs for allRecs
  273.  
  274. Method    more
  275.         - change from just using mNoMore flag to checking the database state          
  276.  
  277. Method    invert
  278.         - call EnsureOurContextMatchesISAM before NextRecord()
  279.  
  280. Method    count
  281.         - call countAll instead of ctree function
  282.  
  283. Method    isRecordLoaded
  284.         - use mRecordState instead of testing curr offset
  285.  
  286. Method    LoadRecordAtOffset
  287.         - set mRecordState
  288.         - call CompleteLoadFromOffset
  289.  
  290. Method    newRecord
  291.         - set mRecordState
  292.  
  293. Method    ReplaceThisContextWith
  294.         - copy rhs->mRecordState
  295.  
  296. Method    copy constructor
  297.         - copy rhs->mRecordState
  298.  
  299. Method    unloadRecord
  300.         - set mRecordState
  301.         - don't call ClearContext
  302.  
  303. Method    BuildKey (all versions)
  304.         - made const as it is a utility method, not changing state
  305.  
  306. Method    CompleteLoadFromOffset
  307.         - added to contain some common state-setting
  308.  
  309. Method    CompleteMoveToRecForAllRecs
  310.         - added to contain some common error logic & call to 
  311.           CompleteLoadFromOffset & MaybeLoadRecordFromCache
  312.         - also handle VPNT_ERR (159) indicating have iterated off end, if last 
  313.           rec was a deleted rec
  314.  
  315. Method    MaybeLoadRecordFromCache
  316.         - move logic here from LoadRecordAtOffset
  317.  
  318. Method    ReplaceThisContextWith
  319.         - renamed to returnToContext as will now be publicly available
  320.  
  321.  
  322. CLASS    OOF_ctreeSelection
  323. Method    EmptySelection - renamed as selectNone
  324.  
  325. Method    deleteEntry
  326.         - added to implement deleteRecord, changing state if appropriate 
  327.           (oneRec->empty) and deleting a cell in the record pointers array
  328.  
  329.  
  330. CLASS    OOF_relChainList
  331. Method    propagateDelete
  332.         - added simple copy of propagateSave
  333.  
  334.  
  335. CLASS    OOF_Context_ctree
  336. - added enum ERecordState
  337. - replace all use of mNew with mRecordState.
  338.  
  339. Method    ClearContext - deleted
  340.  
  341.  
  342. CLASS    dbRelationship
  343. Method    constructor 
  344.         - added that takes joinFields so can have entire relationship declared 
  345.           in a constructor call, rather than requiring a followup method call
  346.  
  347.  
  348. FILES    ooftest2.inc
  349.         - included the global variable and dbRelationship defs' normally inside 
  350.           main() of the various test programs
  351.         - added dbPeople.AddTest2Data to wrap generation of 4 test records
  352.  
  353.  
  354. CLASS    dbRelChain
  355. Method    deleteRecord
  356.         - call validateContext as may not have been any field access for the 
  357.           current record, before deleting, so related context could be invalid
  358.         - don't deleteRecord, deleteSelection
  359.  
  360. FUNC    operator<<(ostream& os, dbConnect_ctree& connect)
  361.         - don't call describe(), just dump all tables
  362.  
  363.  
  364. CLASS    stPreserveOOFILEcontext
  365. - added simple stack wrapper to create and restore a context
  366.  
  367. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  368. CLEANING UP UNDEFINED METHODS & WORDING
  369. 95/09/16-17
  370.  
  371. CLASS    dbTable
  372. Method    createContext
  373.         - added simple forwarder
  374.  
  375. Method    contextChangedFrom
  376.         - added simple forwarder
  377.  
  378. Method    updateContext
  379.         - added simple forwarder
  380.  
  381.  
  382. CLASS    dbUlong
  383. Method    operator==(const unsigned long)
  384.         - added as copy from dbNumericField::operator==(const long)
  385.  
  386.  
  387. CLASS    dbRelationship
  388. Method    BuildRelation renamed to BuildRelationship
  389.  
  390.  
  391. CLASS    dbRelHalf
  392. Method    BuildRelation renamed to BuildRelationship
  393.  
  394.  
  395. CLASS    OOF_tableBackend
  396. Method    StackDirtyBuffer renamed to CacheDirtyBuffer (it's not a stack)
  397.  
  398.  
  399. CLASS    OOF_tableBackend_ctree
  400. Method    StackDirtyBuffer renamed to CacheDirtyBuffer
  401.  
  402.  
  403.  
  404. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  405. ADDING INPUT FROM STREAMS
  406. 95/09/18
  407.  
  408. generally,  for all dbField subclasses
  409. Method    outputOnStream
  410.         - renamed to "extract", as consistency (eg: Teale's "C++ IOStreams")
  411.  
  412. MACRO    CLASS_TABLE(tbl)
  413. friend    operator>>
  414.         - added to call tbl::insert(istream)
  415.  
  416.  
  417. CLASS    dbTable
  418. func    operator>>
  419.         - added to call dbTable::insert(istream)
  420.  
  421. Method    dumpFieldData
  422.         - renamed to extract(), for consistency
  423.  
  424. Method    insert
  425.         - added
  426.  
  427.  
  428. CLASS    dbField
  429. Method    insert
  430.         - added default to just consume the stream up to the next separator
  431.  
  432.  
  433. CLASS    dbChar
  434. Method    insert
  435.         - added to read from stream
  436.  
  437. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  438. 95/09/19-20
  439. MINOR FIXES
  440. CLASS    dbTable
  441. Method    sortBy(dbField*)
  442.         - added to complement sortBy(dbField&)
  443.  
  444.  
  445. CLASS    dbChar
  446. Method    insert
  447.         - fixed bug in that it could go one char past buffer if exactly maxLen 
  448.           chars read
  449.  
  450. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  451. IMPLEMENTING COMPOUND INDEXES and VIRTUAL FIELDS
  452. 95/09/21
  453.  
  454. FUNC    operator<<(dbCompoundField, dbField)
  455.         - added to call dbCompoundField::addSegment
  456.  
  457.  
  458. CLASS    dbField
  459. Method    fieldIsVirtual
  460.         - added default false
  461.  
  462.  
  463. CLASS    dbCompoundField
  464. Method    fieldIsVirtual
  465.         - added to return true
  466.  
  467. Method    fieldIsBinary
  468.         - added to return false
  469.         - later removed - we DO allow binary fields and can't tell!
  470.  
  471. Method    segment
  472.         - added to return a const dbField* of a segment
  473.  
  474.  
  475. CLASS    OOF_tableBackend_ctree
  476. Method    BuildBackendTables
  477.         - check fieldIsVirtual & don't advance DODA numbers
  478.         - removed unnecessary second retrieval of current field pointer
  479.  
  480. Method    CompleteIIDX
  481.         - build multiple segment keys for compound fields
  482.         - use fieldLen() calls instead of DODA length in defining segments - 
  483.           don't include the terminating nulls on chars! (particularly in compounds)
  484.  
  485. Method    FieldAlignsTo
  486.         - return 1 for compoundFields - they should have no padding
  487.  
  488. Method    BuildDODA
  489.         - skip virtual fields
  490.  
  491.  
  492.  
  493. CLASS    dbField
  494. Method    extract
  495.         - change from returning "#####" to an empty string
  496.  
  497. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  498. IMPLEMENTING REUSE OF COMPOUND INDEXES BY OTHER FIELDS
  499. 95/09/23
  500. General
  501. - went through all dbField classes & made search ops const (a few weren't)
  502.  
  503.  
  504. CLASS    dbCompoundField
  505. Method    operator<<
  506.         - converted function to this after g++ complained and realised that, 
  507.           unlike stream ops, this has the class on the lhs
  508.  
  509. Method    startsWith
  510.         - added as copy of dbChar method
  511.  
  512.  
  513. CLASS    OOF_Dictionary
  514. - mOwnsContents added
  515. Method    destructor
  516.         - if mOwnsContents, deleteAll
  517.  
  518. Method    ownsContents
  519.         - added to set variable
  520.  
  521.  
  522. CLASS    OOF_ctreeIndexDictionary
  523. - added subclass of OOF_Dictionary, with ownsContents set, to manage a list of OOF_ctreeIndexSegList
  524.  
  525.  
  526. CLASS    OOF_ctreeIndexSegList
  527. - added to store & retrieve an array of index file numbers
  528.  
  529.  
  530.  
  531. CLASS    OOF_tableBackend_ctree
  532. - added mIndexDictionary
  533.  
  534. Method    CompleteIIDX
  535.         - add entries to mIndexDictionary for indexed compound fields
  536.  
  537. Method    BuildSchema
  538.         - for non-indexed fields, if we have an mIndexDictionary, try to find 
  539.           compound indices that will do
  540.  
  541. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  542. IMPLEMENTING COMPOUND SEARCHING & COMBINATORIAL SEARCHES
  543. 95/09/23-25
  544. CLASS    dbQueryClause
  545. enum    QueryClauseTypes
  546.         - add binaryCombination
  547.  
  548. Method    operator&&
  549. Method    operator&
  550. Method    operator||
  551. Method    operator|
  552.         - add to create a dbQueryBinaryCombo
  553.  
  554.  
  555. CLASS    dbQueryBinaryCombo
  556. - added mTempKeyStoreToDispose
  557.  
  558. Method    pairFieldsIfCouldUseCompoundIndex
  559.         - added to work out if fields can be combined (first is AND clause)
  560.           and return their field No's so another can match to a compound index
  561.  
  562. Method    makeCompoundSearch
  563.         - added to create the key (updating mTempKeyStoreToDispose) and make a 
  564.           search much like the dbField operators
  565.  
  566. Method    destructor
  567.         - added to delete mTempKeyStoreToDispose
  568.         
  569.  
  570.  
  571. CLASS    dbQueryBinary
  572. Method    destructor
  573.         - added as had leak
  574.  
  575. Method    literalClause
  576.         - now also return the clause if type is atomicStrLiteral
  577.  
  578. CLASS    dbQueryLiteralBLOB
  579.         - added to contain a binary literal, for use with compound queries 
  580.           ending in binary numbers
  581.  
  582. CLASS    dbQueryTrinary
  583. Method    destructor
  584.         - added as had leak
  585.  
  586.  
  587. CLASS    dbQueryLiteralStr
  588. Method    binaryContents
  589.         - added to let dbQueryBinaryCombo treat strings and binaries the same
  590.  
  591. Method literalLen() added to
  592.         dbQueryLiteralStr
  593.         dbQueryLiteralShort
  594.         dbQueryLiteralUshort
  595.         dbQueryLiteralLong
  596.         dbQueryLiteralUlong
  597.         dbQueryLiteralDouble
  598.         
  599.  
  600. CLASS    OOF_ctreeSelection
  601. Method    adopt
  602.         - add to let one selection totally take over the other, leaving the 
  603.         other with a new empty representation
  604.  
  605. Method    DropSelection
  606.         - change state to empty
  607.  
  608. Method    currentItem    
  609.         - added copy of operator() that's easier to call internally
  610.  
  611. Method    value
  612.         - added as const method to return a value, not a reference
  613.  
  614.  
  615. - take over from OOF_tableBackend_ctree & rewrite to use for loops and value()
  616.   instead of selection iterators (made const clean)
  617.         difference_with
  618.         intersection_with
  619.         union_With
  620.  
  621. - marked const
  622.         more
  623.         state
  624.         isEmpty
  625.         count
  626.         oneRecOffset
  627.         isMember
  628.  
  629. Method    isMember
  630.         - don't use iterators to scan a selection - shouldn't change state
  631.  
  632.  
  633. CLASS    OOF_tableBackend_ctree
  634. - change into shell methods calling OOF_ctreeSelection
  635.         difference_with
  636.         intersection_with
  637.         union_With
  638.  
  639. - marked const
  640.         more
  641.         count
  642.         countAll
  643.         atFirst
  644.         atLast
  645.  
  646. Method    SearchCombineSubclauses
  647.         - added
  648.  
  649. Method    Search
  650.         - call SearchCombineSubclauses for binaryCombination clauses
  651.         - check if have compound index that could satisfy search
  652.  
  653. Method    unloadRecord
  654.         - don't delete ctx->mBuffer as it is deleted in the context destructor
  655.         - added SmartHeap check
  656.  
  657. Method    SaveContext
  658.         - added lots more SmartHeap checks
  659.  
  660. Method    returnToContext
  661.         - added lots more SmartHeap checks
  662.         - set the context we're taking over to have a zero mBuffer
  663.  
  664.  
  665. CLASS    OOF_tableBackend
  666. - marked const
  667.         more
  668.         count
  669.         countAll
  670.         atFirst
  671.         atLast
  672.  
  673.  
  674.  
  675. CLASS    dbTable
  676. - marked const
  677.         more
  678.         count
  679.         countAll
  680.         atFirst
  681.         atLast
  682.  
  683.  
  684. CLASS    OOF_List
  685. - marked const
  686.         isEmpty
  687.         member
  688.         count
  689.  
  690.  
  691. CLASS    OOF_ExpandableLongArray
  692. Method    value
  693.         - added as const method to return a value, not a reference
  694.  
  695. Method    destructor
  696.         - moved guts into DeleteBits
  697.  
  698. Method    operator=
  699.         - use DeleteBits
  700.  
  701. Method    copyContents
  702.         - added to copy the array from another object
  703.  
  704.  
  705. GENERALLY
  706. Removed unnecessary 'const' from value parameters & return types such as int.
  707.  
  708.  
  709. CLASS    OOF_ctreeIndexDictionary
  710. Method    fieldMatchingPair
  711.         - added to search segment list
  712.  
  713.  
  714. CLASS    OOF_ctreeIndexSegList
  715. - added mIndexField
  716.  
  717. Method    destructor
  718.         - made virtual (naughty boy!)
  719.  
  720. Method    constructor
  721.         - also take dbField param
  722.  
  723. Method    startsWith(unsigned long)
  724.         - added
  725.  
  726.  
  727. CLASS    OOF_List
  728. Method    sortedInsertNoDups
  729.         - fixed bug with dup values that truncated the list at the dup! (missing 
  730.           return from dup detection, so linked deleted element at end of chain)
  731.  
  732.  
  733. CLASS    dbDate
  734. Method    checkDate
  735.         - added simple sanity checking
  736.  
  737. Method    istream2ymd
  738.         - use checkDate
  739.  
  740. Method    ymd2long
  741.         - use checkDate (if OOF_Debug)
  742.  
  743. Method    chars2Long
  744.         - return 0 if istream2ymd fails
  745.  
  746.  
  747. -=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  748. FIXING CROSS-PLATFORM BLOBS (don't write a binary structure to file)
  749. 95/09/27
  750.  
  751. CLASS     OOF_ctreeDVref - removed
  752.  
  753. CLASS    OOF_tableBackend_ctree
  754. Method    BlobPosFromBuffer
  755.         - added
  756.  
  757. Method    SetBlobLenInBuffer
  758.         - added
  759.  
  760. Method    SetBlobPosInBuffer
  761.         - added
  762.  
  763. Method    setBlobLength
  764.         - rewrite using a direct write rather than a OOF_ctreeDVref structure
  765.  
  766. Method    blobPointerReferenceSize
  767.         - rewrite to calc size without referring to OOF_ctreeDVref
  768.  
  769. Method    saveContext
  770.         - use new blob info setters
  771.  
  772. Method    deleteRecord
  773.         - use BlobPosFromBuffer
  774.  
  775. Method    fieldDataLen
  776.         - use BlobLenFromBuffer
  777.  
  778. Method    loadBlob
  779.         - use BlobPosFromBuffer & BlobLenFromBuffer
  780.  
  781.  
  782. all the above fixed a logic bug bug there was a more subtle bug
  783.  
  784. Method    BuildDODA
  785.         - replace sizeof(CT_INT4) with 4
  786.           (CT_INT4 is a numeric constant, not a 4byte integer type, and thus 
  787.           varied in size cross-platform)