text: 新しいエンコーディング変換関数の追加方法
  
  	2006/04/15 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
  	CSTRING,	-- source string (null terminated C string)
  	INTERNAL,	-- destination string (null terminated C string)
  	INTEGER		-- source string length
    ) returns VOID;
  
    唯一の出力引数は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個の関数を書くこと
    が多いでしょう．
  