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