You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by mi...@apache.org on 2025/03/15 10:07:30 UTC

svn commit: r1924398 - in /apr/apr-util/branches/1.7.x: ./ build/ dbm/ include/ include/private/ test/

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