[Zope3-checkins] CVS: ZODB4/src/zodb/storage - mapping.py:1.3.4.3

Barry Warsaw barry@wooz.org
Wed, 12 Mar 2003 16:44:17 -0500


Update of /cvs-repository/ZODB4/src/zodb/storage
In directory cvs.zope.org:/tmp/cvs-serv30539

Modified Files:
      Tag: opaque-pickles-branch
	mapping.py 
Log Message:
Resolve conflicts from HEAD merge


=== ZODB4/src/zodb/storage/mapping.py 1.3.4.2 => 1.3.4.3 ===
--- ZODB4/src/zodb/storage/mapping.py:1.3.4.2	Wed Feb 12 16:05:42 2003
+++ ZODB4/src/zodb/storage/mapping.py	Wed Mar 12 16:44:11 2003
@@ -1,6 +1,6 @@
 ##############################################################################
 #
-# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# Copyright (c) 2001 Zope Corporation and Contributors.
 # All Rights Reserved.
 #
 # This software is subject to the provisions of the Zope Public License,
@@ -18,105 +18,33 @@
 
 It is meant to illustrate the simplest possible storage.
 
-The Mapping storage uses a single data structure to map
-object ids to data.
-
-The Demo storage serves two purposes:
-
-  - Provide an example implementation of a full storage without
-    distracting storage details,
-
-  - Provide a volatile storage that is useful for giving demonstrations.
-
-The demo strorage can have a "base" storage that is used in a
-read-only fashion. The base storage must not not to contain version
+The Mapping storage uses a single data structure to map object ids to
 data.
 
-There are three main data structures:
-
-  _data -- Transaction logging information necessary for undo
-
-      This is a mapping from transaction id to transaction, where
-      a transaction is simply a 4-tuple:
-
-        packed, user, description, extension_data, records
-
-      where extension_data is a dictionary or None and records are the
-      actual records in chronological order. Packed is a flag
-      indicating whethe the transaction has been packed or not
-
-  _index -- A mapping from oid to record
-
-  _vindex -- A mapping from version name to version data
-
-      where version data is a mapping from oid to record
-
-A record is a tuple:
-
-  oid, serial, pre, vdata, p,
-
-where:
-
-     oid -- object id
-
-     serial -- object serial number
-
-     pre -- The previous record for this object (or None)
-
-     vdata -- version data
-
-        None if not a version, ortherwise:
-           version, non-version-record
-
-     p -- the pickle data or None
-
-The pickle data will be None for a record for an object created in
-an aborted version.
-
-It is instructive to watch what happens to the internal data structures
-as changes are made.  Foe example, in Zope, you can create an external
-method::
-
-  import Zope
-
-  def info(RESPONSE):
-      RESPONSE['Content-type']= 'text/plain'
-
-      return Zope.DB._storage._splat()
-
-and call it to minotor the storage.
-
 $Id$
 """
 
 import zodb.db
 from zodb import interfaces, utils
-from zodb.interfaces import ZERO
-from zodb.storage import base
+from zodb.storage.base import BaseStorage
 from zodb.storage.interfaces import *
 from zodb.timestamp import TimeStamp
 
-def DB(name="Mapping Storage", pool_size=7, cache_size=400):
-    ms = MappingStorage(name)
-    db = zodb.db.DB(ms, pool_size, cache_size)
-    return db
-
-
-class MappingStorage(base.BaseStorage):
+class MappingStorage(BaseStorage):
 
     __implements__ = IStorage
 
-    def __init__(self, name='Mapping Storage'):
-
-        base.BaseStorage.__init__(self, name)
+    def __init__(self, name="Mapping Storage"):
+        BaseStorage.__init__(self, name)
+        self._index = {}
+        self._tindex = []
+        self._ltid = None
 
-        self._index={}
-        self._tindex=[]
+    def close(self):
+        pass
 
-        # Note:
-        # If you subclass this and use a persistent mapping facility
-        # (e.g. a dbm file), you will need to get the maximum key and
-        # save it as self._oid.  See dbmStorage.
+    def cleanup(self):
+        pass
 
     def load(self, oid, version):
         self._lock_acquire()
@@ -152,6 +80,10 @@
     def _finish(self, tid, user, desc, ext):
         for oid, serial, data, refs in self._tindex:
             self._index[oid] = serial, data, refs
+        self._ltid = self._serial
+
+    def lastTransaction(self):
+        return self._ltid
 
     def pack(self, t):
         self._lock_acquire()