5.2.1 プラグイン提供関数間の値の受け渡しに関する制限
(1) プラグイン提供関数の種類
プラグイン提供関数の種類を次の表に示します。
関数の種類 |
プラグインの処理 |
|
---|---|---|
受け渡しする値を生成し,ほかのプラグイン提供関数に送信する処理 |
ほかのプラグイン提供関数から送信された,受け渡しする値を受信する処理 |
|
受け渡しする値がない関数 |
なし |
なし |
受け渡しする値を受信する関数※1 |
なし |
あり |
受け渡しする値を送信する関数※2 |
あり |
なし |
受け渡しする値を送受信する関数 |
あり |
あり |
- 注※1
-
例えば,HiRDB Text Search Plug-inの場合,scoreを示します。
- 注※2
-
例えば,HiRDB Text Search Plug-inの場合,contains_with_scoreを示します。
プラグイン提供関数の機能として,プラグイン提供関数間で値の受け渡しができます。プラグイン提供関数間の値の受け渡しは,HiRDBが自動的にするので,受け渡しする値をプラグイン提供関数の引数に指定する必要はありません。
プラグイン提供関数の種類によっては,SQL中に記述できる場所が異なるので注意する必要があります。プラグイン提供関数の種類については,各種プラグインマニュアルを参照してください。
なお,これ以降の説明では用語を次のように略します。
-
受け渡しする値がない関数→受渡し値なし関数
-
受け渡しする値を受信する関数→受渡し値受信関数
-
受け渡しする値を送信する関数→受渡し値送信関数
-
受け渡しする値を送受信する関数→受渡し値送受信関数
(2) 受渡し値送信関数と受渡し値受信関数の対応
受渡し値送信関数と受渡し値受信関数の対応についての規則を次に示します。
-
受渡し値送信関数と受渡し値受信関数との間には,値を受け渡しできるものと受け渡しできないものがあります。受渡し値送信関数と受渡し値受信関数との対応関係については,各種プラグインマニュアルを参照してください。
-
受渡し値送信関数と受渡し値受信関数の第1引数は同じで,実表の列指定,SQLパラメタ,又はSQL変数である必要があります。なお,コンポネント指定は指定できません。
-
受渡し値送信関数と受渡し値受信関数は,一つの問合せ指定で閉じるようにしてください。ただし,リスト作成時に,受渡し値送信関数を指定して受渡し値をリストに格納しておいて,リストを介した検索時に受渡し値受信関数を指定してリストから受渡し値を取得する場合,受渡し値送信関数と受渡し値受信関数は,複数の問合せにわたって指定できます(「リスト間の集合演算実行方法の種類」を参照してください)。
受渡し値受信関数と受渡し値送信関数の組み合わせと,HiRDBの動作を次の表に示します。
受渡し値受信関数の指定 |
受渡し値送信関数の指定 |
HiRDBの動作 |
---|---|---|
なし |
なし |
実行できます。 |
あり |
||
あり |
なし |
実行できません。※ |
あり(一つ) |
実行できます。 |
|
あり(二つ以上) |
実行できません。 |
- 注※
-
リストから受渡し値を取得する場合,受渡し値送信関数と受渡し値受信関数は,複数の問合せにわたって指定できます。
(3) 各プラグイン提供関数の制限
-
受渡し値なし関数
関数を指定できる箇所であれば,すべて指定できます。
-
受渡し値受信関数
-
SELECT文の選択式,問合せ指定があるINSERT文の選択式,及びUPDATE文のSET句の更新値にだけ指定できます。
-
CASE式中,及びスカラ関数VALUE中には指定できません。
-
GROUP BY句,HAVING句,又は集合関数を指定した場合,第1引数がSQL変数又はSQLパラメタの受渡し値受信関数は,集合関数の引数中以外では指定できません。
-
-
受渡し値送信関数
(i) 受渡し値受信関数がない場合
関数を指定できる箇所であれば,すべて指定できます。
(ii) 受渡し値受信関数がある場合
-
WHERE句,又はON 探索条件にだけ指定できます。
-
外結合を指定した結合表のON 探索条件に,受渡し値送信関数を指定する場合,第1引数に外表の列は指定できません。
-
受渡し値送信関数をORのオペランドの探索条件中に指定する場合,次の条件をすべて満たす必要があります。
・受渡し値送信関数の第1引数にプラグインインデクスを定義している。
・受渡し値送信関数の第1引数が,外への参照列を除く実表の列指定である。
・受渡し値送信関数の第1引数を除く引数に,外への参照列を除く列指定,及び列に対するコンポネント指定の値式を含む引数を指定していない。
・受渡し値送信関数に対して,IS FALSE,IS UNKNOWN,及びNOTが含まれる述語を指定していない。
・受渡し値送信関数をCAST指定中に指定していない。
・FROM句に2表以上指定した場合,受渡し値送信関数の第1引数の列と異なる表の列を,ORのオペランドの探索条件中に指定していない(WHERE句,及びON 探索条件に論理演算子NOTを含む場合,ド・モルガンの定理によって論理演算子NOTを排除した結果が条件を満たすときも同様です)。
-
CASE式中,及びスカラ関数VALUE中には指定できません。
-
GROUP BY句,HAVING句,又は集合関数を指定して定義した名前付き導出表をFROM句に指定していて,かつこの名前付き導出表が内部導出表を作成しない場合,名前付き導出表を指定した問合せ指定の探索条件には,第1引数がSQL変数,又はSQLパラメタとなる受渡し値送信関数は指定できません。
-
-
受渡し値送受信関数
SQL中には指定できません。