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

30.11. Traiter les programmes comportant du 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é, qui 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 récupèrent l'information provenant des arguments, exécutent la commande SQL en utilisant l'interface libpq et placent le résultat dans les arguments spécifiés pour la sortie.

Le préprocesseur est appelé ecpg et est inclus dans une installation standard de PostgreSQL™. Les programmes SQL embarqués 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éera 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 spécifier 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™, donc si PostgreSQL™ a été installé à un emplacement qui n'est pas parcouru par défaut, il faudra ajouter une option comme -I/usr/local/pgsql/include sur la ligne de commande de la compilation.

Pour lier un programme SQL embarqué, il faudra inclure la bibliothèque libecpg de cette façon :

cc -o monprog prog1.o prog2.o ... -lecpg

Là encore, il pourrait ê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é par l'utilisation de make, il pourrait être plus agréable 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 pourrait s'avérer nécessaire de préciser d'autres options de threading sur la ligne de commande pour compiler le code client).