×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

4.1.8. Интерфейс Fast-Path

Digital Q.DataBase предоставляет интерфейс быстрого пути для отправки серверу простых вызовов функций.

Подсказка

Данный интерфейс является в некоторой степени устаревшим, так как аналогичной производительности и большей функциональности можно достичь путем создания подготовленного оператора для определения вызова функции. В этом случае выполнение оператора с бинарной передачей параметров и результатов заменяет собой вызов функции через интерфейс fast-path.

Функция PQfn запрашивает выполнение функции сервера через интерфейс fast-path:

PGresult *PQfn(PGconn *conn,
               int fnid,
               int *result_buf,
               int *result_len,
               int result_is_int,
               const PQArgBlock *args,
               int nargs);

typedef struct
{
    int len;
    int isint;
    union
    {
        int *ptr;
        int integer;
    } u;
} PQArgBlock;

Функция fnid — это параметр, содержащий тип Oid функции, которую необходимо выполнить. args и nargs определяют параметры, передаваемые функции; они должны соответствовать объявленному списку аргументов функции. Если isint поле структуры параметра имеет значение true, то u.integer значение отправляется на сервер как целое число указанной длины (длина должна составлять 2 или 4 байта); при этом выполняется соответствующий порядок перестановки байтов. Если параметр isint имеет значение false, то указанное количество байтов по адресу *u.ptr отправляются без предварительной обработки; данные должны быть представлены в формате, ожидаемом сервером для двоичной передачи соответствующего типа данных аргумента функции. (Объявление u.ptr как имеющего тип int * сохранено для обратной совместимости; было бы правильнее рассматривать его как void *.) result_buf указывает на буфер, в который следует поместить возвращаемое значение функции. Вызывающая сторона должна заранее выделить объем памяти, достаточный для хранения возвращаемого значения. (Проверка не выполняется!) Фактическая длина результата в байтах будет возвращена в виде целого числа, на которое указывает параметр result_len. Если ожидается 2- или 4-байтовый целочисленный результат, установите параметр result_is_int равным 1, в противном случае установите его равным 0. Установка result_is_int в значение 1 заставляет функцию libpq при необходимости выполнить перестановку байтов в значении для его корректного представления в int формате клиентской машины; следует отметить, что 4-байтовое целое число передается в *result_buf для любого из допустимых размеров результата. В случае, когда параметр result_is_int равен 0, передаваемая сервером байтовая строка в бинарном формате возвращается без изменений. (В данном случае целесообразно рассматривать result_buf как имеющего тип void *.)

PQfn всегда возвращает корректный указатель PGresult указатель со статусом PGRES_COMMAND_OK в случае успешного выполнения или PGRES_FATAL_ERROR при возникновении какой-либо ошибки. Перед использованием полученного результата необходимо проверить его статус. Вызывающая сторона несет ответственность за освобождение PGresult с помощью PQclear когда она больше не требуется.

Чтобы передать функции аргумент, имеющий значение NULL, установите поле len в структуре этого параметра равным -1; при этом поля isint и u значения не имеют.

Если функция возвращает значение NULL, *result_len устанавливается в -1, и *result_buf не изменяется.

Обратите внимание, что данный интерфейс не позволяет обрабатывать результаты в виде набора строк. Кроме того, используемая функция должна быть обычной функцией, а не агрегатной, оконной функцией или процедурой.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению