diff --git a/src/murphy-db/include/murphy-db/mqi-types.h b/src/murphy-db/include/murphy-db/mqi-types.h index 8ad595ee..d99ae225 100644 --- a/src/murphy-db/include/murphy-db/mqi-types.h +++ b/src/murphy-db/include/murphy-db/mqi-types.h @@ -97,6 +97,7 @@ enum mqi_operator_e { mqi_less, mqi_leq, mqi_eq, + mqi_neq, mqi_geq, mqi_gt, mqi_not, diff --git a/src/murphy-db/mdb/cond.c b/src/murphy-db/mdb/cond.c index 4617e2a9..d466d3a5 100644 --- a/src/murphy-db/mdb/cond.c +++ b/src/murphy-db/mdb/cond.c @@ -86,6 +86,7 @@ int mdb_cond_evaluate(mdb_table_t *tbl, mqi_cond_entry_t **cond_ptr,void *data) [ mqi_less ] = 4, [ mqi_leq ] = 4, [ mqi_eq ] = 4, + [ mqi_neq ] = 4, [ mqi_geq ] = 4, [ mqi_gt ] = 4, [ mqi_not ] = 5 @@ -138,6 +139,7 @@ int mdb_cond_evaluate(mdb_table_t *tbl, mqi_cond_entry_t **cond_ptr,void *data) case mqi_less: case mqi_leq: case mqi_eq: + case mqi_neq: case mqi_geq: case mqi_gt: case mqi_not: @@ -245,6 +247,7 @@ static int cond_eval(cond_stack_t *sp,cond_stack_t *lastop,int new_precedence) case mqi_less: case mqi_leq: case mqi_eq: + case mqi_neq: case mqi_geq: case mqi_gt: /* stack: (-1)operand1, (0)operator, (1)operand2 => (-1)result */ @@ -327,6 +330,7 @@ static int cond_relop(mqi_operator_t op, cond_stack_t *v1, cond_stack_t *v2) case mqi_less: return cmp < 0; case mqi_leq: return cmp <= 0; case mqi_eq: return cmp == 0; + case mqi_neq: return cmp != 0; case mqi_geq: return cmp >= 0; case mqi_gt: return cmp > 0; default: return 0; diff --git a/src/murphy-db/mql/mql-parser.y b/src/murphy-db/mql/mql-parser.y index 8e3ab87e..e5de326a 100644 --- a/src/murphy-db/mql/mql-parser.y +++ b/src/murphy-db/mql/mql-parser.y @@ -185,6 +185,7 @@ static FILE *mqlout; %token TKN_LESS %token TKN_LESS_OR_EQUAL %token TKN_EQUAL +%token TKN_NOT_EQUAL %token TKN_GREATER_OR_EQUAL %token TKN_GREATER %token TKN_NOT @@ -1292,6 +1293,11 @@ relational_operator: cond->u.operator_ = mqi_eq; cond++; } +| TKN_NOT_EQUAL { + cond->type = mqi_operator; + cond->u.operator_ = mqi_neq; + cond++; + } | TKN_GREATER_OR_EQUAL { cond->type = mqi_operator; cond->u.operator_ = mqi_geq; diff --git a/src/murphy-db/mql/mql-scanner.l b/src/murphy-db/mql/mql-scanner.l index 3e19650e..825ee4cb 100644 --- a/src/murphy-db/mql/mql-scanner.l +++ b/src/murphy-db/mql/mql-scanner.l @@ -149,6 +149,7 @@ LOGICAL_OR \| LESS < LESS_OR_EQUAL <= EQUAL = +NOT_EQUAL \!= GREATER_OR_EQUAL >= GREATER > NOT \! @@ -222,6 +223,7 @@ SLASH \/ {LESS} { ARGLESS_TOKEN (LESS); } {LESS_OR_EQUAL} { ARGLESS_TOKEN (LESS_OR_EQUAL); } {EQUAL} { ARGLESS_TOKEN (EQUAL); } +{NOT_EQUAL} { ARGLESS_TOKEN (NOT_EQUAL); } {GREATER_OR_EQUAL} { ARGLESS_TOKEN (GREATER_OR_EQUAL); } {GREATER} { ARGLESS_TOKEN (GREATER); } {NOT} { ARGLESS_TOKEN (NOT); }