Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

[Ruby] Sequelで、テーブル名が大文字に変換されてしまう

ODBCSQL Serverに繋いでいる。

DB[:table_name]でアクセスすると、「TABLE_NAMEというオブジェクトはないんじゃが?」とSQL Serverに怒られた。なぜ大文字でアクセスしたし。

接続されるDBに依って、大文字にする場合もあるとドキュメントに書いてある。どのように解釈されるかは、DB.literal(:sym)のようにすれば確認出来る。

# coding: windows-31j
require 'sequel'

DB = Sequel.odbc("MSDB", :user=>'hoge', :password=>'fuga') 

p DB.literal(:name) # => "\"NAME\""

う・・・大文字だ。ケースを区別するSQL Serverであることがわからないんだろうか。ソースを観てみると、SQL Servermssqlという名前で区別されているようだ。

DB = Sequel.odbc("MSDB", :user=>'hoge', :password=>'fuga', :db_type => "mssql") 

p DB.literal(:name) # => "[NAME]"

あー、SQL Serverですね。すごくSQL Serverです・・・が大文字に変換されたままじゃないか。

いろいろ彷徨ったあげく、

http://sequel.jeremyevans.net/rdoc/classes/Sequel.html#method-c-identifier_input_method-3D

を見つけた。

DB = Sequel.odbc("MSDB", :user=>'hoge', :password=>'fuga', :db_type => "mssql") 
DB.identifier_input_method = nil

p DB.literal(:name) # => "[name]"

うまくいったけど、これが正しいやり方なのかどうかは自信がない