Module: ActiveRecord::QueryMethods

Extended by:
ActiveSupport::Concern
Defined in:
activerecord/lib/active_record/relation/query_methods.rb

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from ActiveSupport::Concern

append_features, extended, included

Instance Attribute Details

- (Object) create_with_value

Returns the value of attribute create_with_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def create_with_value
  @create_with_value
end

- (Object) eager_load_values

Returns the value of attribute eager_load_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def eager_load_values
  @eager_load_values
end

- (Object) from_value

Returns the value of attribute from_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def from_value
  @from_value
end

- (Object) group_values

Returns the value of attribute group_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def group_values
  @group_values
end

- (Object) having_values

Returns the value of attribute having_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def having_values
  @having_values
end

- (Object) includes_values

Returns the value of attribute includes_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def includes_values
  @includes_values
end

- (Object) joins_values

Returns the value of attribute joins_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def joins_values
  @joins_values
end

- (Object) limit_value

Returns the value of attribute limit_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def limit_value
  @limit_value
end

- (Object) lock_value

Returns the value of attribute lock_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def lock_value
  @lock_value
end

- (Object) offset_value

Returns the value of attribute offset_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def offset_value
  @offset_value
end

- (Object) order_values

Returns the value of attribute order_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def order_values
  @order_values
end

- (Object) preload_values

Returns the value of attribute preload_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def preload_values
  @preload_values
end

- (Object) readonly_value

Returns the value of attribute readonly_value



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def readonly_value
  @readonly_value
end

- (Object) reorder_flag

Returns the value of attribute reorder_flag



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def reorder_flag
  @reorder_flag
end

- (Object) select_values

Returns the value of attribute select_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def select_values
  @select_values
end

- (Object) where_values

Returns the value of attribute where_values



8
9
10
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 8

def where_values
  @where_values
end

Instance Method Details

- (Object) arel



149
150
151
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 149

def arel
  @arel ||= build_arel
end

- (Object) build_arel



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 174

def build_arel
  arel = table

  arel = build_joins(arel, @joins_values) unless @joins_values.empty?

  (@where_values - ['']).uniq.each do |where|
    where = Arel.sql(where) if String === where
    arel = arel.where(Arel::Nodes::Grouping.new(where))
  end

  arel = arel.having(*@having_values.uniq.reject{|h| h.blank?}) unless @having_values.empty?

  arel = arel.take(@limit_value) if @limit_value
  arel = arel.skip(@offset_value) if @offset_value

  arel = arel.group(*@group_values.uniq.reject{|g| g.blank?}) unless @group_values.empty?

  arel = arel.order(*@order_values.uniq.reject{|o| o.blank?}) unless @order_values.empty?

  arel = build_select(arel, @select_values.uniq)

  arel = arel.from(@from_value) if @from_value
  arel = arel.lock(@lock_value) if @lock_value

  arel
end

- (Object) create_with(value)



118
119
120
121
122
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 118

def create_with(value)
  relation = clone
  relation.create_with_value = value
  relation
end

- (Object) custom_join_sql(*joins)



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 153

def custom_join_sql(*joins)
  arel = table.select_manager

  joins.each do |join|
    next if join.blank?

    @implicit_readonly = true

    case join
    when Array
      join = Arel.sql(join.join(' ')) if array_of_strings?(join)
    when String
      join = Arel.sql(join)
    end

    arel.join(join)
  end

  arel.joins(arel)
end

- (Object) eager_load(*args)



22
23
24
25
26
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 22

def eager_load(*args)
  relation = clone
  relation.eager_load_values += args unless args.blank?
  relation
end

- (Object) extending(*modules, &block)



130
131
132
133
134
135
136
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 130

def extending(*modules, &block)
  modules << Module.new(&block) if block_given?

  relation = clone
  relation.send(:apply_modules, modules.flatten)
  relation
end

- (Object) from(value)



124
125
126
127
128
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 124

def from(value)
  relation = clone
  relation.from_value = value
  relation
end

- (Object) group(*args)



44
45
46
47
48
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 44

def group(*args)
  relation = clone
  relation.group_values += args.flatten unless args.blank?
  relation
end

- (Object) having(*args)



81
82
83
84
85
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 81

def having(*args)
  relation = clone
  relation.having_values += build_where(*args) unless args.blank?
  relation
end

- (Object) includes(*args)



12
13
14
15
16
17
18
19
20
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 12

def includes(*args)
  args.reject! {|a| a.blank? }

  return clone if args.empty?

  relation = clone
  relation.includes_values = (relation.includes_values + args).flatten.uniq
  relation
end

- (Object) joins(*args)



66
67
68
69
70
71
72
73
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 66

def joins(*args)
  relation = clone

  args.flatten!
  relation.joins_values += args unless args.blank?

  relation
end

- (Object) limit(value)



87
88
89
90
91
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 87

def limit(value)
  relation = clone
  relation.limit_value = value
  relation
end

- (Object) lock(locks = true)



99
100
101
102
103
104
105
106
107
108
109
110
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 99

def lock(locks = true)
  relation = clone

  case locks
  when String, TrueClass, NilClass
    relation.lock_value = locks || true
  else
    relation.lock_value = false
  end

  relation
end

- (Object) offset(value)



93
94
95
96
97
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 93

def offset(value)
  relation = clone
  relation.offset_value = value
  relation
end

- (Object) order(*args)



50
51
52
53
54
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 50

def order(*args)
  relation = clone
  relation.order_values += args.flatten unless args.blank?
  relation
end

- (Object) preload(*args)



28
29
30
31
32
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 28

def preload(*args)
  relation = clone
  relation.preload_values += args unless args.blank?
  relation
end

- (Object) readonly(value = true)



112
113
114
115
116
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 112

def readonly(value = true)
  relation = clone
  relation.readonly_value = value
  relation
end

- (Object) reorder(*args)



56
57
58
59
60
61
62
63
64
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 56

def reorder(*args)
  ActiveSupport::Deprecation.warn "reorder is deprecated. Please use except(:order).order(...) instead", caller
  relation = clone
  unless args.blank?
    relation.order_values = args
    relation.reorder_flag = true
  end
  relation
end

- (Object) reverse_order



138
139
140
141
142
143
144
145
146
147
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 138

def reverse_order
  order_clause = arel.order_clauses.join(', ')
  relation = except(:order)

  order = order_clause.blank? ?
    "#{@klass.table_name}.#{@klass.primary_key} DESC" :
    reverse_sql_order(order_clause)

  relation.order(Arel::SqlLiteral.new(order))
end

- (Object) select(value = Proc.new)



34
35
36
37
38
39
40
41
42
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 34

def select(value = Proc.new)
  if block_given?
    to_a.select {|*block_args| value.call(*block_args) }
  else
    relation = clone
    relation.select_values += Array.wrap(value)
    relation
  end
end

- (Object) where(opts, *rest)



75
76
77
78
79
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 75

def where(opts, *rest)
  relation = clone
  relation.where_values += build_where(opts, rest) unless opts.blank?
  relation
end