diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c index 083a717185..79b09c0966 100644 --- a/dlls/wbemprox/tests/query.c +++ b/dlls/wbemprox/tests/query.c @@ -106,8 +106,14 @@ static void test_select( IWbemServices *services ) {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ', 'W','i','n','3','2','_','V','i','d','e','o','C','o','n','t','r','o','l','l','e','r',' ','w','h','e','r','e',' ', 'a','v','a','i','l','a','b','i','l','i','t','y',' ','=',' ','\'','3','\'',0}; + static const WCHAR query12[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_','B','I','O','S', + ' ','W','H','E','R','E',' ','N','A','M','E',' ','<','>',' ','N','U','L','L', 0}; + static const WCHAR query13[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_','B','I','O','S', + ' ','W','H','E','R','E',' ','N','U','L','L',' ','=',' ','N','A','M','E', 0}; static const WCHAR *test[] = { query1, query2, query3, query4, query5, query6, query7, query8, query9, query10, - query11 }; + query11, query12, query13 }; HRESULT hr; IEnumWbemClassObject *result; BSTR wql = SysAllocString( wqlW ); diff --git a/dlls/wbemprox/wql.y b/dlls/wbemprox/wql.y index 98b0378677..88da2b9b0f 100644 --- a/dlls/wbemprox/wql.y +++ b/dlls/wbemprox/wql.y @@ -414,6 +414,30 @@ expr: if (!$$) YYABORT; } + | prop_val TK_EQ TK_NULL + { + $$ = expr_unary( ctx, $1, OP_ISNULL ); + if (!$$) + YYABORT; + } + | TK_NULL TK_EQ prop_val + { + $$ = expr_unary( ctx, $3, OP_ISNULL ); + if (!$$) + YYABORT; + } + | prop_val TK_NE TK_NULL + { + $$ = expr_unary( ctx, $1, OP_NOTNULL ); + if (!$$) + YYABORT; + } + | TK_NULL TK_NE prop_val + { + $$ = expr_unary( ctx, $3, OP_NOTNULL ); + if (!$$) + YYABORT; + } ; string_val: