• Barry Warsaw's avatar
    Fix bugs exposed by unit testing. Note that this version of the · a64b1c71
    Barry Warsaw authored
    storage has a failing abortVersion(), so it's mostly a checkpoint.
    
    Not yet tested: commitVersion(), transactionalUndo(), undoLog().
    
    Not yet implemented: history(), pack()
    
    Specific changes:
    
        - Table txnOids renamed to txnoids everywhere.
    
        - Define a module global `zero' constant and use (via global)
          where ever appropriate (should be named ZERO but that's ugly).
    
        - _finish(): Only boost the refcount of objects referenced by the
          pickle when we've actually got a new pickle.  Also, add a note
          about the currentVersions table, which will contain multiple
          copies of vid/oid records.  It's easier to weed them out later
          than to weed them out here.  One of the places you need to weed
          them all out is at the end of this method, in the
          `delete-a-version' branch.
    
        - abortVersion(): Record oids found by scanning the
          currentVersions table in a set, to account for the possible
          multiple vid/oid records.  Fix some typos.  When calling
          write_nonversion_object() on the CommitLog, the prevrevid ought
          to be the revid of the current object revision, for undo
          purposes.
    
        - load(): Where we previously had a comment that asked whether we
          should assert that the version is empty (after we've checked
          everything else), now we really check that and raise a
          VersionError if not.
    
        - loadSerial(): Fix a typo.
    
        - store(): Inside the old-revision-id-is-true test, if the old vid
          is not zero and it is equal to the new vid, then the non-version
          revision of the object is the old non-version revision (added
          the else: clause).
    
        - transactionalUndo(): Implemented but not yet tested.
    
        - undo(): Removed.
    
        - versionEmpty(): Semantics are to return true if an unknown
          version is given.  As an extra bonus, if version is empty
          (i.e. the non-version) check the serials table.
    a64b1c71
BDBFullStorage.py 39.6 KB