[Sybase Adaptor] find_by_xxx does not work correctly


#1

Hi

Please advice me about the following problem.

  • Problem
    find_by_xxx method does not work correctly the following caes with
    sybase adaptor.

  • How to reproducible

model :users
t.column :code, :string <-- :string column
t.column :last_name, :string
t.column :first_name,:string

User.find(1)
=> #<User:0x2abe232a68e8 @attributes={“code”=>“1”, “id”=>“1”,
“first_name”=>“hiroyuki”, “last_name”=>“sato”}>

code data only include number

User.find_by_code(“1”)
ActiveRecord::StatementInvalid: RuntimeError: SQL Command Failed for
User Load: SELECT * FROM users WHERE (users.[code] = 1)

This SQL should be quote like this
SELECT * FROM users WHERE (users.[code] = “1”)

  • probelm source

sybase_adapter.rb

279       def quote(value, column = nil)
280         return value.quoted_id if value.respond_to?

(:quoted_id)
281
282 case value
283 when String
284 if column && column.type == :binary &&
column.class.respond_to?(:string_to_binary)
285
“#{quote_string(column.class.string_to_binary(value))}”
286 elsif @numconvert && force_numeric?(column) &&
value =~ /^[±]?[0-9]+$/o <-- here
287 value
288 else
289 “’#{quote_string(value)}’”
290 end

sybase_adapter.rb

302       def force_numeric?(column)
303         (column.nil? || [:integer, :float, :decimal].include?

(column.type))
304 end

I think force_numeric? method should be return false

Any idea?

  • environment
    ActiveRecord 1.15.3

Thank you for your advice.

– hiroyuki sato