X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ffrontend%2Fanalyzer.c;h=701130e88d498335c13ccc133719bca5989cda4a;hb=4d93f084bf26672e322b82ce192c8beb5765e1d0;hp=20864cae4d348ca2e3072e1e48945fd157cb6c66;hpb=2ebe67e1b7d71c3e7e9b7ab06944637b143daba9;p=sysdb.git diff --git a/src/frontend/analyzer.c b/src/frontend/analyzer.c index 20864ca..701130e 100644 --- a/src/frontend/analyzer.c +++ b/src/frontend/analyzer.c @@ -127,7 +127,9 @@ analyze_matcher(int context, sdb_store_matcher_t *m, sdb_strbuf_t *errbuf) && (ITER_M(m)->m->type != MATCHER_EQ) && (ITER_M(m)->m->type != MATCHER_NE) && (ITER_M(m)->m->type != MATCHER_GE) - && (ITER_M(m)->m->type != MATCHER_GT)) { + && (ITER_M(m)->m->type != MATCHER_GT) + && (ITER_M(m)->m->type != MATCHER_REGEX) + && (ITER_M(m)->m->type != MATCHER_NREGEX)) { iter_array_error(errbuf, m->type, CMP_M(ITER_M(m)->m)->left->data_type, ITER_M(m)->m->type, @@ -163,6 +165,10 @@ analyze_matcher(int context, sdb_store_matcher_t *m, sdb_strbuf_t *errbuf) case MATCHER_GE: case MATCHER_GT: assert(CMP_M(m)->left && CMP_M(m)->right); + if ((CMP_M(m)->left->data_type > 0) + && (CMP_M(m)->right->data_type > 0) + && (CMP_M(m)->left->data_type == CMP_M(m)->right->data_type)) + return 0; if ((CMP_M(m)->left->data_type > 0) && (CMP_M(m)->left->data_type & SDB_TYPE_ARRAY)) { cmp_error(errbuf, m->type, CMP_M(m)->left->data_type, @@ -231,7 +237,7 @@ sdb_fe_analyze(sdb_conn_node_t *node, sdb_strbuf_t *errbuf) /* For now, this function checks basic matcher attributes only; * later, this may be turned into one of multiple AST visitors. */ - if (node->cmd == CONNECTION_FETCH) { + if (node->cmd == SDB_CONNECTION_FETCH) { conn_fetch_t *fetch = CONN_FETCH(node); if ((fetch->type == SDB_HOST) && fetch->name) { sdb_strbuf_sprintf(errbuf, "Unexpected STRING '%s'", fetch->name); @@ -246,19 +252,19 @@ sdb_fe_analyze(sdb_conn_node_t *node, sdb_strbuf_t *errbuf) filter = fetch->filter->matcher; context = fetch->type; } - else if (node->cmd == CONNECTION_LIST) { + else if (node->cmd == SDB_CONNECTION_LIST) { if (CONN_LIST(node)->filter) filter = CONN_LIST(node)->filter->matcher; context = CONN_LIST(node)->type; } - else if (node->cmd == CONNECTION_LOOKUP) { + else if (node->cmd == SDB_CONNECTION_LOOKUP) { if (CONN_LOOKUP(node)->matcher) m = CONN_LOOKUP(node)->matcher->matcher; if (CONN_LOOKUP(node)->filter) filter = CONN_LOOKUP(node)->filter->matcher; context = CONN_LOOKUP(node)->type; } - else if (node->cmd == CONNECTION_TIMESERIES) + else if (node->cmd == SDB_CONNECTION_TIMESERIES) return 0; else return -1;