Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Python "bindings" for Oracle Berkeley DB

Última Actualización: 15 de diciembre de 2024

"berkeleydb" are the Python "bindings" for the excellent Oracle Berkeley DB. They are included in stardard Python version 2.3 thru 2.7, but here you will find a vastly updated version. Python 3.x doesn't include native Berkeley DB support, you need to install this library by your own.

I'm the official maintainer since January 2008.

Since legacy Python 2 is deprecated, this library has been renamed from bsddb3 to berkeleydb and new releases are Python 3 only. These are your choices:

  • You are using Python 3 >= 3.6 and you don't have legacy bsddb3 code around:

    Cool. Install berkeleydb library. For example, type: pip install berkeleydb.

  • You are still running legacy Python (Python 2) or Python 3 <= 3.5:

    You must install legacy versions of this library, bsddb3, running pip install bsddb3. It is compatible with Oracle Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2.

    There are no plans to support new Oracle Berkeley DB releases or to improve support of currently supported Oracle Berkeley DB releases. I could publish new releases of this library if a serious bug were found, but bsddb3 library is considered legacy.

  • You are running Python 3 (up to Python 3.9), but you don't want to upgrade your code to support new berkeleydb library and you don't need to support new Oracle Berkeley DB releases or better support of currently supported releases:

    You can keep using bsddb3. It is legacy, but it will not be deleted. You can install it typing pip install bsddb3. The installer will bug you about using a legacy library, but it will work fine.

    bsddb3 supports up to Python 3.9. It will not support Python 3.10.

  • You are using Python 3.x > 3.9 and you need bsddb3:

    bsddb3 supports up to Python 3.9. If you are running a more modern Python versión, you must upgrade to berkeleydb library.

  • You are running Python 3 and you can update your code from bsddb3 library to berkeleydb library:

    The main change you need to be aware is that in berkeleydb keys and values are now bytes, while in bsddb3 they were strings. You would only need to change your code to add or remove type encoding/decoding, depending of how you use the library. The process should be simple.

Resources

Releases

The numbering schema of berkeleydb releases is X.Y.Z. The X.Y combination documents the highest Oracle Berkeley DB release supported. That is, pybsddb 4.7.2 is the third release of the branch that supports Oracle Berkeley DB 4.7.x (the first release would be 4.7.0).

You can link berkeleydb against older Oracle Berkeley DB releases, if you wish, although the documentation always references the latest supported release. Berkeleydb always tries to link against the latest supported Oracle Berkeley DB release. If you want to link to a particular BDB release, you can do "python3 setup.py --berkeley-db=PATH". If you already have berkeleydb installed and you want to relink it against other Oracle Berkeley DB release, you have to reinstall.

You can check the berkeleydb version typing berkeleydb.__version__. You can see the Oracle Berkeley DB version the binding is linked against with berkeleydb.db.version().

Releases are published via Python Package Index, so you can use "easy_install" (setuptools) or "pip". Read-only Mercurial repository available at https://hg.jcea.es/pybsddb/. Interested parties can subscribe to the commit mailing list.

  • berkeleydb-18.1.12: Testsuite verified with Python 3.9-3.14a2, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20241215)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • WARNING - BREAKING CHANGE: berkeleydb._db is now berkeleydb.db.

      This breaking change should usually require a major and/or minor number update. Since berkeleydb traditional numbering is related to the higher Oracle Berkeley DB supported, I would usually wait until Oracle releases a new version to upgrade my own version and deprecate old Python support at the same time. Given that Oracle has not released a new Oracle Berkeley DB in almost five years, I must break this practice for now.

      The new name has been available for ages and the change is trivial...

    • Solved DBEnv.memp_stat() crash when no database was opened yet. Triaged and reported by Rishin Goswami.

    • Added a new DBError subclass exception: DBNotSupportedError.

    • Add tests for environment and database encryption.

    • Document what you should know about your key when using database encryption. Check the docs!

    • Python 3.14 added to the full test matrix.

    • Experimental Python 3.14 support. Tested under 3.14.0a2.

    • Export more error codes from Oracle Berkeley DB (which ones depends of what Oracle Berkeley DB version you use): DB_FOREIGN_CONFLICT, DB_LOG_BUFFER_FULL, DB_LOG_VERIFY_BAD, DB_REP_HANDLE_DEAD, DB_REP_LOCKOUT, DB_REP_UNAVAIL, DB_REP_WOULDROLLBACK, DB_SLICE_CORRUPT, DB_VERSION_MISMATCH, DB_REP_INELECT, DB_SYSTEM_MEM_MISSING. Some of those are not actually returned ever, but a generic BerkeleyDB exception is raised. The error codes are available for completion.

      If you need some specific exception to be raised, let me know.

    • We export more values from Oracle Berkeley DB (which ones depends of what Oracle Berkeley DB version you use):

      • DB_LOCK_GET_TIMEOUT, DB_LOCK_PUT_READ, DB_LOCK_TIMEOUT, DB_LOCK_TRADE.

      • DB_EID_MASTER.

      • DB_REP_WRITE_FORWARD_TIMEOUT.

      • DB_EVENT_REP_AUTOTAKEOVER, DB_EVENT_REP_INQUEUE_FULL, DB_EVENT_REP_JOIN_FAILURE, DB_EVENT_REP_WOULD_ROLLBACK, DB_EVENT_MUTEX_DIED, DB_EVENT_FAILCHK_PANIC.

      • DB_REPMGR_ISELECTABLE, DB_REPMGR_ISPEER, DB_REPMGR_CONF_DISABLE_POLL, DB_REPMGR_CONF_ENABLE_EPOLL, DB_REPMGR_CONF_FORWARD_WRITES, DB_REPMGR_CONF_PREFMAS_CLIENT, DB_REPMGR_CONF_PREFMAS_MASTER, DB_REPMGR_NEED_RESPONSE.

      • DB_MEM_DATABASE, DB_MEM_DATABASE_LENGTH, DB_MEM_EXTFILE_DATABASE, DB_MEM_REP_SITE.

      • DB_LOG_EXT_FILE.

      • DB_SET_MUTEX_FAILCHK_TIMEOUT.

      • DB_SLICED.

      • DB_VERB_BACKUP, DB_VERB_REPMGR_SSL_ALL, DB_VERB_REPMGR_SSL_CONN, DB_VERB_REPMGR_SSL_IO, DB_VERB_SLICE.

      • DB_XA_CREATE.

    • Oracle Berkeley DB>=5.3: Beside db.DB_VERSION_STRING we now have db.DB_VERSION_FULL_STRING.

    • Oracle Berkeley DB>=6.2: Beside db.DB_DBT_BLOB we now have db.DB_DBT_EXT_FILE.

    • Being able to test against an especific Oracle Berkeley DB release.

    • Code cleanup:

      • Remove unnecessary semicolons in Python code.

      • Remove unused imports.

      • Split multiple imports in a single line.

      • Split multiple statements in multiple lines.

      • Delete dead assignments.

      • Delete ancient code for verbose and silent in test code. I never used it, and it is maintenance load.

      • Simplify some assertTrue() and assertFalse().

      • Imports directly from berkeleydb instead of test_all.

      • Copyright and license texts should be in comments, not docstrings.

      • Be more verbose and clear in the comparison test code.

      • Use isinstance() for type comparison.

      • Tight some tests.

      • Change some ambiguous variables.

      • Solve or silence ruff warnings.

      • Delete legacy pychecker support.

      • Delete legacy PyUnit GUI support.

  • berkeleydb-18.1.11: Testsuite verified with Python 3.9-3.13, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20241029)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • WARNING - BREAKING CHANGE: Drop support for Python 3.8.

      This breaking change should usually require a major and/or minor number update. Since berkeleydb traditional numbering is related to the higher Oracle Berkeley DB supported, I would usually wait until Oracle releases a new version to upgrade my own version and deprecate old Python support at the same time. Given that Oracle has not released a new Oracle Berkeley DB in almost five years, I must break this practice for now.

      I am sorry if this update breaks your Python 3.8 environment. In that case, please pin your berkeleydb installation to version 18.1.10, the last Python 3.8 compatible release.

      Send me constructive feedback if appropriate.

    • Now that minimum Python supported is 3.9, all bsddb.db objects support weakref in all supported Python versions.

    • Release 18.1.10 was failing under Python 2 because a charset encoding error. Since this module can not be used under Python 2 at all, we were not in a hurry to solve it and provide a more useful error message.

    • Solve some file leaks in some tests in the wrong directory.

    • Python 3.13 is officially supported.

  • berkeleydb-18.1.10: Testsuite verified with Python 3.8-3.13b2, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20240624)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • Since MS Windows is unsupported without community help, I deleted some legacy code. It could be restored if there is demand and some help to improve MS Windows support.

    • New URL for Oracle documentation.

    • Now we also use Python Stable ABI under Python 3.8 and 3.9.

      Under Python 3.10 and up we can define types that users can not instantiate as Py_TPFLAGS_DISALLOW_INSTANTIATION, but that flag is not available under previous Python versions.

      In Python 3.8 and 3.9 we used to do type->tp_new = NULL; for that, but this approach is not available under Python Stable ABI. That is the reason this module could use Python Stable ABI only when compiled under Python 3.10 and superior.

      In this release we define the slot Py_tp_new as NULL in Python 3.8 and 3.9 to achieve the same effect, and that is available under Python Stable ABI.

    • Since this module can now use Python Stable ABI under all supported Python releases, that is exactly what we do. From now on this module always uses Python Stable ABI.

    • WARNING - BREAKING CHANGE: Change return value of berkeleydb.py_limited_api().

      This function was introduced in 18.1.9 and it is used to indicate if the module was using the Python Stable ABI or not, and the version Python Stable ABI used.

      Now that the module has been improved to use Python Stable ABI always, the function returns a tuple of integers. First tuple element tells us what Python Stable ABI version are we supporting. Second element tells us what Python release was this module compiled under, although it should work in any more recent Python release.

      Since this function was introduced in release 18.1.9, we consider this breaking change a minor infraction affecting most probably nobody.

    • Delete some unneeded ancient Python 2.x code.

    • Delete more unneeded code to check threading support since Python 3.7 and up always guarantee threads.

  • berkeleydb-18.1.9: Testsuite verified with Python 3.8-3.13b2, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20240619)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • pkg_resources is deprecated, so migrate to packaging. This is already provided by modern setuptools. This change only affects you if you run the test suite.

    • If compiled under Python 3.10 or higher, we use the Python Stable ABI, as defined in PEP 384 and related PEPs. That is, you can use the same compiled module with any Python release if Python version >= 3.10.

      In order to achieve this, we have made these changes:

      • Some fast Python API (not error checking) have been replaced by somewhat slower functions (functions that do error checking), because the former are not available in the Stable ABI: PyBytes_GET_SIZE(), PyBytes_AS_STRING(), PyTuple_SET_ITEM().

      • We replaced PyErr_Warn() by PyErr_WarnEx() because it is not available in the Stable ABI.

      • When an exception is raised because an incompatible type, we need to write complicated code because Py_TYPE(keyobj)->tp_name is not available in the Stable ABI. Code generated for Python < 3.11 is ugly, we will clean it up when the minimum supported Python version is 3.11.

      • TYPE->tp_alloc is not available under the Stable ABI. We replace it with PyType_GenericNew().

      • Internal types that should NOT be instanciated by the user has type->tp_new = NULL. This can not be done under the Stable ABI, so we use Py_TPFLAGS_DISALLOW_INSTANTIATION flag. This is the reason we only create Stable ABI modules under Python >= 3.10, because that flag is defined in that Python release.

      • The new function berkeleydb.py_limited_api() returns an integer describing the minimum supported Stable ABI or None. If None, the module is not compiled with Stable ABI and can not be used with a different Python version. When not None, the value of berkeleydb.py_limited_api() can be easily interpreted using something like hex(berkeleydb.py_limited_api()).

    • Python 3.13 added to the full test matrix.

    • Experimental Python 3.13 support. Tested under 3.13.0b2.

    • This code can be compiled under MS Windows, but I am unable to provide support for it and it is far from trivial. Because of this and some complains about it, I change the Classifiers for this project from

            'Operating System :: OS Independent'
      

      to

            'Operating System :: Unix'
      

      I would restore MS Windows support if there is some kind of community support for it. I can not do it by myself alone. Sorry about that.

  • berkeleydb-18.1.8: Testsuite verified with Python 3.8-3.12, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20231005)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • WARNING - BREAKING CHANGE: Drop support for Python 3.7.

      This breaking change should usually require a major and/or minor number update. Since berkeleydb traditional numbering is related to the higher Oracle Berkeley DB supported, I would usually wait until Oracle releases a new version to upgrade my own version and deprecate old Python support at the same time. Given that Oracle has not released a new Oracle Berkeley DB in almost five years, I must break this practice for now.

      I am sorry if this update breaks your Python 3.7 environment. In that case, please pin your berkeleydb installation to version 18.1.6, the last Python 3.7 compatible release.

      Send me constructive feedback if appropriate.

    • Progressing the implementation of PEP 489 – Multi-phase extension module initialization:

      • Types are now private per sub-interpreter, if you are compiling under Python >= 3.9.

      • Provide a per sub-interpreter capsule object.

      • Solve a tiny race condition when importing the module in multiple sub-interpreters at the same time.

    • Update the "api_version" value of the capsule object.

    • Solve a "deprecation warning" when using modern "setuptools".

    • For testing, we require at least "setuptools" >= 62.1.0 installed on all supported Python versions.

    • Python 3.12 is officially supported.

  • berkeleydb-18.1.7: Testsuite verified with Python 3.8-3.12, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20231005)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • Yanked release.

  • berkeleydb-18.1.6: Testsuite verified with Python 3.7-3.12a7, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20230510)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • Initial implementation of PEP 489 – Multi-phase extension module initialization: PEP 489.

    • Update "setuptools" built-time dependency to version ">=65.5.0". A "pip" modern enough will automatically take care of this.

    • We must be sure we are testing the correct library. Previously we could be testing the installed library instead of development code.

    • Python 3.12 added to the full test matrix.

    • Experimental Python 3.12 support. Tested under 3.12.0a7.

  • berkeleydb-18.1.5: Testsuite verified with Python 3.7-3.11a4, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20220121)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • WARNING - BREAKING CHANGE: Drop support for Python 3.6.

      This breaking change should usually require a major and/or minor number update. Since berkeleydb traditional numbering is related to the higher Oracle Berkeley DB supported, I would usually wait until Oracle releases a new version to upgrade my own version and deprecate old Python support at the same time. Given that Oracle has not released a new Oracle Berkeley DB in almost four years, I must break this practice for now.

      I am sorry if this update breaks your Python 3.6 environment. In that case, please pin your berkeleydb installation to version 18.1.4, the last Python 3.6 compatible release.

      Send me constructive feedback if appropriate.

    • Python 3.10 support.

    • Testsuite works now in Python 3.11.0a4.

    • Python 3.11 added to the full test matrix.

    • Python 3.11 deprecates the ancient but undocumented method unittest.makeSuite() and it will be deleted in Python 3.13. We migrate the tests to unittest.TestLoader.loadTestsFromTestCase().

    • Experimental Python 3.11 support. Tested in 3.11.0a4.

  • berkeleydb-18.1.4: Testsuite verified with Python 3.6-3.10a2, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20210519)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • If your "pip" is modern enough, "setuptools" is automatically added as a built-time dependency.

      If not, you MUST install "setuptools" package first.

  • berkeleydb-18.1.3: Testsuite verified with Python 3.6-3.10a2, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20210519)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • Docs in https://docs.jcea.es/berkeleydb/.

    • make publish build and publish the documentation online.

    • Python 3.10 support. Tested in 3.10b1.

    • Python 3.10 deprecated distutils. setuptools is now an installation dependency.

    • make dist will generate the HTML documentation and will include it in the released package. You can unpack the package to read the docs.

    • Do not install tests anymore when doing pip install, although the tests are included in the package. You can unpack the package to study the tests, maybe in order to learn about how to use advanced Oracle Berkeley DB features.

      This change had an unexpected ripple effect in all code. Hopefully for the better.

    • Python 3.10 couldn’t find build directory.

    • Python 3.10.0a2 test suite compatibility.

    • Python 3.10 added to the full test matrix.

    • After Python 3.7, threads are always available. Take them for granted, even in Python 3.6.

    • In the same direction, now some libraries are always available: pathlib, warnings, queue, gc.

    • Support DB.get_lk_exclusive() and DB.set_lk_exclusive() if you are linking against Oracle Berkeley DB 5.3 or newer.

    • WARNING - BREAKING CHANGE: The record number in the tuple returned by DB.consume() is now a number instead of a binary key.

    • WARNING - BREAKING CHANGE: The record number in the tuple returned by DB.consume_wait() is now a number instead of a binary key.

    • DB.consume() and DB.consume_wait() now can request partial records.

    • DB.get() and DB.pget() could misunderstand flags.

    • If you are using Oracle Berkeley DB 5.3 or newer, you have these new flags: DB_BACKUP_CLEAN, DB_BACKUP_FILES, DB_BACKUP_NO_LOGS, DB_BACKUP_SINGLE_DIR and DB_BACKUP_UPDATE, DB_BACKUP_WRITE_DIRECT, DB_BACKUP_READ_COUNT, DB_BACKUP_READ_SLEEP, DB_BACKUP_SIZE.

    • If you are using Oracle Berkeley DB 18.1 or newer, you have these new flags: DB_BACKUP_DEEP_COPY.

    • DBEnv.backup(), DBEnv.dbbackup() DB.get_backup_config() and DB.set_backup_config() available if you are using Oracle Berkeley DB 5.3 or newer. These methods allow you to do hot backups without needing to follow a careful procedure, and they can be incremental.

    • Changelog moved to Sphinx documentation.

  • berkeleydb-18.1.2: Testsuite verified with Python 3.6-3.9, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20201207)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • Releases 18.1.0 and 18.1.1 were incomplete. Thanks to Mihai.i for reporting.

    • Export exception "DBMetaChksumFail" (from error "DB_META_CHKSUM_FAIL") if running Oracle Berkeley DB version 6.2 or newer.

    • Support Heap access method if you are linking against Oracle Berkeley DB 5.3 or newer.

      • "DB.put()" can add new records or overwrite old ones in Heap access method.

      • "DB.append()" was extended to support Heap access method.

      • "DB.cursor()" was extended to support Heap access method.

      • Implement, test and document "DB.get_heapsize()", "DB.set_heapsize()", "DB.get_heap_regionsize()" and "DB.set_heap_regionsize()".

      • Export exception "DBHeapFull" (from error "DB_HEAP_FULL").

      • "DB.stats()" provides stats for Heap access method.

    • WARNING - BREAKING CHANGE: Add "dbtype" member in "DBObject" object in the C API. Increase C API version. This change has ripple effect in the code.

    • WARNING - BREAKING CHANGE: "primaryDBType" member in "DBObject" object in the C API is now type "DBTYPE". Increase C API version. This change has ripple effect in the code.

    • Now "DB.get_type()" can be called anytime and it doesn't raise an exception if called before the database is open. If the database type is not known, "DB_UNKNOWN" is returned. This is a deviation from the Oracle Berkeley DB C API.

    • WARNING - BREAKING CHANGE: "DB.type()" method is dropped. It was never documented. Use "DB.get_type()".

    • "DB.stats()" returns new keys in the dictionary:

      • Hash, Btree and Recno access methods: Added "metaflags" (always) and "ext_files" (if linked against Oracle Berkeley DB 6.2 or newer).

      • Queue access method: Added "metaflags" (always).

  • berkeleydb-18.1.1: Testsuite verified with Python 3.6-3.9, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20201201)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • If you try to install this library in an unsupported Python environment, instruct the user about how to install legacy "bsddb3" library.

    • Expose DBSite object in the C API. Increase C API version.

    • WARNING - BREAKING CHANGE: Ancient release 4.2.8 added weakref support to all bsddb.db objects, but from now on this feature requires at least Python 3.9 because I have migrated from static types to heap types. Let me know if this is a problem for you. I could, for example, keep the old types in Python < 3.9, if needed.

      Details:

    • "_iter_mixin" and "_DBWithCursor" classes have been rewritten to avoid the need of getting a weak reference to "DBCursor" objects, since now it is problematic if Python < 3.9.

    • Wai Keen Woon and Nik Adam sent some weeks ago a patch to solve a problem with "DB.verify()" always succeeding. Refactoring in that area in 18.1.0 made that patch unneeded, but I added the test case provided to the test suite.

    • "DBEnv.cdsgroup_begin()" implemented.

    • "DBTxn.set_priority()" and "DBTxn.get_priority()" implemented. You need to link this library against Oracle Berkeley DB >= 5.3.

    • "DBEnv.set_lk_max()" was deprecated and deleted long time ago. Time to delete it from documentation too.

    • WARNING - BREAKING CHANGE: "DB.compact()" used to return a number, but now it returns a dictionary. If you need access to the old return value, you can do "DB.compact()['pages_truncated']".

    • "DB.compact()" has been supported "txn" parameter for a long time, but it was not documented.

    • The dictionary returned by "DB.compact()" has an "end" entry marking the database key/page number where the compaction stopped. You could use it to do partial/incremental database compaction.

    • Add an optional parameter to "DBEnv.log_flush()".

    • You can override the directory where the tests are run with TMPDIR environment variable. If that environment variable is not defined, test will run in "/tmp/ram/" if exists and in "/tmp" if "/tmp/ram/" doesn't exists or it is not a directory. The idea is that "/tmp/ram/" is a ramdisk and the test will run faster.

  • berkeleydb-18.1.0: Testsuite verified with Python 3.6-3.9, and Oracle Berkeley DB 4.8, 5.3, 6.2 and 18.1. (20201112)

    BEWARE: Oracle Berkeley DB versions 6.x and up are licensed under AGPL3 or have a commercial license. If you need the old Oracle Berkeley DB license, you can still use Oracle Berkeley DB version up to (and including) 5.3. You can link with that Oracle Berkeley DB version using this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should link against Oracle Berkeley DB 5.1 or up.

    Changes:

    • "bsddb" name is reserved in PYPI, so we rename the project to "berkeleydb".

    • Support Oracle Berkeley DB 18.1.x.

    • Drop support for Oracle Berkeley DB 4.7, 5.1 and 6.1.

    • Drop support for Python 2.6, 2.7, 3.3, 3.4 and 3.5.

    • The library name is migrated from "bsddb3" to "bsddb". Reasons:

      • In the old days, "bsddb" module was integrated with Python < 3 . The release rate of new Python interpreters was slow, so "bsddb" was also distributed as an external package for faster deployment of improvements and support of new Oracle Berkeley DB releases. In order to be able to install a new version of this package without conflicting with the internal python "bsddb", a new package name was required. At the time, the chosen name was "bsddb3" because it was the major release version of the supported Oracle Berkeley DB library.

        After Oracle released Berkeley DB major versions 4, 5, 6 and 18, "bsddb3" name was retained for compatibility, although it didn't make sense anymore.

      • "bsddb3" seems to refer to the Python 3 version of "bsddb". This was never the case, and that was confusing. Even more now that legacy "bsddb3" is the Python 2/3 codebase and the new "bsddb" is Python 3 only.

      • Since from now on this library is Python 3 only, I would hate that Python 2 users upgrading their Berkeley DB libraries would render their installation unable to run. In order to avoid that, a new name for the package is a good idea.

      • I decided to go back to "bsddb", since Python 2.7 is/should be dead.

      • If you are running Python 3, please update your code to use "bsddb" instead of "bsddb3".

        The old practice was to do:

            import bsddb3 as bsddb

        Now you can change that to:

            import bsddb

    • This library was usually know as "bsddb", "bsddb3" or "pybsddb". From now on, it is "bsddb" everywhere.

    • Testsuite driver migrated to Python 3.

    • Since Oracle Berkeley DB 4.7 is not supported anymore, ancient method "DBEnv.set_rpc_server()" is not available anymore.

    • If you try to install this package on Python 2, an appropriate error is raised and directions are provided.

    • Remove dead code for unsupported Python releases.

    • Remove dead code for unsupported Oracle Berkeley DB releases.

    • *WARNING:* Now *ALL* keys and values must be bytes (or ints when appropriate). Previous releases did mostly transparent encoding. This is not the case anymore. All needed encoding must be explicit in your code, both when reading and when writing to the database.

    • In previous releases, database cursors were iterable under Python 3, but not under Python 2. For this release, database cursors are not iterable anymore. This will be improved in a future release.

    • In previous releases, log cursors were iterable under Python 3, but not under Python 2. For this release, log cursors are not iterable anymore. This will be improved in a future release.

    • Support for DB_REPMGR_CONF_DISABLE_SSL flag in "DB_ENV.rep_set_config()".

    • *WARNING:* In Oracle Berkeley DB 18.1 and up, Replication Manager uses SSL by default. This configuration is currently unsupported. If you use Oracle Berkeley DB 18.1 and up and Replication Manager, you *MUST* configure the DB environment to not use SSL. You must do DB_ENV.rep_set_config(db.DB_REPMGR_CONF_DISABLE_SSL, 1) in your code. This limitation will be overcomed in a future release of this project.

    • "open()" methods allow path-like objects.

    • "DBEnv.open()" accepts keyword arguments.

    • "DBEnv.open()" allows no homedir and a homedir of "None".

    • "DB.set_re_source()" uses local filename encoding.

    • "DB.set_re_source()" accepts path-like objects if using Python 3.6 or up.

    • "DB.verify()" was doing nothing at all. Now actualy do the job.

    • "DB.verify()" accepts path-like objects for "filename" and "outfile" if using Python 3.6 or up.

    • "DB.upgrade()" accepts path-like objects if using Python 3.6 or up.

    • "DB.remove()" accepts path-like objects if using Python 3.6 or up.

    • "DB.remove()" could leak objects.

    • "DB.rename()" accepts path-like objects if using Python 3.6 or up.

    • "DB.rename()" correctly invalidates the DB handle.

    • "DB.get_re_source()" returns unicode objects with the local filename encoding.

    • "DB_ENV.fileid_reset()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.log_file()" correctly encode the filename according to the system FS encoding.

    • "DB_ENV.log_archive()" correctly encode the filenames according to the system FS encoding.

    • "DB_ENV.lsn_reset()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.remove()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.remove()" used to leave the DBENV handle in an unstable state.

    • "DB_ENV.dbrename()" accepts path-like objects for "filename" and "newname" if using Python 3.6 or up.

    • "DB_ENV.dbremove()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.set_lg_dir()" uses local filename encoding.

    • "DB_ENV.set_lg_dir()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.get_lg_dir()" returns unicode objects with the local filename encoding.

    • "DB_ENV.set_tmp_dir()" uses local filename encoding.

    • "DB_ENV.set_tmp_dir()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.get_tmp_dir()" returns unicode objects with the local filename encoding.

    • "DB_ENV.set_data_dir()" uses local filename encoding.

    • "DB_ENV.set_data_dir()" accepts path-like objects if using Python 3.6 or up.

    • "DB_ENV.get_data_dirs()" returns a tuple of unicode objects encoded with the local filename encoding.

    • "DB_ENV.log_prinf()" requires a bytes object not containing '\0'.

    • The "DB_ENV.lock_get()" name can not be None.

    • "DB_ENV.set_re_pad()" param must be bytes or integer.

    • "DB_ENV.get_re_pad()" returns bytes.

    • "DB_ENV.set_re_delim()" param must be bytes or integer.

    • "DB_ENV.get_re_delim()" returns bytes.

    • In the C code we don't need "statichere" neither "staticforward" workarounds anymore.

    • "db.DB*" objects are created via the native classes, not via factories anymore.

    • Drop support for "dbtables". If you need it back, let me know.

    • In Python 3.9, "find_unused_port" has been moved to "test.support.socket_helper". Reported by Michał Górny.

    • If we use "set_get_returns_none()" in the environment, the value could not be correctly inherited by the child databases. Reported by Patrick Laimbock and modern GCC warnings.

    • Do not leak test files and directories.

  • bsddb3-6.2.9: Testsuite verified with Unix 32/64 bit Python 2.6-2.7 and 3.3-3.9, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20201126)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • For some reason, 6.2.8 release was incomplete. Let's try again.

  • bsddb3-6.2.8: Testsuite verified with Unix 32/64 bit Python 2.6-2.7 and 3.3-3.9, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20201120)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • In Python 3.9, "find_unused_port" has been moved to "test.support.socket_helper". Reported by Michał Górny.

    • If we use "set_get_returns_none()" in the environment, the value could not be correctly inherited by the child databases. Reported by Patrick Laimbock and modern GCC warnings.

    • If you install this library under Python 3 >= 3.6, let you know this is a legacy library and urges you to migrate to "berkeleydb" library.

  • bsddb3-6.2.7: Testsuite verified with Unix 32/64 bit Python 2.6-2.7 and 3.3-3.9, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20200207)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Update copyright notices.

    • https links.

    • Fix Python 3 deprecation warning. Notified by Arthur Gautier.

    • Fix compilation Python 3.8 deprecation warnings.

    • Fix compilation Python 3.9 deprecation warnings.

    • Python 3.8 and 3.9 are explicitly supported.

  • bsddb3-6.2.6: Testsuite verified with Unix 32/64 bit Python 2.6-2.7 and 3.3-3.7, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20180701)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Correctly detect Berkeley DB when installed via Homebrew on Mac OS X. Patch by Matthew Peveler.

    • Python 3.6 and 3.7 are explicitly supported.

  • bsddb3-6.2.5: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20170908)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • We should be able to install inside a PYPY virtualenv. Reported by Zhihao Yuan.

  • bsddb3-6.2.4: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20170125)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • More complete fix for pkgsrc.

  • bsddb3-6.2.3: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20170125)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Update copyright notices.

    • Solve a conflict between different installations of Berkeley DB on some pkgsrc configurations.

  • bsddb3-6.2.2: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20170125)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Correctly detect Berkeley DB installations in SmartOS native zones.

    • "Probably" (not tested) correctly detect Berkeley DB in pkgsrc systems.

  • bsddb3-6.2.1: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20160510)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Correctly detect Berkeley DB installations in modern 64 bits Debians.

  • bsddb3-6.2.0: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.3-3.5, and Berkeley DB 4.7, 4.8, 5.1, 5.3, 6.1 and 6.2. (20160421)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use Berkeley DB version up to (and including) 5.3. You can use that Berkeley DB version with this bindings release.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support Berkeley DB 6.2.x.

    • Declare Python 3.5 support for PyPI.

    • Drop support for Python 3.2. If you need compatibility with that version, you can keep using old releases of these bindings.

    • Drop support for Berkeley DB 5.0, 5.2 and 6.0. If you need compatibility with those versions, you can keep using old releases of these bindings.

  • bsddb3-6.1.1: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.2-3.5, and Berkeley DB 4.7-6.1. (20151107)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use BDB version up to (and including) 5.3.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Compatibility with Python 3.5.

    • Code cleanup after dropping Python 2.4/2.5 support.

    • PGP key changed.

    • Support for DB_FORCESYNCENV flag in "DB_ENV.close()".

    • Support for DB_LOG_NOSYNC flag in "DB_ENV.log_set_config()".

    • Fix tests under Windows. See https://bugs.python.org/issue22943 .

    • Solve an incorrect parameter verification with the "DB.compact()" method call.

    • Solve a compilation warning when compiling the bindings for Python 3.5 and Berkeley DB 4.8, 5.0 or 5.1.

  • bsddb3-6.1.0: Testsuite verified with Unix 32 bit Python 2.6-2.7 and 3.2-3.4, and Berkeley DB 4.7-6.1. (20140721)

    BEWARE: Oracle Berkeley DB version 6.x is licensed under AGPL3 or have a commercial license. If you need the old Berkeley DB license, you can still use BDB version up to (and including) 5.3.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support Berkeley DB 6.1.x.

    • Solve a ResourceWarning when compiling.

    • Drop support for Python 2.4, 2.5 and 3.1. If you need compatibility with those versions, you can keep using old releases of these bindings.

    • Drop support for Berkeley DB 4.3, 4.4, 4.5, 4.6. If you need compatibility with those versions, you can keep using old releases of these bindings.

    • From now on, our support reference is Red Hat Enterprise Linux 6.

    • Drop modules attributes "cvsid".

    • Drop (hidden) $Id$ keyword in the documentation.

  • bsddb3-6.0.1: Testsuite verified with Unix 32 bit Python 2.4-2.7 and 3.1-3.4b1, and Berkeley DB 4.3-6.0. (20131205)

    BEWARE: Oracle Berkeley DB version 6.0.x is licensed under AGPL3 or have a commercial license.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Clarification of license. Thanks to Jan Staněk for bringing this issue up. This work is now explicitly licensed under 3-clause BSD license.

    • Fixed a long standing bug (August 2008, rev 9fd52748fa59) on "dbtables.py". Notified by Maxime Labelle.

    • If you want to link with Oracle Berkeley DB 6.0, you will need to create the environment variable 'YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION' to signal to the pybsddb that you are legal. To be legal, your code MUST be AGPL3 *OR* you have to buy a commercial license from Oracle.

      If you are not legally entitled to use Berkeley DB 6.0 and you have previous versions of Berkeley DB on your system, you can a) delete Berkeley DB 6.0 and try again, OR b) instruct pybsddb to use a previous Berkeley DB version, using environment variables or command line options.

      Sorry for the inconvenience. I am trying to protect you.

      Some details:

  • bsddb3-6.0.0: Testsuite verified with Unix 32 bit Python 2.4-2.7 and 3.1-3.3, and Berkeley DB 4.3-6.0. (20130621)

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support Berkeley DB 6.0.x.

    • HEADS UP: If you are using "bsddb3._bsddb" in your code, for example for exceptions, change it to "bsddb3._db".

    • Print test working directory when running the testsuite. You can control it using "TMPDIR" environment variable. Defaults to "/tmp/z-Berkeley_DB/".

    • Support for "DB_EVENT_REP_AUTOTAKEOVER_FAILED" event.

    • Support for "DB_REPMGR_ISVIEW", "DB_DBT_BLOB", "DB_LOG_BLOB", "DB_STREAM_READ", "DB_STREAM_WRITE" and "DB_STREAM_SYNC_WRITE" flags.

    • Some DB_SEQUENCE function signatures changed in Berkeley DB 6.0.x.

    • Erratic behaviour of "DBEnv->rep_elect()" because a typo.

    • The testsuite prints Python bitness (32/64).

    • Tests compatible with hash randomization, default in Python 3.3. See http://bugs.python.org/issue13703 .

    • Errors when trying to calculate the length of a DB were masked, and an unuseful and unrelated exception was raised.

    • Code cleanup since pybsddb is not in the Python 3.x stdlib anymore, and the version in Python 2.6/2.7 is being maintained separately.

  • bsddb3-5.3.0: Testsuite verified with Unix 32 bit Python 2.4-2.7 and 3.1-3.2, and Berkeley DB 4.3-5.3. (20120116)

    This release DROPS support for Python 2.3 and Berkeley DB 4.2.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support Berkeley DB 5.3.x.

    • Drop support for Berkeley DB 4.2 and Python 2.3. Our reference is Red Hat Enterprise Linux 5, until march 2014. After that, RHEL6 has Python 2.6 and BDB 4.7.

    • According to http://superuser.com/questions/189931/python-and-berkeley-db-versions-in-redhat-enterprise-linux-3-4-5-and-upcoming-6 :
      • RHEL3: Python 2.2.3, BDB 4.1.25
      • RHEL4: Python 2.3.4, BDB 4.2.52
      • RHEL5: Python 2.4.3, BDB 4.3.29
      • RHEL6: Python 2.6.2, BDB 4.7.25

    • Support for "DBEnv->set_intermediate_dir()", available in Berkeley DB 4.3-4.6. Patch by Garret Cooper.

    • Support for "DB->set_dup_compare()". Original patches by Nikita M. Kozlovsky and Ben Schmeckpeper.

    • Fixed a testsuite compatibility problem with BDB 5.2.

    • If we are running Solaris or derivatives, and 64bit python, try to find the library under "/usr/local/Berkeley.*.*/64/".

    • Solaris 10 Update 10 exposes a very old race condition in the replication master election tests. Some details in https://forums.oracle.com/forums/thread.jspa?messageID=9902860 . Workaround proposed in a private email from Paula Bingham (Oracle), in 20110929.

    • When doing the full matrix test for a release, stop the verification if any test failed.

  • bsddb3-5.2.0: Testsuite verified with Unix 32 bit Python 2.3-2.7 and 3.1-3.2, and Berkeley DB 4.2-5.2. (20110712)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    In Berkeley DB 5.2, the Replication Manager API has been changed completelly. PyBSDDB 5.2.0 is compatible with both the old and the new API. The API compiled is decided according to the Berkeley DB version available when compiling the bindings.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    When compiling against Berkeley DB 5.2.x, "test_tx_max" test in the testsuite fails. This is a spurious failure, not real, and it will be solved in 5.2.1.

    Changes:

    • Support for Berkeley DB 5.2.

    • Support for the newly available replication manager events: DB_EVENT_REP_SITE_ADDED, DB_EVENT_REP_SITE_REMOVED, DB_EVENT_REP_LOCAL_SITE_REMOVED, DB_EVENT_REP_CONNECT_BROKEN, DB_EVENT_REP_CONNECT_ESTD, DB_EVENT_REP_CONNECT_TRY_FAILED, DB_EVENT_REP_INIT_DONE.

    • New Object: "DB_SITE". Support for all its methods.

    • Parameters for "DB_SITE->set_config()": DB_BOOTSTRAP_HELPER, DB_GROUP_CREATOR, DB_LEGACY, DB_LOCAL_SITE, DB_REPMGR_PEER.

    • Support for some stuff in the new "Dynamic Environment Configuration": DB_MEM_LOCK, DB_MEM_LOCKOBJECT, DB_MEM_LOCKER, DB_MEM_LOGID, DB_MEM_TRANSACTION, DB_MEM_THREAD.

    • Add "bytes" to "DBEnv_memp_stat()". Original patch from Garrett Cooper.

  • bsddb3-5.1.2: Testsuite verified with Unix 32 bit Python 2.3-2.7 and 3.1-3.2, and Berkeley DB 4.2-5.1. (20110308)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • 5.1.1 install fails if the bsddb in the standard library is not installed, under Python 2.7. Reported by Arfrever Frehtes Taifersar Arahesis.

    • Since 5.0.0, we can't find 4.x libraries unless we specify a "--berkeley-db=/path/to/bsddb" option. Reported by Wen Heping.

    • Support "DB_ENV->get_open_flags()", "DB_ENV->set_intermediate_dir_mode()", "DB_ENV->get_intermediate_dir_mode()".

    • Support "DB->get_dbname()", "DB->get_open_flags()".

    • Support "db_full_version()".

    • Document "version()". This top-level function has been supported forever.

    • Bugfix when calling "DB->get_size()" on a zero length record. Reported by Austin Bingham.

    • 'assertEquals()' is deprecated in Python 3.2.

    • 'assert_()' is deprecated in Python 3.2.

    • Solved 'ResourceWarning' under Python 3.2.

  • bsddb3-5.1.1: Testsuite verified with Unix 32 bit Python 2.3-2.7 and 3.1-3.2r86170, and Berkeley DB 4.2-5.1. (20101108)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Recent pre-releases of Python 3.2 issue ResourceWarnings about fileshandles deallocated without being closed first. Fix testsuite.

    • Current "*.pyc" and "*.pyo" cleaning is not working in a PEP 3147 world ("__pycache__"). I don't think this code is actually necessary anymore. Deleted.

    • Python 2.7.0 deprecates CObject incorrectly. See Python issue #9675.

    • Testsuite for "DB->get_transactional()" should not create databases outside the TMP directory, neither leave the files behind.

    • If something happens while creating the CObject/Capsule object, keep going, even without exporting the C API, instead of crashing.

    • Support for "DB_FORCESYNC", "DB_FAILCHK", "DB_SET_REG_TIMEOUT", "DB_TXN_BULK", "DB_HOTBACKUP_IN_PROGRESS".

    • Support "DB_EVENT_REG_ALIVE", "DB_EVENT_REG_PANIC", "DB_EVENT_REP_DUPMASTER", "DB_REPMGR_CONF_ELECTIONS", "DB_EVENT_REP_ELECTION_FAILED", "DB_EVENT_REP_MASTER_FAILURE".

    • Support for "DB_VERB_REP_ELECT", "DB_VERB_REP_LEASE", "DB_VERB_REP_MISC", "DB_VERB_REP_MSGS", "DB_VERB_REP_SYNC", "DB_VERB_REP_SYSTEM", "DB_VERB_REPMGR_CONNFAIL", "DB_VERB_REPMGR_MISC".

    • Support for "DB_STAT_LOCK_CONF", "DB_STAT_LOCK_LOCKERS", "DB_STAT_LOCK_OBJECTS", "DB_STAT_LOCK_PARAMS".

    • Support for "DB_REP_CONF_INMEM".

    • Support for "DB_TIMEOUT ".

    • Support for "DB_CURSOR_BULK".

  • bsddb3-5.1.0: Testsuite verified with Unix 32 bit Python 2.3-2.7 and 3.1-3.2r86170, and Berkeley DB 4.2-5.1. (20101104)

    This release drops support for Berkeley DB 4.1, and adds support for Berkeley DB version 5.1, brand new. If you need Berkeley DB 4.1 support, keep using pybsddb 5.0.0. If you want support for Berkeley DB 5.1, remember to install the BDB library before installing these bindings.

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 5.1 or up.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support for Berkeley DB 5.1.

    • Drop support for Berkeley DB 4.1.

      Our reference is Red Hat Enterprise Linux 4, until February 2012.

      After that, RHEL5 has Python 2.4 and BDB 4.3.

      According to http://superuser.com/questions/189931/python-and-berkeley-db-versions-in-redhat-enterprise-linux-3-4-5-and-upcoming-6 :

      • RHEL3: Python 2.2.3, BDB 4.1.25

      • RHEL4: Python 2.3.4, BDB 4.2.52

      • RHEL5: Python 2.4.3, BDB 4.3.29

      • RHEL6: Python 2.6.2, BDB 4.7.25 (Currently in BETA)

    • Include documentation source (*.rst) in the EGG.

    • Include processed HTML documentation in the EGG.

    • Update the external links in documentation, since Oracle changed its web structure.

    • Some link fixes for external documentation.

    • Links added in the documentation to Oracle Berkeley DB programmer reference.

    • Support for "DB->get_transactional()".

    • Support for "DB_REPMGR_ACKS_ALL_AVAILABLE".

  • bsddb3-5.0.0: Testsuite verified in Unix 32 bit Python 2.3-2.7a4r79822 and 3.1-3.2r79860, and Berkeley DB 4.1-5.0. (20100407)

    This release drops support for Python 3.0, and adds support for Oracle Berkeley DB version 5.0, brand new. If you need Python 3.0 support, keep using pybsddb 4.8.4. If you want support for Berkeley DB 5.0, remember to install the BDB library before installing these bindings.

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    The minimum recommended version for advanced use is Berkeley DB 4.8.30.

    Changes:

    • Support for Berkeley DB 5.0.

    • Drop support for Python 3.0.

    • Now you can use TMPDIR env variable to override default test directory ("/tmp").

    • Versioning of C API. If you use the code from C, please check the bsddb_api->api_version number against PYBSDDB_API_VERSION macro.

    • In C code, the bsddb_api->dbsequence_type component is always available, even if the Berkeley DB version used doesn't support sequences. In that case, the component will be NULL.

    • In C code, "DBSequenceObject_Check()" macro always exists, even if the Berkeley DB version used doesn't suport sequences. In that case, the test macro always returns "false".

    • For a long time, the API has been accesible via C using "_bsddb.api" or "_pybsddb.api". If you are using Python >=2.7, you acquire access to that API via the new Capsule protocol (see "bsddb.h"). If you use the C API and upgrade to Python 2.7 and up, you must update the access code (see "bsddb.h"). The Capsule protocol is not supported in Python 3.0, but pybsddb 5.0.x doesn't support Python 3.0 anymore.

    • Capsule support was buggy. The string passed in to PyCapsule_New() must outlive the capsule. (Larry Hastings)

    • Solve an "Overflow" warning in the testsuite running under python 2.3.

    • When doing a complete full-matrix test, any warning will be considered an error.

  • bsddb3-4.8.4: Testsuite verified in Unix 32 bit Python 2.3-2.7a4 and 3.0-3.2r76123, and Berkeley DB 4.1-4.8. (20100322)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Changes:

    • When doing the full matrix testing with python >=2.6, we activate the deprecation warnings (py3k).

    • Split dependencies in the Replication testsuite.

    • Help the Gargabe Collection freeing resources when the replication testsuite is completed.

    • Import warning when used as stdlib "bsddb" instead of pybsddb project as "bsddb3", when using python >=2.6 and py3k warnings are active.

    • Old regression: dbshelve objects are iterable again. The bug was introduced in pybsddb 4.7.2. Added relevant testcases.

    • Patches ported from Python developers:

      • Memory leaks: #7808 - http://bugs.python.org/issue7808 - Florent Xicluna

      • Floating point rounding in testcases: #5073 - http://bugs.python.org/issue5073 - Mark Dickinson

      • Orthograpy: #5341 - http://bugs.python.org/issue5341

      • Py3k warnings in Python >=2.6: #7092 - http://bugs.python.org/issue7092

      • Correct path for tests: #7269 - http://bugs.python.org/issue7269 - Florent Xicluna

      • Shebang: benjamin.peterson

      • Use new Python 2.7 assert()'s: Florent Xicluna

    • Solve a spurious stdlib warning in python >=2.6 with -3 flags.

    • Remove "DBIncompleteError", for sure this time. There were traces in "dbtables", in some tests and in the docs.

    • The DBKeyEmptyError exception raised by the library is not the same DBKeyEmptyError available in the lib. So the raised exception was uncatchable unless you catch DBError. And you can not identify it.

    • Solved last point, document that DBKeyEmptyError exception derives also from KeyError, just like DBNotFoundError exception.

    • Update documentation to describe all exceptions provided by this module.

  • bsddb3-4.8.3: Testsuite verified in Unix 32 bit Python 2.3-2.7a3 and 3.0-3.2r76123, and Berkeley DB 4.1-4.8. (20100222)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Changes:

    • "bsddb.h" inclusion in PYPI is inconsistent. Solved.

    • Support for "DB_ENV->mutex_stat()" and "DB_ENV->mutex_stat_print()", "DB->stat_print()", "DB_ENV->lock_stat_print()", "DB_ENV->log_stat_print()", "DB_ENV->stat_print()", "DB_ENV->memp_stat()", "DB_ENV->memp_stat_print()".

    • Support for "DB_ENV->get_tmp_dir()".

    • Support for "DB_STAT_SUBSYSTEM", "DB_STAT_MEMP_HASH" flags.

    • Support for "DB_ENV->set_mp_max_openfd()", "DB_ENV->get_mp_max_openfd()", "DB_ENV->set_mp_max_write()", "DB_ENV->get_mp_max_write()", "DB_ENV->get_mp_mmapsize()".

    • New DataType: DBLogCursor. If you are using the C api, you could need to recompile your code because the changes in the api interface structure.

    • Support for "DB_ENV->log_file()", "DB_ENV->log_printf()".

    • Solve a core dump if something bad happens while trying to create a transaction object.

    • We protect ourselves of failures in creation of Locks and Sequences objects.

    • EGG file is a ZIP file again, not a directory. This requires that any program importing the module can write in the ".python-eggs" of its user.

    • Keeping a cached copy of the database stats is a bad idea if we have several processes working together. We drop all this code. So "len()" will require a database scanning always, not only when there is any write. If you need an accurate and fast "len()", the application must keep that information manually in a database register.

  • bsddb3-4.8.2: Testsuite verified in Unix 32 bit Python 2.3-2.7a1 and 3.0-3.2r76123, and Berkeley DB 4.1-4.8. (20091229)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Changes:

    • Support for "DB_OVERWRITE_DUP", "DB_FOREIGN_ABORT", "DB_FOREIGN_CASCADE", "DB_FOREIGN_NULLIFY", "DB_PRINTABLE", "DB_INORDER" flags.

    • Support for "DB_FOREIGN_CONFLICT" exception.

    • Support for "DB_ENV->memp_trickle()", "DB_ENV->memp_sync()", "DB_ENV->get_lg_bsize()", "DB_ENV->get_lg_dir()", "DB_ENV->get_lg_filemode()", "DB_ENV->set_lg_filemode()", "DB_ENV->get_lk_detect()", "DB_ENV->get_lg_regionmax()", "DB_ENV->get_lk_max_lockers()", "DB_ENV->set_lk_max_locks()", "DB_ENV->get_lk_max_objects()", "DB_ENV->set_lk_partitions()", "DB_ENV->get_lk_partitions()", "DB_ENV->get_flags()", "DB_ENV->set_cache_max()", "DB_ENV->get_cache_max()", "DB_ENV->set_thread_count()", "DB_ENV->get_thread_count()", "DB_ENV->log_set_config()", "DB_ENV->log_get_config()" functions.

    • Support for "DB->get_h_ffactor()", "DB->set_h_nelem()", "DB->get_h_nelem()", "DB->get_lorder()", "DB->get_pagesize()", "DB->get_re_pad()", "DB->get_re_len()", "DB->get_re_delim()", "DB->get_flags()", "DB->get_bt_minkey()", "DB->set_priority()", "DB->get_priority()", "DB->set_q_extentsize()", "DB->get_q_extentsize()", "DB->set_re_source()", "DB->get_re_source()" functions.

    • Unlock the Python GIL when doing "DB_ENV->db_home_get()". This is slower, because the function is very fast so we add overhead, but it is called very infrequently and we do the change for consistency.

  • bsddb3-4.8.1: Testsuite verified in Unix 32 bit Python 2.3-2.7r76123 and 3.0-3.2r76123, and Berkeley DB 4.1-4.8. (20091105)

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Changes:

    • Support for "DB_ENV->mutex_set_align()" and "DB_ENV->mutex_get_align()".

    • Support for "DB_ENV->mutex_set_increment()" and "DB_ENV->mutex_get_increment()".

    • Support for "DB_ENV->mutex_set_tas_spins()" and "DB_ENV->mutex_get_tas_spins()".

    • Support for "DB_ENV->get_encrypt_flags()".

    • Support for "DB->get_encrypt_flags()".

    • Support for "DB_ENV->get_shm_key()".

    • Support for "DB_ENV->get_cachesize()".

    • Support for "DB->get_cachesize()".

    • Support for "DB_ENV->get_data_dirs()".

    • Testsuite compatibility with recent releases of Python 3.0 and 3.1, where cPickle has been removed.

    • Compatibility with development versions of Python 2.7 and 3.2 (r76123).

    • For a long time, the API has been accesible via C using "_bsddb.api" or "_pybsddb.api". If you are using Python 3.2 or up, you acquire access to that API via the new Capsule protocol (see "bsddb.h"). If you use the C API and upgrade to Python 3.2 and up, you must update the access code (see "bsddb.h").

  • bsddb3-4.8.0: Testsuite verified in Unix 32 bit Python 2.3-2.6 and 3.0-3.1, and Berkeley DB 4.1-4.8. (20090917)

    This release drops support for Berkeley DB 4.0, released in 2001, and adds support for version 4.8, brand new. If you need 4.0 support, keep using pybsddb 4.7.6. If you want support for Berkeley DB 4.8, remember to install the BDB library before installing these bindings.

    This release is compatible with Python 3. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Changes:

    • Support for Berkeley DB 4.8.

    • Compatibility with Python 3.1.

    • The "DB_XIDDATASIZE" constant has been renamed to "DB_GID_SIZE". Update your code!. If linked to BDB 4.8, only "DB_GID_SIZE" is defined. If linked to previous BDB versions, we keep "DB_XIDDATASIZE" but define "DB_GID_SIZE" too, to be the same value. So, new code can use the updated constant when used against old BDB releases.

    • "DB_XA_CREATE" is removed. BDB 4.8 has eliminated XA Resource Manager support.

    • Drop support for Berkeley DB 4.0. Our reference is Red Hat Enterprise Linux 3, until October 2010. After that, RHEL4 has Python 2.3 and BDB 4.2.

    • Remove "DBIncompleteError" exception. It was only used in BDB 4.0.

    • Remove "DB_INCOMPLETE", "DB_CHECKPOINT", "DB_CURLSN". They came from BDB 4.0 too.

    • RPC is dropped in Berkeley DB 4.8. The bindings still keep the API if you link to previous BDB releases.

    • In recno/queue databases, "set_re_delim()" and "set_re_pad()" require a byte instead of a unicode char, under Python3.

    • Support for "DB_ENV->mutex_set_max()" and "DB_ENV->mutex_get_max()".

  • bsddb3-4.7.6: Testsuite verified in Unix 32 bit Python 2.3-2.6 and 3.0, and Berkeley DB 4.0-4.7. (20090428)

    This release is compatible with Python 3.0. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • Compatibility with Python 3.0.1.

    • Add support for "DB_ENV->stat()" and "DB_ENV->stat_print()".

    • Add support for "DB_ENV->rep_set_clockskew()" and "DB_ENV->rep_get_clockskew()". The binding support for base replication is now complete.

    • "DB.has_key()" used to return 0 or 1. Changed to return True or False instead. Check your code!.

    • As requested by several users, implement "DB.__contains__()", to allow constructions like "if key in DB" without iterating over the entire database. But, BEWARE, this test is not protected by transactions!. This is the same problem we already have with "DB.has_key()".

    • Change "DBSequence.init_value()" to "DBSequence.initial_value()", for consistence with Berkeley DB real method name. This could require minimal changes in your code. The documentation was right. Noted by "anan".

    • Implements "DBCursor->prev_dup()".

    • Add support for "DB_GET_BOTH_RANGE", "DB_PREV_DUP", and "DB_IGNORE_LEASE" flags.

    • Export exception "DBRepLeaseExpiredError".

    • Add support for "DB_PRIORITY_VERY_LOW", "DB_PRIORITY_LOW", "DB_PRIORITY_DEFAULT", "DB_PRIORITY_HIGH", "DB_PRIORITY_VERY_HIGH", and "DB_PRIORITY_UNCHANGED" flags.

    • Add support for "DBCursor->set_priority()" and "DBCursor->get_priority()". The binding support for cursors is now complete.

  • bsddb3-4.7.5: Testsuite verified in Unix 32 bit Python 2.3-2.6 and 3.0, and Berkeley DB 4.0-4.7. (20090204)

    This release is compatible with Python 3.0. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • Add support for "DB_EID_INVALID" and "DB_EID_BROADCAST" flags.

    • Add support for "DB_SEQUENCE->stat_print()". The binding support for "DB_SEQUENCE" is now complete.

    • Add support for "DB_ENV->txn_stat_print()".

    • Add support for "DB_ENV->get_timeout()".

    • Document that "DB_ENV->txn_stat()" accepts a flag.

    • Unlock the GIL when doing "DB_ENV->set_tx_max()" and "DB_ENV->set_tx_timestamp()".

    • Add support for "DB_ENV->get_tx_max()".

    • Add support for "DB_ENV->get_tx_timestamp()".

    • Add support for "DB_TXN_WAIT" flag.

    • Add support for "DB_TXN->set_timeout()".

    • Add support for "DB_TXN->set_name()" and "DB_TXN->get_name()". Under Python 3.0, the name is an Unicode string. The binding support for "DB_TXN" is now complete.

    • Add support for "DB_REP_PERMANENT", "DB_REP_CONF_NOAUTOINIT", "DB_REP_CONF_DELAYCLIENT", "DB_REP_CONF_BULK", "DB_REP_CONF_NOWAIT", "DB_REP_LEASE_EXPIRED", "DB_REP_CONF_LEASE", "DB_REPMGR_CONF_2SITE_STRICT", "DB_REP_ANYWHERE", "DB_REP_NOBUFFER" and "DB_REP_REREQUEST" flags.

  • bsddb3-4.7.4: Testsuite verified in Unix 32 bit Python 2.3-2.6 and 3.0, and Berkeley DB 4.0-4.7. (20090121)

    This release is compatible with Python 3.0. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • Under Python 3.0, "bsddb.db.DB_VERSION_STRING", "bsddb.db.__version__" and "bsddb.db.cvsid" must return (unicode) strings instead of bytes. Solved.

    • Use the new (20081018) trove classifiers in PyPI to identify Python supported versions.

    • In "DB_ENV->rep_set_timeout()" and "DB_ENV->rep_get_timeout()", support flags "DB_REP_LEASE_TIMEOUT".

    • In "DB_ENV->rep_set_timeout()" and "DB_ENV->rep_get_timeout()", support flags "DB_REP_HEARTBEAT_MONITOR" and "DB_REP_HEARTBEAT_SEND". These flags are used in the Replication Manager framework, ignored if using Base Replication.

    • Implements "DB->exists()".

    • Add support for "DB_IMMUTABLE_KEY" flag.

    • Add support for "DB_REP_LOCKOUT" exception.

    • Support returning a list of strings in "associate()" callback. (Kung Phu)

    • Testsuite and Python 3.0 compatibility for "associate()" returning a list. In particular, in Python 3.0 the list must contain bytes.

    • Implements "DBEnv->fileid_reset()". (Duncan Findlay)

    • Implements "DB->compact()". (Gregory P. Smith)
      Berkeley DB 4.6 implementation is buggy, so we only support this function from Berkeley DB 4.7 and newer. We also support related flags "DB_FREELIST_ONLY" and "DB_FREE_SPACE".

  • bsddb3-4.7.3: Integrated with Python 2.6. Testsuite verified in Unix 32 bit Python 2.3-2.6 and 3.0rc1, and Berkeley DB 4.0-4.7. (20081003)

    This release is integrated in Python 2.6.

    This release is compatible with Python 3.0rc1. But, beware, the API can change in the future, specially in the unicode/bytes interface.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • "private" is a keyword in C++. (Duncan Grisby)

    • setup.py should install "bsddb.h". (Duncan Grisby)

    • "DB_remove" memory corruption & crash. (Duncan Grisby)

    • Under Python 3.0, you can't use string keys/values, but bytes ones. Print the right error message.

    • "DB.has_key()" allowed transactions as a positional parameter. We allow, now, transactions as a keyword parameter also, as documented.

    • Correct "DB.associate()" parameter order in the documentation.

    • "DB.append()" recognizes "txn" both as a positional and a keyword parameter.

    • Small fix in "dbshelve" for compatibility with Python 3.0.

    • A lot of changes in "dbtables" for compatibility with Python 3.0.

    • Huge work making the testsuite compatible with Python 3.0.

    • In some cases the C module returned Unicode strings under Python 3.0. It should return "bytes", ALWAYS. Solved.

    • Remove a dict.has_key() use to silence a warning raised under Python2.6 -3 parameter. Python SVN r65391, Brett Cannon.

    • Solve some memory leaks - Neal Norwitz

    • If DBEnv creation fails, library can crash. (Victor Stinner)

    • Raising exceptions while doing a garbage collection will kill the interpreter. (Victor Stinner)

    • Crash in "DB.verify()". Noted by solsTiCe d'Hiver.

  • bsddb3-4.7.2: RELEASED. (20080807). Testsuite verified in Unix 32 bit Python 2.3-2.6b2 and Berkeley DB 4.0-4.7.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • Solved a race condition in Replication Manager testcode.

    • Changing any python code, automatically regenerates the Python3 version. The master version is Python2.

    • Compatibility with Python 3.0.

    • Solved a crash when DB handle creation fails. STINNER Victor - http://bugs.python.org/issue3307

    • Improve internal error checking, as suggested by Neal Norwitz when reviewing commit 63207 in Python SVN.

    • Routines without parameters should be defined so, as suggested by Neal Norwitz when reviewing commit 63207 in Python SVN. The resulting code is (marginally) faster, smaller and clearer.

    • Routines with a simple object parameter are defines so, as suggested by Neal Norwitz when reviewing commit 63207 in Python SVN. The resulting code is (marginally) faster, smaller and clearer.

    • Routines taking objects as arguments can parse them better, as suggested by Neal Norwitz when reviewing commit 63207 in Python SVN. The resulting code is (marginally) faster, smaller and clearer.

    • Improve testsuite behaviour under MS Windows.

    • Use ABC (Abstract Base Classes) under Python 2.6 and 3.0.

    • Support for "relative imports".

    • Replication testcode behaves better in heavily loaded machines.

  • bsddb3-4.7.1: RELEASED. (20080702). Testsuite verified in Unix 32 bit Python 2.3-2.6b1 and Berkeley DB 4.0-4.7.

    If you are going to use replication (Replication Manager or Base Replication), you should use Berkeley DB 4.6 or up. Previous Berkeley DB versions are unsupported, when using these functionalities.

    Available in PYPI. Changes:

    • Workaround a problem with un-initialized threads with the replication callback.

    • Export "DBRepUnavailError" exception.

    • Get rid of Berkeley DB 3.3 support. Rationale: http://mailman.jcea.es/pipermail/pybsddb/2008-March/000019.html

    • Better integration between Python test framework and bsddb3.

    • Improved Python 3.0 support in the C code.

    • Iteration over the database, using the legacy interface, now raises a RuntimeError if the database changes while iterating. http://bugs.python.org/issue2669 - gregory.p.smith

    • Create "set_private()" and "get_private()" methods for DB and DBEnv objects, to allow applications to link an arbitrary object to a DB/DBEnv. Useful for callbacks.

    • Support some more base replication calls: "DB_ENV->rep_start", "DB_ENV->rep_sync", "DB_ENV->rep_set_config", "DB_ENV->rep_get_config", "DB_ENV->rep_set_limit", "DB_ENV->rep_get_limit", "DB_ENV->rep_set_request", "DB_ENV->rep_get_request".

    • Support more base replication calls: "DB_ENV->rep_elect", "DB_ENV->rep_set_transport" and "DB_ENV->rep_process_message". Support also related flags.

  • bsddb3-4.7.0: RELEASED. (20080522). Testsuite verified in Unix 32 bit Python 2.3-2.6a3 and Berkeley DB 4.0-4.7.

    bsddb3 4.7.0 compiles against Berkeley DB 4.0-4.7. If you are upgrading your Berkeley DB environment at the same time, be sure to read the BDB upgrade notes carefully.

    From this release, the only supported Berkeley DB versions are 4.x. Support for Berkeley DB 3.3 is deprecated and will be deleted. Mailing list thread discussing this.

    Available in PYPI. Changes:

    • Support for Berkeley DB 4.7.

    • Support "DB_ENV->log_set_config", and related flags.

    • Complete the Berkeley DB Replication Manager support: "DB_ENV->repmgr_site_list" and related flags. "DB_ENV->repmgr_stat", "DB_ENV->repmgr_stat_print" and related flags.

    • Solved an old crash when building with debug python. (Neal Norwitz)

    • Extend the testsuite driver to check also against Python 2.6 (a3).

    • Support for RPC client service.

  • bsddb3-4.6.5: The work on this release is transfered to 4.7.0, since Oracle just published Berkeley DB 4.7.25. (20080521)

  • bsddb3-4.6.4: RELEASED. (20080426). Testsuite verified in Unix 32 bit Python 2.3-2.5 and Berkeley DB 4.0-4.6.

    If you are going to use the Replication Manager, you should use Berkeley DB 4.6 or up.

    Available in PYPI. Changes:

    • Basic support for Berkeley DB Replication Manager.

    • Support for a few replication calls, for benefice of Berkeley DB Replication Manager: "DB_ENV->rep_set_priority", "DB_ENV->rep_get_priority", "DB_ENV->rep_set_nsites", "DB_ENV->rep_get_nsites", "DB_ENV->rep_set_timeout", "DB_ENV->rep_get_timeout".

    • Implemented "DB_ENV->set_event_notify" and related flags.

    • Export flags related to replication timeouts.

    • Export "DBRepHandleDeadError" exception.

    • Implemented "DB_ENV->set_verbose", "DB_ENV->get_verbose" and related flags.

    • Implemented "DB_ENV->get_lg_max".

    • Improved performance and coverage of following tests: lock, threaded ConcurrentDataStore, threaded simple locks, threaded transactions.

    • New exported flags: "DB_LOCK_EXPIRE" and "DB_LOCK_MAXWRITE".

  • bsddb3-4.6.3: RELEASED. (20080403). Testsuite verified in Unix 32 bit Python 2.3-2.5 and Berkeley DB 4.0-4.6.

    Available in PYPI. Changes:

    • Be sure all DBEnv/DB paths in the TestSuite are generated in a way compatible with launching the tests in multiple threads/processes.

    • Move all the "assert" in the TestSuite to the version in the framework. This is very convenient, for example, to generate the final report, or better automation.

    • Implements "dbenv.log_flush()".

    • Regression: bug when creating a transaction and its parent is explicitly set to 'None'.

    • Regression: bug when duplicationg cursors. Solved.

    • Provide "dbenv.txn_recover()" and "txn.discard()", for fully support recovery of distributed transactions. Any user of this service should use Berkeley DB 4.5 or up.

    • If a transaction is in "prepare" or "recover" state, we MUST NOT abort it implicitly if the transaction goes out of scope, it is garbaged collected, etc. Better to leak than sorry.

    • In the previous case, we don't show any warning either.

    • Export "DB_XIDDATASIZE", for GID of distributed transactions.

    • If "db_seq_t" and PY_LONG_LONG are not compatible, compiler should show a warning while compiling, and the generated code would be incorrect but safe to use. No crash. Added sanity check in the testunit to verify this is not the case, and the datatypes are 64 bit width in fact.

    • Solve a compilation warning when including "bsddb.h" in other projects. (George Feinberg)

  • bsddb3-4.6.2: RELEASED. (20080325). Testsuite verified in Unix 32 bit Python 2.3-2.5 and Berkeley DB 4.0-4.6.

    Available in PYPI. Changes:

    • Support for MVCC (MultiVersion Concurrency Control).

    • Support for DB_DSYNC_LOG, DB_DSYNC_DB and DB_OVERWRITE flags.

    • Move old documentation to ReST format. This is important for several reasons, notably to be able to integrate the documentation "as is" in python official docs (from Python 2.6).

    • Don't include Berkeley DB documentation. Link to the online version.

    • DBSequence objects documented.

    • DBSequence.get_key() didn't check for parameters. Fixed.

    • If a DB is closed, its children DBSequences will be closed also.

    • To be consistent with other close methods, you can call "DBSequence.close()" several times without error.

    • If a Sequence is opened inside a transaction, it will be automatically closed if the transaction is aborted. If the transaction is committed and it is actually a subtransaction, the sequence will be inherited by the parent transaction.

    • Be sure "db_seq_t" and "long long" are compatible. Disabled because MS Windows issues to be investigated.

    • Documented the already available DBEnv methods: "dbremove", "dbrename", "set_encrypt", "set_timeout", "set_shm_key", "lock_id_free", "set_tx_timestamp", "lsn_reset" and "log_stat".

    • Completed and documented "DBEnv.txn_stat()".

    • Completed and documented "DBEnv.lock_stat()".

    • Documented the already available DB methods: "set_encrypt", "pget".

    • Completed documentation of DB methods: "associate", "open".

    • Completed and documented "DB.stat()".

    • Documented the already available DBCursor methods: "pget" (several flavours).

    • Completed documentation of DBCursor methods: "consume", "join_item".

  • bsddb3-4.6.1: RELEASED (20080310). Testsuite verified in 32 bit Python 2.3-2.5 and Berkeley DB 4.0-4.6.

    Available in PYPI. Changes:

    • 'egg' (setuptools) support.

    • Environments, database handles and cursors are maintained in a logical tree. Closing any element of the tree, implicitly closes its children.

    • Transactions are managed in a logical tree. When aborting transactions, enclosed db handles, cursors and transactions, are closed. If transaction commits, the enclosed db handles are "inherited" by the parent transaction/environment.

    • Solved a bug when a DBEnv goes out of scope without closing first.

    • Add transactions to the management of closing of nested objects. (not completed yet!)

    • Fix memory leaks.

    • Previous versions were inconsistent when key or value were "" (the null string), according to opening the database in thread safe mode or not. In one case the lib gives "" and in the other it gives None.

Release procedure

This section documents the release procedure, fundamentally to serve as a checklist to myself. Suggestions welcomed.

  • Do a full matrix check running "./test-full_prerelease.py". This program runs all tests with all combination of supported Python and Berkeley DB versions.

  • Update the copyright years if necessary.

  • Install the new bindings with "python3 setup.py build -f" followed by "python3 setup.py install". The "-f" is useful to be sure to install the right compilation, since the test could have left undesirable versions behind.

  • Restart services using Berkeley DB, in my own servers. Verify right behaviour for a couple of days.

  • Review and update "ChangeLog".

  • Review and update documentation. Beware if we are supporting a new Berkeley DB release, or deprecating old versions.

  • Create the documentation in HTML, that is going to be included in the release.

  • Create a new "tag" in the mercurial repository .

  • Pay attention to changes to BitCoin donation address.

  • Update this webpage. Update online documentation. Be sure links to Oracle website correspond to the right Berkeley DB release.

  • Prepare a source release: "python3 setup.py sdist". Verify that everything is right.

  • Do "twine check dist/berkeleydb-XXX.tar.gz".

  • Push the release to pypi: "twine upload dist/berkeleydb-XXX.tar.gz".

  • Upgrade all my machines.

  • Publish an announcement to the mailing list, update my RSS, announce in Freshmeat, Twitter, Facebook and Google+.

  • Consider if this version should be pushed to Python SVN.

Python SVN update procedure

This section documents the procedure used to update Python SVN repository with current pybsddb code, fundamentally to serve as a checklist to myself. Suggestions welcomed.

  • Update local python working copy.

  • Locate any patch in python code and merge it with current pybsddb release. BE SURE I don't overwrite any patch there!. The relevant files and directories are:

    • Files: Modules/bsddb.h and Modules/_bsddb.c.

    • Directories: Lib/bsddb/* and Lib/bsddb/test/*.

    File Lib/bsddb/test_support.py is already in Python 2.6 and 3.0, so we don't need to copy it.

  • File setup.py sets the maximum and minimum Berkeley DB supported version.

  • File Lib/test/test_bsddb3.py has the tests that must be checked. This file needs to be updated if we add/delete test files. This needs to be automated.

  • It is a good idea to check for leaks and so. Remember to link to the right Python main library, possibly using LD_LIBRARY_PATH.

  • Do not forget to update Misc/NEWS.

  • Review Python "buildbot" report.


Historia

  • 22/mar/10: Publicación de la versión 4.8.4, que se va a integrar en Python 2.7.

  • 03/oct/08: Publicación de la versión 4.7.3, integrada en Python 2.6. Esta versión es compatible también con Python 3.0.

  • 13/may/08: Documento los pasos necesarios para actualizar el SVN de Python con la versión actual de pybsddb.

  • 18/mar/08: Publicación de la documentación en ReST y puesta al día.

  • 10/mar/08: Primera versión de pybssdb publicada por mí.

  • 21/feb/08: Primera versión de esta página.



Python Zope ©2008-2024 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS