X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fparser%2Fanalyzer.c;h=5b89016609e0aaa8aba20a6a4a9f5d648262fb80;hp=9bbd9ba7c9fe31c1575a1160f3ffd218c6ba04fa;hb=df77814daebd2e4ff336b0f1184458fa4b01d226;hpb=6f4b7e7407964b05477416d1c1c4291421a5859a diff --git a/src/parser/analyzer.c b/src/parser/analyzer.c index 9bbd9ba..5b89016 100644 --- a/src/parser/analyzer.c +++ b/src/parser/analyzer.c @@ -38,7 +38,6 @@ #define VALID_OBJ_TYPE(t) ((SDB_HOST <= (t)) && ((t) <= SDB_METRIC)) #define FILTER_CONTEXT -1 -#define UNSPEC_CONTEXT -2 static int analyze_node(int context, sdb_ast_node_t *node, sdb_strbuf_t *errbuf); @@ -234,7 +233,7 @@ analyze_iter(int context, sdb_ast_iter_t *iter, sdb_strbuf_t *errbuf) /* attributes are always iterable */ } else if ((context != SDB_HOST) && (context != SDB_SERVICE) - && (context != SDB_METRIC) && (context != UNSPEC_CONTEXT)) { + && (context != SDB_METRIC)) { iter_error(errbuf, iter, "%s not iterable in %s context", SDB_STORE_TYPE_TO_NAME(iter_type), SDB_STORE_TYPE_TO_NAME(context)); @@ -319,20 +318,15 @@ analyze_value(int context, sdb_ast_value_t *v, sdb_strbuf_t *errbuf) return -1; } - if (context != UNSPEC_CONTEXT) { - /* skip these checks if we don't know the context; it's up to the - * caller to check again once the right context information is - * available */ - if ((context != SDB_ATTRIBUTE) && (v->type == SDB_FIELD_VALUE)) { - sdb_strbuf_sprintf(errbuf, "Invalid expression %s.value", - SDB_FIELD_TO_NAME(context)); - return -1; - } - if ((context != SDB_METRIC) && (v->type == SDB_FIELD_TIMESERIES)) { - sdb_strbuf_sprintf(errbuf, "Invalid expression %s.timeseries", - SDB_FIELD_TO_NAME(context)); - return -1; - } + if ((context != SDB_ATTRIBUTE) && (v->type == SDB_FIELD_VALUE)) { + sdb_strbuf_sprintf(errbuf, "Invalid expression %s.value", + SDB_FIELD_TO_NAME(context)); + return -1; + } + if ((context != SDB_METRIC) && (v->type == SDB_FIELD_TIMESERIES)) { + sdb_strbuf_sprintf(errbuf, "Invalid expression %s.timeseries", + SDB_FIELD_TO_NAME(context)); + return -1; } return 0; } /* analyze_value */ @@ -609,8 +603,13 @@ sdb_parser_analyze(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) } /* sdb_parser_analyze */ int -sdb_parser_analyze_conditional(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) +sdb_parser_analyze_conditional(int context, + sdb_ast_node_t *node, sdb_strbuf_t *errbuf) { + if (! VALID_OBJ_TYPE(context)) { + sdb_strbuf_sprintf(errbuf, "Invalid object type %#x", context); + return -1; + } if (! node) { sdb_strbuf_sprintf(errbuf, "Empty conditional node"); return -1; @@ -620,12 +619,17 @@ sdb_parser_analyze_conditional(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) SDB_AST_TYPE_TO_STRING(node)); return -1; } - return analyze_node(UNSPEC_CONTEXT, node, errbuf); + return analyze_node(context, node, errbuf); } /* sdb_parser_analyze_conditional */ int -sdb_parser_analyze_arith(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) +sdb_parser_analyze_arith(int context, + sdb_ast_node_t *node, sdb_strbuf_t *errbuf) { + if (! VALID_OBJ_TYPE(context)) { + sdb_strbuf_sprintf(errbuf, "Invalid object type %#x", context); + return -1; + } if (! node) { sdb_strbuf_sprintf(errbuf, "Empty arithmetic node"); return -1; @@ -635,7 +639,7 @@ sdb_parser_analyze_arith(sdb_ast_node_t *node, sdb_strbuf_t *errbuf) SDB_AST_TYPE_TO_STRING(node)); return -1; } - return analyze_node(UNSPEC_CONTEXT, node, errbuf); + return analyze_node(context, node, errbuf); } /* sdb_parser_analyze_arith */ /* vim: set tw=78 sw=4 ts=4 noexpandtab : */