diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-09 14:32:51 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-04-09 14:32:51 -0700 |
commit | ee54e9bb3a6d7ffcf756ec1e385399b92354cb6b (patch) | |
tree | 00040da70caddaa468ce801770e5c9a71602a154 /activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | |
parent | 1794ac0197501c8d416c37769f2b5683d297ce6f (diff) | |
download | rails-ee54e9bb3a6d7ffcf756ec1e385399b92354cb6b.tar.gz rails-ee54e9bb3a6d7ffcf756ec1e385399b92354cb6b.tar.bz2 rails-ee54e9bb3a6d7ffcf756ec1e385399b92354cb6b.zip |
add a bind collector, remove the bind visitor
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index 2cb619881a..ef4b45cd43 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -123,10 +123,6 @@ module ActiveRecord end end - class BindSubstitution < Arel::Visitors::SQLite # :nodoc: - include Arel::Visitors::BindVisitor - end - def initialize(connection, logger, config) super(connection, logger) @@ -135,11 +131,31 @@ module ActiveRecord self.class.type_cast_config_to_integer(config.fetch(:statement_limit) { 1000 })) @config = config + @visitor = Arel::Visitors::SQLite.new self + if self.class.type_cast_config_to_boolean(config.fetch(:prepared_statements) { true }) @prepared_statements = true - @visitor = Arel::Visitors::SQLite.new self else - @visitor = unprepared_visitor + @prepared_statements = false + end + end + + class BindCollector < Arel::Collectors::Bind + def initialize(conn) + @conn = conn + super() + end + + def compile(bvs) + super(bvs.map { |bv| @conn.quote(*bv.reverse) }) + end + end + + def collector + if @prepared_statements + Arel::Collectors::SQLString.new + else + BindCollector.new self end end |