SPI_execute_extended#
SPI_execute_extended
SPI_execute_extended — выполнить команду с параметрами вне строки
Синтаксис
int SPI_execute_extended(const char *command
, const SPIExecuteOptions *options
)
Описание
SPI_execute_extended
выполняет команду, которая может
содержать ссылки на внешне предоставленные параметры. Текст команды
обращается к параметру как $
,
и объект n
options->params
(если предоставлен)
предоставляет значения и информацию о типе для каждого такого символа.
Различные параметры выполнения можно указать
в структуре options
также.
Объект options->params
обычно должен помечать каждый параметр флагом PARAM_FLAG_CONST
, так как для запроса всегда используется одноразовый план.
Если options->dest
не равен NULL, то результаты кортежей передаются этому объекту по мере их генерации исполнителем, а не накапливаются в SPI_tuptable
. Использование предоставленного вызывающим объекта DestReceiver
особенно полезно для запросов, которые могут генерировать много кортежей, так как данные могут обрабатываться непосредственно во время выполнения, а не накапливаться в памяти.
Аргументы
const char *
command
строка команды
const SPIExecuteOptions *
options
структура, содержащая необязательные аргументы
Всегда обнуляйте всю структуру options
перед заполнением нужных полей. Это гарантирует совместимость кода в будущем, так как любые добавленные поля в структуру будут заданы таким образом, чтобы сохранять обратную совместимость, если они равны нулю. В настоящее время доступны следующие поля options
:
ParamListInfo
params
структура данных, содержащая типы и значения параметров запроса; NULL, если нет
bool
read_only
true
для выполнения только для чтенияbool
allow_nonatomic
true
позволяет неатомарное выполнение операторов CALL и DO (но это поле игнорируется, если только флагSPI_OPT_NONATOMIC
не был передан вSPI_connect_ext
)bool
must_return_tuples
если
true
, вызвать ошибку, если запрос не является запросом, который возвращает кортежи (это не запрещает случай, когда он случайно возвращает ноль кортежей)uint64
tcount
максимальное количество строк для возврата, или
0
для отсутствия ограниченийDestReceiver *
dest
DestReceiver
объект, который будет получать все кортежи, выделяемые запросом; если NULL, то результаты кортежей накапливаются в структуреSPI_tuptable
, как в функцииSPI_execute
ResourceOwner
owner
Это поле присутствует для согласованности с
SPI_execute_plan_extended
, но оно игнорируется, поскольку план, используемыйSPI_execute_extended
, никогда не сохраняется.
Возвращаемое значение
Возвращаемое значение такое же, как и для SPI_execute
.
Когда options->dest
равно NULL,
SPI_processed
и
SPI_tuptable
устанавливаются так же, как и в
SPI_execute
.
Когда options->dest
не равно NULL,
SPI_processed
устанавливается в ноль, а
SPI_tuptable
устанавливается в NULL. Если требуется подсчет кортежей,
объект DestReceiver
вызывающего должен его вычислить.