スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
プラグイン提供関数とは,プラグインが提供する関数のことを指します。
プラグイン提供関数の種類を次の表に示します。
表5-1 プラグイン提供関数の種類
関数の種類 | プラグインの処理 | |
---|---|---|
受け渡しする値を生成し,ほかのプラグイン提供関数に送信する処理 | ほかのプラグイン提供関数から送信された,受け渡しする値を受信する処理 | |
受け渡しする値がない関数 | なし | なし |
受け渡しする値を受信する関数※1 | なし | あり |
受け渡しする値を送信する関数※2 | あり | なし |
受け渡しする値を送受信する関数 | あり | あり |
プラグイン提供関数の機能として,プラグイン提供関数間で値の受け渡しができます。プラグイン提供関数間の値の受け渡しは,HiRDBが自動的にするので,受け渡しする値をプラグイン提供関数の引数に指定する必要はありません。
プラグイン提供関数の種類によっては,SQL中に記述できる場所が異なるので注意する必要があります。プラグイン提供関数の種類については,各種プラグインマニュアルを参照してください。
なお,これ以降の説明では用語を次のように略します。
受渡し値送信関数と受渡し値受信関数の対応についての規則を次に示します。
受渡し値受信関数と受渡し値送信関数の組み合わせと,HiRDBの動作を次の表に示します。
表5-2 受渡し値受信関数と受渡し値送信関数との組み合わせ
受渡し値受信関数の指定 | 受渡し値送信関数の指定 | HiRDBの動作 |
---|---|---|
なし | なし | 実行できます。 |
あり | ||
あり | なし | 実行できません。※ |
あり(一つ) | 実行できます。 | |
あり(二つ以上) | 実行できません。 |
プラグイン提供関数を実行する方法には,次の二つがあります。
プラグイン提供関数には,インデクス型プラグインを使用しないと実行できない関数(インデクス型プラグイン専用関数)があります。
HiRDBがインデクス型プラグイン専用関数を実行する場合に,インデクス型プラグインを使用できないと判断したときはエラーとなります。エラーとなる組み合わせを次の表に示します。プラグイン提供関数が,インデクス型プラグイン専用関数であるかどうかについては,各種プラグインマニュアルを参照してください。
表5-3 プラグイン提供関数実行時にエラーとなる組み合わせ
インデクス型プラグインを使用して関数を実行する方法 | インデクス型プラグインを使用しないで関数を実行する方法 | HiRDBが選択した検索方式 | |
---|---|---|---|
インデクス型プラグインを使用する検索 | インデクス型プラグインを使用しない検索 | ||
提供されている | 提供されている | ○ | ○ |
提供されている※ | 提供されていない※ | ○ | × |
提供されていない | 提供されている | − | ○ |
インデクス型プラグイン専用関数を使用する場合には,次の制限があります。
SELECT T1.C1,T2.C2 FROM T1,T2 WHERE T1.C1=10 AND ( (CONTAINS(T2.ADT,'ABC') IS TRUE) OR (CONTAINS(T2.ADT,'DEF') IS TRUE) )
( SELECT T1.C1,T2.C2 FROM T1,T2 WHERE T1.C1=10 AND (CONTAINS(T1.ADT,'ABC') IS TRUE) UNION ALL SELECT T1.C1,T2.C2 FROM T1,T2 WHERE T1.C1=10 AND (CONTAINS(T2.ADT,'DEF') IS TRUE)) EXCEPT ALL SELECT T1.C1,T2.C2 FROM T1,T2 WHERE T1.C1=10 AND (CONTAINS(T2.ADT,'DEF') IS TRUE) AND (CONTAINS(T1.ADT,'ABC') IS TRUE)
SELECT T1.C1,T2.C2 FROM T1,T2 WHERE NOT(CONTAINS(T1.ADT, ... ) IS NOT TRUE AND T1.C1=10) AND T1.C1=T2.C1
SELECT T1.C1,T2.C2 FROM T1,T2 WHERE (CONTAINS(T1.ADT, ... ) IS TRUE OR T1.C1<>10) AND T1.C1=T2.C1
これらの制限に関する例を次に示します。
SELECT C1,C2,score(SENTENCES) FROM T1 WHERE contains(SENTENCES, … ) IS TRUE AND contains_with_score(SENTENCES, … ) IS TRUE
SELECT T1.C1,T2.C2 FROM T1 LEFT OUTER JOIN T2 ON T1.C1=T2.C1 WHERE contains(T1.C3, … ) IS TRUE
段階的に対象レコードを絞り込む場合(絞込み検索をする場合),リストへ受渡し値を格納しておくことで,受渡し値受信関数の結果を高速に取得できます。
ASSIGN LIST文を使用して実表からリストを作成する場合の探索条件に,リストに受渡し値を格納できる受渡し値送信関数を指定することで,リストに受渡し値を格納できます(ただし,ASSIGN LIST文には,リストに受渡し値を格納できる受渡し値送信関数は二つ以上指定できません)。
プラグイン提供関数が,リストに受渡し値を格納できるかどうかについては,各種プラグインマニュアルを参照してください。
また,ASSIGN LIST文を使用して,受渡し値を格納したリストから,新たなリストに受渡し値を格納することもできます。
リストを介した検索のカーソル指定の選択式に,リストから受渡し値を取得できる受渡し値受信関数(リスト用受渡し値受信関数)を指定することで,受渡し値送信関数を指定しないで,リストに格納された受渡し値を取得できます。
プラグイン提供関数が,リストから受渡し値を取得できるかどうかについては,各種プラグインマニュアルを参照してください。
リストを介した検索のカーソル指定の選択式に,リストから受渡し値を取得できる受渡し値受信関数を指定した場合,HiRDBはリストに受渡し値を格納した受渡し値送信関数の種別を意識しないで受渡し値を取得します。そのため,必ずリストを作成したときに指定した,受渡し値送信関数に対応する受渡し値受信関数を指定してください。
リスト間の集合演算をする場合,リスト作成時に探索条件に指定した受渡し値送信関数によって,集合演算実行方法が変わります。
「リスト名1 {AND|OR|AND NOT|ANDNOT} リスト名2」の集合演算結果の受渡し値を次の表に示します。
表5-4 集合演算結果の受渡し値
リスト名1作成時の受渡し値送信関数※1 | リスト名2作成時の受渡し値送信関数※1 | |||
---|---|---|---|---|
リストに受渡し値を格納できる場合 | そのほかの場合 | |||
「絞込み対象受渡し値使用」指定あり | 集合演算方法の指定なし | |||
リストに受渡し値を格納できる場合 | 「絞込み対象受渡し値使用」指定あり | × | × | リスト名1の受渡し値※2 |
集合演算方法の指定なし | × | × | × | |
そのほかの場合 | × | × | なし |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.