FirebirdSQL logo

IMaster

IMaster — L’interface principale à partir de laquelle toutes les opérations avec l’API Firebird commencent.

  1. getStatus

    IStatus* getStatus()

    Renvoie une instance de l’interface IStatus.

  2. getDispatcher

    IProvider* getDispatcher()

    Renvoie une instance de l’interface IProvider implémentée par YValve (l’instance principale du fournisseur).

  3. getPluginManager

    IPluginManager* getPluginManager()

    Renvoie une instance de l’interface IPluginManager.

  4. getTimerControl

    ITimerControl* getTimerControl()

    Renvoie une instance d’une interface ITimerControl.

  5. getDtc

    IDtc* getDtc()

    Renvoie une instance d’une interface IDtc.

  6. getUtilInterface

    IUtil* getUtilInterface()

    Renvoie une instance d’une interface IUtil.

  7. getConfigManager

    IConfigManager* getConfigManager()

    Renvoie une instance d’une interface IConfigManager.

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.

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

  2. getField

    const char* getField(StatusType* status, unsigned index)

    Renvoie le nom du champ.

  3. getRelation

    const char* getRelation(StatusType* status, unsigned index)

    Renvoie le nom de la relation (à partir de laquelle le champ a été sélectionné).

  4. getOwner

    const char* getOwner(StatusType* status, unsigned index)

    Renvoie le nom du propriétaire de la relation.

  5. getAlias

    const char* getAlias(StatusType* status, unsigned index)

    Renvoie un alias de champ.

  6. getType

    unsigned getType(StatusType* status, unsigned index)

    Renvoie le type SQL du champ.

  7. isNullable

    FB_BOOLEAN isNullable(StatusType* status, unsigned index)

    Renvoie true si le champ peut être défini sur NULL.

  8. getSubType

    int getSubType(StatusType* status, unsigned index)

    Renvoie un sous-type du champ BLOB (0 pour le binaire, 1 pour le texte, etc.).

  9. getLength

    unsigned getLength(StatusType* status, unsigned index)

    Renvoie la longueur maximale du champ.

  10. getScale

    int getScale(StatusType* status, unsigned index)

    Renvoie l’échelle du champ numérique.

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

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

  13. getNullOffset

    unsigned getNullOffset(StatusType* status, unsigned index)

    Renvoie le décalage NULL de l’indicateur pour le champ dans le tampon de message.

  14. getBuilder

    IMetadataBuilder* getBuilder(StatusType* status)

    Renvoie le lien d’interface :#fbapi-interfaces-imetadatabuilder[IMetadataBuilder] initialisé avec les métadonnées de ce message.

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

  16. getAlignment

    unsigned getAlignment(StatusType* status)

    Renvoie l’alignement en octets.

  17. 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;