Ruby on Rails on SQL Server 2005
メモ書き(まだ、完全に動かしてないので、まだ修正が必要なところはあるかも)
database.yml
development: adapter: sqlserver database: test_development username: sa password: root host: localhost provider: SQLNCLI encoding: utf8 autocommit: false
sqlserver_adapter.rb
def tables(name = nil) execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'", name).inject([]) do |tables, field| table_name = field[0] tables << table_name unless table_name == 'dtproperties' || table_name == 'sysdiagrams' tables end end
その他
テーブルにPKが付いてないと、migration時にエラー。そういえば、某Rails本にはまだmysqlくらいしかmigration対応してないと書いてあったが、すでにSQL Serverも対応しているっぽい。
[追記] SQL Serverにも対応自体はしているのだが、rake db:migrateの際にはautocommitをtrueにしないとテーブルが作られない。どうもMySQLではtransaction中にcreate文などが含められない関係で、こうなっているらしい。というわけで、migrate時には、database.ymlのautocommitを変更してから行う必要があるようだ。
[さらに追記] なぜか、SQL Serverから送られてくる文字列がSHIFT_JISだ。DBIまでいじらないとどうにもならなかったりするのだろうか。困った。
[2006/06/12 追記]
よくよくソースを追ってみると、database.ymlに書いてあるproviderが無視されている。sqlserver_adapter.rbの該当部分に修正を加え、WIN32OLE.codepage = WIN32OLE::CP_UTF8 を指定するとなんとかなりそうだが、時間が足りず未検証。なぜかエラーメッセージの一部だけがSHIFT_JISで送られてくるという問題だけは認識。でもたぶんこれはSQLServerのバグだろうなぁ。