PostgreSQLLa base de données la plus sophistiquée au monde.

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