Transact
Transact_Compound
(SWI &4FC0C)
Ce SWI, qui apparait avec la release v0.2.1 du moteur Transact permet à une application cliente de regrouper plusieurs requêtes (INSERT
, DELETE
ou UPDATE
) en un seul appel client.
En entrée
- R0 = ID externe de session tel que retourné par
Transact_CreateSession
;
- R1 = ID externe de fichier (
NULL
ou pointeur sur nom de fichier);
- R2 = Pointeur sur un tableau de cellules.
Une cellule comprend 11 mots (longs):
Le premier mot de chaque cellule désigne la nature de l'opération à soumettre au moteur:
Code opération |
Opération |
2 |
DELETE |
3 |
INSERT |
4 |
UPDATE |
-1 |
Marque la fin du tableau de cellules |
Les dix mots qui suivent (r0-r9) contiennent les valeurs de registres R0-R9 qui définissent les services assurés par chaque SWI.
Le rôle usuel du registre r0 est de contenir le numéro de session, qui est déjà connu dans notre contexte; ainsi l'application n'a pas à peupler une valeur significative à cet endroit;
L'application a juste à peupler les slots que le SWI individuel nécessite.
En sortie
- Tous les registres sont conservés.
- Au cas où une erreur surviendrait, l'application peut déterminer quelle cellule a été la source en examinant le slot r0 de chaque cellule à pertir du début du tableau de cellules et en s'arrêtant dès que le slot r0 est <> 0.
Erreurs possibles
- &812B00 Busy (non encore impémenté dans cette release)
- &812B01 Unknown session
- + Tout code d'erreur qu'un appel à un SWI Transact_Insert, Transact_Delete ou Transact_Update peut retourner.
Note additionnelle
Un point important dans le SWI Transact_Compound
est qu'il implémente la fonctionalité de rollback partiel; ainsi, si une erreur devait survenir durant le traitement de l'une des requêtes précisées dans le tableau, le moteur ramène la transaction active dans l'état où elle était avant de traiter la première cellule (c.a.d. que les écritures pendantes soumises depuis le début de la transaction avant l'appel au SWI sont gardées).