Author: minfrin
Date: Sat Mar 15 10:07:29 2025
New Revision: 1924398
URL: http://svn.apache.org/viewvc?rev=1924398&view=rev
Log:
apr-dbm-lmdb: Add LMDB driver for apr_dbm.
Modified:
apr/apr-util/branches/1.7.x/CHANGES
apr/apr-util/branches/1.7.x/Makefile.in
apr/apr-util/branches/1.7.x/build.conf
apr/apr-util/branches/1.7.x/build/dbm.m4
apr/apr-util/branches/1.7.x/build/dso.m4
apr/apr-util/branches/1.7.x/dbm/apr_dbm.c
apr/apr-util/branches/1.7.x/include/apr_dbm.h
apr/apr-util/branches/1.7.x/include/apu.h.in
apr/apr-util/branches/1.7.x/include/apu.hnw
apr/apr-util/branches/1.7.x/include/apu.hw
apr/apr-util/branches/1.7.x/include/apu.hwc
apr/apr-util/branches/1.7.x/include/private/apr_dbm_private.h
apr/apr-util/branches/1.7.x/include/private/apu_select_dbm.h.in
apr/apr-util/branches/1.7.x/test/testdbm.c
Modified: apr/apr-util/branches/1.7.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/CHANGES?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/CHANGES [utf-8] (original)
+++ apr/apr-util/branches/1.7.x/CHANGES [utf-8] Sat Mar 15 10:07:29 2025
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with APR-util 1.7.0
+ *) apr-dbm-lmdb: Add LMDB driver for apr_dbm.
+ [Lubos Uhliarik <uhliarik redhat.com>]
+
*) apr_ldap: Add write capability to the LDAP API. Support for
add, modify, rename, delete, and extended operations.
[Graham Leggett]
Modified: apr/apr-util/branches/1.7.x/Makefile.in
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/Makefile.in?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/Makefile.in (original)
+++ apr/apr-util/branches/1.7.x/Makefile.in Sat Mar 15 10:07:29 2025
@@ -39,6 +39,7 @@ LDADD_dbd_odbc = @LDADD_dbd_odbc@
LDADD_dbm_db = @LDADD_dbm_db@
LDADD_dbm_gdbm = @LDADD_dbm_gdbm@
LDADD_dbm_ndbm = @LDADD_dbm_ndbm@
+LDADD_dbm_lmdb = @LDADD_dbm_lmdb@
LDADD_ldap = @LDADD_ldap@
LDADD_crypto_openssl = @LDADD_crypto_openssl@
LDADD_crypto_nss = @LDADD_crypto_nss@
Modified: apr/apr-util/branches/1.7.x/build.conf
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/build.conf?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/build.conf (original)
+++ apr/apr-util/branches/1.7.x/build.conf Sat Mar 15 10:07:29 2025
@@ -45,7 +45,7 @@ headers = include/*.h include/private/*.
modules =
ldap crypto_openssl crypto_nss crypto_commoncrypto dbd_pgsql
dbd_sqlite2 dbd_sqlite3 dbd_oracle dbd_mysql dbd_odbc
- dbm_db dbm_gdbm dbm_ndbm
+ dbm_db dbm_gdbm dbm_ndbm dbm_lmdb
# gen_uri_delim.c
@@ -96,6 +96,10 @@ target = dbm/apr_dbm_db.la
paths = dbm/apr_dbm_gdbm.c
target = dbm/apr_dbm_gdbm.la
+[dbm_lmdb]
+paths = dbm/apr_dbm_lmdb.c
+target = dbm/apr_dbm_lmdb.la
+
[dbm_ndbm]
paths = dbm/apr_dbm_ndbm.c
target = dbm/apr_dbm_ndbm.la
Modified: apr/apr-util/branches/1.7.x/build/dbm.m4
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/build/dbm.m4?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/build/dbm.m4 (original)
+++ apr/apr-util/branches/1.7.x/build/dbm.m4 Sat Mar 15 10:07:29 2025
@@ -498,11 +498,13 @@ dnl APU_CHECK_DBM: see what kind of DBM
dnl
AC_DEFUN([APU_CHECK_DBM], [
apu_use_sdbm=0
+ apu_use_lmdb=0
apu_use_ndbm=0
apu_use_gdbm=0
apu_use_db=0
dnl it's in our codebase
apu_have_sdbm=1
+ apu_have_lmdb=0
apu_have_gdbm=0
apu_have_ndbm=0
apu_have_db=0
@@ -514,7 +516,7 @@ AC_DEFUN([APU_CHECK_DBM], [
# Although we search for all versions up to 6.9,
# we should only include existing versions in our
# help string.
- dbm_list="sdbm, gdbm, ndbm, db, db1, db185, db2, db3, db4"
+ dbm_list="sdbm, lmdb, gdbm, ndbm, db, db1, db185, db2, db3, db4"
db_max_version=48
db_min_version=41
db_version="$db_min_version"
@@ -541,7 +543,7 @@ AC_DEFUN([APU_CHECK_DBM], [
done
AC_ARG_WITH(dbm, [APR_HELP_STRING([--with-dbm=DBM], [choose the DBM type to use.
- DBM={sdbm,gdbm,ndbm,db,db1,db185,db2,db3,db4,db4X,db5X,db6X} for some X=0,...,9])],
+ DBM={sdbm,lmdb,gdbm,ndbm,db,db1,db185,db2,db3,db4,db4X,db5X,db6X} for some X=0,...,9])],
[
if test "$withval" = "yes"; then
AC_MSG_ERROR([--with-dbm needs to specify a DBM type to use.
@@ -552,6 +554,35 @@ AC_DEFUN([APU_CHECK_DBM], [
requested=default
])
+ AC_ARG_WITH([lmdb], [APR_HELP_STRING([--with-lmdb=DIR], [enable LMDB support])],
+ [
+ apu_have_lmdb=0
+ if test "$withval" = "yes"; then
+ AC_CHECK_HEADER(lmdb.h, AC_CHECK_LIB(lmdb, mdb_dbi_open, [apu_have_lmdb=1]))
+ elif test "$withval" = "no"; then
+ apu_have_lmdb=0
+ else
+ saved_cppflags="$CPPFLAGS"
+ saved_ldflags="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LDFLAGS="$LDFLAGS -L$withval/lib "
+
+ AC_MSG_CHECKING(checking for lmdb in $withval)
+ AC_CHECK_HEADER(lmdb.h, AC_CHECK_LIB(lmdb, mdb_dbi_open, [apu_have_lmdb=1]))
+ if test "$apu_have_lmdb" != "0"; then
+ APR_ADDTO(LDFLAGS, [-L$withval/lib])
+ APR_ADDTO(INCLUDES, [-I$withval/include])
+ fi
+ CPPFLAGS="$saved_cppflags"
+ LDFLAGS="$saved_ldflags"
+ fi
+
+ if test "$requested" = "lmdb" -a "$apu_have_lmdb" = 0; then
+ AC_MSG_ERROR([LMDB requested, but not found])
+ fi
+ ])
+
+
dnl We don't pull in GDBM unless the user asks for it, since it's GPL
AC_ARG_WITH([gdbm], [APR_HELP_STRING([--with-gdbm=DIR], [enable GDBM support])],
[
@@ -668,6 +699,7 @@ AC_DEFUN([APU_CHECK_DBM], [
fi
if test "$apu_want_db" != "0"; then
+ AC_MSG_NOTICE([checking for Berkeley DB $requested in $user_places])
APU_CHECK_DB($requested, $user_places)
if test "$apu_have_db" = "0"; then
AC_ERROR(Berkeley DB not found.)
@@ -680,7 +712,7 @@ AC_DEFUN([APU_CHECK_DBM], [
fi
case "$requested" in
- sdbm | gdbm | ndbm | db)
+ lmdb | sdbm | gdbm | ndbm | db)
eval "apu_use_$requested=1"
apu_default_dbm=$requested
;;
@@ -709,11 +741,13 @@ AC_DEFUN([APU_CHECK_DBM], [
AC_MSG_CHECKING(for default DBM)
AC_MSG_RESULT($apu_default_dbm)
+ AC_SUBST(apu_use_lmdb)
AC_SUBST(apu_use_sdbm)
AC_SUBST(apu_use_gdbm)
AC_SUBST(apu_use_ndbm)
AC_SUBST(apu_use_db)
+ AC_SUBST(apu_have_lmdb)
AC_SUBST(apu_have_sdbm)
AC_SUBST(apu_have_gdbm)
AC_SUBST(apu_have_ndbm)
@@ -738,8 +772,13 @@ AC_DEFUN([APU_CHECK_DBM], [
APR_ADDTO(LDADD_dbm_ndbm, [-l$apu_ndbm_lib])
fi
+ if test "$apu_have_lmdb" = "1"; then
+ APR_ADDTO(LDADD_dbm_lmdb, [-llmdb])
+ fi
+
AC_SUBST(LDADD_dbm_db)
AC_SUBST(LDADD_dbm_gdbm)
AC_SUBST(LDADD_dbm_ndbm)
+ AC_SUBST(LDADD_dbm_lmdb)
])
Modified: apr/apr-util/branches/1.7.x/build/dso.m4
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/build/dso.m4?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/build/dso.m4 (original)
+++ apr/apr-util/branches/1.7.x/build/dso.m4 Sat Mar 15 10:07:29 2025
@@ -60,6 +60,7 @@ yes
test $apu_have_db = 1 && objs="$objs dbm/apr_dbm_berkeleydb.lo"
test $apu_have_gdbm = 1 && objs="$objs dbm/apr_dbm_gdbm.lo"
test $apu_have_ndbm = 1 && objs="$objs dbm/apr_dbm_ndbm.lo"
+ test $apu_have_lmdb = 1 && objs="$objs dbm/apr_dbm_lmdb.lo"
test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_init.lo"
test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_option.lo"
test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_rebind.lo"
@@ -81,11 +82,11 @@ yes
APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_crypto_openssl $LDADD_crypto_nss $LDADD_crypto_commoncrypto"
APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_oracle $LDADD_dbd_mysql $LDADD_dbd_odbc"
- APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm"
+ APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm $LDADD_dbm_lmdb"
APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_ldap"
APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_crypto_openssl $LDADD_crypto_nss $LDADD_crypto_commoncrypto"
APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_oracle $LDADD_dbd_mysql $LDADD_dbd_odbc"
- APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm"
+ APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm $LDADD_dbm_lmdb"
APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_ldap"
else
@@ -104,6 +105,7 @@ yes
test $apu_have_db = 1 && dsos="$dsos dbm/apr_dbm_db.la"
test $apu_have_gdbm = 1 && dsos="$dsos dbm/apr_dbm_gdbm.la"
test $apu_have_ndbm = 1 && dsos="$dsos dbm/apr_dbm_ndbm.la"
+ test $apu_have_lmdb = 1 && dsos="$dsos dbm/apr_dbm_lmdb.la"
test $apu_has_ldap = 1 && dsos="$dsos ldap/apr_ldap.la"
if test -n "$dsos"; then
Modified: apr/apr-util/branches/1.7.x/dbm/apr_dbm.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/dbm/apr_dbm.c?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/dbm/apr_dbm.c (original)
+++ apr/apr-util/branches/1.7.x/dbm/apr_dbm.c Sat Mar 15 10:07:29 2025
@@ -53,6 +53,9 @@
#elif APU_USE_SDBM
#define DBM_VTABLE apr_dbm_type_sdbm
#define DBM_NAME "sdbm"
+#elif APU_USE_LMDB
+#define DBM_VTABLE apr_dbm_type_lmdb
+#define DBM_NAME "lmdb"
#else /* Not in the USE_xDBM list above */
#error a DBM implementation was not specified
#endif
@@ -95,6 +98,9 @@ APU_DECLARE(apr_status_t) apr_dbm_get_dr
#if APU_HAVE_DB
else if (!strcasecmp(type, "db")) *vtable = &apr_dbm_type_db;
#endif
+#if APU_HAVE_LMDB
+ else if (!strcasecmp(type, "lmdb")) *vtable = &apr_dbm_type_lmdb;
+#endif
else if (*type && !strcasecmp(type + 1, "dbm")) {
#if APU_HAVE_GDBM
if (*type == 'G' || *type == 'g') *vtable = &apr_dbm_type_gdbm;
@@ -142,6 +148,7 @@ APU_DECLARE(apr_status_t) apr_dbm_get_dr
if (!strcasecmp(type, "default")) type = DBM_NAME;
else if (!strcasecmp(type, "db")) type = "db";
+ else if (!strcasecmp(type, "lmdb")) type = "lmdb";
else if (*type && !strcasecmp(type + 1, "dbm")) {
if (*type == 'G' || *type == 'g') type = "gdbm";
else if (*type == 'N' || *type == 'n') type = "ndbm";
Modified: apr/apr-util/branches/1.7.x/include/apr_dbm.h
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/apr_dbm.h?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/apr_dbm.h (original)
+++ apr/apr-util/branches/1.7.x/include/apr_dbm.h Sat Mar 15 10:07:29 2025
@@ -89,6 +89,7 @@ APU_DECLARE(apr_status_t) apr_dbm_get_dr
* @param type The type of the DBM (not all may be available at run time)
* <pre>
* db for Berkeley DB files
+ * lmdb for LMDB files
* gdbm for GDBM files
* ndbm for NDBM files
* sdbm for SDBM files (always available)
Modified: apr/apr-util/branches/1.7.x/include/apu.h.in
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/apu.h.in?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/apu.h.in (original)
+++ apr/apr-util/branches/1.7.x/include/apu.h.in Sat Mar 15 10:07:29 2025
@@ -100,6 +100,7 @@
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM @apu_have_sdbm@
+#define APU_HAVE_LMDB @apu_have_lmdb@
#define APU_HAVE_GDBM @apu_have_gdbm@
#define APU_HAVE_NDBM @apu_have_ndbm@
#define APU_HAVE_DB @apu_have_db@
Modified: apr/apr-util/branches/1.7.x/include/apu.hnw
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/apu.hnw?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/apu.hnw (original)
+++ apr/apr-util/branches/1.7.x/include/apu.hnw Sat Mar 15 10:07:29 2025
@@ -86,6 +86,7 @@
#define APU_HAVE_SDBM 1
#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_LMDB 0
#define APU_HAVE_GDBM 0
#define APU_HAVE_NDBM 0
#define APU_HAVE_DB 0
Modified: apr/apr-util/branches/1.7.x/include/apu.hw
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/apu.hw?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/apu.hw (original)
+++ apr/apr-util/branches/1.7.x/include/apu.hw Sat Mar 15 10:07:29 2025
@@ -108,6 +108,7 @@
#define APU_HAVE_SDBM 1
#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_LMDB 0
#define APU_HAVE_GDBM 0
#define APU_HAVE_NDBM 0
#define APU_HAVE_DB 0
Modified: apr/apr-util/branches/1.7.x/include/apu.hwc
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/apu.hwc?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/apu.hwc (original)
+++ apr/apr-util/branches/1.7.x/include/apu.hwc Sat Mar 15 10:07:29 2025
@@ -110,6 +110,7 @@
#define APU_HAVE_SDBM 1
#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_LMDB 0
#define APU_HAVE_GDBM 0
#define APU_HAVE_NDBM 0
#define APU_HAVE_DB 0
Modified: apr/apr-util/branches/1.7.x/include/private/apr_dbm_private.h
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/private/apr_dbm_private.h?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/private/apr_dbm_private.h (original)
+++ apr/apr-util/branches/1.7.x/include/private/apr_dbm_private.h Sat Mar 15 10:07:29 2025
@@ -111,6 +111,7 @@ struct apr_dbm_t
/* Declare all of the DBM provider tables */
APU_MODULE_DECLARE_DATA extern const apr_dbm_driver_t apr_dbm_type_sdbm;
APU_MODULE_DECLARE_DATA extern const apr_dbm_driver_t apr_dbm_type_gdbm;
+APU_MODULE_DECLARE_DATA extern const apr_dbm_driver_t apr_dbm_type_lmdb;
APU_MODULE_DECLARE_DATA extern const apr_dbm_driver_t apr_dbm_type_ndbm;
APU_MODULE_DECLARE_DATA extern const apr_dbm_driver_t apr_dbm_type_db;
Modified: apr/apr-util/branches/1.7.x/include/private/apu_select_dbm.h.in
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/include/private/apu_select_dbm.h.in?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/include/private/apu_select_dbm.h.in (original)
+++ apr/apr-util/branches/1.7.x/include/private/apu_select_dbm.h.in Sat Mar 15 10:07:29 2025
@@ -21,6 +21,7 @@
** The following macros control what features APRUTIL will use
*/
#define APU_USE_SDBM @apu_use_sdbm@
+#define APU_USE_LMDB @apu_use_lmdb@
#define APU_USE_NDBM @apu_use_ndbm@
#define APU_USE_GDBM @apu_use_gdbm@
#define APU_USE_DB @apu_use_db@
Modified: apr/apr-util/branches/1.7.x/test/testdbm.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.7.x/test/testdbm.c?rev=1924398&r1=1924397&r2=1924398&view=diff
==============================================================================
--- apr/apr-util/branches/1.7.x/test/testdbm.c (original)
+++ apr/apr-util/branches/1.7.x/test/testdbm.c Sat Mar 15 10:07:29 2025
@@ -153,6 +153,9 @@ static void test_dbm_traversal(abts_case
rv = apr_dbm_nextkey(db, &key);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+ /** avoid infinite loop */
+ if (rv != APR_SUCCESS) break;
} while (1);
for (i = 0; i < NUM_TABLE_ROWS; i++) {
@@ -170,6 +173,7 @@ static void test_dbm(abts_case *tc, void
dbm_table_t *table;
const char *type = data;
const char *file = apr_pstrcat(p, "data/test-", type, NULL);
+ const char *nofile = apr_pstrcat(p, "data/no-such-test-", type, NULL);
rv = apr_dbm_open_ex(&db, type, file, APR_DBM_RWCREATE, APR_OS_DEFAULT, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
@@ -198,12 +202,18 @@ static void test_dbm(abts_case *tc, void
test_dbm_fetch(tc, db, table);
apr_dbm_close(db);
+
+ rv = apr_dbm_open_ex(&db, type, nofile, APR_DBM_READONLY, APR_FPROT_OS_DEFAULT, p);
+ ABTS_TRUE(tc, rv != APR_SUCCESS);
}
abts_suite *testdbm(abts_suite *suite)
{
suite = ADD_SUITE(suite);
+#if APU_HAVE_LMDB
+ abts_run_test(suite, test_dbm, "lmdb");
+#endif
#if APU_HAVE_GDBM
abts_run_test(suite, test_dbm, "gdbm");
#endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.