index 1ec1dbb68e702f6c5e4a9722e885f1042494cf38..c3029c75078db3c0ee6d35b0fcbe602a799f41f6 100644 (file)
--- a/src/core/store_lookup.c
+++ b/src/core/store_lookup.c
if (obj->type != SDB_HOST)
return INT_MAX;
- if (sdb_store_expr_eval(ATTR_C(cond)->expr, &value))
+ if (sdb_store_expr_eval(ATTR_C(cond)->expr, obj, &value))
return INT_MAX;
attr = attr_get(HOST(obj), ATTR_C(cond)->name, filter);
if (sdb_store_get_field(obj, OBJ_C(cond)->field, &obj_value))
return INT_MAX;
- if (sdb_store_expr_eval(OBJ_C(cond)->expr, &value))
+ if (sdb_store_expr_eval(OBJ_C(cond)->expr, obj, &value))
return INT_MAX;
if (obj_value.type != value.type) {
case SDB_SERVICE:
iter = sdb_avltree_get_iter(HOST(obj)->services);
break;
+ case SDB_METRIC:
+ iter = sdb_avltree_get_iter(HOST(obj)->metrics);
+ break;
case SDB_ATTRIBUTE:
iter = sdb_avltree_get_iter(HOST(obj)->attributes);
break;
return buf;
}
- if (sdb_store_expr_eval(expr, &value))
+ if (sdb_store_expr_eval(expr, NULL, &value))
snprintf(value_str, sizeof(value_str), "ERR");
else if (sdb_data_format(&value, value_str, sizeof(value_str),
SDB_SINGLE_QUOTED) < 0)
MATCHER_ISNULL, attr_name));
} /* sdb_store_isnull_matcher */
+int
+sdb_store_parse_field_name(const char *name)
+{
+ if (! strcasecmp(name, "last_update"))
+ return SDB_FIELD_LAST_UPDATE;
+ else if (! strcasecmp(name, "age"))
+ return SDB_FIELD_AGE;
+ else if (! strcasecmp(name, "interval"))
+ return SDB_FIELD_INTERVAL;
+ else if (! strcasecmp(name, "backend"))
+ return SDB_FIELD_BACKEND;
+ return -1;
+} /* sdb_store_parse_field_name */
+
static sdb_store_matcher_t *
maybe_inv_matcher(sdb_store_matcher_t *m, _Bool inv)
{
type = SDB_HOST;
else if (! strcasecmp(obj_type, "service"))
type = SDB_SERVICE;
+ else if (! strcasecmp(obj_type, "metric"))
+ type = SDB_METRIC;
else if (! strcasecmp(obj_type, "attribute"))
type = SDB_ATTRIBUTE;
else
if (! expr)
return NULL;
- if (sdb_store_expr_eval(expr, &value))
+ if (sdb_store_expr_eval(expr, NULL, &value))
return NULL;
if (value.type != SDB_TYPE_STRING) {
sdb_data_free_datum(&value);
if (! expr)
return NULL;
- if (! strcasecmp(name, "last_update"))
- field = SDB_FIELD_LAST_UPDATE;
- else if (! strcasecmp(name, "age"))
- field = SDB_FIELD_AGE;
- else if (! strcasecmp(name, "interval"))
- field = SDB_FIELD_INTERVAL;
- else if (! strcasecmp(name, "backend"))
- field = SDB_FIELD_BACKEND;
- else
+ field = sdb_store_parse_field_name(name);
+ if (field < 0)
return NULL;
if (parse_cond_op(op, &matcher, &inv))
return NULL;
-
cond = sdb_store_obj_cond(field, expr);
if (! cond)
return NULL;