aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/database_statements.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/connection_adapters/abstract/database_statements.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/connection_adapters/abstract/database_statements.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb27
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