Code

store: Renamed sdb_store_cmp_XX to sdb_store_XX_matcher.
[sysdb.git] / src / core / store.c
index db8a9d9c5686f7e7c79059fd383c6014ad5329bf..d9ca4c0eb113a7a2824249d92d83fa45f4d4e56c 100644 (file)
@@ -919,8 +919,13 @@ sdb_store_get_field(sdb_store_obj_t *obj, int field, sdb_data_t *res)
                        tmp.data.datetime = obj->interval;
                        break;
                case SDB_FIELD_BACKEND:
-                       /* TODO: add support for storing array values in a data object
-                        * for now, fall thru to the error case */
+               {
+                       tmp.type = SDB_TYPE_ARRAY | SDB_TYPE_STRING;
+                       tmp.data.array.length = obj->backends_num;
+                       tmp.data.array.values = obj->backends;
+                       return sdb_data_copy(res, &tmp);
+                       break;
+               }
                default:
                        return -1;
        }
@@ -932,7 +937,8 @@ sdb_store_get_field(sdb_store_obj_t *obj, int field, sdb_data_t *res)
 } /* sdb_store_get_field */
 
 int
-sdb_store_get_attr(sdb_store_obj_t *obj, const char *name, sdb_data_t *res)
+sdb_store_get_attr(sdb_store_obj_t *obj, const char *name, sdb_data_t *res,
+               sdb_store_matcher_t *filter)
 {
        sdb_avltree_t *tree = NULL;
        sdb_avltree_iter_t *iter = NULL;
@@ -957,6 +963,10 @@ sdb_store_get_attr(sdb_store_obj_t *obj, const char *name, sdb_data_t *res)
                if (strcasecmp(SDB_OBJ(attr)->name, name))
                        continue;
 
+               if (filter&& (! sdb_store_matcher_matches(filter,
+                                               STORE_OBJ(attr), NULL)))
+                       break; /* found it but it's filtered */
+
                assert(STORE_OBJ(attr)->type == SDB_ATTRIBUTE);
                if (res)
                        sdb_data_copy(res, &ATTR(attr)->value);