Firebird a eu la possibilité d’étendre les fonctionnalités du langage PSQL en écrivant des fonctions externes - UDF (User Defined Functions). Les UDF peuvent être compilées dans presque tous les langages compilable.
Firebird 3.0 a introduit une architecture de plugins pour étendre les fonctionnalités de Firebird. L’un de ces plugins est External Engine (moteurs externes). Le mécanisme UDR (User Defined Routines - sous-programme définies par l’utilisateur) ajoute une couche au-dessus de l’interface du moteur de firebird external. Les UDR présentent les avantages suivants par rapport aux UDF :
vous pouvez écrire non seulement des fonctions qui renvoient un résultat scalaire, mais aussi des procédures stockées (exécutables et sélectives), ainsi que des déclencheurs ;
amélioration du contrôle des paramètres d’entrée et de sortie. Dans un certain nombre de cas (passage par descripteur), les types et autres propriétés des paramètres d’entrée n’étaient pas contrôlés du tout, mais il était possible d’obtenir ces propriétés à l’intérieur de l’UDF. Les UDR fournissent une manière plus uniforme de déclarer les paramètres d’entrée et de sortie, comme c’est le cas avec les fonctions et procédures PSQL normales ;
le contexte de la connexion ou de la transaction en cours est disponible dans l’UDR, ce qui vous permet d’effectuer certaines manipulations sur la base de données en cours dans ce contexte ;
les procédures et fonctions externes (UDR) peuvent être regroupées dans des paquets PSQL ;
Les UDR peuvent être écrits dans n’importe quel langage de programmation (en option compilés dans des codes objets). Pour ce faire, il faut disposer d’un module externe approprié. Par exemple, il existe des plugins pour l’écriture de modules externes en Java ou dans l’un des langages .NET.
Dans ce guide, nous décrirons comment déclarer les UDR, leurs mécanismes internes, leurs capacités, et nous donnerons des exemples d’écriture d’UDR en Pascal.En outre, certains aspects de l’utilisation de la nouvelle API orientée objet seront abordés.
Plus loin dans les différents chapitres de ce manuel, lorsque nous utiliserons les termes procédure externe, fonction ou déclencheur, nous parlerons uniquement d’UDR et non plus d’UDF.
Note
|
Tous nos exemples fonctionnent avec Delphi 2009 et les versions antérieures, ainsi qu’avec Free Pascal / Code Typhon. Tous les exemples peuvent être compilés à la fois en Delphi et en Free Pascal / Code Typhon, sauf indication contraire. |
Pour écrire des procédures externes, des fonctions ou des déclencheurs dans des langages de programmation compilés, il faut connaître la nouvelle API orientée objet de Firebird. Ce manuel ne contient pas de description complète de l’API OO Firebird
. Vous pouvez le trouver dans le catalogue de documentation distribué avec Firebird doc/Using_OO_API.html
(document en anglais). Pour les utilisateurs russophones, une traduction de ce document est disponible à l’adresse suivante https://github.com/sim1984/fbooapi.
Les fichiers inclus pour divers langages de programmation qui contiennent des API ne sont pas distribués dans le cadre de la distribution de Firebird pour Windows, mais vous pouvez les extraire des fichiers compressés distribués pour Linux (chemin dans l’archive /opt/firebird/include/firebird/Firebird.pas
).
CLOOP - Programmation orientée objet inter-langues. Cet outil n’est pas fourni avec Firebird. Il se trouve dans le code source sur le github de FirebirdSql.Une fois l’outil construit, vous pouvez générer une API pour votre langage de programmation (IdlFbInterfaces.h
ou Firebird.pas
) basée sur le fichier de description de l’interface include/firebird/FirebirdInterface.idl
.
Pour Object Pascal, cela se fait avec la commande suivante :
cloop FirebirdInterface.idl pascal Firebird.pas Firebird --uses SysUtils \
--interfaceFile Pascal.interface.pas \
--implementationFile Pascal.implementation.pas \
--exceptionClass FbException --prefix I \
--functionsFile fb_get_master_interface.pas
Les fichiers Pascal.interface.pas
, Pascal.implementation.pas
et fb_get_master_interface.pas
se trouvent à l’adresse suivante https://github.com/FirebirdSQL/firebird/tree/master/src/misc/pascal.
Note
|
Dans ce cas, pour les interfaces API Firebird, le préfixe I sera ajouté, comme il est accepté en Object Pascal. |