提交 da142cd8 编写于 作者: P Pratik Naik

Supplying Arel::SqlLiteral is much faster

上级 378464a2
......@@ -282,8 +282,11 @@ def to_sql
def scope_for_create
@scope_for_create ||= begin
@create_with_value || wheres.inject({}) do |hash, where|
hash[where.operand1.name] = where.operand2.value if where.is_a?(Arel::Predicates::Equality)
@create_with_value || @where_values.inject({}) do |hash, where|
if where.is_a?(Arel::Predicates::Equality)
hash[where.operand1.name] = where.operand2.respond_to?(:value) ? where.operand2.value : where.operand2
end
hash
end
end
......
......@@ -119,8 +119,16 @@ def build_arel
end
end
@where_values.uniq.each do |w|
arel = w.is_a?(String) ? arel.where(w) : arel.where(*w)
@where_values.uniq.each do |where|
next if where.blank?
case where
when Arel::SqlLiteral
arel = arel.where(where)
else
sql = where.is_a?(String) ? where : where.to_sql
arel = arel.where(Arel::SqlLiteral.new("(#{sql})"))
end
end
@having_values.uniq.each do |h|
......@@ -135,7 +143,7 @@ def build_arel
end
@order_values.uniq.each do |o|
arel = arel.order(o) if o.present?
arel = arel.order(Arel::SqlLiteral.new(o.to_s)) if o.present?
end
selects = @select_values.uniq
......@@ -169,8 +177,7 @@ def build_where(*args)
builder = PredicateBuilder.new(table.engine)
conditions = if [String, Array].include?(args.first.class)
sql = @klass.send(:sanitize_sql, args.size > 1 ? args : args.first)
Arel::SqlLiteral.new("(#{sql})") if sql.present?
@klass.send(:sanitize_sql, args.size > 1 ? args : args.first)
elsif args.first.is_a?(Hash)
attributes = @klass.send(:expand_hash_conditions_for_aggregates, args.first)
builder.build_from_hash(attributes, table)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册