diff --git a/src/backend/utils/mb/conversion_procs/README.euc_jp b/src/backend/utils/mb/conversion_procs/README.euc_jp new file mode 100644 index 0000000000..dd4e64ea49 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/README.euc_jp @@ -0,0 +1,83 @@ +新しいエンコーディング変換関数の追加方法 + + 2002/07/24 Tatsuo Ishii + +はじめに + +PostgreSQLには,データベースとフロントエンドのエンコーディングが異なる +ときに,自動的にエンコーディングの変換を行う機能があります.このディレ +クトリには,そのときに使われる関数が登録されています.これらの関数はユー +ザ定義C関数として,initdbの中で登録されます.具体的には, +/usr/local/pgsql/share/conversion_create.sql の中で登録されます(このファ +イルはこのディレクトリでmakeしたときに自動生成されます). + +また,これらの関数はconvert()関数からも呼び出されることもあります. + +このREADMEでは,C関数を定義する方法と,それをMakefileなどに追加する方 +法を説明します. + +o C関数の呼び出し形式 + + エンコーディング変換関数の呼び出し形式は次のようになります. + + conv_proc( + INTEGER, -- source encoding id + INTEGER, -- destination encoding id + OPAQUE, -- source string (null terminated C string) + OPAQUE, -- destination string (null terminated C string) + INTEGER -- source string length + ) returns INTEGER; -- dummy. returns nothing, actually. + + 唯一の出力引数は4番目のdestination stringです.ユーザ定義関数は必要 + なメモリをpallocし,そこに変換結果をNULLターミネートされたC文字列と + して出力しなければなりません.また,適切な大きさのメモリを確保するの + は,このC関数の責任です.というのは,一般に変換された文字列の長さは + ソース文字列の長さ(5番目の引数で指定されます.単位はNULLターミネート + を含まないバイト数です)とは一致しないからです. + + エンコーディングIDはinclude/mb/pg_wchar.hのtypedef enum pg_encで定義 + されています. + +o 関数の登録とコンパイル + + 作ったC関数はサブディレクトリを作り,その中に納めます.その中に + Makefileも必要になりますが,他のディレクトリにあるMakefileを参考にす + れば簡単に作成できるでしょう. + + 次にメインのMakefile(このファイルが置いてある同じディレクトリにあり + ます)に関数に関する記述を追加します. + + (1) DIRS=の後にサブディレクトリ名を追加します. + + (2) @set \ で始まる項目に記述を追加します.1関数につき1行の追加が必要 + です. + + コンバージョンの名前 + ソースエンコーディング名 + デスティネーションエンコーディング名 + 関数名 + オブジェクトファイル名 + + を1行の中にスペースで区切って追加します. + +o テスト + + 以上が終わったら,このファイルがあるディレクトリでmakeし,すべてがう + まくいくことを確認します.特に,create_conversion.sqlがちゃんとした + 内容になっているかどうか確認しましょう.良さそうだったら,テスト用に + 新しいデータベースを作り,そこでこのスクリプトを実行します. + + $ psql -e -f create_conversion.sql test + + これも正常だったら,最後にregression test suiteにテスト項目を追加し + てください.具体的には,src/test/regress/sql/conversion.sqlに追加し, + regression testを行います. + +o 注意事項 + + デフォルトのエンコーディング変換として使用できるためには,ソースエン + コーディングとデスティネーションエンコーディングの間で双方向の変換が + できることが必要ですすなわち,あるエンコーディングのペアに付き,2個 + の関数の作成が必要です.これらの関数は別々のサブディレクトリに登録し + ても良いですが,通常は一つのソースファイル中に2個の関数を書くことが + 多いでしょう.