提交 a9336a67 编写于 作者: R Ryuta Kamizono

Always use faster `HomogeneousIn` in array handler

上级 de252071
......@@ -20,23 +20,19 @@ def call(attribute, value)
case values.length
when 0 then NullPredicate
when 1 then predicate_builder.build(attribute, values.first)
else
if nils.empty? && ranges.empty?
return Arel::Nodes::HomogeneousIn.new(values, attribute, :in)
else
attribute.in values.map { |v|
predicate_builder.build_bind_attribute(attribute.name, v)
}
end
else Arel::Nodes::HomogeneousIn.new(values, attribute, :in)
end
unless nils.empty?
values_predicate = values_predicate.or(predicate_builder.build(attribute, nil))
values_predicate = values_predicate.or(attribute.eq(nil))
end
array_predicates = ranges.map { |range| predicate_builder.build(attribute, range) }
array_predicates.unshift(values_predicate)
array_predicates.inject(&:or)
if ranges.empty?
values_predicate
else
array_predicates = ranges.map! { |range| predicate_builder.build(attribute, range) }
array_predicates.inject(values_predicate, &:or)
end
end
private
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册