]> granicus.if.org Git - python/commitdiff
- Issue #6949: Allow the _bsddb extension to be built with db-4.8.x.
authorMatthias Klose <doko@ubuntu.com>
Mon, 15 Mar 2010 12:46:18 +0000 (12:46 +0000)
committerMatthias Klose <doko@ubuntu.com>
Mon, 15 Mar 2010 12:46:18 +0000 (12:46 +0000)
Lib/bsddb/test/test_basics.py
Lib/bsddb/test/test_distributed_transactions.py
Misc/NEWS
Modules/_bsddb.c
setup.py

index c5579de75cfa2f55b84e21d58ddcf6af8513d0b3..b7134966d72f98ba6e7a1ce6cbfad7ca27bd8172 100644 (file)
@@ -1000,11 +1000,12 @@ class CrashAndBurn(unittest.TestCase) :
     #    # See http://bugs.python.org/issue3307
     #    self.assertRaises(db.DBInvalidArgError, db.DB, None, 65535)
 
-    def test02_DBEnv_dealloc(self):
-        # http://bugs.python.org/issue3885
-        import gc
-        self.assertRaises(db.DBInvalidArgError, db.DBEnv, ~db.DB_RPCCLIENT)
-        gc.collect()
+    if db.version() < (4, 8) :
+        def test02_DBEnv_dealloc(self):
+            # http://bugs.python.org/issue3885
+            import gc
+            self.assertRaises(db.DBInvalidArgError, db.DBEnv, ~db.DB_RPCCLIENT)
+            gc.collect()
 
 
 #----------------------------------------------------------------------
index f864b883362ef353844a5e7758c8207d07a7f0a3..c6243a22afe6338569754f193b7613ea216a43bc 100644 (file)
@@ -35,7 +35,7 @@ class DBTxn_distributed(unittest.TestCase):
                 db.DB_INIT_TXN | db.DB_INIT_LOG | db.DB_INIT_MPOOL |
                 db.DB_INIT_LOCK, 0666)
         self.db = db.DB(self.dbenv)
-        self.db.set_re_len(db.DB_XIDDATASIZE)
+        self.db.set_re_len(db.DB_GID_SIZE)
         if must_open_db :
             if db.version() > (4,1) :
                 txn=self.dbenv.txn_begin()
@@ -76,7 +76,7 @@ class DBTxn_distributed(unittest.TestCase):
     # let them be garbage collected.
         for i in xrange(self.num_txns) :
             txn = self.dbenv.txn_begin()
-            gid = "%%%dd" %db.DB_XIDDATASIZE
+            gid = "%%%dd" %db.DB_GID_SIZE
             gid = adapt(gid %i)
             self.db.put(i, gid, txn=txn, flags=db.DB_APPEND)
             txns.add(gid)
index 3f369eda6fe2b867959e96f2411403cb1aa5d45d..eb5b5da4e9b17e34a77ad607eb41f65f45504001 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -45,6 +45,8 @@ Library
 Extension Modules
 -----------------
 
+- Issue #6949: Allow the _bsddb extension to be built with db-4.8.x.
+
 - Issue #8142: Update libffi to the 3.0.9 release.
 
 - Issue #1530559: When passing a non-integer argument to struct.pack with *any*
index 5aedfca8dec34ae62c9bec8e69c5e03987abe34c..9ae8e52b0613312d0ac6061f0f24009e0e9ed8e8 100644 (file)
@@ -215,6 +215,10 @@ static PyObject* DBRepUnavailError;     /* DB_REP_UNAVAIL */
 #define        DB_BUFFER_SMALL         ENOMEM
 #endif
 
+#if (DBVER < 48)
+#define DB_GID_SIZE DB_XIDDATASIZE
+#endif
+
 
 /* --------------------------------------------------------------------- */
 /* Structure definitions */
@@ -4501,7 +4505,11 @@ DBEnv_txn_recover(DBEnvObject* self)
     DBTxnObject *txn;
 #define PREPLIST_LEN 16
     DB_PREPLIST preplist[PREPLIST_LEN];
+#if (DBVER < 48)
     long retp;
+#else
+    u_int32_t retp;
+#endif
 
     CHECK_ENV_NOT_CLOSED(self);
 
@@ -4522,7 +4530,7 @@ DBEnv_txn_recover(DBEnvObject* self)
         flags=DB_NEXT;  /* Prepare for next loop pass */
         for (i=0; i<retp; i++) {
             gid=PyBytes_FromStringAndSize((char *)(preplist[i].gid),
-                                DB_XIDDATASIZE);
+                                DB_GID_SIZE);
             if (!gid) {
                 Py_DECREF(list);
                 return NULL;
@@ -5047,6 +5055,7 @@ DBEnv_set_private(DBEnvObject* self, PyObject* private_obj)
 }
 
 
+#if (DBVER < 48)
 static PyObject*
 DBEnv_set_rpc_server(DBEnvObject* self, PyObject* args, PyObject* kwargs)
 {
@@ -5068,6 +5077,7 @@ DBEnv_set_rpc_server(DBEnvObject* self, PyObject* args, PyObject* kwargs)
     RETURN_IF_ERR();
     RETURN_NONE();
 }
+#endif
 
 static PyObject*
 DBEnv_set_verbose(DBEnvObject* self, PyObject* args)
@@ -5949,9 +5959,9 @@ DBTxn_prepare(DBTxnObject* self, PyObject* args)
     if (!PyArg_ParseTuple(args, "s#:prepare", &gid, &gid_size))
         return NULL;
 
-    if (gid_size != DB_XIDDATASIZE) {
+    if (gid_size != DB_GID_SIZE) {
         PyErr_SetString(PyExc_TypeError,
-                        "gid must be DB_XIDDATASIZE bytes long");
+                        "gid must be DB_GID_SIZE bytes long");
         return NULL;
     }
 
@@ -6541,8 +6551,10 @@ static PyMethodDef DBEnv_methods[] = {
 #endif
     {"set_get_returns_none",(PyCFunction)DBEnv_set_get_returns_none, METH_VARARGS},
     {"txn_recover",     (PyCFunction)DBEnv_txn_recover,       METH_NOARGS},
+#if (DBVER < 48)
     {"set_rpc_server",  (PyCFunction)DBEnv_set_rpc_server,
         METH_VARARGS||METH_KEYWORDS},
+#endif
     {"set_verbose",     (PyCFunction)DBEnv_set_verbose,       METH_VARARGS},
 #if (DBVER >= 42)
     {"get_verbose",     (PyCFunction)DBEnv_get_verbose,       METH_VARARGS},
@@ -7091,6 +7103,7 @@ PyMODINIT_FUNC  PyInit__bsddb(void)    /* Note the two underscores */
     ADD_INT(d, DB_MAX_PAGES);
     ADD_INT(d, DB_MAX_RECORDS);
 
+#if (DBVER < 48)
 #if (DBVER >= 42)
     ADD_INT(d, DB_RPCCLIENT);
 #else
@@ -7098,7 +7111,11 @@ PyMODINIT_FUNC  PyInit__bsddb(void)    /* Note the two underscores */
     /* allow apps to be written using DB_RPCCLIENT on older Berkeley DB */
     _addIntToDict(d, "DB_RPCCLIENT", DB_CLIENT);
 #endif
+#endif
+
+#if (DBVER < 48)
     ADD_INT(d, DB_XA_CREATE);
+#endif
 
     ADD_INT(d, DB_CREATE);
     ADD_INT(d, DB_NOMMAP);
@@ -7115,7 +7132,13 @@ PyMODINIT_FUNC  PyInit__bsddb(void)    /* Note the two underscores */
     ADD_INT(d, DB_INIT_TXN);
     ADD_INT(d, DB_JOINENV);
 
+#if (DBVER >= 48)
+    ADD_INT(d, DB_GID_SIZE);
+#else
     ADD_INT(d, DB_XIDDATASIZE);
+    /* Allow new code to work in old BDB releases */
+    _addIntToDict(d, "DB_GID_SIZE", DB_XIDDATASIZE);
+#endif
 
     ADD_INT(d, DB_RECOVER);
     ADD_INT(d, DB_RECOVER_FATAL);
index a86ae1c743e62740106bc685efef9b15fd96b63e..fa92d053e15a34ddf8066cd49c3d261e489f2bde 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -707,7 +707,7 @@ class PyBuildExt(build_ext):
         # a release.  Most open source OSes come with one or more
         # versions of BerkeleyDB already installed.
 
-        max_db_ver = (4, 7)
+        max_db_ver = (4, 8)
         min_db_ver = (3, 3)
         db_setup_debug = False   # verbose debug prints from this script?