1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

add failing test exposing mysql adapter tinyint bug

in myself, a column with type TINYINT(N) where N > 1 can be used to
represent an integer, but the rails mysql adapter refuses to interpret
as anything but a boolean.
This commit is contained in:
phinze 2013-05-14 13:27:51 -05:00 committed by Aaron Patterson
parent 9db6e63bfb
commit 09a16ef178

View file

@ -95,14 +95,27 @@ module ActiveRecord
assert_equal @conn.default_sequence_name('ex_with_custom_index_type_pk', 'id'), seq assert_equal @conn.default_sequence_name('ex_with_custom_index_type_pk', 'id'), seq
end end
def test_tinyint_integer_typecasting
@conn.exec_query('drop table if exists ex_with_non_boolean_tinyint_column')
@conn.exec_query(<<-eosql)
CREATE TABLE `ex_with_non_boolean_tinyint_column` (
`status` TINYINT(4))
eosql
insert(@conn, { 'status' => 2 }, 'ex_with_non_boolean_tinyint_column')
result = @conn.exec_query('SELECT status FROM ex_with_non_boolean_tinyint_column')
assert_equal 2, result.column_types['status'].type_cast(result.last['status'])
end
private private
def insert(ctx, data) def insert(ctx, data, table='ex')
binds = data.map { |name, value| binds = data.map { |name, value|
[ctx.columns('ex').find { |x| x.name == name }, value] [ctx.columns(table).find { |x| x.name == name }, value]
} }
columns = binds.map(&:first).map(&:name) columns = binds.map(&:first).map(&:name)
sql = "INSERT INTO ex (#{columns.join(", ")}) sql = "INSERT INTO #{table} (#{columns.join(", ")})
VALUES (#{(['?'] * columns.length).join(', ')})" VALUES (#{(['?'] * columns.length).join(', ')})"
ctx.exec_insert(sql, 'SQL', binds) ctx.exec_insert(sql, 'SQL', binds)