高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > アドバンス照会機能 > SearchCondition
  
SearchCondition
SearchCondition は <左側オペランド> <演算子> <右側オペランド> という形式をとる SQL WHERE 節の定義式を表します。
以下に例を示します。
MyTable.Column1 = 5
MyTable.Column2 LIKE "E%"
MyTable.Column3 = JoinTable.Column1
オペランドは、SQL 関数や副問い合わせのように、さらに複雑化できます。SearchCondition は任意の RelationalExpression オペランドを使用できます。オペランドは、SearchCondition コンストラクタまたはセッターメソッドを使用して指定できます。以下に、具象的な ColumnExpression の実装を示します。
ClassAttribute
このクラスは、SQL ステートメントで使用できるクラス属性を表します。イントロスペクション情報は、関連テーブルおよびコラムの決定に使用されます。
SQLFunction
このクラスは、SQL ステートメント内の SQL 関数を表します。
SubSelectExpression
このクラスは、SQL ステートメントで使用できる副問い合わせを表します。副問い合わせは、StatementSpec 属性で指定します。
ConstantExpression
このクラスは、SQL ステートメント内の定数を表します。
KeywordExpression
このクラスは、SQL ステートメントで使用できる SQL キーワードを求める定義式を表します。
RangeExpression
このクラスは、SQL WHERE 節の範囲を表します。
DateExpression
このクラスは、SQL ステートメント内の日付定数を表します。この ConstantExpression のサブクラスは、日付値の特別な処理を実行するために必要です。
ArrayExpression
このクラスは、SQL IN 節内の定数の配列を表します。
TableColumn
このクラスは、SQL ステートメントで使用できるテーブルコラムを表します。指定した正確なテーブルおよびコラム名が SQL ステートメントで直接使用されます。
以下の例は、指定日以降の最も古い修正タイムスタンプを持つ WTPartMaster オブジェクトを判断するための複雑な照会です。以下に、この照会の SQL を示します。
SELECT A0.*
FROM WTPartMaster A0
WHERE (A0.modifyStampA2 IN (SELECT MIN(B0.modifyStampA2)
FROM WTPartMaster B0
WHERE B0.modifyStampA2 > ’cutoff’) )
以下のコードで、照会の仕様を作成します。
Class targetClass = wt.part.WTPartMaster.class;
QuerySpec subSelect = new QuerySpec();
subSelect.getFromClause().setAliasPrefix("B");
int subIndex = subSelect.appendClassList(targetClass, false);
int[] fromIndicies = { subIndex };
ClassAttribute subModifyStamp =
new ClassAttribute(targetClass,WTAttributeNameIfc.MODIFY_STAMP_NAME);
SQLFunction minFunction = SQLFunction.new SQLFunction(SQLFunction.
MINIMUM, subModifyStamp);
subSelect.appendSelect(minFunction, fromIndicies, false);
subSelect.appendWhere(new SearchCondition(subModifyStamp,
SearchCondition.GREATER_THAN, DateExpression.newExpression(cutoff)),
fromIndicies);

QuerySpec select = new QuerySpec();
int index = select.appendClassList(targetClass, true);
select.appendWhere(new SearchCondition(modifyStamp,SearchCondition.IN,
new SubSelectExpression(subSelect)), new int[] { index });