関数AllPairsShortestPathの関数マッピング定義usr_AllPairsShortestPathは、GroupColumnとDistanceで構成される連結変数式としてTargetKeyを指定します。Distanceのデフォルト値は、スカラー サブクエリーから導出されます。
SELECT distnum FROM ssqtbl WHERE username=CURRENT_USER
CREATE FUNCTION MAPPING usr_AllPairsShortestPath FOR AllPairsShortestPath SERVER TD_SERVER_DB.coprocessor USING vertices(vertex) IN TABLE , edges(edge) IN TABLE , sources(source) IN TABLE , targets(trgt) IN TABLE , TargetKey(GroupColumn||'_'||Distance) , EdgeWeight('calls') , MaxDistance(Distance) , Distance(SELECT distnum FROM ssqtbl WHERE username=CURRENT_USER), Directed ,GroupSize ,SequenceInputBy;
このSELECT文は、GroupColumnのスカラー サブクエリーを指定します。CURRENTログイン ユーザーのスカラー サブクエリー テーブルssqtblでは、distnumの値は5で、tabnameはtabl1です。
SELECT * FROM usr_AllPairsShortestPath ( ON callers AS vertices PARTITION BY callerid ON calls AS edges PARTITION BY callerfrom USING GroupColumn(SELECT tabname FROM ssqtbl WHERE username=CURRENT_USER) ) as dt ORDER BY source, target;
実行時、このクエリーは次のように書き換えられます。関数マッピング定義はTargetKeyの連結式を指定します。これはtabl_5に解決されます。Distanceスカラー サブクエリーは5に解決されます。MaxDistanceはDistanceに置き換えられます。
SELECT * FROM AllPairsShortestPath ( ON callers AS vertices PARTITION BY callerid ON calls AS edges PARTITION BY callerfrom USING TargetKey('tabl_5') MaxDistance('5') EdgeWeight('calls') ) as dt ORDER BY source, target;