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.