ここまでで、埋め込みSQL Cプログラムの作成方法は理解できたと思います。 ここからはそのコンパイル方法についてをお話しします。 コンパイルの前に、そのファイルを埋め込みSQLCに通します。 これは、使用するSQL文を特別な関数呼び出しに変換します。 コンパイル後、必要な関数を持つ特別なライブラリとリンクしなければなりません。 これらの関数は引数から情報を取り出し、libpqを使用してそのSQLを実行し、出力用に指定された引数にその結果を格納します。
プリプロセッサプログラムはecpgという名前で、通常PostgreSQLのインストレーションに含まれています。 通常、埋め込みSQLプログラムの拡張子は.pgcとします。 prog1.pgcという名前のプログラムファイルがある場合、単純に以下を呼び出すことで前処理を行なうことができます。
ecpg prog1.pgc
これはprog1.cという名前のファイルを作成します。 入力ファイルがこの提案パターンに従った名前でない場合、-o オプションを使用して明示的に出力ファイルを指定することができます。
前処理後のファイルは普通にコンパイルできます。 以下に例を示します。
cc -c prog1.c
生成されたCソースファイルはPostgreSQLインストレーションに付随するヘッダファイルをインクルードします。 ですので、デフォルトで検索されない場所にPostgreSQLをインストールした場合は、コンパイル用のコマンドラインに-I/usr/local/pgsql/includeのようなオプションを追加しなければなりません。
埋め込みSQLプログラムをリンクするためには、以下のように、libecpgライブラリを含めなければなりません。
cc -o myprog prog1.o prog2.o ... -lecpg
繰り返しになりますが、コマンドラインに-L/usr/local/pgsql/libといったオプションを追加する必要があるかもしれません。
大規模プロジェクトの構築処理をmakeを使用して管理している場合、以下の暗黙規則をメイクファイルに含めておくと便利です。
ECPG = ecpg %.c: %.pgc $(ECPG) $<
ecpgコマンドの完全な構文はecpgに説明があります。
configureの--enable-thread-safetyコマンドラインオプションを使用してコンパイルした場合、ecpgはスレッドセーフです。 (クライアントコードのコンパイル時に他のスレッド関連のコマンドラインオプションを使用する必要があるかもしれません。)