Add Japanese README explaining how to add new conversion.

English README will come soon...
This commit is contained in:
Tatsuo Ishii 2002-07-24 07:05:41 +00:00
parent 88b74dcddf
commit 19a20e04bd

View File

@ -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個の関数を書くことが
多いでしょう.