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

IConditionGenerator

COM
IID92d2cc58-4386-45a3-b98c-7e0ce64a4117継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

名前付きエンティティを処理し、特別な条件を生成するためのメソッドを提供します。

解説(Remarks)

IConditionGenerator をサポートするオブジェクトがセマンティック型 T としてクエリパーサーに登録されていて(IQueryParser::SetMultiOption メソッドと SQMO_GENERATOR_FOR_TYPE 定数を使用)、そのクエリパーサーがセマンティック型 T のリーフ条件ノードを生成しようとする場合、クエリパーサーはまず条件ジェネレーターの IConditionGenerator::GenerateForLeaf メソッドを呼び出します。このメソッドが S_OK を返した場合は、返された条件ツリー(リーフノードである必要はありません)が使用されます。S_FALSE を返した場合は通常の処理が再開され、リーフノードが生成されます。

クエリパーサーには、数値、ブール値、日付/時刻、ファイルパスを表す既知のセマンティック型に対する条件ジェネレーターがあらかじめ登録されています。

メソッド 4

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

vtbl 3 HRESULT Initialize(ISchemaProvider* pSchemaProvider)

インターフェイスのすべての状態を既定値にリセットし、スキーマから必要な情報を取得します。

pSchemaProviderISchemaProvider*in使用するスキーマへのポインター。

戻り値

型: HRESULT

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

vtbl 4 HRESULT RecognizeNamedEntities(LPWSTR pszInputString, DWORD lcidUserLocale, ITokenCollection* pTokenCollection, INamedEntityCollector* pNamedEntities)

入力文字列内の名前付きエンティティを識別し、それらを格納するコレクションを作成します。

pszInputStringLPWSTRin解析対象の入力文字列。
lcidUserLocaleDWORDin名前付きエンティティの認識に使用する LCID。
pTokenCollectionITokenCollection*in入力文字列がどのようにトークン化されたかを示す ITokenCollection オブジェクトへのポインター。
pNamedEntitiesINamedEntityCollector*in入力時には INamedEntityCollector または NULL を格納します。戻り時には、名前付きエンティティの INamedEntityCollector コレクションを格納します。

戻り値

型: HRESULT

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

解説(Remarks)

入力文字列、ユーザーロケール(通常はユーザーの既定のロケール)、および入力文字列のトークン化が与えられたとき、IConditionGenerator::RecognizeNamedEntities メソッドは、その入力文字列内の名前付きエンティティを識別し、各エンティティを名前付きエンティティのコレクションに追加できる必要があります。

vtbl 5 HRESULT GenerateForLeaf(IConditionFactory* pConditionFactory, LPWSTR pszPropertyName, CONDITION_OPERATION cop, LPWSTR pszValueType, LPWSTR pszValue, LPWSTR pszValue2, IRichChunk* pPropertyNameTerm, IRichChunk* pOperationTerm, IRichChunk* pValueTerm, BOOL automaticWildcard, BOOL* pNoStringQuery, ICondition** ppQueryExpression)

本来であればリーフクエリ式となるものに対して、特別なクエリ式を生成します。

pConditionFactoryIConditionFactory*in必要なノードの作成に使用できる IConditionFactory オブジェクト。
pszPropertyNameLPWSTRinプロパティ名。プロパティ名がない場合は NULL
copCONDITION_OPERATIONin操作を識別する CONDITION_OPERATION 列挙型。
pszValueTypeLPWSTRinpszValue および pszValue2 に含まれる値を記述するセマンティック型。
pszValueLPWSTRin値を表す、IConditionGenerator::RecognizeNamedEntities によって生成された文字列。pszValue2NULL でない場合、これは値の範囲の開始を表します。
pszValue2LPWSTRinNULL でない場合は、値の範囲の終了を表す、IConditionGenerator::RecognizeNamedEntities によって生成された文字列。NULL の場合、pszValue は単一の値を表します。
pPropertyNameTermIRichChunk*in入力文字列のどの部分からプロパティ名が生成されたかに関する情報を格納する IRichChunk オブジェクトへのポインター。
pOperationTermIRichChunk*in入力文字列のどの部分から操作が生成されたかに関する情報を格納する IRichChunk オブジェクトへのポインター。
pValueTermIRichChunk*in入力文字列のどの部分から値が生成されたかに関する情報を格納する IRichChunk オブジェクトへのポインター。
automaticWildcardBOOLin意味がある場合に、生成される条件が指定した値で始まる結果を返す必要があるときは TRUE。生成される条件が指定した値に完全に一致する結果を返す必要があるときは FALSE
pNoStringQueryBOOL*outppQueryExpression 内の条件ツリーをクエリ全体とする場合は VARIANT_TRUE。クエリ全体を、ppQueryExpression 内の条件ツリーと、このメソッドが S_FALSE を返した場合に使用されたであろう条件ツリーとの論理和(OR)とする場合は VARIANT_FALSE
ppQueryExpressionICondition**outICondition 条件ツリーへのポインターを受け取ります。

戻り値

型: HRESULT

次のいずれかを返します。それ以外の場合はエラー値を返します。

戻り値 説明
S_OK
条件を正常に生成しました。
S_FALSE
条件は生成されませんでした。クエリパーサーは別の方法で条件を生成する必要があります。

解説(Remarks)

このメソッドが S_FALSE を返した場合、呼び出し元のクエリパーサーは、このプロパティ名、操作、値を持つリーフノード N を生成する必要があります。このメソッドが S_FALSE を返し、かつ pNoStringQueryVARIANT_FALSE が格納されている場合、生成されるクエリ全体は、リーフノード N と ppQueryExpression 内の条件ツリーをサブ条件とする論理和(OR)になります。

このメソッドが S_OK を返し、かつ pNoStringQueryVARIANT_TRUE が格納されている場合、ppQueryExpression 内の条件ツリーがクエリ全体になります。

pszValue2 の値が NULL 以外になるのは、date:1/2/2003..1/30/2006 のような範囲クエリの場合だけです。この例では、pszValue に 1/2/2003 の値が、pszValue2 に 1/30/2006 の値が格納されます。条件ジェネレーターは、pszValue2NULL でない場合に常に S_OK を返すことで、範囲を受け付けないようにすることもできます。

条件ジェネレーターは、引数 pPropertyNameTermpOperationTermpValueTerm を無視しても問題ありません。ただし、これらを MakeLeaf に渡すことで、プロパティ名、演算子、値がクエリ文字列のどこに由来するかについて正しい情報を持つリーフノードを生成できます。

多くの場合、条件ジェネレーターは該当しないため引数 automaticWildcard を無視できます。ただし、生成される条件ツリーが何らかの文字列検索を行い、前方一致検索(CONDITION_OPERATIONCOP_VALUE_STARTSWITH)と完全一致検索(CONDITION_OPERATIONCOP_EQUAL)の両方が意味を持つ場合は、automaticWildcardVARIANT_TRUE のときは前者を、VARIANT_FALSE のときは後者を生成する必要があります。

vtbl 6 HRESULT DefaultPhrase(LPWSTR pszValueType, PROPVARIANT* ppropvar, BOOL fUseEnglish, LPWSTR* ppszPhrase)

このメソッドは、この IConditionGenerator インスタンスによって認識されたときに、エンティティ、リレーションシップ、または名前付きエンティティの型と値のペアを表すフレーズの生成を試みます。

pszValueTypeLPWSTRinppropvar に格納された値のセマンティック型。
ppropvarPROPVARIANT*in処理対象の値。
fUseEnglishBOOLin パラメーター fUseEnglish は予約済みです。実装側では無視する必要があり、呼び出し側は FALSE を渡してください。
ppszPhraseLPWSTR*outoptional値を表すフレーズへのポインターを受け取ります。フレーズを生成できない場合、このパラメーターには NULL が設定され、メソッドは S_FALSE を返します。

戻り値

型: HRESULT

成功した場合は S_OK、入力引数は有効だがフレーズを生成できない場合は S_FALSE、それ以外の場合はエラー値を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IConditionGenerator "{92D2CC58-4386-45A3-B98C-7E0CE64A4117}"
#usecom global IConditionGenerator IID_IConditionGenerator "{}"
#comfunc global IConditionGenerator_Initialize              3 sptr
#comfunc global IConditionGenerator_RecognizeNamedEntities  4 wstr,int,sptr,sptr
#comfunc global IConditionGenerator_GenerateForLeaf         5 sptr,wstr,int,wstr,wstr,wstr,sptr,sptr,sptr,int,var,sptr
#comfunc global IConditionGenerator_DefaultPhrase           6 wstr,var,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。