Define + use enum for primary/secondary index types + api to get it
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 1 Apr 2010 09:01:28 +0000 (12:01 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 1 Apr 2010 09:03:14 +0000 (12:03 +0300)
- no functional changes, making the type more obvious than
  "case 2*sizeof(int32_t):"

lib/backend/db3.c
lib/backend/dbconfig.c
lib/backend/dbi.h
lib/rpmdb.c

index db6b400..088c6e4 100644 (file)
@@ -349,6 +349,11 @@ int dbiByteSwapped(dbiIndex dbi)
     return rc;
 }
 
+dbiIndexType dbiType(dbiIndex dbi)
+{
+    return dbi->dbi_type;
+}
+
 int dbiStat(dbiIndex dbi, unsigned int flags)
 {
     DB * db = dbi->dbi_db;
index d1e8760..d219439 100644 (file)
@@ -270,19 +270,7 @@ dbiIndex dbiNew(rpmdb rpmdb, rpmTag rpmtag)
     dbi->dbi_rpmdb = rpmdb;
     dbi->dbi_rpmtag = rpmtag;
     dbi->dbi_file = rpmTagGetName(rpmtag);
-    
-    /*
-     * Inverted lists have join length of 2, primary data has join length of 1.
-     */
-    switch (rpmtag) {
-    case RPMDBI_PACKAGES:
-       dbi->dbi_jlen = 1 * sizeof(int32_t);
-       break;
-    default:
-       dbi->dbi_jlen = 2 * sizeof(int32_t);
-       break;
-    }
-
+    dbi->dbi_type = (rpmtag == RPMDBI_PACKAGES) ? DBI_PRIMARY : DBI_SECONDARY;
     dbi->dbi_byteswapped = -1; /* -1 unknown, 0 native order, 1 alien order */
 
     if (!dbi->dbi_use_dbenv) {         /* dbenv is always used now. */
index 25b0853..a008251 100644 (file)
@@ -1,8 +1,15 @@
 #ifndef _DBI_H
 #define _DBI_H
 
+
 typedef struct _dbiIndex * dbiIndex;
 
+/* Type of the dbi, also serves as the join key size */
+typedef enum dbiIndexType_e {
+    DBI_PRIMARY        = (1 * sizeof(int32_t)),
+    DBI_SECONDARY      = (2 * sizeof(int32_t)),
+} dbiIndexType;
+
 /** \ingroup dbi
  * Describes an index database (implemented on Berkeley db functionality).
  */
@@ -39,7 +46,7 @@ struct _dbiIndex {
 
     rpmdb dbi_rpmdb;           /*!< the parent rpm database */
     rpmTag dbi_rpmtag; /*!< rpm tag used for index */
-    int        dbi_jlen;               /*!< size of join key */
+    dbiIndexType dbi_type;     /*! Type of dbi (primary / index) */
 
     DB * dbi_db;               /*!< Berkeley DB * handle */
     DB_TXN * dbi_txnid;                /*!< Bekerley DB_TXN * transaction id */
@@ -199,4 +206,12 @@ int dbiByteSwapped(dbiIndex dbi);
 RPM_GNUC_INTERNAL
 int dbiStat(dbiIndex dbi, unsigned int flags);
 
+/** \ingroup dbi
+ * Type of dbi (primary data / index)
+ * @param dbi          index database handle
+ * @return             type of dbi
+ */
+RPM_GNUC_INTERNAL
+dbiIndexType dbiType(dbiIndex dbi);
+
 #endif /* _DBI_H */
index 642ef2e..1dbf7f2 100644 (file)
@@ -256,6 +256,7 @@ static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp)
     const char * sdbir;
     dbiIndexSet set;
     unsigned int i;
+    dbiIndexType itype = dbiType(dbi);
 
     if (dbi == NULL || data == NULL || setp == NULL)
        return -1;
@@ -266,12 +267,12 @@ static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp)
     }
 
     set = xcalloc(1, sizeof(*set));
-    dbiGrowSet(set, data->size / dbi->dbi_jlen);
-    set->count = data->size / dbi->dbi_jlen;
+    dbiGrowSet(set, data->size / itype);
+    set->count = data->size / itype;
 
-    switch (dbi->dbi_jlen) {
+    switch (itype) {
     default:
-    case 2*sizeof(int32_t):
+    case DBI_SECONDARY:
        for (i = 0; i < set->count; i++) {
            union _dbswap hdrNum, tagNum;
 
@@ -287,7 +288,7 @@ static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp)
            set->recs[i].tagNum = tagNum.ui;
        }
        break;
-    case 1*sizeof(int32_t):
+    case DBI_PRIMARY:
        for (i = 0; i < set->count; i++) {
            union _dbswap hdrNum;
 
@@ -317,20 +318,21 @@ static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set)
     int _dbbyteswapped = dbiByteSwapped(dbi);
     char * tdbir;
     unsigned int i;
+    dbiIndexType itype = dbiType(dbi);
 
     if (dbi == NULL || data == NULL || set == NULL)
        return -1;
 
-    data->size = set->count * (dbi->dbi_jlen);
+    data->size = set->count * itype;
     if (data->size == 0) {
        data->data = NULL;
        return 0;
     }
     tdbir = data->data = xmalloc(data->size);
 
-    switch (dbi->dbi_jlen) {
+    switch (itype) {
     default:
-    case 2*sizeof(int32_t):
+    case DBI_SECONDARY:
        for (i = 0; i < set->count; i++) {
            union _dbswap hdrNum, tagNum;
 
@@ -348,7 +350,7 @@ static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set)
            tdbir += sizeof(tagNum.ui);
        }
        break;
-    case 1*sizeof(int32_t):
+    case DBI_PRIMARY:
        for (i = 0; i < set->count; i++) {
            union _dbswap hdrNum;