IConditionFactory2
COM公式ドキュメント
IConditionFactory の機能を拡張します。IConditionFactory2 は、クエリ文字列を解析して得られた条件ツリーを作成または解決するためのメソッドを提供します。
解説(Remarks)
StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、生成された条件ツリーを表示する方法を示しています。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
TRUE または FALSE のいずれかである検索条件を作成します。(IConditionFactory2.CreateTrueFalse)
| fVal | BOOL | in | 使用する検索条件の値です。fValue には通常 VARIANT_FALSE を設定します。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
別の条件 (このノードのサブノード) の論理否定 (NOT) となる条件ノードを作成します。(IConditionFactory2.CreateNegation)
| pcSub | ICondition* | in | 否定の対象となる ICondition サブノードへのポインターです。既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
条件ノードを論理的に単純化すると、通常はより小さく、走査や処理が容易な条件ツリーになります。たとえば、pcSub 自体がサブ条件 C を持つ否定条件である場合、二重否定は論理的に解決され、ppcResult には C が設定されます。単純化を行わない場合、生成されるツリーは NOT — NOT — C のようになります。
条件ツリーに基づいてクエリを実行する必要のあるアプリケーションでは、通常このパラメーターに TRUE を設定すると効果的です。
サブ条件のコレクションの論理積 (AND) または論理和 (OR) となるリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| ct | CONDITION_TYPE | in | CONDITION_TYPE 列挙型です。CT_AND_CONDITION または CT_OR_CONDITION フラグのいずれかを設定する必要があります。 |
| poaSubs | IObjectArray* | inoptional | poaSubs パラメーターの各要素は ICondition を実装している必要があります。このパラメーターには NULL を指定することもでき、これは空の場合と同等です。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトのコレクションです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
条件ノードの配列から、論理積 (AND) または論理和 (OR) となるリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| ct | CONDITION_TYPE | in | CONDITION_TYPE 列挙型です。CT_AND_CONDITION または CT_OR_CONDITION フラグのいずれかを設定する必要があります。 |
| ppcondSubs | ICondition** | in | ppCondSubs パラメーターの各要素は ICondition を実装している必要があります。 |
| cSubs | DWORD | in | リーフサブ条件を符号なし 64 ビット整数値で指定します。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトのコレクションです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
プロパティ値と定数値の比較を表す文字列値のリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| propkey | PROPERTYKEY* | in | リーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。 |
| cop | CONDITION_OPERATION | in | CONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。 |
| pszValue | LPWSTR | in | 比較対象となる値、またはプロパティを指定しない場合は NULL です。リーフノードのロケール名は LOCALE_NAME_USER_DEFAULT です。 |
| pszLocaleName | LPWSTR | inoptional | リーフ条件のロケール名、または単純な文字列の場合は NULL です。リーフノードのロケール名は LOCALE_NAME_USER_DEFAULT です。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
整数値のリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| propkey | PROPERTYKEY* | in | リーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。 |
| cop | CONDITION_OPERATION | in | CONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。 |
| lValue | INT | in | リーフ条件ノードの値を 32 ビット整数で指定します。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
TRUE または FALSE のいずれかである検索条件を作成します。(IConditionFactory2.CreateBooleanLeaf)
| propkey | PROPERTYKEY* | in | リーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。 |
| cop | CONDITION_OPERATION | in | CONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。 |
| fValue | BOOL | in | 使用する検索条件の値です。fValue には通常 VARIANT_FALSE を設定します。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
任意の値に対するリーフ条件ノードを作成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| propkey | PROPERTYKEY* | in | リーフ条件のプロパティ名を REFPROPERTYKEY で指定します。リーフに特定のプロパティがない場合は PKEY_Null を使用します。 |
| cop | CONDITION_OPERATION | in | CONDITION_OPERATION 列挙型です。リーフに特定の操作がない場合は COP_IMPLICIT を使用します。 |
| propvar | PROPVARIANT* | in | リーフ条件のプロパティ値を REFPROPERTYKEY で指定します。 |
| pszSemanticType | LPWSTR | inoptional | 値のセマンティック型の名前、または単純な文字列の場合は NULL です。新しく作成されるリーフが未解決の名前付きエンティティである場合、pszSemanticType にはセマンティック型の名前を指定します。それ以外の場合は NULL を指定します。 |
| pszLocaleName | LPWSTR | inoptional | 比較対象となるロケールの名前、またはロケールを指定しない場合は NULL です。propvar が文字列値を含まない場合、pszLocaleName には LOCALE_NAME_USER_DEFAULT を指定します。それ以外の場合、pszLocaleName はその文字列の言語を反映している必要があります。あるいは、pszLocaleName に LOCALE_NAME_INVARIANT を指定することもできます。 |
| pPropertyNameTerm | IRichChunk* | inoptional | 入力文字列のうちプロパティを表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。 |
| pOperationTerm | IRichChunk* | inoptional | 入力文字列のうち操作を表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。 |
| pValueTerm | IRichChunk* | inoptional | 入力文字列のうち値を表す範囲を示す IRichChunk へのポインターです。NULL を指定できます。 |
| cco | CONDITION_CREATION_OPTIONS | in | リーフ条件の条件作成操作を、CONDITION_CREATION_OPTIONS 列挙型で指定します。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
このメソッドは値を返しません。
解説(Remarks)
既定のオプションを使用する場合は CONDITION_CREATION_DEFAULT フラグを指定します。
リーフ条件が文字列の解析によって取得された場合、pPropertyNameTerm、pOperationTerm 、pValueTerm の各パラメーターのうち 1 つ以上が (ICondition::GetInputTerms メソッドで取得される) IRichChunk インターフェイスで表される場合があります。それ以外の場合、3 つのパラメーターはすべて NULL にできます。
リーフノードの用語 (プロパティ、値、操作) の詳細については、 ICondition::GetInputTerms を参照してください。
仮想プロパティは、キーが "MapsToRelation" で、値がプロパティ名 (そのプロパティの展開の 1 つ) であるメタデータ項目を 1 つ以上持ちます。メタデータの詳細については、MetaData を参照してください。
条件ツリーに対してさまざまな変換を実行し、評価用に解決された条件を生成します。返されるオブジェクトは ICondition と ICondition2 をサポートします。
| pc | ICondition* | in | 解決対象となる ICondition オブジェクトへのポインターです。 |
| sqro | STRUCTURED_QUERY_RESOLVE_OPTION | in | 0 個以上の STRUCTURED_QUERY_RESOLVE_OPTION フラグを指定します。SQRO_NULL_VALUE_TYPE_FOR_PLAIN_VALUES フラグは sqro に自動的に追加されます。 |
| pstReferenceTime | SYSTEMTIME* | inoptional | 基準となる日付と時刻として使用する SYSTEMTIME 値へのポインターです。sqro に SQRO_DONT_RESOLVE_DATETIME フラグが設定されている場合は、NULL ポインターを渡すことができます。 |
| riid | GUID* | in | 列挙用インターフェイスの目的の IID です。IEnumUnknown、IEnumVARIANT、または (否定条件の場合は) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトおよび ICondition2 オブジェクトへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、生成された条件ツリーを表示する方法を示しています。
詳細については Resolve メソッドを参照してください。
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 指定が可能。#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,sptr,sptr #comfunc global IConditionFactory2_CreateNegation 8 sptr,int,sptr,sptr #comfunc global IConditionFactory2_CreateCompoundFromObjectArray 9 int,sptr,int,sptr,sptr #comfunc global IConditionFactory2_CreateCompoundFromArray 10 int,sptr,int,int,sptr,sptr #comfunc global IConditionFactory2_CreateStringLeaf 11 sptr,int,wstr,wstr,int,sptr,sptr #comfunc global IConditionFactory2_CreateIntegerLeaf 12 sptr,int,int,int,sptr,sptr #comfunc global IConditionFactory2_CreateBooleanLeaf 13 sptr,int,int,int,sptr,sptr #comfunc global IConditionFactory2_CreateLeaf 14 sptr,int,sptr,wstr,wstr,sptr,sptr,sptr,int,sptr,sptr #comfunc global IConditionFactory2_ResolveCondition 15 sptr,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。