IBatch
Интерфейс IBatch
— позволяет обрабатывать несколько наборов параметров при выполнении одного оператора.
-
add
void add(StatusType* status, unsigned count, const void* inBuffer)
Добавляет количество сообщений из
inBuffer
в пакет. Общий размер сообщений, которые можно добавить в пакет,ограничен параметромTAG_BUFFER_BYTES_SIZE
при создании пакета. -
addBlob
void addBlob(StatusType* status, unsigned length, const void* inBuffer, ISC_QUAD* blobId, unsigned bpbLength, const unsigned char* bpb)
Добавляет в пакет один BLOB длиной
length
байт изinBuffer
, идентификатор BLOB находится по адресуblobId
.Если большой двоичный объект должен быть создан с параметрами, отличными от параметров по умолчанию, то может бытьпередан BPB (формат соответствует формату, используемому вAttachment::createBlob
).Общий размер встроенных больших двоичных объектов, которые можно добавить в пакет (включая необязательные BPB,заголовки BLOB, размер сегментов с учётом выравнивания) ограничен параметромTAG_BUFFER_BYTES_SIZE
при создании пакета(влияет на все методы, ориентированные на BLOB, кромеregisterBlob()
). -
appendBlobData
void appendBlobData(StatusType* status, unsigned length, const void* inBuffer)
Расширяет последний добавленный BLOB: добавляет к нему байты длинной
length
, взятые по адресуinBuffer
. -
addBlobStream
addBlobStream(StatusType* status, unsigned length, const void* inBuffer)
Добавляет данные BLOB (это может быть несколько объектов или часть одного BLOB) в пакет. Заголовок каждого BLOB в потокевыравнивается по границе
getBlobAlignment()
и содержит 3 поля: первое - 8-байтовый идентификатор BLOB (в форматеISC_QUAD
),второе - 4-байтная длина BLOB, третье - 4-байтная длина BPB. Заголовок большого двоичного объекта не должен пересекатьграницы буфера в этом вызове функции. Данные BPB помещаются сразу после заголовка, затем идут данные BLOB-объектов.Длина большого двоичного объекта включает BPB (если он присутствует). Все данные могут быть распределены междунесколькими вызовамиaddBlobStream()
. Данные BLOB-объекта, в свою очередь, могут быть структурированы в случаесегментированного BLOB-объекта, см. главу "Пакетное изменение данных". -
registerBlob
void registerBlob(StatusType* status, const ISC_QUAD* existingBlob, ISC_QUAD* blobId)
Позволяет использовать в пакете BLOB, добавленные с помощью стандартного интерфейса
IBlob
. Эта функция содержит 2параметраISC_QUAD*
, важно их не смешивать – второй параметр (existingBlob
) является указателем на идентификатор BLOB,уже добавленный вне области действия пакета, третий (blobId
) указывает на идентификатор BLOB, который будет помещен в сообщение в этом пакете'. -
execute
IBatchCompletionState* execute(StatusType* status, ITransaction* transaction)
Выполняет пакет с параметрами, переданными ему в сообщениях. Если параметр
MULTIERROR
не установлен в блоке параметровпри создании пакета, выполнение пакета будет остановлено после первой ошибки, в режимеMULTIERROR
может произойтинеограниченное количество ошибок, после ошибки выполнение продолжается со следующего сообщения. Эта функция возвращаетинтерфейсIBatchCompletionState
, который содержит всю запрошеннуюинформацию о результатах выполнения пакета. -
cancel
void cancel(StatusType* status)
Очищает буферы сообщений и BLOB, возвращая пакет в состояние, в котором он находился сразу после создания.Обратите внимание: интерфейс
IBatch
с подсчетом ссылок не содержит какой-либо специальной функции для его закрытия,для этого используйтеrelease()
. -
getBlobAlignment
unsigned getBlobAlignment(StatusType* status)
Возвращает необходимое выравнивание для данных, помещаемых в буфер функцией
addBlobStream()
. -
getMetadata
IMessageMetadata* getMetadata(StatusType* status)
Возвращает формат метаданных, используемых в пакетных сообщениях.
-
setDefaultBpb
void setDefaultBpb(StatusType* status, unsigned parLength, const unsigned char* par)
Задает BPB, который будет использоваться для всех BLOB-объектов, в которых отсутствует BPB не по умолчанию.Должен вызываться перед добавлением любого сообщения или BLOB в пакет.
-
getInfo
void getInfo(StatusType* status, unsigned itemsLength, const unsigned char* items, unsigned bufferLength, unsigned char* buffer)
Запрашивает информацию о пакете.
Тег для блока параметров:
-
VERSION1
Теги для скоплений в блоке параметров:
-
TAG_MULTIERROR
(0/1) – может иметь более одного сообщения с ошибками; -
TAG_RECORD_COUNTS
(0/1) - учет измененных записей по сообщениям; -
TAG_BUFFER_BYTES_SIZE
(integer) - максимально возможный размер буфера на сервере (по умолчанию 16Мб, максимум 256Мб); -
TAG_BLOB_POLICY
- политика, используемая для хранения BLOB-объектов; -
TAG_DETAILED_ERRORS
(integer) - сколько векторов с подробной информацией об ошибках хранится в состоянии завершения (по умолчанию 64, максимум 256).
Политики, используемые для хранения BLOB:
-
BLOB_NONE
– нельзя использовать встроенные BLOB-объекты (registerBlob()
работает в любом случае); -
BLOB_ID_ENGINE
- BLOB добавляются один за другим, BLOB-идентификаторы генерируются движком firebird; -
BLOB_ID_USER
- BLOB добавляются один за другим, BLOB-идентификаторы генерируются пользователем; -
BLOB_STREAM
- BLOB-объекты добавляются в поток.
Элементы, допустимые в вызове getInfo()
:
-
INF_BUFFER_BYTES_SIZE
– фактический максимально возможный размер буфера (устанавливается черезTAG_BUFFER_BYTES_SIZE
); -
INF_DATA_BYTES_SIZE
- размер уже добавленных сообщений; -
INF_BLOBS_BYTES_SIZE
- размер уже добавленных BLOB; -
INF_BLOB_ALIGNMENT
- требуемое выравнивание для данных BLOB (дублируетgetBlobAlignment
).