次の例のプロバイダプログラムは、照会 API を使って、execQuery メソッドからプロバイダに渡された WQL 文字列の構文解析を行います。このプログラムは、照会文字列中の Select 式を構文解析し、クラスを詳細列挙します。次に、列挙した各インスタンスを 1 つずつ処理して、各インスタンスを照会式および select リストと比較します。最後にプログラムは、照会文字列と一致するインスタンスの列挙が含まれるベクトルを返します。
/*
* execQuery メソッドは、部分的なキー照合に基づく限られた照会
* のみサポートする。照会によって選択されたエントリがないと、
* 空の Vector を返す
*
* @param op 返される CIM インスタンスの CIM オブジェクトパス
* @param query CIM 照会式
* @param ql CIM 照会言語のインジケータ
* @param cc CIM クラス参照
*
* @return CIM オブジェクトインスタンスのベクトル
*
* @version 1.19 01/26/00
* @author Sun Microsystems, Inc.
*/
public CIMInstance[] execQuery(CIMObjectPath op,
String query,
String ql,
CIMClass cc)
throws CIMException {
Vector result = new Vector();
try {
SelectExp q = new SelectExp(query);
SelectList attrs = q.getSelectList();
NonJoinExp from = (NonJoinExp)q.getFromClause();
QueryExp where = q.getWhereClause();
CIMInstance[] v = enumerateInstances(op, false, true,
true, null, cc);
// インスタンスをフィルタリングする
for (int i = 0; i < v.length; i++) {
if ((where == null) || (where.apply(v[i]) == true)) {
result.addElement(attrs.apply(v[i]));
}
}
} catch (Exception e) {
throw new CIMException(CIMException.CIM_ERR_FAILED, e.toString());
}
return (CIMInstance[])result.toArray();
} // execQuery
}