2012-03-09

rails_sql_viewsを使っているrailsプロジェクトでrake specをしたら失敗した

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
migrationで都合によりviewも作りたいなぁと思ってrails_sql_viewsというのを使うことがあります。
gem install rails_sql_views
で入ります。
詳しくは、以下を。
http://activewarehouse.rubyforge.org/rails_sql_views/

で、ある日rake specが失敗するようになってしまいました。
ちなみにデータベースは都合によりSQL Serverを使っています。

rails_sql_viewsを使っていると
db/schema.rb
にview定義も入るようになるのですが、ものすごく定義文がでかくなるviewの定義が途中で切れてしまっていたのです。
このせいでrake specが失敗したのでした。

というわけで、

rails_sql_views/connection_adapters/sqlserver_adapter.rb
をちょっと修正しました。
#        q =<<-ENDSQL
#          SELECT view_definition FROM information_schema.views
#          WHERE table_name = '#{view}'
#        ENDSQL
        q =<<-ENDSQL
          SELECT SM.definition FROM sys.objects O JOIN
          sys.sql_modules SM ON O.object_id = SM.object_id
          WHERE o.type = 'V' and O.name = '#{view}'
        ENDSQL
viewの定義をschema.rbにdumpするためのsql文を修正です。
SELECT view_definition FROM information_schema.views WHERE table_name = '#{view}'
をSQL Serverで普通に実行しても確かに長い定義文のものはカットされています。

ちなみにSQL Serverでちゃんと使うにはく
rails_sql_views/connection_adapters/sqlserver_adapter.rb
の以下の部分も修正したほうがよさげです。
      def convert_statement(s)
        #s.sub(/^CREATE.* AS (select .*)/, '\1').gsub(/\n/, '')
        s.sub(/^CREATE.* AS (SELECT .*)/, '\1').gsub(/\n/, '')
      end


コメントを投稿