From 8388895fe43da057006e50cae5d1b6e2a12083e0 Mon Sep 17 00:00:00 2001 From: Anthony Baxter Date: Tue, 23 Apr 2002 02:11:05 +0000 Subject: 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. --- Doc/lib/libbsddb.tex | 12 +++++++++--- Lib/test/test_bsddb.py | 45 ++++++++++++++++++++++++++------------------- Misc/NEWS | 4 ++++ Modules/bsddbmodule.c | 6 +++--- 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)) -- cgit v0.12