Module: Nativepluck::InstanceMethods

Included in:
ActiveRecord::Calculations
Defined in:
lib/nativepluck.rb

Instance Method Summary collapse

Instance Method Details

#nativepluck(*column_names) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/nativepluck.rb', line 64

def nativepluck(*column_names)
  # Extracted (before modifications) from:
  # ruby-2.5.0/gems/activerecord-5.2.1/lib/active_record/relation/calculations.rb
  if loaded? && (column_names.map(&:to_s) - @klass.attribute_names - @klass.attribute_aliases.keys).empty?
    return records.nativepluck(*column_names)
  end

  if has_include?(column_names.first)
    relation = apply_join_dependency
    relation.nativepluck(*column_names)
  else
    enforce_raw_sql_whitelist(column_names)
    relation = spawn
    relation.select_values = column_names.map { |cn|
      @klass.has_attribute?(cn) || @klass.attribute_alias?(cn) ? arel_attribute(cn) : cn
    }
    Nativepluck.nativepluck(relation)
  end
end