]> granicus.if.org Git - python/commitdiff
SF patch [ 545523 ] patch for 514433 bsddb.dbopen (NULL)
authorAnthony Baxter <anthonybaxter@gmail.com>
Tue, 23 Apr 2002 02:11:05 +0000 (02:11 +0000)
committerAnthony Baxter <anthonybaxter@gmail.com>
Tue, 23 Apr 2002 02:11:05 +0000 (02:11 +0000)
closes SF #514433

can now pass 'None' as the filename for the bsddb.*open functions,
and you'll get an in-memory temporary store.

docs are ripped out of the bsddb dbopen man page. Fred may want to
clean them up.

Considering this for 2.2, but not 2.1.

Doc/lib/libbsddb.tex
Lib/test/test_bsddb.py
Misc/NEWS
Modules/bsddbmodule.c

index 925e51269db549ec47d756ba5c0f95a19ef5310c..ff3d8e1ff2189f814112e928b91b4a4d178fcf96 100644 (file)
@@ -37,7 +37,9 @@ instances.
                            ffactor\optional{, nelem\optional{,
                            cachesize\optional{, hash\optional{,
                            lorder}}}}}}}}}
-Open the hash format file named \var{filename}.  The optional
+Open the hash format file named \var{filename}.  Files never intended
+to be preserved on disk may be created by passing \code{None} as the 
+\var{filename}.  The optional
 \var{flag} identifies the mode used to open the file.  It may be
 \character{r} (read only), \character{w} (read-write),
 \character{c} (read-write - create if necessary) or
@@ -51,7 +53,9 @@ for their use and interpretation.
 mode\optional{, btflags\optional{, cachesize\optional{, maxkeypage\optional{,
 minkeypage\optional{, psize\optional{, lorder}}}}}}}}}
 
-Open the btree format file named \var{filename}.  The optional
+Open the btree format file named \var{filename}.  Files never intended 
+to be preserved on disk may be created by passing \code{None} as the 
+\var{filename}.  The optional
 \var{flag} identifies the mode used to open the file.  It may be
 \character{r} (read only), \character{w} (read-write),
 \character{c} (read-write - create if necessary) or
@@ -65,7 +69,9 @@ interpretation.
 rnflags\optional{, cachesize\optional{, psize\optional{, lorder\optional{,
 reclen\optional{, bval\optional{, bfname}}}}}}}}}}
 
-Open a DB record format file named \var{filename}.  The optional
+Open a DB record format file named \var{filename}.  Files never intended 
+to be preserved on disk may be created by passing \code{None} as the 
+\var{filename}.  The optional
 \var{flag} identifies the mode used to open the file.  It may be
 \character{r} (read only), \character{w} (read-write),
 \character{c} (read-write - create if necessary) or
index 459dd5fb5ac842c2a9d9c51b86103c5a135add0e..f68acaeb3e65bf36bc405f9cfe060cee19736f17 100755 (executable)
@@ -2,19 +2,21 @@
 """Test script for the bsddb C module
    Roger E. Masse
 """
-
 import os
 import bsddb
 import dbhash # Just so we know it's imported
 import tempfile
 from test_support import verbose, verify
 
-def test(openmethod, what):
+def test(openmethod, what, ondisk=1):
 
     if verbose:
-        print '\nTesting: ', what
+        print '\nTesting: ', what, (ondisk and "on disk" or "in memory")
 
-    fname = tempfile.mktemp()
+    if ondisk:
+        fname = tempfile.mktemp()
+    else:
+        fname = None
     f = openmethod(fname, 'c')
     verify(f.keys() == [])
     if verbose:
@@ -47,30 +49,35 @@ def test(openmethod, what):
 
     f.sync()
     f.close()
-    if verbose:
-        print 'modification...'
-    f = openmethod(fname, 'w')
-    f['d'] = 'discovered'
+    if ondisk:
+        # if we're using an in-memory only db, we can't reopen it
+        # so finish here.
+        if verbose:
+            print 'modification...'
+        f = openmethod(fname, 'w')
+        f['d'] = 'discovered'
 
-    if verbose:
-        print 'access...'
-    for key in f.keys():
-        word = f[key]
         if verbose:
-            print word
+            print 'access...'
+        for key in f.keys():
+            word = f[key]
+            if verbose:
+                print word
 
-    f.close()
-    try:
-        os.remove(fname)
-    except os.error:
-        pass
+        f.close()
+        try:
+            os.remove(fname)
+        except os.error:
+            pass
 
 types = [(bsddb.btopen, 'BTree'),
          (bsddb.hashopen, 'Hash Table'),
+         (bsddb.btopen, 'BTree', 0),
+         (bsddb.hashopen, 'Hash Table', 0),
          # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
          #                                   appears broken... at least on
          #                                   Solaris Intel - rmasse 1/97
          ]
 
 for type in types:
-    test(type[0], type[1])
+    test(*type)
index 141cba8da8cf76f284978a78906fa220da89588a..2e36fc047dcaddd04a1137bdde7d2a857e982209 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -64,6 +64,10 @@ Core and builtins
 
 Extension modules
 
+- The bsddb.*open functions can now take 'None' as a filename. 
+  This will create a temporary in-memory bsddb that won't be
+  written to disk. 
+
 - posix.mknod was added.
 
 - The locale module now exposes the C library's gettext interface.
index 78f85761a11383f22e78d0d311ca51b262d90132..74f91335ec1e4c22756261fcc6c19f2eac996bb7 100644 (file)
@@ -687,7 +687,7 @@ bsdhashopen(PyObject *self, PyObject *args)
        int hash = 0; /* XXX currently ignored */
        int lorder = 0;
 
-       if (!PyArg_ParseTuple(args, "s|siiiiiii:hashopen",
+       if (!PyArg_ParseTuple(args, "z|siiiiiii:hashopen",
                              &file, &flag, &mode,
                              &bsize, &ffactor, &nelem, &cachesize,
                              &hash, &lorder))
@@ -738,7 +738,7 @@ bsdbtopen(PyObject *self, PyObject *args)
        unsigned int psize = 0;
        int lorder = 0;
 
-       if (!PyArg_ParseTuple(args, "s|siiiiiii:btopen",
+       if (!PyArg_ParseTuple(args, "z|siiiiiii:btopen",
                              &file, &flag, &mode,
                              &btflags, &cachesize, &maxkeypage, &minkeypage,
                              &psize, &lorder))
@@ -791,7 +791,7 @@ bsdrnopen(PyObject *self, PyObject *args)
        char  *bval = "";
        char *bfname = NULL;
 
-       if (!PyArg_ParseTuple(args, "s|siiiiiiss:rnopen",
+       if (!PyArg_ParseTuple(args, "z|siiiiiiss:rnopen",
                              &file, &flag, &mode,
                              &rnflags, &cachesize, &psize, &lorder,
                              &reclen, &bval, &bfname))