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

Supplying Arel::SqlLiteral is much faster

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