Kaibashira改良中

SQLActiveRecord経由で実行したときだけなぜかエラーがでる。同じSQLをコンソールで実行してもエラー出ないのに。PostgreSQLのバージョンの違いかとも思ったんだけど、最新版にしても、コンソールとプログラム両方でSELECT version();としても同じバージョンが出る。つまりどちらも最新版で動いてる。良く分からないからこれは後回し。どうもサブクエリーが返す件数が1件とは限らないとまずい箇所でエラーにしているみたいで、昔のPostgreSQLだとエラーチェックが甘かっただけなのかもしれない。1件しか返らないのは確かなんだけど、分かってくれない。


utf8procがWindowsで上手くインストールできないのでUnicodeの正規化はどうしようかと思ってたんだけど、ActiveSupport2.0.2にそういうことのできるクラスメソッドがあった。ActiveSupport::Multibyte::Handlers::UTF8Handler#normalizeだ。引き数次第でNFC以外にもいろいろ正規化できるみたい。これでcygwinでもmswinでも動くようになるな。


Ruby1.9.0で附属しなくなってたxsdに依存しないようにQNameをXSD::QNameから派生しないようにしてみたんだけど、ずいぶんと奥深いところでエラーがでて修正が大変だった。そうか、XSD::QName#eql?メソッドが==と同じ動作をするからそれも定義してやらなきゃいけなかったんだな。そのせいで他のQNameやパーサが使っている型との比較が上手くいかずに予想外のエラーが出てた。素直にXSD::QNameにあるメソッド全部再定義しておくべきだったか。でも本当はeql?をオブジェクトそのものの比較以外に使っているのがおかしいのか? いや、QNameなら字面が同じことが最優先だからこれはいいのか。文字列と同じだ。


動かなくてコメントアウトしてたテストも動くようになった。わりと簡単に直せたけどなんで放置してあったんだろう? 今見ると結構適当な作りのところがあるな。エラー処理とかraise ''とかで済ませてるところがあったりするし。これを書いてた1年2ヶ月前から比べると私もどういうコードを書くべきかが分かってきたみたいだ。特に例外処理とか。