diff --git a/src/core/store_expr.c b/src/core/store_expr.c
index 642255e4ab94c77028e1f1779d77fd56bfe3584a..6405002cfda3187177dc9b49dae9ce2bc8e82322 100644 (file)
--- a/src/core/store_expr.c
+++ b/src/core/store_expr.c
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;