SPI_cursor_parse_open
SPI_cursor_parse_open — открывает курсор для строки запроса и набора параметров
Синтаксис
Portal SPI_cursor_parse_open(const char *name
, const char *command
, const SPIParseOpenOptions *options
)
Описание
SPI_cursor_parse_open
открывает курсор (внутри называемый порталом) для выполнения заданного запроса. Эта функция действует подобно функции SPI_prepare_cursor
с последующей SPI_cursor_open_with_paramlist
, за исключением того, что ей для обработки всех ссылок на параметры в строке запроса передаётся объект ParamListInfo
.
Для разового выполнения запроса эту функцию следует предпочесть SPI_prepare_cursor
с последующей SPI_cursor_open_with_paramlist
. Если же одна и та же команда должна выполняться с самыми разными параметрами, какой вариант окажется быстрее, будет зависеть от стоимости повторного планирования и выигрыша от выбора специализированных планов.
Как правило, в объекте options->params
все параметры должны иметь пометку PARAM_FLAG_CONST
, поскольку для запроса всегда используется одноразовый план.
Переданные значения параметров копируются в портал курсора, так что их можно освободить и во время существования курсора.
Аргументы
const char *
name
имя портала, либо
NULL
, чтобы имя выбрала системаconst char *
command
строка команды
const SPIParseOpenOptions *
options
структура, содержащая необязательные аргументы
Структуру options
всегда следует сначала полностью заполнять нулями, а затем уже задавать необходимые значения. Это гарантирует совместимость с будущими изменениями в коде: при добавлении в эту структуру любых новых полей нулевое значение будет определять старое поведение. Сейчас в options
есть такие поля:
ParamListInfo
params
структура данных, содержащая типы и значения параметров запроса; NULL, если их нет
int
cursorOptions
битовая маска параметров курсора; 0 выбирает поведение по умолчанию
bool
read_only
true
для режима выполнения «только чтение»
Возвращаемое значение
Указатель на портал, содержащий курсор. Заметьте, что соглашение о возврате ошибок отсутствует; все ошибки выдаются через elog
.