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:
parent
9db6e63bfb
commit
09a16ef178
1 changed files with 16 additions and 3 deletions
|
@ -95,14 +95,27 @@ module ActiveRecord
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue