提交 42a1bf18 编写于 作者: A Aaron Patterson

working against arel/collector branch

上级 70bd5eb4
......@@ -9,7 +9,8 @@ def initialize
# 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
......
......@@ -183,10 +183,6 @@ def missing_default_forged_as_empty_string?(default)
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 @@ def initialize(connection, logger, connection_options, config)
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
......
......@@ -40,12 +40,12 @@ def adapter
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
......
......@@ -28,7 +28,7 @@ def sql_for(binds, connection)
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 @@ def self.query(visitor, ast)
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册