33.10. Traiter des Programmes en SQL Embarqué

Maintenant que vous avez une idée de comment rédiger des programmes SQL embarqué en C, vous voudrez probablement savoir comment les compiler. Avant de les compiler, vous passez le fichier dans le préprocesseur C SQL embarqué, qui convertira les ordres SQL que vous avez utilisé vers des appels de fonction spéciaux. Ces fonctions récupèrent des données à partir de leurs arguments, effectuent les commands SQL en utilisant l'interface libpq, et met le résultat dans les arguments spécifiés comme sortie.

Le programme préprocesseur est appelé ecpg et fait partie d'une installation normale de PostgreSQL™. Les programmes SQL embarqués sont typiquement nommés avec une extension .pgc. Si vous avez un fichier de programme appelé prog1.pgc, vous pouvez le préprocesser en appelant simplement:

ecpg prog1.pgc
   

Cela créera un fichier appelé prog1.c. Si vos fichiers d'entrée ne suivent pas les règles de nommage suggérées, vous pouvez spécifier le fichier de sortie explicitement en utilisant l'option -o.

Le fichier préprocessé peut être compilé normalement, par exemple:

cc -c prog1.c
   

Les fichiers sources C générés incluent les fichiers d'entête de l'installation PostgreSQL™, donc si vous avez installé PostgreSQL™ à un endroit qui n'est pas recherché par défaut, vous devrez ajouter une option comme -I/usr/local/pgsql/include à la ligne de commande de compilation.

Pour lier un programme SQL embarqué, vous aurez besoin d'inclure la librairie libecpg, comme ceci:

cc -o myprog prog1.o prog2.o ... -lecpg
   

De nouveau, vous pourriez avoir besoin d'ajouter une option comme -L/usr/local/pgsql/lib à la ligne de commande.

Vous pouvez utiliser pg_config ou pkg-config avec le package libecpg pour obtenir les chemins de votre installation.

Si vous gérez le processus de compilation d'un projet de grande taille en utilisant make, il serait pratique d'inclure la règle implicite suivante à vos makefiles:

ECPG = ecpg

%.c: %.pgc
        $(ECPG) $<
   

La syntaxe complète de la commande ecpg est détaillée dans ecpg(1).

La librairie ecpg est thread-safe par défaut. Toutefois, vous aurez peut-être besoin d'utiliser des options de ligne de commande spécifiques aux threads pour compiler votre code client.