Skip to content

Commit

Permalink
add failing test exposing mysql adapter tinyint bug
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
phinze authored and tenderlove committed May 16, 2013
1 parent 9db6e63 commit 09a16ef
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb
Expand Up @@ -95,14 +95,27 @@ def test_pk_and_sequence_for_with_custom_index_type_pk
assert_equal @conn.default_sequence_name('ex_with_custom_index_type_pk', 'id'), seq
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
def insert(ctx, data)
def insert(ctx, data, table='ex')
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)

sql = "INSERT INTO ex (#{columns.join(", ")})
sql = "INSERT INTO #{table} (#{columns.join(", ")})
VALUES (#{(['?'] * columns.length).join(', ')})"

ctx.exec_insert(sql, 'SQL', binds)
Expand Down

0 comments on commit 09a16ef

Please sign in to comment.