ECPG

ECPGはPostgreSQLデータベースに組み込まれた標準的なクライアントプログラミングインターフェースで、 C言語で書かれたプログラムにSQLを埋め込むことができます。[ 1 ] ECPGは、SQLコマンドを使用して、アプリケーション内のCコードからPostgreSQLデータベースに直接アクセスするオプションを提供します。

使用法

使用方法は2つのステップに分けられます。まず、 SQLコードが埋め込まれたCコードを含む.pcgファイルを作成します。このファイルでは、SQLコードがアプリケーションのCコードに直接挿入されます。SQLコマンドは、以下の方法でCコードに挿入する必要があります。

// ... C コード ... EXEC SQL <SQL ステートメント>; // ... C コード ... 

データベースに接続する方法の例:

EXEC SQL CONNECT TOデータベース名[ @ホスト名][:ポート] [ AS接続名] [ USERユーザー名];

埋め込みSQL部分はECPGプリプロセッサによって処理され、SQLコードはecpgライブラリ(libecpg.aまたはlibecpg.so)の呼び出しに置き換えられます。.pcgファイルもecpgによって前処理され、ANSI標準に準拠した.cファイルに変換されます。したがって、第2段階では、生成された.cファイルを標準的なCコンパイラで直接コンパイルできます。[ 2 ]

次のコマンドは、 my_c_file_with_embedded_sql_commands.pcgファイルからmy_c_file_with_embedded_sql_commands.cファイルを作成します。これは純粋な C コードとしてさらに処理できます。

$ ecpg my_c_file_with_embedded_sql_commands.pcg 

ecpg のソース コードは、PostgreSQL ソース コード gitリポジトリでも入手できます。

注意: 前処理された .c コードをコンパイルする際には、生成された呼び出しがリンクされたメソッドを見つけられるように、 ecpg ライブラリ(libepcg) をリンクすることを忘れないでください。

ホスト変数の使用

SQLデータベースコマンドをアプリケーションのコードに埋め込む際に重要なのは、アプリケーションとデータベース間のデータ交換です。この目的のために、ホスト変数を使用できます。ホスト変数は埋め込まれたSQLコードから直接使用できるため、実行時にCコードの値を文字列として手動でSQL文を生成する必要はありません。

C コードに variablenameという名前の変数があると仮定します。

EXEC SQL INSERT INTOテーブル名VALUES (:変数名);

これはどのステートメントでも使用できますが、説明のための簡単な例として INSERTステートメントが選択されました。

上記の例はC変数をSQLに渡す方法を示していますが、データは逆方向に、つまりアプリケーションに渡すこともできます。次の例は、SQLからアプリケーションのC変数に値を渡す方法を示しています。

EXEC SQL BEGIN DECLARE SECTION ; VARCHAR変数名; EXEC SQL END DECLARE SECTION ;EXEC SQL SELECT列名INTO :変数名FROMテーブル名;

簡潔にするために、テーブルtable nameには行が1つしかないと仮定しましょう。この文は、列columnnameの値を変数variableに挿入します。INTO句をサポートするすべてのコマンド、例えばFETCHコマンド、この方法で使用できます。

エラー処理

ECPGは、エラー処理を改善するために、SQL通信領域(sqlca)と呼ばれる構造体も提供しています。この構造体はSQL文の実行ごとに書き込まれ(各スレッドには独自のsqlca [ 3 ]があります)、戻りコードなどの警告やエラー情報が含まれます。sqlcaのデータはデータベースからの応答に応じて書き込まれ、デバッグに使用できます。

その他のインターフェース

ECPGはC言語へのSQL埋め込みをサポートしているため、間接的にC++言語への埋め込みもサポートしています。SQL部分はCライブラリ呼び出しに変換されます。これらはextern "C"句内で生成され、異なるプログラミング言語で記述されたモジュール間の連携を提供します。[ 4 ] ECPGをC++コードで使用する場合、ECPGプリプロセッサがC++言語特有の構文や予約語を理解しないため、いくつかの制限があります。このような構文や予約語を使用すると、アプリケーションが予期しない動作をする可能性があります。埋め込みSQLコマンドを、C++アプリケーションからリンクされ呼び出されるリンクされたCモジュールに分離することをお勧めします。[ 5 ]

内部ECPGに加えて、PostgreSQLデータベースにはC++、 JavaLua.NETNode.jsPythonPHPなどの外部インターフェースが用意されており、これらを追加することで埋め込みSQLオプションを拡張できます。また、Java、.NET、 FortranCOBOLPL/Iなど、C言語以外の言語でも埋め込みSQLをサポートするデータベースがあります。

参考文献

  1. ^ 「PostgreSQLホームページ」 . PostgreSQL . PostgreSQLグローバル開発グループ. 2015年6月6日閲覧。
  2. ^ Ahmed, Ibrar, Fayyaz, Asif and Shahzad, Amjad (2015年2月27日). PostgreSQL開発者ガイド. Packt Publishing Ltd, 2015. p. 197. ISBN 978-1783989034. 2015年6月6日閲覧{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク)
  3. ^ "SQLCA" . PostgreSQL . PostgreSQLグローバル開発グループ. 2018年1月23日閲覧。
  4. ^ 「CPPリンケージ」 . CPPリファレンス. CPPリファレンス. 2015年6月6日閲覧
  5. ^ 「C++アプリケーション」 . PostgreSQL . PostgreSQLグローバル開発グループ. 2018年1月23日閲覧。