目的
テーブル関数を、他のAMP vproc上で実行するテーブル関数の他のすべてのコピーの制御コピーとして指定します。
構文
int FNC_TblControl(void)
戻り値
呼び出し結果 | FNC_TblControlが戻す値 |
---|---|
成功。テーブル関数のコピーはテーブル関数の制御ロールを取得できます。 | 1 |
失敗。テーブル関数のコピーは制御コピーのロールを取得できません。 | 0 |
有効な呼び出しモード
このライブラリ関数は、FNC_GetPhaseの戻り値がTBL_MODE_CONSTである場合に使用します。これはSELECT文が定数式入力引数のあるテーブル関数を呼び出したことを示します。
例:
SELECT * FROM TABLE (table_function_1('STRING_CONSTANT')) AS table_1;
使用上の注意
テーブル関数の制御コピーのセットアップは、さまざまなAMP vproc上で実行するテーブル関数のさまざまなコピーに特定の外部制御データを配布する必要があるものの、その外部制御データが特定のノード上にあるためテーブル関数の1コピーしかアクセスできない場合に役立ちます。
正常にFNC_TblControlを呼び出せるのは、テーブル関数の1コピーだけです。
テーブル関数の制御コピーは、FNC_TblControlを呼び出した後に、FNC_TblAllocCtrlCtxを呼び出して制御スクラッチパッドを割り振ることによって、制御データを他のテーブル関数コピーに配布できます。
制限
この関数は、テーブル関数内からのみ呼び出すことができます。この関数をスカラー関数、集約関数、UDM、または外部ストアド プロシージャから呼び出すと、トランザクションで例外が発生します。
この関数は一度だけしか呼び出すことができません。
FNC_TblControlを呼び出すテーブル関数は、FNC_TblFirstParticipantを呼び出せません。
この関数の呼び出しは、テーブル関数がFNC_GetPhaseを呼び出して以下の戻り値を取得した場合にのみ有効です。
- FNC_Mode結果としてTBL_MODE_CONST
- FNC_Phase出力引数としてTBL_PRE_INIT
FNC_TblControlの使用例
typedef struct {
unsigned short cntrl_fnc_AMP
int qfd;
...
} ctrl_ctx;
ctrl_ctx *options;
AMP_Info_t *LocalConfig;
FNC_Phase Phase;
if (FNC_GetPhase(&Phase) == TBL_MODE_CONST)
{
switch(Phase)
{
case TBL_PRE_INIT:
{
LocalConfig = FNC_AMPInfo();
if ( FNC_TblControl() ) {
options = FNC_TblAllocCtrlCtx(sizeof(ctrl_ctx));
options->ctrl_fnc_AMP = LocalConfig->AMPId;
...
}
}
...
}
}
...