method
initial_count_for
v8.1.1 -
Show latest stable
- Class:
ActiveRecord::Associations::AliasTracker
initial_count_for(connection, name, table_joins)public
No documentation available.
# File activerecord/lib/active_record/associations/alias_tracker.rb, line 28
def self.initial_count_for(connection, name, table_joins)
quoted_name_escaped = nil
name_escaped = nil
counts = table_joins.map do |join|
if join.is_a?(Arel::Nodes::StringJoin)
# quoted_name_escaped should be case ignored as some database adapters (Oracle) return quoted name in uppercase
quoted_name_escaped ||= Regexp.escape(connection.quote_table_name(name))
name_escaped ||= Regexp.escape(name)
# Table names + table aliases
join.left.scan(
/JOIN(?:\s+\w+)?\s+(?:\S+\s+)?(?:#{quoted_name_escaped}|#{name_escaped})\sON/
).size
elsif join.is_a?(Arel::Nodes::Join)
join.left.name == name ? 1 : 0
else
raise ArgumentError, "joins list should be initialized by list of Arel::Nodes::Join"
end
end
counts.sum
end