4.5.4 字句規則
(1) 文字コードセットとの対応
ここでは,edmSQLで使用できる字句と,文字コードセットとの対応について説明します。
- 各国語を表記するための文字などは,文字コードセットに依存します。
edmSQLで使用できる文字コードセットは,前提プログラムである,OSとHiRDBに依存します。したがって,これらのプログラムで使用できない文字を使用した場合は,前提プログラムのエラーになります。
- edmSQLで使用する字句の規則は,検索の対象になる文書のコンテントには適用されません。全文検索機能を使用する場合に検索対象になる文書の字句については,全文検索機能を提供するHiRDB Text Search Plug-inに依存します。
- 次の文字コードセットが使用できます。
- DocumentBrokerのメタ定義で使用できる文字コードセット
- HiRDBで使用できる文字コードセット
- HiRDB Text Search Plug-inで使用できる文字コードセット
(2) edmSQLで使用できる文字
edmSQLで使用できる文字を,次の表に示します。
表4-25 edmSQLで使用できる文字
文字 | 値 |
---|
英大文字 | A~Z |
英小文字 | a~z |
数字 | 0~9 |
16進数字 | 0~9,a~f,およびA~F |
特殊文字(半角文字コード) | <空白> <ダブルクォート>(") <パーセント>(%) <アンパサンド>(&) <シングルクォート>(') <左括弧>(() <右括弧>()) <アスタリスク>(*) <+符号>(+) <コンマ>(,) <-符号>(-) <ピリオド>(.) <斜線>(/) <コロン>(:) <セミコロン>(;) <小なり演算子>(<) <等号演算子>(=) <大なり演算子>(>) <疑問符>(?) <左角括弧またはtrigraph >( [ または (??) <右角括弧またはtrigraph >( ] または ??)) <サーカムフレックス>(^) <下線文字>(_) <垂直棒>(|) <左中括弧>({) <右中括弧>(}) |
(a) 規約詳細
edmSQLで使用できる文字の詳細について説明します。
- <空白>は,JIS X 0201では,0x20に対応します。
- <拡張文字>とは,使用できる文字コードセットに対応して,使用可能な文字として拡張した文字です。使用できる文字コードセットについては,「(1) 文字コードセットとの対応」を参照してください。
(3) <区切り文字>
<トークン>は,<区切り文字>によって分割されます。<区切り文字>は,<トークン>を抽出するための字句解析で削除される文字です。このため,構文解析を実行する時点では,<区切り文字>は出現しません。
(a) <区切り文字>として指定できる字句
<区切り文字>として指定できる字句は,<white space>です。
(b) 規約詳細
<区切り文字>の詳細について説明します。
edmSQLでは,次の定義を<white space>として定義します。
Horizontal Tab [0x09]
Line Feed [0x0A]
Vertical Tabulation [0x0B]
Form Feed [0x0C]
Carriage Return [0x0D]
Space [0x20]
[ ]内は,対応するASCIIコードです。
(4) <トークン>
<トークン>の定義について説明します。<トークン>は,構文の基本要素です。
<トークン>の定義には,次の要素の定義が含まれます。
それぞれの要素については,「(5)<キーワード>」,「(6)<リテラル>」および「(7)<識別子>」を参照してください。
なお,<トークン>として指定できる文字列の長さなどは,データベースに依存します。
(a) <トークン>として指定できる字句
<トークン>として指定できる字句を,次の表に示します。
表4-26 <トークン>として指定できる字句
種類 | 値 | 参照先 |
---|
正規識別子 | 先頭が<英字>で,先頭以外が<英字>,<数字>および<下線文字>の値 | (7)<識別子> |
キーワード | <予約されたキーワード>および<予約されないキーワード>の値 | (5)<キーワード> |
符号なし数値リテラル | 符号なしの数字の値 | (6)<リテラル> |
バイナリ長トークン | <符号なし数値>に<multiplier>(k,m,g)が付いた値 | 「4.5.9 関数指定の構文規則」のAS<データ型指定> |
区切られた識別子 | <ダブルクォート>で囲まれた値 (<区切り文字>,<ダブルクォート以外の文字>および<二重ダブルクォート>を含むことができる)。 | (7)<識別子> |
文字列リテラル | <シングルクォート>で囲まれた値 (<シングルクォート以外の文字>または<二重シングルクォート>('')が指定できる)。 | (6)<リテラル> |
特殊文字 | edmSQLで使用できる特殊文字 | (2)edmSQLで使用できる文字 |
そのほかの文字 | - <不等号演算子>(<>)
- <大なり等号演算子>(>=)
- <小なり等号演算子>(<=)
- <文字列連結演算子>(||)
- <右矢印演算子>(->)
- <二重コロン>(::)
- <左大括弧> ([)
- <右大括弧>(])
- <アンパサンド>(&)
| - |
- (凡例)
- -:該当しません。
(b) 規約詳細
<トークン>の詳細について説明します。
- <トークン>が区切られる単位についての詳細
- <ダブルクォート><ダブルクォート以外の文字><二重ダブルクォート>に関する詳細
- <ダブルクォート以外の文字>は,使用できる文字コードセットの文字から,<ダブルクォート>を除外したものです。edmSQLで使用できる文字で構成されている必要はありません。
ただし,DocumentBrokerのメタ定義で使用できる文字およびHiRDBで使用できる文字以外は指定できません。
- <二重ダブルクォート>は,<区切られた識別子>内で<ダブルクォート>を指定する場合に使用します。
- <バイナリ長トークン>についての詳細
- <バイナリ長トークン>は,Binary型の定義長を指定するためのトークンです。関数の引数に指定する?パラメタに対して,データ型を明示するためのAS<データ型指定>で使用します。
- 使用できる<特殊文字>についての詳細
- 次に示す<特殊文字>および演算子は,文字列リテラルの字句としてだけ使用できます。それ以外で使用した場合,字句解析時にエラーになります。
% & : (?? ??) ^ | { } -> ::
(5) <キーワード>
<キーワード>の定義について説明します。<キーワード>には<予約されるキーワード>(予約語)と<予約されないキーワード>があります。
<キーワード>では,大文字と小文字は区別されません。
ただし,このマニュアルの例では,<予約されるキーワード>を大文字で,<予約されないキーワード>を小文字で表記します。
edmSQLのキーワードはSQLのキーワードを基盤として,次のように定義されています。
- edmSQLでは,SQLのキーワードおよびHiRDBのキーワードのうち,最小限のものをキーワードとして定義しています。すべてのSQLのキーワードおよびHiRDBのキーワードが定義されているのではありません。ただし,ユーザが識別子を指定する場合には,edmSQLのキーワードのほか,HiRDBのキーワードも指定できません。識別子としてHiRDBのキーワードを指定した場合,HiRDBのエラーになります。なお,クラス名やプロパティ名については,定義する時点でHiRDBのキーワードは指定できません。このため,登録済みのクラス名やプロパティ名をedmSQLのキーワードとして指定した場合に,HiRDBのエラーになることはありません。
- edmSQLでは,全文検索関数などの関数名は<予約されないキーワード>として定義されています。そのほかのキーワードは<予約されるキーワード>として定義されています。
- DMAの検索モデルで定義されている演算子のうち,キーワードとして表現されているものは,edmSQLでは使用しないものも含めてすべて<予約されるキーワード>として定義されています。
- DocumentBrokerの文書管理モデルで使用する用語として,幾つかのキーワードが<予約されるキーワード>として定義されています。
(a) <キーワード>として指定できる字句
<キーワード>として指定できる字句を,次の表に示します。
表4-28 <キーワード>として指定できる字句
種類 | 値 | 特徴 |
---|
関数名 | concept_with_score contains cotains_with_score extracts objref oiid oiidstr score score_concept | 予約されないキーワードです。 |
multiplier | k m g |
句に使用するキーワード | SELECT FROM WHERE ORDER GROUP BY HAVING | 予約されるキーワードです。 |
述語に使用するキーワード | IS ALL SOME ANY IN LIKE XLIKE EXISTS BETWEEN AS ESCAPE |
論理演算に使用するキーワード | NOT AND OR |
リテラルに使用するキーワード | NULL TRUE FALSE UNKNOWN |
結合条件に使用するキーワード | JOIN INNER OUTER LEFT ON |
データ操作および重複排除に使用するキーワード | DISTINCT ASC DESC |
集合関数で使用するキーワード | COUNT |
数値関数で使用するキーワード | ABS |
DMAの検索モデルで使用するキーワード | ID |
プロパティのデータ型で使用するキーワード | BINARY BOOL BOOLEAN INT INTEGER STRING |
DocumentBrokerの文書モデルで使用するキーワード | ACL CARDINALITY CLASS CONTAINER CONTENT DOCUMENT EVERYONE FOLDER FOR GROUP LINK LOCK OBJECT OF OWNER PARENT PRIVATE PROPERTY PUBLIC READ TO TYPE UNLINK UPDATE VARRAY VERSION VERSIONABLE WRITE |
(b) 規約詳細
<キーワード>の詳細について説明します。
- <キーワード>の表記についての詳細
- キーワードでは,大文字と小文字が区別されません。正規識別子の規約とは異なりますので,ご注意ください。edmSQLでは,キーワードはすべて大文字として管理されます。
- 例えば,次の表記は,すべて<予約されるキーワード>「SELECT」として識別されます。
Select SeLect select selecT
- また,次の表記はすべて<予約されないキーワード>「contains_with_score」として識別されます。
Contains_With_SCORE contains_with_scorE
CONTAINS_WITH_SCORE
- <キーワード>と<正規識別子>の関係についての詳細
- <予約されるキーワード>は正規識別子として使用できません。
- <予約されないキーワード>は正規識別子として使用できますが,HiRDBで予約語として定義されている場合は,使用できません。使用すると,データベースエラーになります。
(6) <リテラル>
<リテラル>の定義について説明します。<リテラル>とは,NULL値以外の値です。
<リテラル>には,次の種類があります。
(a) <リテラル>として指定できる字句
<リテラル>として指定できる字句を,次の表に示します。
表4-29 <リテラル>として指定できる字句
種類 | 値 |
---|
文字列リテラル | <シングルクォート>で囲まれた文字列 (文字列には,<シングルクォート以外の文字>※または<二重シングルクォート>('')が指定できる)。 |
数値リテラル | 符号(+または)付きの数字 (符号は省略できる)。 |
論理リテラル | TRUE FALSE UNKNOWN |
- 注※
- <シングルクォート以外の文字>は,使用できる文字コードセットの文字から,<シングルクォート>を除外したものです。edmSQLで使用できる文字で構成される必要はありません。ただし,文字列リテラルはString型の値であるため,String型を格納するHiRDBのデータ型(MVARCHAR型)で制限される文字は使用できません。
(b) 規約詳細
<リテラル>の詳細について説明します。
- 文字列リテラルの詳細
- 文字列リテラルは,任意の文字列定数を表現する場合に使用します。文字列リテラルは,String型の値に対応します。したがって,文字列リテラルで使用できる文字列の長さは,データベースの制限に従います。データベースの制限以上の長さの文字列を文字列リテラルとして指定したい場合は,?パラメタを使用してください。
- 文字列リテラルの表記例とedmSQL検索実行時の値の対応を,次の表に示します。なお,文字列リテラルを表すString型の値は,HiRDBではMVARCHAR型のデータとして格納されます。
表4-30 文字列リテラルの表記例とedmSQL検索実行時の値の対応
文字列リテラルの表記例 | 値の扱われ方 | edmSQL検索実行時の値 |
---|
'aaa' | 文字列データ | aaa |
'124' | 文字列データ | 124 |
'abc あいうえお' | 混在文字列データ | abc あいうえお |
'ab''c あ''いうえお' | シングルクォートのエスケープ | ab'c あ'いうえお |
- 数値リテラル(符号付き数値リテラル)の詳細
- 数値リテラルは,任意の数値定数を表現する場合に使用します。なお,DocumentBrokerで使用できる数値リテラルは,4バイトの整数値だけです。
- なお,4バイトの整数値の有効値は,-2,147,483,648~2,147,483,647までの値です。この範囲外の値を指定した場合,データベースの制限に従って,目的の検索が実行できなかったり,データベースのエラーになったりします。
- 数値リテラルの表記例とedmSQL検索実行時の値の対応を,次の表に示します。
表4-31 数値リテラルの表記例とedmSQL検索実行時の値の対応
数値リテラルの表記例 | 値の扱われ方 | edmSQL検索実行時の値 |
---|
123 | 数値データ | 123 |
0000000123 | 数値データ | 123 |
+1234567890 | 数値データ(正の整数値) | 1234567890 |
-1234567890 | 数値データ(負の整数値) | -1234567890 |
987654321000000000 | リテラルとしては正しい表記ですが,4バイト整数値の有効値ではないため,正しく扱われません。 | - |
- (凡例)
- -:該当する値がありません。
- 論理リテラルの詳細
- 論理リテラルは,論理値である「真」,「偽」および「不定」の三つの値を,それぞれ「TRUE」,「FALSE」および「UNKNOWN」で表現します。
- 論理型の値を表すBoolean型のプロパティの値は,TRUEは「1」,FALSEは「0」,UNKNOWNは「2」として,数値で格納されます。ただし,この値をedmSQLで数値として扱うことはできません。edmSQLで指定する場合は,必ずTRUE,FALSEまたはUNKNOWNとして表現してください。
- また,論理リテラルを整数の演算に使用する値として使用することもできません。ただし,クラスライブラリを使用して,C++のデータモデルに変換した場合は,論理リテラルの値を数値として扱うこともできます。この場合の数値のデータベースでの扱われ方は,データベースでのデータモデルの対応付けに依存します。
- 論理リテラルの表記ごとの,論理値を表すTRUEの扱われ方について,例に示します。
- 次のTRUEはデータベースによって,論理述語として処理されます。
contains(edmProp_Content,'文章[概要{"コンピュータ"}]') IS TRUE
- 次のTRUEはクラスライブラリを通して数値として処理されます。ただし,myProp_OKはBoolean型のプロパティです。
myProp_OK = TRUE
(7) <識別子>
<識別子>の定義について説明します。<識別子>には,<正規識別子>と<区切られた識別子>があります。
なお,識別子には,日本語の文字コードセットは使用できません。
(a) <識別子>として指定できる字句
<識別子>として指定できる字句を,次の表に示します。
表4-32 <識別子>として指定できる字句
種類 | 値 |
---|
正規識別子 | 先頭は<英字>で,先頭以外が<英字>,<数字>および<下線文字>の値
- 例
- usrClass_ABC
|
区切られた識別子 | <ダブルクォート>で囲まれた値 (<区切り文字>,<ダブルクォート以外の文字>※または<二重ダブルクォート>("")を含むことができる)
- 例
- "user class"
- "user""class"
|
- 注※
- <ダブルクォート以外の文字>として指定できるのは,英字,数字および「"」を除いた特殊文字です。
(b) 規約詳細
<識別子>の詳細について説明します。
- <正規識別子>に関する詳細
- edmSQLでは,<正規識別子>に使用される英字の<英大文字>と<英小文字>が区別して扱われます。このため,SQLを使用する時のように,<英大文字>と<英小文字>を区別するために,<区切られた識別子>を使用する必要はありません。
- <正規識別子>に<キーワード>は使用できません。<キーワード>と同じ識別子を使用する場合は,<区切られた識別子>として指定してください。
- <区切られた識別子>に関する詳細
- 値が空の区切られた識別子「""」は,無効な識別子として扱われます。これを指定した場合は,字句解析エラーになります。
(8) <名前>
<名前>の定義について説明します。<名前>では,クラス名,プロパティ名,相関名および関数名を表現します。
<名前>の基本要素は,<識別子>と<ID文字列>です。
(a) <名前>として指定できる字句
<名前>として指定できる字句を,次の表に示します。
表4-33 <名前>として指定できる字句
種類 | 値 | 参照先 |
---|
クラス名 | | |
プロパティ名 | | |
関数名 | (変換関数)
- (全文検索関数)
- contains
- contains_with_score
- score
- extracts
- (概念検索関数)
- concept_with_score
- score_concept
| |
相関名 | <識別子> | |
(b) 規約詳細
<名前>の詳細について説明します。
- クラス名の詳細
- <クラス名>は,文書空間内でクラスを識別するための名称(dmaProp_DisplayNameの値),またはGUID値のID文字列表現です。使用できる文字列の長さは,データベースのテーブル名に使用できる文字列の長さに従います。
- 一つのedmSQL文の中で,同じクラスを識別するための<クラス名>の表現に,名称とID文字列を混用することはできません。一つのedmSQL文では,<クラス名>は,名称またはID文字列で統一して表記してください。例えば,<FROM句>の<クラス名>にID文字列を指定した場合は,<WHERE句>などでプロパティを修飾する<クラス名>にもID文字列を指定する必要があります。
- <識別子>および<ID文字列>の詳細は,「(7)<識別子>」および「(9)<ID文字列>」を参照してください。
- プロパティ名の詳細
- <プロパティ名>は,文書空間内でプロパティを識別するための名称(dmaProp_DisplayNameの値),またはGUID値のID文字列表現です。使用できる文字列の長さは,データベースのカラム名に使用できる文字列の長さに従います。
- 一つのedmSQL文の中で,同じプロパティを識別するための<プロパティ名>の表現に,名称とID文字列を混用することはできません。なお,そのプロパティがどのクラスのプロパティであるかが明確でない場合は,<プロパティ名>を<クラス名>または<相関名>で修飾する必要があります。
- 一つのedmSQL文では,<プロパティ名>は,名称またはID文字列で統一して表記してください。例えば,<選択項目>の<プロパティ名>にID文字列を指定した場合は,ORDER BY句で指定する<プロパティ名>にも,ID文字列を指定する必要があります。
- <識別子>,<ID文字列>および<特殊なプロパティ>の詳細は,「(7)<識別子>」,「(9)<ID文字列>」および「(10)<特殊なプロパティ>」を参照してください。
- 注意事項
- DocumentBrokerでは,プロパティの定義は文書空間ごとに定義されています。したがって,異なるクラスに登録されたプロパティであっても,同じ文書空間内のクラスであれば,プロパティの性質は同じことが保証されています。ほかのオブジェクト指向言語で,クラスのスコープ単位にプロパティが定義されているものとは異なりますので,ご注意ください。
- 関数名の詳細
- <関数名>は,edmSQLで予約されないキーワードとして登録されている関数を識別するための名称です。
- 関数についての詳細は,「4.5.9 関数指定の構文規則」を参照してください。
- 相関名の詳細
- <相関名>は,同じクラスを結合する場合に,結合するクラスを区別するための名称です。一つの<FROM句>の中に,同じクラスを複数回指定する場合には,必ず<相関名>を指定して,それぞれのクラスを一意に識別できるようにしてください。
- そのほか,<相関名>は,<クラス名>の別名としても使用できます。
- <相関名>として使用できる文字列の長さなどの制限については,データベースの相関名に関する制限に従います。
(9) <ID文字列>
<ID文字列>の定義について説明します。<ID文字列>は,<クラス名>や<プロパティ名>を,名称(dmaProp_DisplayNameに定義した値)以外で表記するための文字列です。
DocumentBrokerの文書空間では,クラスやプロパティはGUIDによって定義され,識別されます。クラスライブラリのメソッドでも,クラスやプロパティの識別には,このGUIDを指定します。これと同様に,edmSQLでも,GUIDでクラスやプロパティを指定できます。
なお,クラスライブラリでは,GUID値は,DmaId型という構造体で管理されますが,edmSQLでは,データ型ではなく,GUIDを<ID文字列>という記述形式で表現します。<クラス名>や<プロパティ名>と同じ扱いになるため,<ID文字列>に?パラメタによって値を指定することはできません。
(a) <ID文字列>として指定できる字句
<ID文字列>は,<シングルクォート>で囲まれたGUID文字列として指定します。
GUID文字列とは,「X」を0~9およびa~f(小文字)で表される16進数とした「XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX(8けた-4けた-4けた-4けた-12けた)」の形式の文字列です。
なお,<ID文字列>に指定する「ID」と<ID本体>の間に,区切り文字は指定できません。
(b) 規約詳細
<ID文字列>の詳細について説明します。
- <ID文字列>が区切られる単位についての詳細
- ID文字列の「ID」は,<予約されるキーワード>です。したがって,<非区切りトークン>として扱われます。また,<ID本体>は,<区切りトークン>として扱われます。このため,<ID文字列>の前に<区切り文字>なしで<非区切りトークン>は指定できませんが,<ID文字列>の後ろに<区切り文字>なしで<非区切りトークン>は指定できます。
- <ID文字列>の表記例とedmSQL検索実行時の値の扱われ方を,次の表に示します。
表4-34 <ID文字列>の表記例とedmSQL検索実行時の値の扱われ方
<ID文字列>の表記 | 扱われ方 |
---|
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923' | 正しい<ID文字列>として扱われます。 |
ID□'FA7DA34B-CFF3-11d3-A03E-00A0C9967923' | 「ID」と<ID本体>の間に区切り文字が入っているため,字句解析エラーになります。 |
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923'FROM | <ID文字列>と「FROM」として扱われます。 |
SELECTID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923' | 「SELECTID」と文字リテラルとして扱われます。 |
- (凡例)
- □:区切り文字または<空白>
(10) <特殊なプロパティ>
<特殊なプロパティ>の定義について説明します。<特殊なプロパティ>とは,全文検索で使用する全文検索インデクス用プロパティです。
(a) <特殊なプロパティ>として指定できる字句
<特殊なプロパティ>として指定できる字句を,次の表に示します。
表4-35 <特殊なプロパティ>として指定できる字句
種類 | 値 | 説明 |
---|
特殊なプロパティ | edmProp_TextIndex | edmProp_TextIndexプロパティを表す<正規識別子> |
edmProp_StIndex | edmProp_StIndexプロパティを表す<正規識別子> |
edmProp_ConceptTextIndex | edmProp_ConceptTextIndexプロパティを表す<正規識別子> |
edmProp_ConceptStIndex | edmProp_ConceptStIndexプロパティを表す<正規識別子> |
edmProp_Content | edmProp_Contentプロパティを表す<正規識別子> |
これらのプロパティの特長については,「4.4.2 全文検索機能付き文書クラスの作成」を参照してください。
(b) 規約詳細
<特殊なプロパティ>の詳細について説明します。
- <特殊なプロパティ>と<プロパティ名>についての詳細
- <特殊なプロパティ>は,edmSQLで,DMAの検索モデルを拡張するための導入されたプロパティです。このプロパティは,edmSQLによって予約されたプロパティ名であるため,<プロパティ名>としては使用できません。なお,DocumentBrokerとしても,ユーザプロパティに「dmaProp_」,「edmProp_」および「dbrProp_」で始まるプロパティ名称は使用できません。
なお,クラスライブラリで拡張したプロパティのうち,<特殊なプロパティ>として定義されていないプロパティについては,ほかのプロパティと同様の処理ができます。
- <特殊なプロパティ>を指定できる関数についての詳細
- <特殊なプロパティ>を指定できる関数を示します。
- edmProp_TextIndex,edmProp_StIndex,edmProp_Contentを第1引数に指定できる関数
- contains関数
- contains_with_score関数
- score関数
- extracts関数
- edmProp_ConceptTextIndex,edmProp_ConceptStIndexを第1引数に指定できる関数
- contains関数
- contains_with_score関数
- score関数
- extracts関数
- concept_with_score関数
- score_concept関数
- <特殊なプロパティ>を引数に指定できる関数の詳細については,「4.5.9 関数指定の構文規則」を参照してください。
(11) <?パラメタ>
<?パラメタ>は,検索条件の定数を構文解析時には固定しないで,検索実行時に定数を指定するために使用するパラメタです。edmSQL文には定数を指定する代わりに「?」を指定して,問い合わせの実行直前にCdbrEqlStatementクラスのSetParamメソッドなどで値を「?」に設定します。<?パラメタ>を使用することで,構文解析済みのedmSQL文を定数値だけを変えて繰り返し利用できるので,処理性能があがります。
また,概念検索を実行する場合には,検索条件は<?パラメタ>を使用しないと指定できません。
(a) <?パラメタ>として指定できる字句
<?パラメタ>として指定できるのは,?だけです。
(b) 規約詳細
<?パラメタ>の詳細について説明します。
- <?パラメタ>に指定する値のデータ型に関する詳細
- <?パラメタ>で指定される値のデータ型は不定です。このため,edmSQL文の構文解析時にはデータ型はチェックされません。ただし,AS<データ型指定>で明示的にデータ型を指定した<?パラメタ>については,データ型のチェックの対象になります。
- <ルーチンの起動>の引数として<?パラメタ>を使用する場合は,AS<データ型指定>で明示的にデータ型を指定してください。
- <?パラメタ>に値を設定するメソッドについての詳細
- CdbrEqlStatement::SetParamメソッド,CdbrEqlStatement::SetObjParamメソッドおよびCdbrEqlStatement::SetOIIDParamメソッドで<?パラメタ>に値を設定する場合,メソッドの引数には,edmSQLの定数表現ではなくクラスライブラリのデータ型に従った値を指定してください。
- CdbrEqlStatement::SetParamメソッドによって<?パラメタ>の値を設定した場合,メソッドの引数に指定した値がそのまま<?パラメタ>の値として設定されます。
- CdbrEqlStatement::SetOIIDParamメソッドによって<?パラメタ>の値を設定した場合,メソッドの引数に指定した値(OIID文字列)をdmaProp_OIIDプロパティの格納形式(16バイト)に変換された値が<?パラメタ>の値として設定されます。
- CdbrEqlStatement::SetObjParamメソッドによって<?パラメタ>の値を設定した場合,メソッドの引数に指定した値(OIID文字列)をオブジェクトリファレンスの形式に変換された値が<?パラメタ>の値として設定されます。
(12) <OIID>
<OIID>の定義について説明します。
検索対象になるオブジェクトは,OIIDによって識別されます。OIIDの値は,データベース上では,各オブジェクトのdmaProp_OIIDプロパティに,String型の16バイトの値として格納されています。
一方,クラスライブラリでは,OIIDを「dma://」で始まるOIID文字列(DMA URL)で表記します。これは,実際にdmaProp_OIIDプロパティに格納されている値とは異なります。したがって,クラスライブラリで使用するOIID文字列を直接edmSQL文に指定しても,OIIDを対象にした検索はできません。また,検索結果としてdmaProp_OIIDプロパティの値を取得した場合は,クラスライブラリで使用するOIID文字列に変換されたものを使用します。
(a) OIID文字列をdmaProp_OIIDプロパティの値に変換する指定(OIID変換インタフェース)
検索条件にOIID文字列を指定する場合に,指定したOIID文字列をdmaProp_OIIDプロパティの値に変換するためには,次のどちらかの方法を使用します。
- oiid関数で変換する。
edmSQL文中にOIID文字列を直接指定する場合の変換方法です。
oiid関数の詳細については,「4.5.9(2)(d) <objref関数>」を参照してください。
- CdbrEqlStatement::SetOIIDParamメソッドで変換する。
edmSQLに<?パラメタ>として指定しておく場合の変換方法です。SetOIIDParamメソッドの引数として,OIID文字列を指定します。
CdbrEqlStatement::SetObjParamメソッドについては,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。
- OIID変換インタフェースの使用例
- 次に,OIID変換インタフェースの使用例について説明します。
- OIID変換インタフェースを使用しないでOIIDを検索しようとしている例
- dmaProp_OIIDプロパティの値とOIID文字列の形式は異なるため,検索結果が「真」になる(検索結果が取得できる)ことはありません。
SELECT myProp_Foo
FROM myClass
WHERE dmaProp_OIID = 'dma:///xxx/xxx/xxx…x'
- oiid関数を使用してOIIDを検索する例
- 検索結果が「真」になる(検索結果が取得できる)可能性があります。
SELECT myProp_Foo
FROM myClass
WHERE dmaProp_OIID = oiid('dma:///xxx/xxx/xxx…x')
- SetOIIDParamメソッドを使用してOIIDを検索する例
- 検索結果が「真」になる(検索結果が取得できる)可能性があります。
SELECT myProp_Foo
FROM myClass
WHERE dmaProp_OIID = ?
- このとき,SetParamメソッドやSetObjParamメソッドを使用して<?パラメタ>の値を設定しても,正しい検索はできません。
(b) dmaProp_OIIDプロパティの値をOIID文字列に変換する指定(dmaProp_OIID取得インタフェース)
検索結果としてdmaProp_OIIDプロパティの値として取得した場合,検索結果として取得する構造体には,edmSQLによってOIID文字列に変換された値が格納されます。明示的に変換する必要はありません。