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
|
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)
|
||||||
|
|
Loading…
Reference in a new issue