From 42a1bf18f28c97f6f059c6edcc8f0c3732dbba71 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Wed, 9 Apr 2014 15:45:05 -0700
Subject: working against arel/collector branch

---
 .../connection_adapters/abstract/database_statements.rb  |  3 ++-
 .../connection_adapters/abstract_mysql_adapter.rb        | 16 ++++------------
 .../active_record/connection_adapters/mysql2_adapter.rb  |  4 ++--
 activerecord/lib/active_record/statement_cache.rb        |  8 ++++----
 4 files changed, 12 insertions(+), 19 deletions(-)

(limited to 'activerecord')

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 f4885b19d6..270071a166 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -9,7 +9,8 @@ module ActiveRecord
       # Converts an arel AST to SQL
       def to_sql(arel, binds = [])
         if arel.respond_to?(:ast)
-          visitor.accept(arel.ast, collector).compile binds.dup
+          collected = visitor.accept(arel.ast, collector)
+          collected.compile(binds.dup, self)
         else
           arel
         end
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 88c90b06bf..d297eb0236 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -183,10 +183,6 @@ module ActiveRecord
       INDEX_TYPES  = [:fulltext, :spatial]
       INDEX_USINGS = [:btree, :hash]
 
-      class BindSubstitution < Arel::Visitors::MySQL # :nodoc:
-        include Arel::Visitors::BindVisitor
-      end
-
       # FIXME: Make the first parameter more similar for the two adapters
       def initialize(connection, logger, connection_options, config)
         super(connection, logger)
@@ -203,21 +199,17 @@ module ActiveRecord
       end
 
       class BindCollector < Arel::Collectors::Bind
-        def initialize(conn)
-          @conn = conn
-          super()
-        end
-
-        def compile(bvs)
-          super(bvs.map { |bv| @conn.quote(*bv.reverse) })
+        def compile(bvs, conn)
+          super(bvs.map { |bv| conn.quote(*bv.reverse) })
         end
       end
 
       def collector
         if @prepared_statements
+          raise
           Arel::Collectors::SQLString.new
         else
-          BindCollector.new self
+          BindCollector.new
         end
       end
 
diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
index 6cf0c94eb5..a9d260b98c 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb
@@ -40,12 +40,12 @@ module ActiveRecord
 
       def initialize(connection, logger, connection_options, config)
         super
-        @visitor = BindSubstitution.new self
+        @prepared_statements = false
         configure_connection
       end
 
       def cacheable_query(arel)
-        ActiveRecord::StatementCache.partial_query visitor, arel.ast
+        ActiveRecord::StatementCache.partial_query visitor, arel.ast, collector
       end
 
       MAX_INDEX_LENGTH_FOR_UTF8MB4 = 191
diff --git a/activerecord/lib/active_record/statement_cache.rb b/activerecord/lib/active_record/statement_cache.rb
index 183e795e8f..c89dd48642 100644
--- a/activerecord/lib/active_record/statement_cache.rb
+++ b/activerecord/lib/active_record/statement_cache.rb
@@ -28,7 +28,7 @@ module ActiveRecord
 
     class PartialQuery < Query
       def sql_for(binds, connection)
-        @sql.gsub(/\?/) { connection.quote(*binds.shift.reverse) }
+        @sql.compile binds, connection
       end
     end
 
@@ -36,9 +36,9 @@ module ActiveRecord
       Query.new visitor.accept(ast, Arel::Collectors::SQLString.new).value
     end
 
-    def self.partial_query(visitor, ast)
-      sql = visitor.accept(ast) { "?" }
-      PartialQuery.new sql
+    def self.partial_query(visitor, ast, collector)
+      collected = visitor.accept(ast, collector)
+      PartialQuery.new collected
     end
 
     class Params
-- 
cgit v1.2.3