無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

33.10. 埋め込みSQLプログラムの処理

ここまでで、埋め込みSQL Cプログラムの作成方法は理解できたと思います。 ここからはそのコンパイル方法についてお話しします。 コンパイルの前に、そのファイルを埋め込み SQL C プリプロセッサに通します。 これは、使用する 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 といったオプションを追加する必要があるかもしれません。

インストール先のパスを取得するために、パッケージ名 libecpg pg_config または pkg-config を使うことができます。

大規模プロジェクトの構築処理を make を使用して管理している場合、以下の暗黙規則をMakefileに含めておくと便利です。

ECPG = ecpg

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

ecpg コマンドの完全な構文は ecpg に説明があります。

デフォルトでは ecpg はスレッドセーフです。 しかしクライアントコードのコンパイル時に他のスレッド関連のコマンドラインオプションを使用する必要があるかもしれません。


powered by SEO.CUG.NET