aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/statement_cache.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2017-07-24 12:28:26 -0400
committerSean Griffin <sean@seantheprogrammer.com>2017-07-24 12:28:26 -0400
commit846832ae54f93a480f37a14a10874767a6330086 (patch)
tree854264ccdab978f82d27d53a6910f0d53b7836fb /activerecord/lib/active_record/statement_cache.rb
parenta69842447739d2f22657e347bad3b23c64b0c6b8 (diff)
downloadrails-846832ae54f93a480f37a14a10874767a6330086.tar.gz
rails-846832ae54f93a480f37a14a10874767a6330086.tar.bz2
rails-846832ae54f93a480f37a14a10874767a6330086.zip
Fix test failures when prepared statements are disabled
This also reverts the change to enable prepared statements by default on MySQL (though I suspect we could enable them and it'd be great). This change brings back a collector closer to the old `Bind` collector in Arel. However, this one lives in AR, since this is an AR specific need. Additionally, we only use it for statement caching, since the new substitute collector in Arel is higher performance for most cases.
Diffstat (limited to 'activerecord/lib/active_record/statement_cache.rb')
-rw-r--r--activerecord/lib/active_record/statement_cache.rb20
1 files changed, 9 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/statement_cache.rb b/activerecord/lib/active_record/statement_cache.rb
index db7e0c8a04..64657089b5 100644
--- a/activerecord/lib/active_record/statement_cache.rb
+++ b/activerecord/lib/active_record/statement_cache.rb
@@ -41,20 +41,18 @@ module ActiveRecord
end
class PartialQuery < Query # :nodoc:
- def initialize(arel)
- @arel = arel
+ def initialize(values)
+ @values = values
+ @indexes = values.each_with_index.find_all { |thing, i|
+ Arel::Nodes::BindParam === thing
+ }.map(&:last)
end
def sql_for(binds, connection)
- val = @arel.dup
- val.grep(Arel::Nodes::BindParam) do |node|
- node.value = binds.shift
- if binds.empty?
- break
- end
- end
- sql, _ = connection.visitor.accept(val, connection.send(:collector)).value
- sql
+ val = @values.dup
+ casted_binds = binds.map(&:value_for_database)
+ @indexes.each { |i| val[i] = connection.quote(casted_binds.shift) }
+ val.join
end
end