IBatch
L’interface IBatch
vous permet de traiter plusieurs ensembles de paramètres dans une seule instruction.
-
add
void add(StatusType* status, unsigned count, const void* inBuffer)
Ajoute le nombre de messages de
inBuffer
au lot. La taille totale des messages pouvant être ajoutés à un lot est limitée par le paramètre « TAG_BUFFER_BYTES_SIZE » lors de la création du lot. -
addBlob
void addBlob(StatusType* status, unsigned length, const void* inBuffer, ISC_QUAD* blobId, unsigned bpbLength, const unsigned char* bpb)
Ajoute un octet
length
deinBuffer
au paquet, le BLOB est situé àblobId
.Si le blob doit être créé avec des paramètres autres que la valeur par défaut, BPB peut être passé (le format est le même que celui utilisé dansAttachment::createBlob
).La taille totale des objets blob intégrés qui peuvent être ajoutés à un package (y compris les BPB facultatifs, les en-têtes BLOB, la taille du segment avec alignement) est limitée par le paramètreTAG_BUFFER_BYTES_SIZE
lors de la création du package (affecte toutes les méthodes orientées BLOB à l’exception deregisterBlob()
). -
appendBlobData
void appendBlobData(StatusType* status, unsigned length, const void* inBuffer)
Étend le dernier BLOB ajouté en ajoutant des octets de la longueur
length
prise à partir de l’adresseinBuffer
. -
addBlobStream
addBlobStream(StatusType* status, unsigned length, const void* inBuffer)
Ajoute des données BLOB (il peut s’agir de plusieurs objets ou d’une partie d’un seul BLOB) à un lot. L’en-tête de chaque BLOB du flux est aligné sur la limite
getBlobAlignment()
et contient 3 champs : le premier est le BLOB de 8 octets (au formatISC_QUAD
), le second est la longueur de 4 octets du BLOB et le troisième est la longueur de 4 octets du BPB. L’en-tête d’objet blob ne doit pas franchir les limites de la mémoire tampon dans cet appel de fonction. Les données BPB sont placées immédiatement après l’en-tête, suivies des données d’objet blob.La longueur de l’objet blob inclut le BPB (le cas échéant). Toutes les données peuvent être distribuées sur plusieurs appels àaddBlobStream()
. Les données d’objets blob, à leur tour, peuvent être structurées dans le cas d’un objet blob partitionné, voir le chapitreModification des données par lots
. -
registerBlob
void registerBlob(StatusType* status, const ISC_QUAD* existingBlob, ISC_QUAD* blobId)
Permet d’utiliser des BLOB ajoutés à l’aide de l’interface standard
IBlob
dans le package. Cette fonction contient 2 paramètresISC_QUAD*
, il est important de ne pas les confondre – le deuxième paramètre (existingBlob
) est un pointeur vers le BLOB déjà ajouté en dehors de la portée du package, le troisième (blobId
) pointe vers le BLOB qui sera placé dans le message de ce package`. -
execute
IBatchCompletionState* execute(StatusType* status, ITransaction* transaction)
Exécute le paquet avec les paramètres qui lui sont transmis dans les messages. Si le paramètre
MULTIERROR
n’est pas défini dans le bloc de paramètres lors de la création d’un lot, l’exécution du lot sera arrêtée après la première erreur, un nombre illimité d’erreurs peut se produire en modeMULTIERROR
, après une erreur l’exécution se poursuit avec le message suivant. Cette fonction renvoie l’interfaceIBatchCompletionState
, qui contient toutes les informations demandées sur les résultats de l’exécution du lot. -
cancel
void cancel(StatusType* status)
Efface les tampons de message et les objets BLOB, en rétablissant le paquet dans l’état dans lequel il se trouvait lors de sa création.Notez que l’interface de comptage de références
IBatch
ne contient pas de fonction spéciale pour la fermer, utilisezrelease()
pour le faire. -
getBlobAlignment
unsigned getBlobAlignment(StatusType* status)
Renvoie l’alignement requis pour les données mises en mémoire tampon par la fonction
addBlobStream()
. -
getMetadata
IMessageMetadata* getMetadata(StatusType* status)
Renvoie le format des métadonnées utilisées dans les messages batch.
-
setDefaultBpb
void setDefaultBpb(StatusType* status, unsigned parLength, const unsigned char* par)
Spécifie le BPB qui sera utilisé pour tous les objets blob qui n’ont pas de BPB par défaut.Doit être appelé avant qu’un message ou un objet blob ne soit ajouté à un lot.
-
getInfo
void getInfo(StatusType* status, unsigned itemsLength, const unsigned char* items, unsigned bufferLength, unsigned char* buffer)
Demande des informations sur le package.
Balise pour le bloc de paramètres :
-
VERSION1
Balises pour les clusters dans le bloc de paramètres :
-
TAG_MULTIERROR
(0/1) – Peut avoir plus d’un message d’erreur. -
TAG_RECORD_COUNTS
(0/1) - Enregistrement des enregistrements de messages modifiés ; -
TAG_BUFFER_BYTES_SIZE
(integer) - Taille maximale possible de la mémoire tampon sur le serveur Firebird (16 Mo par défaut, 256 Mo maximum) ; -
TAG_BLOB_POLICY
- La stratégie utilisée pour stocker les objets blob -
TAG_DETAILED_ERRORS
(integer) - Nombre de vecteurs contenant des informations d’erreur détaillées sont stockés dans l’état d’achèvement (64 Mo par défaut, 256 Mo au maximum).
Stratégies utilisées pour stocker les objets BLOB :
-
BLOB_NONE
– vous ne pouvez pas utiliser de blobs intégrés (registerBlob()
fonctionne de toute façon) ; -
BLOB_ID_ENGINE
- Les BLOBs sont ajoutés un par un, les blobs sont générés par le moteur Firebird ; -
BLOB_ID_USER
- Les BLOB sont ajoutés un par un, les BLOBs sont générés par l’utilisateur ; -
BLOB_STREAM
- Les objets blob sont ajoutés au flux.
Éléments autorisés dans l’appel getInfo()
:
-
INF_BUFFER_BYTES_SIZE
– Taille maximale possible de la mémoire tampon (définie dansTAG_BUFFER_BYTES_SIZE
) ; -
INF_DATA_BYTES_SIZE
- La taille des messages qui ont déjà été ajoutés ; -
INF_BLOBS_BYTES_SIZE
- Taille des objets blob qui ont déjà été ajoutés ; -
INF_BLOB_ALIGNMENT
- l’alignement requis pour les données BLOB (dupliquegetBlobAlignment
).