提交 e1700141 编写于 作者: R robertomiranda

Change behaviour with empty hash in where clause

上级 f1637492
## Rails 4.0.0 (unreleased) ##
* Raise ArgumentError instead of generate invalid SQL when empty hash is used in where clause value
Roberto Miranda
* Quote numeric values being compared to non-numeric columns. Otherwise,
in some database, the string column values will be coerced to a numeric
allowing 0, 0.0 or false to match any string starting with a non-digit.
......
......@@ -8,7 +8,7 @@ def self.build_from_hash(klass, attributes, default_table)
if value.is_a?(Hash)
if value.empty?
queries << '1 = 2'
raise ArgumentError, "Condition value in SQL clause can't be an empty hash"
else
table = Arel::Table.new(column, default_table.engine)
association = klass.reflect_on_association(column.to_sym)
......
......@@ -92,7 +92,9 @@ def test_where_with_table_name
end
def test_where_with_table_name_and_empty_hash
assert_equal 0, Post.where(:posts => {}).count
assert_raises(ArgumentError) do
Post.where(:posts => {})
end
end
def test_where_with_table_name_and_empty_array
......@@ -100,7 +102,9 @@ def test_where_with_table_name_and_empty_array
end
def test_where_with_empty_hash_and_no_foreign_key
assert_equal 0, Edge.where(:sink => {}).count
assert_raises(ArgumentError) do
Edge.where(:sink => {}).count
end
end
def test_where_with_blank_conditions
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册