diff --git a/src/core/store.c b/src/core/store.c
index db8a9d9c5686f7e7c79059fd383c6014ad5329bf..d9ca4c0eb113a7a2824249d92d83fa45f4d4e56c 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
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;
}
} /* 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;
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);