Permalink
Browse files

Revert "Merge pull request #9207 from dylanahsmith/mysql-quote-numeric"

This reverts commit 408227d, reversing
changes made to dca0b57.
  • Loading branch information...
steveklabnik committed Feb 27, 2013
1 parent 5c13549 commit afd4a14332c49fa0e236e6904a5f7e09ce33c407
@@ -1,5 +1,9 @@
## Rails 4.0.0 (unreleased) ##
+* Revert 408227d9c5ed7d, 'quote numeric'. This introduced some regressions.
+

This comment has been minimized.

Show comment
Hide comment
@laserlemon

laserlemon Feb 27, 2013

Contributor

What regressions were you experiencing? I'm working on a fix for a problem in running rake db:schema:load from an empty database when the model has a scope like:

class User < ActiveRecord::Base
  scope :century_club, where(:age => 100)
end

If the model is loaded during app initialization (which is often the case when observers are involved), the PredicateBuilder tries to grab the database table/columns… which aren't there.

Is this something you're actively working on? Or shall I?

@laserlemon

laserlemon Feb 27, 2013

Contributor

What regressions were you experiencing? I'm working on a fix for a problem in running rake db:schema:load from an empty database when the model has a scope like:

class User < ActiveRecord::Base
  scope :century_club, where(:age => 100)
end

If the model is loaded during app initialization (which is often the case when observers are involved), the PredicateBuilder tries to grab the database table/columns… which aren't there.

Is this something you're actively working on? Or shall I?

This comment has been minimized.

Show comment
Hide comment
@carlosantoniodasilva

carlosantoniodasilva Feb 27, 2013

Member

Since this has been reverted, I believe your code should now work fine right? Can you try with 3-2-stable? Moreover, I highly recommend using the lazy approach for scopes, since this way is going to be deprecated in Rails 4.

@carlosantoniodasilva

carlosantoniodasilva Feb 27, 2013

Member

Since this has been reverted, I believe your code should now work fine right? Can you try with 3-2-stable? Moreover, I highly recommend using the lazy approach for scopes, since this way is going to be deprecated in Rails 4.

+ *Steve Klabnik*
+
* Fix calculation of `db_runtime` property in
`ActiveRecord::Railties::ControllerRuntime#cleanup_view_runtime`.
Previously, after raising `ActionView::MissingTemplate`, `db_runtime` was
@@ -25,19 +25,13 @@ def quote(value, column = nil)
when true, false
if column && column.type == :integer
value ? '1' : '0'
- elsif column && [:text, :string, :binary].include?(column.type)
- value ? "'1'" : "'0'"
else
value ? quoted_true : quoted_false
end
# BigDecimals need to be put in a non-normalized form and quoted.
when nil then "NULL"
- when Numeric, ActiveSupport::Duration
- value = BigDecimal === value ? value.to_s('F') : value.to_s
- if column && ![:integer, :float, :decimal].include?(column.type)
- value = "'#{value}'"
- end
- value
+ when BigDecimal then value.to_s('F')
+ when Numeric, ActiveSupport::Duration then value.to_s
when Date, Time then "'#{quoted_date(value)}'"
when Symbol then "'#{quote_string(value.to_s)}'"
when Class then "'#{value.to_s}'"
@@ -212,6 +212,8 @@ def quote(value, column = nil)
if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary)
s = column.class.string_to_binary(value).unpack("H*")[0]
"x'#{s}'"
+ elsif value.kind_of?(BigDecimal)
+ value.to_s("F")
else
super
end
@@ -98,11 +98,6 @@ def self.build(attribute, value)
when Class
# FIXME: I think we need to deprecate this behavior
attribute.eq(value.name)
- when Integer, ActiveSupport::Duration
- # Arel treats integers as literals, but they should be quoted when compared with strings
- table = attribute.relation
- column = table.engine.connection.schema_cache.columns_hash(table.name)[attribute.name.to_s]
- attribute.eq(Arel::Nodes::SqlLiteral.new(table.engine.connection.quote(value, column)))
else
attribute.eq(value)
end
@@ -122,35 +122,35 @@ def test_quote_false
def test_quote_float
float = 1.2
assert_equal float.to_s, @quoter.quote(float, nil)
- assert_equal float.to_s, @quoter.quote(float, FakeColumn.new(:float))
+ assert_equal float.to_s, @quoter.quote(float, Object.new)
end
def test_quote_fixnum
fixnum = 1
assert_equal fixnum.to_s, @quoter.quote(fixnum, nil)
- assert_equal fixnum.to_s, @quoter.quote(fixnum, FakeColumn.new(:integer))
+ assert_equal fixnum.to_s, @quoter.quote(fixnum, Object.new)
end
def test_quote_bignum
bignum = 1 << 100
assert_equal bignum.to_s, @quoter.quote(bignum, nil)
- assert_equal bignum.to_s, @quoter.quote(bignum, FakeColumn.new(:integer))
+ assert_equal bignum.to_s, @quoter.quote(bignum, Object.new)
end
def test_quote_bigdecimal
bigdec = BigDecimal.new((1 << 100).to_s)
assert_equal bigdec.to_s('F'), @quoter.quote(bigdec, nil)
- assert_equal bigdec.to_s('F'), @quoter.quote(bigdec, FakeColumn.new(:decimal))
+ assert_equal bigdec.to_s('F'), @quoter.quote(bigdec, Object.new)
end
def test_dates_and_times
@quoter.extend(Module.new { def quoted_date(value) 'lol' end })
assert_equal "'lol'", @quoter.quote(Date.today, nil)
- assert_equal "'lol'", @quoter.quote(Date.today, FakeColumn.new(:date))
+ assert_equal "'lol'", @quoter.quote(Date.today, Object.new)
assert_equal "'lol'", @quoter.quote(Time.now, nil)
- assert_equal "'lol'", @quoter.quote(Time.now, FakeColumn.new(:time))
+ assert_equal "'lol'", @quoter.quote(Time.now, Object.new)
assert_equal "'lol'", @quoter.quote(DateTime.now, nil)
- assert_equal "'lol'", @quoter.quote(DateTime.now, FakeColumn.new(:datetime))
+ assert_equal "'lol'", @quoter.quote(DateTime.now, Object.new)
end
def test_crazy_object
@@ -108,30 +108,5 @@ def test_where_with_blank_conditions
assert_equal 4, Edge.where(blank).order("sink_id").to_a.size
end
end
-
- def test_where_with_integer_for_string_column
- count = Post.where(:title => 0).count
- assert_equal 0, count
- end
-
- def test_where_with_float_for_string_column
- count = Post.where(:title => 0.0).count
- assert_equal 0, count
- end
-
- def test_where_with_boolean_for_string_column
- count = Post.where(:title => false).count
- assert_equal 0, count
- end
-
- def test_where_with_decimal_for_string_column
- count = Post.where(:title => BigDecimal.new(0)).count
- assert_equal 0, count
- end
-
- def test_where_with_duration_for_string_column
- count = Post.where(:title => 0.seconds).count
- assert_equal 0, count
- end
end
end
@@ -391,19 +391,19 @@ def test_default_scoping_with_threads
def test_default_scope_with_inheritance
wheres = InheritedPoorDeveloperCalledJamis.all.where_values_hash
assert_equal "Jamis", wheres[:name]
- assert_equal Arel.sql("50000"), wheres[:salary]
+ assert_equal 50000, wheres[:salary]
end
def test_default_scope_with_module_includes
wheres = ModuleIncludedPoorDeveloperCalledJamis.all.where_values_hash
assert_equal "Jamis", wheres[:name]
- assert_equal Arel.sql("50000"), wheres[:salary]
+ assert_equal 50000, wheres[:salary]
end
def test_default_scope_with_multiple_calls
wheres = MultiplePoorDeveloperCalledJamis.all.where_values_hash
assert_equal "Jamis", wheres[:name]
- assert_equal Arel.sql("50000"), wheres[:salary]
+ assert_equal 50000, wheres[:salary]
end
def test_scope_overwrites_default
@@ -540,8 +540,6 @@ def create_table(*args, &block)
create_table :price_estimates, :force => true do |t|
t.string :estimate_of_type
t.integer :estimate_of_id
- t.string :thing_type
- t.integer :thing_id
t.integer :price
end

0 comments on commit afd4a14

Please sign in to comment.