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целочисленная битовая маска параметров курсора; ноль обеспечивает поведение по умолчанию
bool read_onlytrue для выполнения в режиме «только чтение»
Указатель на портал, содержащий курсор. Обратите внимание, что стандартное соглашение о возврате
ошибок отсутствует; о любой ошибке будет сообщено через elog.