クエリーの検索条件を定義するには、ユーザー データベース内の各レコードの フィールドとの比較に基づいたクエリー フィルタを使用します。クエリーは、 データベース中のレコードのうち、検索条件に一致する各レコード を ResultSet オブジェクトに格納して戻します。
比較操作は、それぞれフィルタによって実装されます。これは、QueryFilterNode オブジェクトのインスタンスです。フィルタによって、フィールドを、単数値またはある範囲の値と比較できます。フィルタで選択した演算子により実行する比較のタイプが決まります。有効な演算子のリストについては、CompOp 定数の列挙型を参照してください。フィルタの階層ツリーを作成するには、ブール演算子でフィルタを結合し、一部のフィルタをほかのフィルタ内にネストさせます。各フィルタは単一の条件か、AND または OR 演算子を使用して結合された条件グループで構成されます。フィルタのビルド時には、より複雑なフィルタのグループをネストさせて、検索ロジックの複合セットを作成できます。
クエリーの設計時、上記のメソッドを 次のように使用できます。
次の例は、いくつかのクエリー フィルタを組み込んで、 前のトピックの例を拡張したものです。
use CQPerlExt;
#Start a Rational ClearQuest session
$SessionObj = CQSession::Build();
$dbsetname = "CQMS.SAMPL.HOME";
#Refresh list of accessible databases
$databases = $SessionObj->GetAccessibleDatabases("MASTR", "", $dbsetname);
#Log into a database
$SessionObj->UserLogon("admin","","SAMPL",$dbsetname);
#Create a Query
$querydef = $SessionObj->BuildQuery("defect");
$querydef->BuildField("id");
$querydef->BuildField("headline");
$querydef->BuildField("owner.login_name");
$querydef->BuildField("submit_date");
#Create the queryfilternode object:
# where (state is not Closed AND (id = 1 OR id = 2))
$where = $querydef->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_AND);
# All filter values passed in as a reference to an array.
@states = ("closed");
$where->BuildFilter("state", $CQPerlExt::CQ_COMP_OP_NEQ, ¥@states);
# Another way to pass the array reference for simple values is using an anonymous array, like this:
# $where->BuildFilter("state", $CQPerlExt::CQ_COMP_OP_EQ, ["closed"]);
$subor = $where->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_OR);
@id1 = ("SAMPL00000001");
$subor->BuildFilter("id", $CQPerlExt::CQ_COMP_OP_EQ, ¥@id1);
@id2 = ("SAMPL00000002");
$subor->BuildFilter("id", $CQPerlExt::CQ_COMP_OP_EQ, ¥@id2);
$resultset = $SessionObj->BuildResultSet($querydef);
$ct = $resultset->ExecuteAndCountRecords();
for ($i = 0; $i < $ct; $i++) {
$resultset->MoveNext();
print $resultset->GetColumnValue(1);
print " ";
print $resultset->GetColumnValue(2);
print " ";
print $resultset->GetColumnValue(3);
print " ";
print $resultset->GetColumnValue(4);
print "¥n";
}
CQSession::Unbuild($SessionObj);