Code

store: Fix execution of more complex iterators.
[sysdb.git] / src / core / store_expr.c
index 642255e4ab94c77028e1f1779d77fd56bfe3584a..6405002cfda3187177dc9b49dae9ce2bc8e82322 100644 (file)
@@ -275,6 +275,23 @@ sdb_store_expr_iter(sdb_store_expr_t *expr, sdb_store_obj_t *obj,
        if (! expr)
                return NULL;
 
+       while (expr->type == TYPED_EXPR) {
+               int type = (int)expr->data.data.integer;
+
+               if (obj->type == type) {
+                       /* self reference */
+               }
+               else if ((type == SDB_HOST)
+                               && ((obj->type == SDB_SERVICE)
+                                       || (obj->type == SDB_METRIC))) {
+                       /* reference to parent host */
+                       obj = obj->parent;
+               }
+               else
+                       break;
+               expr = expr->left;
+       }
+
        if (expr->type == TYPED_EXPR) {
                if (! obj)
                        return NULL;