IQueryParser
COM公式ドキュメント
入力文字列を解析して IQuerySolution オブジェクトを生成するためのメソッドを提供します。
解説(Remarks)
StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、生成された条件ツリーを表示する方法を示しています。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Structured Query のキーワードやコンテンツを含む入力文字列を解析し、IQuerySolution オブジェクトを生成します。
| pszInputString | LPWSTR | in | 解析対象となる Unicode 入力文字列へのポインターです。 |
| pCustomProperties | IEnumUnknown* | in | アプリケーションが認識したカスタムプロパティごとに 1 つずつ用意された IRichChunk オブジェクトの列挙です。このパラメーターには NULL を指定でき、その場合は空の列挙を指定した場合と同等になります。 |
| ppSolution | IQuerySolution** | out | IQuerySolution オブジェクトを受け取ります。呼び出し元は、その IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
各 IRichChunk オブジェクトでは、位置情報がカスタムプロパティの文字範囲を示し、文字列値が実際のプロパティの名前を表し、PROPVARIANT は使用されません。任意のプロパティを使用できますが、この目的のために次の汎用プロパティが用意されています。
- System.StructuredQuery.CustomProperty.Boolean
- System.StructuredQuery.CustomProperty.DateTime
- System.StructuredQuery.CustomProperty.Integer
- System.StructuredQuery.CustomProperty.FloatingPoint
- System.StructuredQuery.CustomProperty.String
入力文字列を解析する際に使用する、指定したワードブレーカーなどの単一のオプションを設定します。
| option | STRUCTURED_QUERY_SINGLE_OPTION | in | 設定するオプションの種類を識別します。 |
| pOptionValue | PROPVARIANT* | in | option パラメーターに設定する値を指定する PROPVARIANT へのポインターです。この値は、option パラメーターの値に応じて異なる方法で解釈されます。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
詳細については、STRUCTURED_QUERY_SINGLE_OPTION を参照してください。
このクエリパーサーについて、指定した単純なオプションの値を取得します。
| option | STRUCTURED_QUERY_SINGLE_OPTION | in | 取得するオプションを指定する STRUCTURED_QUERY_SINGLE_OPTION 列挙型です。 |
| pOptionValue | PROPVARIANT* | out | 指定したオプション値へのポインターを受け取ります。詳細については、STRUCTURED_QUERY_SINGLE_OPTION を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
入力文字列を解析する際に使用する、指定した条件ジェネレーターなどの複合的なオプションを設定します。
| option | STRUCTURED_QUERY_MULTIOPTION | in | 設定する複合的なオプションです。 |
| pszOptionKey | LPWSTR | in | option パラメーターの値ごとに異なる方法で解釈される Unicode 文字列です。詳細については、STRUCTURED_QUERY_MULTIOPTION を参照してください。 |
| pOptionValue | PROPVARIANT* | in | option パラメーターの値ごとに異なる方法で解釈される PROPVARIANT へのポインターです。詳細については、STRUCTURED_QUERY_MULTIOPTION を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在読み込まれているスキーマを参照するためのスキーマプロバイダーを取得します。
| ppSchemaProvider | ISchemaProvider** | out | ISchemaProvider オブジェクトへのポインターのアドレスを受け取ります。呼び出し元のアプリケーションは、その IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
条件を構造化クエリ文字列として再表現します。条件が元のクエリ文字列を解析した結果である場合は、そのクエリ文字列のキーワードが可能な限り使用されます。そうでない場合は、既定のキーワードが使用されます。
| pCondition | ICondition* | in | 再表現する条件です。 |
| fUseEnglish | BOOL | in | 予約されています。FALSE を指定する必要があります。 |
| ppszQueryString | LPWSTR* | out | 再表現されたクエリ文字列を受け取ります。呼び出し元は、CoTaskMemFree を呼び出して文字列を解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定したプロパティに対する条件を解析します。
| pszPropertyName | LPWSTR | in | プロパティ名です。 |
| pszInputString | LPWSTR | in | そのプロパティを基準として解析するクエリ文字列です。 |
| ppSolution | IQuerySolution** | out | IQuerySolution オブジェクトを受け取ります。呼び出し元のアプリケーションは、その IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
入力文字列には、構造化クエリ内でプロパティの直後に記述できる内容であれば何でも指定できます。たとえば、"from:(bill OR alex)" は有効な構造化クエリであるため、pszPropertyName パラメーターに System.StructuredQuery.Virtual.From(From はそのキーワードです)を指定し、pszInputString パラメーターに "(bill OR alex)" または "bill OR alex" を指定することは有効です。この場合、System.StructuredQuery.Virtual.From プロパティと文字列 "bill" および "alex" を関連付けるリーフノードの OR が生成されます。
条件に含まれる指定したプロパティをクエリ文字列として再表現します。
| pCondition | ICondition* | in | クエリ文字列として再表現する条件です。 |
| fUseEnglish | BOOL | in | 予約されています。FALSE を指定する必要があります。 |
| ppszPropertyName | LPWSTR* | out | プロパティ名を表す Unicode 文字列へのポインターを受け取ります。呼び出し元のアプリケーションは、CoTaskMemFree を呼び出して文字列を解放する必要があります。 |
| ppszQueryString | LPWSTR* | out | そのプロパティに対するクエリ文字列へのポインターを受け取ります。呼び出し元のアプリケーションは、CoTaskMemFree を呼び出して文字列を解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
条件のリーフノードに複数のプロパティ名が含まれている場合、またはプロパティ名がまったく含まれていない場合は、E_INVALIDARG が返されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IQueryParser "{2EBDEE67-3505-43F8-9946-EA44ABC8E5B0}" #usecom global IQueryParser IID_IQueryParser "{B72F8FD8-0FAB-4DD9-BDBF-245A6CE1485B}" #comfunc global IQueryParser_Parse 3 wstr,sptr,sptr #comfunc global IQueryParser_SetOption 4 int,var #comfunc global IQueryParser_GetOption 5 int,var #comfunc global IQueryParser_SetMultiOption 6 int,wstr,var #comfunc global IQueryParser_GetSchemaProvider 7 sptr #comfunc global IQueryParser_RestateToString 8 sptr,int,var #comfunc global IQueryParser_ParsePropertyValue 9 wstr,wstr,sptr #comfunc global IQueryParser_RestatePropertyValueToString 10 sptr,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IQueryParser "{2EBDEE67-3505-43F8-9946-EA44ABC8E5B0}" #usecom global IQueryParser IID_IQueryParser "{B72F8FD8-0FAB-4DD9-BDBF-245A6CE1485B}" #comfunc global IQueryParser_Parse 3 wstr,sptr,sptr #comfunc global IQueryParser_SetOption 4 int,sptr #comfunc global IQueryParser_GetOption 5 int,sptr #comfunc global IQueryParser_SetMultiOption 6 int,wstr,sptr #comfunc global IQueryParser_GetSchemaProvider 7 sptr #comfunc global IQueryParser_RestateToString 8 sptr,int,sptr #comfunc global IQueryParser_ParsePropertyValue 9 wstr,wstr,sptr #comfunc global IQueryParser_RestatePropertyValueToString 10 sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。