PostgreSQL:EUC-SJIS変換処理の改善について(2)

euc_jp_and_sjis.patch (7Kbytes)
やはりEUCから直接SJISへ変換するほうが速いと考え,実装してみました。
(SJIS->EUCも実装しました)
パッチは以下のURLを参照してください。

測定結果は以下のとおりです。

実行したコマンド
time psql -f test.sql -o /dev/null

test.sqlの内容
set client_encoding to 'SJIS';
select * from accounts;

私の環境ではパッチ適用前:2.971s,パッチ適用後:2.342sとなり,実行速度が
約20%改善されました。
もしよければ,このパッチをコミットしていただけると,大変ありがたいです。

それから,mic_to_euc_jpの中でmic2sjisを実行しているのですが,これは
明らかにバグだと思い,このパッチで修正してあります。

テスト用プログラム

euc_sjis_test.c (13Kbytes)

このテストプログラム(euc_sjis_test)は,新旧両方の変換関数を実行するもので
使い方は以下のとおりです。

euc_sjis_test -orig|-new -euc2sjis|-sjis2euc < test_file > output_file

最初の引数は,-origか-newのいずれかで,-origは既存の変換処理,-newは新しい
変換処理を実行します。
2つ目の引数は,-euc2sjisか-sjis2eucのいずれかで,EUC->SJIS変換か SJIS->EUC
変換を指定します。

私が行ったテストは,以下のとおりです。
(1)EUCのテストデータ(euc.txt)を作成する
$ kanji > euc.txt
(solarisにはkanjiというコマンドがあって,これを実行するとEUCのコード表が
取得できます)

(2)euc.txtを新旧両方の変換処理でSJISへ変換し,変換結果を比較する
$ euc_sjis_test -orig -euc2sjis < euc.txt > sjis_orig.txt
$ euc_sjis_test -new -euc2sjis < euc.txt > sjis_new.txt
$ diff sjis_orig.txt sjis_new.txt

(3)SJIS->EUCも同様に,新旧両方の変換を行い,結果を比較する
$ euc_sjis_test -orig -sjis2euc < sjis_orig.txt > euc_orig.txt
$ euc_sjis_test -new -sjis2euc < sjis_orig.txt > euc_new.txt
$ diff euc_orig.txt euc_new.txt

これで,新しい関数が既存の関数と同じ結果を返すことを確認しました。