diff --git a/src/core/store_expr.c b/src/core/store_expr.c
index 42ebcaa26954a42ab279fbd20728c98f591e8e35..d9f6e0462b65c39e5e67c4b787139507c3969e43 100644 (file)
--- a/src/core/store_expr.c
+++ b/src/core/store_expr.c
{
sdb_data_t null = SDB_DATA_INIT;
sdb_data_t ret = SDB_DATA_INIT;
+ sdb_data_t tmp = SDB_DATA_INIT;
if (! iter)
return null;
&& (! sdb_store_matcher_matches(iter->filter, child, NULL)))
continue;
- if (sdb_store_expr_eval(iter->expr, iter->obj, &ret, iter->filter))
+ if (sdb_store_expr_eval(iter->expr, child, &ret, iter->filter))
return null;
break;
}
/* Skip over any filtered objects */
- if (iter->filter)
- while ((child = STORE_OBJ(sdb_avltree_iter_peek_next(iter->tree))))
+ if (iter->filter) {
+ while ((child = STORE_OBJ(sdb_avltree_iter_peek_next(iter->tree)))) {
if (sdb_store_matcher_matches(iter->filter, child, NULL))
break;
+ (void)sdb_avltree_iter_get_next(iter->tree);
+ }
+ }
return ret;
}
if (iter->array_idx >= iter->array.data.array.length)
return null;
- if (sdb_data_array_get(&iter->array, iter->array_idx, &ret))
- return null;
++iter->array_idx;
+ if (sdb_data_array_get(&iter->array, iter->array_idx - 1, &ret))
+ return null;
+ if (sdb_data_copy(&tmp, &ret))
+ return null;
+ ret = tmp;
return ret;
} /* sdb_store_expr_iter_get_next */