Supplying Arel::SqlLiteral is much faster
This commit is contained in:
parent
378464a2e4
commit
da142cd865
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user