A query contains the structure of the LHS of a rule only (you don't specify "when" or "then"). It is simply a way to query the working memory for facts that match the conditions stated. A query has an optional set of parameters, that can also be optionally typed, if type is not given then Object type is assumed and the engine will attempt to co-erce the values as needed.
To return the results use WorkingMemory.getQueryResults("name") - where "name" is query name. Query names are global to the RuleBase, so do not add queries of the same name to different packages for the same Rule Base. This contains a list of query results, which allow you to to get to the objects that matched the query.
This example creates a simple query for all the people over the age of 30
Example 6.45. Query People over the age of 30
query "people over the age of 30" person : Person( age > 30 ) end
Example 6.46. Query People over the age of X, and who live in y
query "people over the age of X" (int x, String y) person : Person( age > x, location == y ) end
We iterate over the returned QueryResults using a standard 'for' loop. Each row returns a QueryResult which we can use to access each of the columns in the Tuple. Those columns can be access by bound declaration name or index position.
Example 6.47. Query People over the age of 30
QueryResults results = workingMemory.getQueryResults( "people over the age of 30" ); System.out.println( "we have " + results.size() + " people over the age of 30" ); System.out.println( "These people are are over 30:" ); for ( Iterator it = results.iterator; it.hasNext(); ) { QueryResult result = ( QueryResult ) it.next(); Person person = ( Person ) result.get( "person" ); System.out.println( person.getName() + "\n" ); }