class ActiveRecord::Calculations::ColumnAliasTracker

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/active_record/relation/calculations.rbs

class ActiveRecord::Calculations::ColumnAliasTracker
  def alias_for: (String field) -> String
  def column_alias_for: (String field) -> String
end

:nodoc:

def alias_for(field)

Experimental RBS support (using type sampling data from the type_fusion project).

def alias_for: (String field) -> String

This signature was generated using 2 samples from 1 application.

def alias_for(field)
  aliased_name = column_alias_for(field)
  if @aliases[aliased_name] == 0
    @aliases[aliased_name] = 1
    aliased_name
  else
    # Update the count
    count = @aliases[aliased_name] += 1
    "#{truncate(aliased_name)}_#{count}"
  end
end

def column_alias_for(field)

Experimental RBS support (using type sampling data from the type_fusion project).

def column_alias_for: (String field) -> String

This signature was generated using 1 sample from 1 application.

column_alias_for("count(*)") # => "count_all"
column_alias_for("count(distinct users.id)") # => "count_distinct_users_id"
column_alias_for("sum(id)") # => "sum_id"
column_alias_for("users.id") # => "users_id"

a usable column name:
Converts the given field to the value that the database adapter returns as
def column_alias_for(field)
  column_alias = +field
  column_alias.gsub!(/\*/, "all")
  column_alias.gsub!(/\W+/, " ")
  column_alias.strip!
  column_alias.gsub!(/ +/, "_")
  @connection.table_alias_for(column_alias)
end

def initialize(connection)

:nodoc:
def initialize(connection)
  @connection = connection
  @aliases = Hash.new(0)
end

def truncate(name)

def truncate(name)
  name.slice(0, @connection.table_alias_length - 2)
end