summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Baxter <anthonybaxter@gmail.com>2002-04-23 02:11:05 (GMT)
committerAnthony Baxter <anthonybaxter@gmail.com>2002-04-23 02:11:05 (GMT)
commit8388895fe43da057006e50cae5d1b6e2a12083e0 (patch)
tree4b4315181abceff4b1f0c1e32975ed88a7330665
parent0494955b8f88007df3038c0e3de92ac8b4558f77 (diff)
downloadcpython-8388895fe43da057006e50cae5d1b6e2a12083e0.zip
cpython-8388895fe43da057006e50cae5d1b6e2a12083e0.tar.gz
cpython-8388895fe43da057006e50cae5d1b6e2a12083e0.tar.bz2
SF patch [ 545523 ] patch for 514433 bsddb.dbopen (NULL)
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.
-rw-r--r--Doc/lib/libbsddb.tex12
-rwxr-xr-xLib/test/test_bsddb.py45
-rw-r--r--Misc/NEWS4
-rw-r--r--Modules/bsddbmodule.c6
4 files changed, 42 insertions, 25 deletions
diff --git a/Doc/lib/libbsddb.tex b/Doc/lib/libbsddb.tex
index 925e512..ff3d8e1 100644
--- a/Doc/lib/libbsddb.tex
+++ b/Doc/lib/libbsddb.tex
@@ -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
diff --git a/Lib/test/test_bsddb.py b/Lib/test/test_bsddb.py
index 459dd5f..f68acae 100755
--- a/Lib/test/test_bsddb.py
+++ b/Lib/test/test_bsddb.py
@@ -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)
diff --git a/Misc/NEWS b/Misc/NEWS
index 141cba8..2e36fc0 100644
--- 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.
diff --git a/Modules/bsddbmodule.c b/Modules/bsddbmodule.c
index 78f8576..74f9133 100644
--- a/Modules/bsddbmodule.c
+++ b/Modules/bsddbmodule.c
@@ -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))