From: Sebastian Harl Date: Wed, 5 Nov 2014 23:50:40 +0000 (+0100) Subject: frontend/grammar: Let LOOKUP support all object types. X-Git-Tag: sysdb-0.6.0~22 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=4065234b3744f0472ce33e4c7fda5bb8cdd1d2e3;p=sysdb.git frontend/grammar: Let LOOKUP support all object types. --- diff --git a/src/frontend/grammar.y b/src/frontend/grammar.y index ab9345e..2e52744 100644 --- a/src/frontend/grammar.y +++ b/src/frontend/grammar.y @@ -323,13 +323,11 @@ list_statement: * Returns detailed information about matching condition. */ lookup_statement: - LOOKUP HOSTS_T matching_clause filter_clause + LOOKUP object_type_plural matching_clause filter_clause { - /* TODO: support other types as well */ - $$ = SDB_CONN_NODE(sdb_object_create_dT(/* name = */ NULL, conn_lookup_t, conn_lookup_destroy)); - CONN_LOOKUP($$)->type = SDB_HOST; + CONN_LOOKUP($$)->type = $2; CONN_LOOKUP($$)->matcher = CONN_MATCHER($3); CONN_LOOKUP($$)->filter = CONN_MATCHER($4); $$->cmd = CONNECTION_LOOKUP; @@ -519,8 +517,9 @@ expression: | HOST_T { - /* TODO: this only works as long as queries - * are limited to hosts */ + /* XXX: this doesn't work correctly when not + * querying hosts => use . instead + * and let the analyzer verify */ $$ = sdb_store_expr_fieldvalue(SDB_FIELD_NAME); } | diff --git a/t/unit/frontend/parser_test.c b/t/unit/frontend/parser_test.c index 8af046a..947ef71 100644 --- a/t/unit/frontend/parser_test.c +++ b/t/unit/frontend/parser_test.c @@ -107,6 +107,12 @@ START_TEST(test_parse) "host =~ 'p' " "FILTER age>" "interval", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP services", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP services MATCHING ANY " + "attribute =~ 'a'", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP metrics", -1, 1, CONNECTION_LOOKUP }, + { "LOOKUP metrics MATCHING ANY " + "attribute =~ 'a'", -1, 1, CONNECTION_LOOKUP }, { "TIMESERIES 'host'.'metric' " "START 2014-01-01 " @@ -262,6 +268,20 @@ START_TEST(test_parse) { "LOOKUP hosts MATCHING " "attribute['foo'] <= " "'f' || oo", -1, -1, 0 }, + { "LOOKUP hosts MATCHING " + "ANY host = 'host'", -1, -1, 0 }, + { "LOOKUP services MATCHING " + "ANY host = 'host'", -1, -1, 0 }, + { "LOOKUP services MATCHING " + "ANY service = 'svc'", -1, -1, 0 }, + { "LOOKUP services MATCHING " + "ANY metric = 'm'", -1, -1, 0 }, + { "LOOKUP metrics MATCHING " + "ANY host = 'host'", -1, -1, 0 }, + { "LOOKUP metrics MATCHING " + "ANY service = 'svc'", -1, -1, 0 }, + { "LOOKUP metrics MATCHING " + "ANY metric = 'm'", -1, -1, 0 }, }; sdb_strbuf_t *errbuf = sdb_strbuf_create(64);