IMessageMetadata
Interface MessageMetadata
— analogue partiel de XSQLDA
(ne contient pas de données de message, mais uniquement des informations sur le format du message).Utilisé dans les appels liés à l’exécution d’instructions SQL.
-
getCount
unsigned getCount(StatusType* status)
Renvoie le nombre de champs/paramètres dans le message. Dans tous les appels qui contiennent un paramètre index, cette valeur doit être :
0 >= index < getCount()
. -
getField
const char* getField(StatusType* status, unsigned index)
Renvoie le nom du champ.
-
getRelation
const char* getRelation(StatusType* status, unsigned index)
Renvoie le nom de la relation (à partir de laquelle le champ a été sélectionné).
-
getOwner
const char* getOwner(StatusType* status, unsigned index)
Renvoie le nom du propriétaire de la relation.
-
getAlias
const char* getAlias(StatusType* status, unsigned index)
Renvoie un alias de champ.
-
getType
unsigned getType(StatusType* status, unsigned index)
Renvoie le type SQL du champ.
-
isNullable
FB_BOOLEAN isNullable(StatusType* status, unsigned index)
Renvoie
true
si le champ peut être défini surNULL
. -
getSubType
int getSubType(StatusType* status, unsigned index)
Renvoie un sous-type du champ BLOB (0 pour le binaire, 1 pour le texte, etc.).
-
getLength
unsigned getLength(StatusType* status, unsigned index)
Renvoie la longueur maximale du champ.
-
getScale
int getScale(StatusType* status, unsigned index)
Renvoie l’échelle du champ numérique.
-
getCharSet
unsigned getCharSet(StatusType* status, unsigned index)
Renvoie un jeu de caractères pour les champs de caractères et un objet blob de texte.
-
getOffset
unsigned getOffset(StatusType* status, unsigned index)
Renvoie le décalage des données de champ dans la mémoire tampon de message (utilisez-la pour accéder aux données de la mémoire tampon du message).
-
getNullOffset
unsigned getNullOffset(StatusType* status, unsigned index)
Renvoie le décalage NULL de l’indicateur pour le champ dans le tampon de message.
-
getBuilder
IMetadataBuilder* getBuilder(StatusType* status)
Renvoie le lien d’interface :#fbapi-interfaces-imetadatabuilder[
IMetadataBuilder
] initialisé avec les métadonnées de ce message. -
getMessageLength
unsigned getMessageLength(StatusType* status)
Renvoie la longueur de la mémoire tampon du message (utilisez-la pour allouer de la mémoire pour le tampon).
-
getAlignment
unsigned getAlignment(StatusType* status)
Renvoie l’alignement en octets.
-
getAlignedLength
unsigned getAlignedLength(StatusType* status)
Renvoie la taille de la structure de métadonnées après l’alignement.
Un exemple de mise en cache des messages avec IMessageMetadata
en Pascal:
type
FBRecord = Record
fFieldName : AnsiString;
fRelation : AnsiString;
fOwner : AnsiString;
fAliasName : AnsiString;
fTypeField : Cardinal;
fisNullable: Boolean;
fSubType : Integer;
fLengthByte: Cardinal;
fScale : Integer;
fCharSet : Cardinal;
fOffset : Cardinal;
fNullOffset: Cardinal;
end;
var
_outFBRecord : Array of FBRecord;
ty_count_in : cardinal;
master : IMaster ;
util : IUtil;
st : IStatus;
dpb : IXpbBuilder;
att : IAttachment;
tra : ITransaction;
stmt : IStatement;
outMetadata : IMessageMetadata;
begin
master := master_interface;
util := master.getUtilInterface;
st := master.getStatus;
dpb := util.getXpbBuilder(st, IXpbBuilder.DPB, nil, 0);
dpb.insertString(st,isc_dpb_set_db_charset,PAnsiChar('NONE'));
dpb.insertInt(st,isc_dpb_set_db_sql_dialect,3);
dpb.insertString(st, isc_dpb_user_name, PAnsiChar('SYSDBA'));
dpb.insertString(st, isc_dpb_password, PAnsiChar('masterkey'));
att := prov.attachDatabase(st,PAnsiChar('11.5.0.145/4050:/ssd3/FB5/asciidoc.fb5'), dpb.getBufferLength(st), dpb.getBuffer(st));
tra := att.startTransaction(st, 0, nil);
stmt := att.prepare(st, tra, 0, PAnsiChar(' select * from doc order by id optimize for fist rows ;'), 3, IStatement.PREPARE_PREFETCH_METADATA);
outMetadata := stmt.getOutputMetadata(st);
ty_count_in := outMetadata.getCount(st);
setlength(_outFBRecord, ty_count_in);
for i:=0 to ty_count_in-1 do
begin
_outFBRecord[i].fFieldName := outMetadata.getField(st,i);
_outFBRecord[i].fRelation := outMetadata.getRelation(st,i);
_outFBRecord[i].fOwner := outMetadata.getOwner(st,i);
_outFBRecord[i].fAliasName := outMetadata.getAlias(st,i);
_outFBRecord[i].fTypeField := outMetadata.getType(st,i);
_outFBRecord[i].fisNullable := outMetadata.isNullable(st,i);
_outFBRecord[i].fSubType := outMetadata.getSubType(st,i);
_outFBRecord[i].fLengthByte := outMetadata.getLength(st,i);
_outFBRecord[i].fScale := outMetadata.getScale(st,i);
_outFBRecord[i].fCharSet := outMetadata.getCharSet(st,i);
_outFBRecord[i].fOffset := outMetadata.getOffset(st,i);
_outFBRecord[i].fNullOffset := outMetadata.getNullOffset(st,i);
end;
....
end;