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).