X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ffrontend%2Fanalyzer.c;h=4bd370222e8e11d4a41e9a3b297a1e35412155be;hp=cf077de41174df7e913ae46b835fd429218b535c;hb=da760b7c730635befe5d3876641dd826f7abf9d3;hpb=abb97cfebfcca78912dc8315aa8b9c9c81d6ea2a diff --git a/src/frontend/analyzer.c b/src/frontend/analyzer.c index cf077de..4bd3702 100644 --- a/src/frontend/analyzer.c +++ b/src/frontend/analyzer.c @@ -100,14 +100,24 @@ analyze_expr(int context, sdb_store_expr_t *e, sdb_strbuf_t *errbuf) sdb_strbuf_sprintf(errbuf, "Invalid expression %s.%s " "in %s context", SDB_STORE_TYPE_TO_NAME(e->data.data.integer), - EXPR_TO_STRING(e->left), SDB_STORE_TYPE_TO_NAME(context)); + EXPR_TO_STRING(e->left), + context == -1 ? "generic" : SDB_STORE_TYPE_TO_NAME(context)); return -1; case ATTR_VALUE: - case FIELD_VALUE: case 0: break; + case FIELD_VALUE: + if ((e->data.data.integer == SDB_FIELD_VALUE) + && (context != SDB_ATTRIBUTE)) { + sdb_strbuf_sprintf(errbuf, "Invalid expression %s.value " + "(only attributes have a value)", + SDB_STORE_TYPE_TO_NAME(context)); + return -1; + } + break; + default: if (analyze_expr(context, e->left, errbuf)) return -1; @@ -161,7 +171,7 @@ analyze_matcher(int context, int parent_type, if ((ITER_M(m)->iter->type == TYPED_EXPR) || (ITER_M(m)->iter->type == FIELD_VALUE)) - type = ITER_M(m)->iter->data.data.integer; + type = (int)ITER_M(m)->iter->data.data.integer; if (context == -1) { /* inside a filter */ /* attributes are always iterable */