31.13. Traiter les programmes en SQL embarqué
Après avoir vu comment former des programmes C incluant du SQL
embarqué, il est tout aussi intéressant de savoir comment les
compiler. Avant d'être compilé, le fichier est passé au travers du
préprocesseur C pour le
SQL embarqué. Ce préprocesseur,
appelé aussi précompilateur, convertit les instructions
SQL utilisées en appels de
fonctions spéciales. Après compilation, le programme doit être lié
avec une bibliothèque spéciale contenant les fonctions nécessaires.
Ces fonctions traitent l'information issues des arguments, exécutent
la commande SQL via l'interface
libpq et placent le résultat dans
les arguments indiqués pour la sortie.
Le préprocesseur, appelé ecpg, est inclus
dans toute installation standard de PostgreSQL™. Les programmes en SQL
embarqué sont nommés typiquement avec une extension .pgc. Un fichier programme nommé prog1.pgc peut être passé au préprocesseur par la
simple commande
ecpg prog1.pgc
Ceci crée un fichier nommé prog1.c. Si les
fichiers en entrée ne suivent pas le modèle de nommage suggéré, il
est possible de nommer explicitement le fichier de sortie en
utilisant l'option -o.
Le fichier traité par le préprocesseur peut être compilé normalement.
Par exemple :
cc -c prog1.c
Les fichiers sources en C engendrés incluent les fichiers d'en-tête
provenant de l'installation de PostgreSQL™. De ce fait, si PostgreSQL™ a été installé à un
emplacement qui n'est pas parcouru par défaut, il faut ajouter une
option comme -I/usr/local/pgsql/include sur
la ligne de commande de la compilation.
Pour lier un programme SQL embarqué, il faut inclure la bibliothèque
libecpg de cette façon :
cc -o monprog prog1.o prog2.o ... -lecpg
Là encore, il peut être nécessaire d'ajouter une option comme
-L/usr/local/pgsql/lib sur la ligne de
commande.
Si le processus de construction d'un grand projet est géré avec
make, il peut être plus pratique
d'inclure la règle implicite suivante dans les fichiers makefile :
ECPG = ecpg
%.c: %.pgc
$(ECPG) $<
La syntaxe complète de la commande
ecpg
est détaillée dans
ecpg
(1).
La bibliothèque ecpg est compatible
avec les threads si elle a été compilée en utilisant l'option en
ligne de commande --enable-thread-safety de
configure. (Il peut s'avérer nécessaire de
préciser d'autres options de threading sur la ligne de commande pour
compiler le code client.)