aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/mb/conversion_procs/README.euc_jp83
1 files changed, 83 insertions, 0 deletions
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 00000000000..dd4e64ea49a
--- /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個の関数を書くことが
+ 多いでしょう.