class ActiveRecord::Result

def hash_rows

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

def hash_rows: () -> untyped

This signature was generated using 3 samples from 1 application.

def hash_rows
  @hash_rows ||=
    begin
      # We freeze the strings to prevent them getting duped when
      # used as keys in ActiveRecord::Base's @attributes hash
      columns = @columns.map(&:-@)
      length  = columns.length
      template = nil
      @rows.map { |row|
        if template
          # We use transform_values to build subsequent rows from the
          # hash of the first row. This is faster because we avoid any
          # reallocs and in Ruby 2.7+ avoid hashing entirely.
          index = -1
          template.transform_values do
            row[index += 1]
          end
        else
          # In the past we used Hash[columns.zip(row)]
          #  though elegant, the verbose way is much more efficient
          #  both time and memory wise cause it avoids a big array allocation
          #  this method is called a lot and needs to be micro optimised
          hash = {}
          index = 0
          while index < length
            hash[columns[index]] = row[index]
            index += 1
          end
          # It's possible to select the same column twice, in which case
          # we can't use a template
          template = hash if hash.length == length
          hash
        end
      }
    end
end