diff options
author | Sean Griffin <sean@seantheprogrammer.com> | 2017-07-24 12:28:26 -0400 |
---|---|---|
committer | Sean Griffin <sean@seantheprogrammer.com> | 2017-07-24 12:28:26 -0400 |
commit | 846832ae54f93a480f37a14a10874767a6330086 (patch) | |
tree | 854264ccdab978f82d27d53a6910f0d53b7836fb /activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb | |
parent | a69842447739d2f22657e347bad3b23c64b0c6b8 (diff) | |
download | rails-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/connection_adapters/abstract/database_statements.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb index f687d3a7e8..00e54edac0 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -29,8 +29,9 @@ module ActiveRecord sql, binds = visitor.accept(arel.ast, collector).value query = klass.query(sql) else - query = klass.partial_query(arel.ast) - binds = [] + collector = PartialQueryCollector.new + parts, binds = visitor.accept(arel.ast, collector).value + query = klass.partial_query(parts) end [query, binds] end @@ -457,6 +458,28 @@ module ActiveRecord value end end + + class PartialQueryCollector + def initialize + @parts = [] + @binds = [] + end + + def << str + @parts << str + self + end + + def add_bind obj + @binds << obj + @parts << Arel::Nodes::BindParam.new(1) + self + end + + def value + [@parts, @binds] + end + end end end end |