SPI_execute_with_args — 行外のパラメータを持つコマンドを実行する
int SPI_execute_with_args(const char *command
, intnargs
, Oid *argtypes
, Datum *values
, const char *nulls
, boolread_only
, longcount
)
SPI_execute_with_args
は外部から供給されるパラメータへの参照を含むコマンドを実行します。
コマンドテキストはパラメータを$
として参照し、呼び出しはこうしたシンボル毎にデータ型と値を指定します。
n
read_only
とcount
はSPI_execute
と同じ解釈をします。
SPI_execute
と比較して、このルーチンの主たる利点は、データ値を面倒な引用やエスケープを要せずコマンドに埋め込むことができることで、従ってSQLインジェクション攻撃の危険性を軽減します。
後にSPI_execute_plan
が続いたSPI_prepare
でも同様の結果が得られますが、この関数を使用するときには、提供された特定のパラメータ値に対して問い合わせ計画が必ずカスタマイズされます。
1回限りの問い合わせ実行に対しては、この関数を選ぶべきです。
多くの異なったパラメータを持つ同一のコマンドを実行する場合、再計画のコストと独自計画による利益に依存して、どちらか一方の方法がより早くなります。
const char * command
コマンド文字列
int nargs
入力パラメータ($1
、$2
など)の数
Oid * argtypes
パラメータのデータ型のOIDを含む、nargs
長の配列
Datum * values
実パラメータ値を含む、nargs
長の配列
const char * nulls
どのパラメータがnullかを記述する、nargs
長の配列
nulls
がNULL
であれば、SPI_execute_with_args
はどのパラメータもnullでないと看做します。
さもなければ、nulls
配列の各項目は、対応するパラメータが非NULLならば' '
、対応するパラメータがNULLならば'n'
です。
(後者の場合、values
内の対応する値は注意されません。)
nulls
はテキスト文字列ではなく単なる配列であることに注意してください。
'\0'
終端は必要ありません。
bool read_only
読み取りのみの実行の場合true
long count
返される行の最大数。無制限なら0
。
戻り値はSPI_execute
と同じです。
成功した場合SPI_processed
とSPI_tuptable
はSPI_execute
と同様に設定されます。