Win32 API 日本語リファレンス
ホームSystem.Search › IConditionFactory2

IConditionFactory2

COM
IID71d222e1-432f-429e-8c13-b6dafde5077a継承元IConditionFactory自前メソッド開始 vtbl7

公式ドキュメント

IConditionFactory の機能を拡張します。IConditionFactory2 は、クエリ文字列を解析して得られた条件ツリーを作成または解決するためのメソッドを提供します。

解説(Remarks)

StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、生成された条件ツリーを表示する方法を示しています。

メソッド 9

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 7 HRESULT CreateTrueFalse(BOOL fVal, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

TRUE または FALSE のいずれかである検索条件を作成します。(IConditionFactory2.CreateTrueFalse)

fValBOOLin使用する検索条件の値です。fValue には通常 VARIANT_FALSE を設定します。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknownIEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 8 HRESULT CreateNegation(ICondition* pcSub, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

別の条件 (このノードのサブノード) の論理否定 (NOT) となる条件ノードを作成します。(IConditionFactory2.CreateNegation)

pcSubICondition*in否定の対象となる ICondition サブノードへのポインターです。既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknownIEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

条件ノードを論理的に単純化すると、通常はより小さく、走査や処理が容易な条件ツリーになります。たとえば、pcSub 自体がサブ条件 C を持つ否定条件である場合、二重否定は論理的に解決され、ppcResult には C が設定されます。単純化を行わない場合、生成されるツリーは NOT — NOT — C のようになります。

条件ツリーに基づいてクエリを実行する必要のあるアプリケーションでは、通常このパラメーターに TRUE を設定すると効果的です。

vtbl 9 HRESULT CreateCompoundFromObjectArray(CONDITION_TYPE ct, IObjectArray* poaSubs, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

サブ条件のコレクションの論理積 (AND) または論理和 (OR) となるリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

ctCONDITION_TYPEinCONDITION_TYPE 列挙型です。CT_AND_CONDITION または CT_OR_CONDITION フラグのいずれかを設定する必要があります。
poaSubsIObjectArray*inoptional poaSubs パラメーターの各要素は ICondition を実装している必要があります。このパラメーターには NULL を指定することもでき、これは空の場合と同等です。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトのコレクションです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 10 HRESULT CreateCompoundFromArray(CONDITION_TYPE ct, ICondition** ppcondSubs, DWORD cSubs, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

条件ノードの配列から、論理積 (AND) または論理和 (OR) となるリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

ctCONDITION_TYPEinCONDITION_TYPE 列挙型です。CT_AND_CONDITION または CT_OR_CONDITION フラグのいずれかを設定する必要があります。
ppcondSubsICondition**inppCondSubs パラメーターの各要素は ICondition を実装している必要があります。
cSubsDWORDinリーフサブ条件を符号なし 64 ビット整数値で指定します。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトのコレクションです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 11 HRESULT CreateStringLeaf(PROPERTYKEY* propkey, CONDITION_OPERATION cop, LPWSTR pszValue, LPWSTR pszLocaleName, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

プロパティ値と定数値の比較を表す文字列値のリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

propkeyPROPERTYKEY*inリーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。
copCONDITION_OPERATIONinCONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。
pszValueLPWSTRin比較対象となる値、またはプロパティを指定しない場合は NULL です。リーフノードのロケール名は LOCALE_NAME_USER_DEFAULT です。
pszLocaleNameLPWSTRinoptionalリーフ条件のロケール名、または単純な文字列の場合は NULL です。リーフノードのロケール名は LOCALE_NAME_USER_DEFAULT です。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 12 HRESULT CreateIntegerLeaf(PROPERTYKEY* propkey, CONDITION_OPERATION cop, INT lValue, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

整数値のリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

propkeyPROPERTYKEY*inリーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。
copCONDITION_OPERATIONinCONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。
lValueINTinリーフ条件ノードの値を 32 ビット整数で指定します。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 13 HRESULT CreateBooleanLeaf(PROPERTYKEY* propkey, CONDITION_OPERATION cop, BOOL fValue, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

TRUE または FALSE のいずれかである検索条件を作成します。(IConditionFactory2.CreateBooleanLeaf)

propkeyPROPERTYKEY*inリーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。
copCONDITION_OPERATIONinCONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。
fValueBOOLin使用する検索条件の値です。fValue には通常 VARIANT_FALSE を設定します。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknownIEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

vtbl 14 HRESULT CreateLeaf(PROPERTYKEY* propkey, CONDITION_OPERATION cop, PROPVARIANT* propvar, LPWSTR pszSemanticType, LPWSTR pszLocaleName, IRichChunk* pPropertyNameTerm, IRichChunk* pOperationTerm, IRichChunk* pValueTerm, CONDITION_CREATION_OPTIONS cco, GUID* riid, void** ppv)

任意の値に対するリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

propkeyPROPERTYKEY*inリーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。
copCONDITION_OPERATIONinCONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。
propvarPROPVARIANT*inリーフ条件のプロパティ値を REFPROPERTYKEY で指定します。
pszSemanticTypeLPWSTRinoptional値のセマンティック型の名前、または単純な文字列の場合は NULL です。新しく作成されるリーフが未解決の名前付きエンティティである場合、pszSemanticType にはセマンティック型の名前を指定します。それ以外の場合は NULL を指定します。
pszLocaleNameLPWSTRinoptional比較対象となるロケールの名前、またはロケールを指定しない場合は NULL です。propvar が文字列値を含まない場合、pszLocaleName には LOCALE_NAME_USER_DEFAULT を指定します。それ以外の場合、pszLocaleName はその文字列の言語を反映している必要があります。あるいは、pszLocaleNameLOCALE_NAME_INVARIANT を指定することもできます。
pPropertyNameTermIRichChunk*inoptional入力文字列のうちプロパティを表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。
pOperationTermIRichChunk*inoptional入力文字列のうち操作を表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。
pValueTermIRichChunk*inoptional入力文字列のうち値を表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。
ccoCONDITION_CREATION_OPTIONSinリーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknownIEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

このメソッドは値を返しません。

解説(Remarks)

既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。

リーフ条件が文字列の解析によって取得された場合、pPropertyNameTermpOperationTerm pValueTerm の各パラメーターのうち 1 つ以上が (ICondition::GetInputTerms メソッドで取得される) IRichChunk インターフェイスで表される場合があります。それ以外の場合、3 つのパラメーターはすべて NULL にできます。

リーフノードの用語 (プロパティ、値、操作) の詳細については、 ICondition::GetInputTerms を参照してください。

仮想プロパティは、キーが "MapsToRelation" で、値がプロパティ名 (そのプロパティの展開の 1 つ) であるメタデータ項目を 1 つ以上持ちます。メタデータの詳細については、MetaData を参照してください。

vtbl 15 HRESULT ResolveCondition(ICondition* pc, STRUCTURED_QUERY_RESOLVE_OPTION sqro, SYSTEMTIME* pstReferenceTime, GUID* riid, void** ppv)

条件ツリーに対してさまざまな変換を実行し、評価用に解決された条件を生成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。

pcICondition*in解決対象となる ICondition オブジェクトへのポインターです。
sqroSTRUCTURED_QUERY_RESOLVE_OPTIONin0 個以上の STRUCTURED_QUERY_RESOLVE_OPTION フラグを指定します。SQRO_NULL_VALUE_TYPE_FOR_PLAIN_VALUES フラグは sqro に自動的に追加されます。
pstReferenceTimeSYSTEMTIME*inoptional基準となる日付と時刻として使用する SYSTEMTIME 値へのポインターです。sqroSQRO_DONT_RESOLVE_DATETIME フラグが設定されている場合は、NULL ポインターを渡すことができます。
riidGUID*in列挙用インターフェイスの目的の IID です。IEnumUnknownIEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、生成された条件ツリーを表示する方法を示しています。

詳細については Resolve メソッドを参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IConditionFactory2 "{71D222E1-432F-429E-8C13-B6DAFDE5077A}"
#usecom global IConditionFactory2 IID_IConditionFactory2 "{E03E85B0-7BE3-4000-BA98-6C13DE9FA486}"
#comfunc global IConditionFactory2_CreateTrueFalse                7 int,int,var,sptr
#comfunc global IConditionFactory2_CreateNegation                 8 sptr,int,var,sptr
#comfunc global IConditionFactory2_CreateCompoundFromObjectArray  9 int,sptr,int,var,sptr
#comfunc global IConditionFactory2_CreateCompoundFromArray        10 int,sptr,int,int,var,sptr
#comfunc global IConditionFactory2_CreateStringLeaf               11 var,int,wstr,wstr,int,var,sptr
#comfunc global IConditionFactory2_CreateIntegerLeaf              12 var,int,int,int,var,sptr
#comfunc global IConditionFactory2_CreateBooleanLeaf              13 var,int,int,int,var,sptr
#comfunc global IConditionFactory2_CreateLeaf                     14 var,int,var,wstr,wstr,sptr,sptr,sptr,int,var,sptr
#comfunc global IConditionFactory2_ResolveCondition               15 sptr,int,var,var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。