From: Hans Leidekker Subject: [3/3] wbemprox: Add support for negated expressions in WHERE clauses. Message-Id: <1393583019.9860.79.camel@t400> Date: Fri, 28 Feb 2014 11:23:39 +0100 --- dlls/wbemprox/query.c | 9 +++++++++ dlls/wbemprox/wbemprox_private.h | 3 ++- dlls/wbemprox/wql.y | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c index 6933da2..921c3cd 100644 --- a/dlls/wbemprox/query.c +++ b/dlls/wbemprox/query.c @@ -250,6 +250,15 @@ static HRESULT eval_unary( const struct table *table, UINT row, const struct com UINT column; LONGLONG lval; + if (expr->op == OP_NOT) + { + hr = eval_cond( table, row, expr->left, &lval, type ); + if (hr != S_OK) + return hr; + *val = !lval; + return S_OK; + } + hr = get_column_index( table, expr->left->u.propval->name, &column ); if (hr != S_OK) return hr; diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h index 0e39d00..da4f84f 100644 --- a/dlls/wbemprox/wbemprox_private.h +++ b/dlls/wbemprox/wbemprox_private.h @@ -53,7 +53,8 @@ enum operator OP_NE = 8, OP_ISNULL = 9, OP_NOTNULL = 10, - OP_LIKE = 11 + OP_LIKE = 11, + OP_NOT = 12 }; struct expr; diff --git a/dlls/wbemprox/wql.y b/dlls/wbemprox/wql.y index 58663d0..6eabe19 100644 --- a/dlls/wbemprox/wql.y +++ b/dlls/wbemprox/wql.y @@ -318,6 +318,12 @@ expr: if (!$$) YYABORT; } + | TK_NOT expr + { + $$ = expr_unary( ctx, $2, OP_NOT ); + if (!$$) + YYABORT; + } | prop_val TK_EQ const_val { $$ = expr_complex( ctx, $1, OP_EQ, $3 ); -- 1.8.5.3