The WHERE clause is represented by `QueryExp`,
an abstract class. The concrete subclasses are `AndQueryExp`, `OrQueryExp`, `NotQueryExp`, and `BinaryRelQueryExp`. Instances of these expressions are combined
in the form of a parse tree that represents the original conditional expression.

The interior nodes of this tree consist of `AndQueryExp`, `OrQueryExp`, and `NotQueryExp` instances.
These instances represent AND, OR, and NOT expressions. These expressions
in turn can consist of other AND, OR, and NOT expressions and binary relations.

The leaf nodes are `BinaryRelQueryExp`, which represent
expressions of the form `property operator constant`.
This form represents a binary relation between a property and a constant value.
You retrieve `property operator constant` using the` getLeftValue`, `getRightValue`, and `getOperator` methods.

Each `QueryExp` has an apply method that, when
passed in a `CIMInstance`, returns a boolean value. The
boolean value is true if the conditional expression represented by the `QueryExp` is true for the `CIMInstance`. Otherwise,
the boolean value is false.

The `QueryExp` has two other useful methods, `canonizeDOC` and `canonizeCOD`, which are
used to simplify conditional expressions for further processing. The `canonizeDOC` method converts the parse tree from an arbitrary combination
of ANDs and ORs to a canonical disjunction of conjunctions form (OR of ANDs).
The `canonizeCOD` method converts the parse tree from
an arbitrary combination of ANDs and ORs to canonical conjunction of disjunctions
form (AND of ORs). These classes and methods are used by providers that need
to filter instances based on input queries.

Details of these classes can be found in the Javadoc reference
pages. See `file:/usr/sadm/lib/wbem/doc/index.html`.

- © 2010, Oracle Corporation and/or its affiliates