mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Unifies mysql and mysql2 casting of booleans
Using the mysql2 adapter, boolean values were sometimes being incorrectly cast to 't' or 'f'. This changes the cast to match the mysql adapter behavior, ie 1 and 0.
This commit is contained in:
parent
754a373e30
commit
41bd94b7ef
4 changed files with 53 additions and 6 deletions
|
@ -1,3 +1,25 @@
|
|||
* Fix bug when using Mysql2 adapter where in some cases, boolean values were
|
||||
being output in sql as `t` or `f` instead of `1` or `0`. Example:
|
||||
|
||||
class Model < ActiveRecord::Base
|
||||
validates_uniqueness_of :boolean_col
|
||||
end
|
||||
Model.first.valid?
|
||||
|
||||
Previously generated sql:
|
||||
|
||||
SELECT 1 AS one FROM `models` WHERE
|
||||
`models`.`boolean_col` = BINARY 'f' LIMIT 1
|
||||
|
||||
With fix:
|
||||
|
||||
SELECT 1 AS one FROM `models` WHERE
|
||||
`models`.`boolean_col` = BINARY 0 LIMIT 1
|
||||
|
||||
Fixes: #11119
|
||||
|
||||
*Adam Williams*
|
||||
|
||||
* `change_column` for PostgreSQL adapter respects the `:array` option.
|
||||
|
||||
*Yves Senn*
|
||||
|
|
|
@ -272,6 +272,12 @@ module ActiveRecord
|
|||
QUOTED_FALSE
|
||||
end
|
||||
|
||||
def type_cast(value, column)
|
||||
return super unless value == true || value == false
|
||||
|
||||
value ? 1 : 0
|
||||
end
|
||||
|
||||
# REFERENTIAL INTEGRITY ====================================
|
||||
|
||||
def disable_referential_integrity(&block) #:nodoc:
|
||||
|
|
|
@ -160,12 +160,6 @@ module ActiveRecord
|
|||
|
||||
# QUOTING ==================================================
|
||||
|
||||
def type_cast(value, column)
|
||||
return super unless value == true || value == false
|
||||
|
||||
value ? 1 : 0
|
||||
end
|
||||
|
||||
def quote_string(string) #:nodoc:
|
||||
@connection.quote(string)
|
||||
end
|
||||
|
|
25
activerecord/test/cases/adapters/mysql2/quoting_test.rb
Normal file
25
activerecord/test/cases/adapters/mysql2/quoting_test.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
require "cases/helper"
|
||||
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class Mysql2Adapter
|
||||
class QuotingTest < ActiveRecord::TestCase
|
||||
def setup
|
||||
@conn = ActiveRecord::Base.connection
|
||||
end
|
||||
|
||||
def test_type_cast_true
|
||||
c = Column.new(nil, 1, 'boolean')
|
||||
assert_equal 1, @conn.type_cast(true, nil)
|
||||
assert_equal 1, @conn.type_cast(true, c)
|
||||
end
|
||||
|
||||
def test_type_cast_false
|
||||
c = Column.new(nil, 1, 'boolean')
|
||||
assert_equal 0, @conn.type_cast(false, nil)
|
||||
assert_equal 0, @conn.type_cast(false, c)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue