The sample program in Example 5–6 uses the Query APIs to parse the WQL string passed to it by the execQuerymethod. This program parses the Select Expression in the query string, does a deep enumeration of the class, and iterates through the instances in the enumeration, matching the query expression and select list to each instance. Finally, the program returns a vector containing the enumeration of the instances that match the query string.
/* * The execQuery method will support only limited queries * based upon partial key matching. An empty Vector is * returned if no entries are selected by the query. * * @param op The CIM object path of the CIM instance to be returned * @param query The CIM query expression * @param ql The CIM query language indicator * @param cc The CIM class reference * * @return A vector of CIM object instances * * @version 1.19 01/26/00 * @author Sun Microsystems, Inc. */ public Vector execQuery(CIMObjectPath op, String query, int ql, CIMClass cc) throws CIMException { ByteArrayInputStream in = new ByteArrayInputStream(query.getBytes()); WQLParser parser = new WQLParser(in); Vector result = new Vector(); try { SelectExp q = (SelectExp)parser.querySpecification(); SelectList attrs = q.getSelectList(); NonJoinExp from = (NonJoinExp)q.getFromClause(); QueryExp where = q.getWhereClause(); Vector v = new Vector(); v = enumInstances(op, false, cc, true); // filtering the instances for (int i = 0; i < v.size(); i++) { if ((where == null) || (where.apply((CIMInstance)v.elementAt(i)) == true)) { result.addElement(attrs.apply((CIMInstance)v.elementAt(i))); } } } catch (Exception e) { throw new CIMException(CIMException.CIM_ERR_FAILED, e.toString()); } return result; } // execQuery }