# File lib/active_record/relation/query_methods.rb, line 149 149: def arel 150: @arel ||= build_arel 151: end
# File lib/active_record/relation/query_methods.rb, line 174 174: def build_arel 175: arel = table 176: 177: arel = build_joins(arel, @joins_values) unless @joins_values.empty? 178: 179: (@where_values - ['']).uniq.each do |where| 180: where = Arel.sql(where) if String === where 181: arel = arel.where(Arel::Nodes::Grouping.new(where)) 182: end 183: 184: arel = arel.having(*@having_values.uniq.reject{|h| h.blank?}) unless @having_values.empty? 185: 186: arel = arel.take(@limit_value) if @limit_value 187: arel = arel.skip(@offset_value) if @offset_value 188: 189: arel = arel.group(*@group_values.uniq.reject{|g| g.blank?}) unless @group_values.empty? 190: 191: arel = arel.order(*@order_values.uniq.reject{|o| o.blank?}) unless @order_values.empty? 192: 193: arel = build_select(arel, @select_values.uniq) 194: 195: arel = arel.from(@from_value) if @from_value 196: arel = arel.lock(@lock_value) if @lock_value 197: 198: arel 199: end
# File lib/active_record/relation/query_methods.rb, line 118 118: def create_with(value) 119: relation = clone 120: relation.create_with_value = value 121: relation 122: end
# File lib/active_record/relation/query_methods.rb, line 153 153: def custom_join_sql(*joins) 154: arel = table.select_manager 155: 156: joins.each do |join| 157: next if join.blank? 158: 159: @implicit_readonly = true 160: 161: case join 162: when Array 163: join = Arel.sql(join.join(' ')) if array_of_strings?(join) 164: when String 165: join = Arel.sql(join) 166: end 167: 168: arel.join(join) 169: end 170: 171: arel.joins(arel) 172: end
# File lib/active_record/relation/query_methods.rb, line 22 22: def eager_load(*args) 23: relation = clone 24: relation.eager_load_values += args unless args.blank? 25: relation 26: end
# File lib/active_record/relation/query_methods.rb, line 130 130: def extending(*modules, &block) 131: modules << Module.new(&block) if block_given? 132: 133: relation = clone 134: relation.send(:apply_modules, modules.flatten) 135: relation 136: end
# File lib/active_record/relation/query_methods.rb, line 124 124: def from(value) 125: relation = clone 126: relation.from_value = value 127: relation 128: end
# File lib/active_record/relation/query_methods.rb, line 44 44: def group(*args) 45: relation = clone 46: relation.group_values += args.flatten unless args.blank? 47: relation 48: end
# File lib/active_record/relation/query_methods.rb, line 81 81: def having(*args) 82: relation = clone 83: relation.having_values += build_where(*args) unless args.blank? 84: relation 85: end
# File lib/active_record/relation/query_methods.rb, line 12 12: def includes(*args) 13: args.reject! {|a| a.blank? } 14: 15: return clone if args.empty? 16: 17: relation = clone 18: relation.includes_values = (relation.includes_values + args).flatten.uniq 19: relation 20: end
# File lib/active_record/relation/query_methods.rb, line 66 66: def joins(*args) 67: relation = clone 68: 69: args.flatten! 70: relation.joins_values += args unless args.blank? 71: 72: relation 73: end
# File lib/active_record/relation/query_methods.rb, line 87 87: def limit(value) 88: relation = clone 89: relation.limit_value = value 90: relation 91: end
# File lib/active_record/relation/query_methods.rb, line 99 99: def lock(locks = true) 100: relation = clone 101: 102: case locks 103: when String, TrueClass, NilClass 104: relation.lock_value = locks || true 105: else 106: relation.lock_value = false 107: end 108: 109: relation 110: end
# File lib/active_record/relation/query_methods.rb, line 93 93: def offset(value) 94: relation = clone 95: relation.offset_value = value 96: relation 97: end
# File lib/active_record/relation/query_methods.rb, line 50 50: def order(*args) 51: relation = clone 52: relation.order_values += args.flatten unless args.blank? 53: relation 54: end
# File lib/active_record/relation/query_methods.rb, line 28 28: def preload(*args) 29: relation = clone 30: relation.preload_values += args unless args.blank? 31: relation 32: end
# File lib/active_record/relation/query_methods.rb, line 112 112: def readonly(value = true) 113: relation = clone 114: relation.readonly_value = value 115: relation 116: end
# File lib/active_record/relation/query_methods.rb, line 56 56: def reorder(*args) 57: ActiveSupport::Deprecation.warn "reorder is deprecated. Please use except(:order).order(...) instead", caller 58: relation = clone 59: unless args.blank? 60: relation.order_values = args 61: relation.reorder_flag = true 62: end 63: relation 64: end
# File lib/active_record/relation/query_methods.rb, line 138 138: def reverse_order 139: order_clause = arel.order_clauses.join(', ') 140: relation = except(:order) 141: 142: order = order_clause.blank? ? 143: "#{@klass.table_name}.#{@klass.primary_key} DESC" : 144: reverse_sql_order(order_clause) 145: 146: relation.order(Arel::SqlLiteral.new(order)) 147: end
# File lib/active_record/relation/query_methods.rb, line 34 34: def select(value = Proc.new) 35: if block_given? 36: to_a.select {|*block_args| value.call(*block_args) } 37: else 38: relation = clone 39: relation.select_values += Array.wrap(value) 40: relation 41: end 42: end
# File lib/active_record/relation/query_methods.rb, line 262 262: def apply_modules(modules) 263: unless modules.empty? 264: @extensions += modules 265: modules.each {|extension| extend(extension) } 266: end 267: end
# File lib/active_record/relation/query_methods.rb, line 281 281: def array_of_strings?(o) 282: o.is_a?(Array) && o.all?{|obj| obj.is_a?(String)} 283: end
# File lib/active_record/relation/query_methods.rb, line 215 215: def build_joins(relation, joins) 216: association_joins = [] 217: 218: joins = @joins_values.map {|j| j.respond_to?(:strip) ? j.strip : j}.uniq 219: 220: joins.each do |join| 221: association_joins << join if [Hash, Array, Symbol].include?(join.class) && !array_of_strings?(join) 222: end 223: 224: stashed_association_joins = joins.grep(ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation) 225: 226: non_association_joins = (joins - association_joins - stashed_association_joins) 227: custom_joins = custom_join_sql(*non_association_joins) 228: 229: join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, association_joins, custom_joins) 230: 231: join_dependency.graft(*stashed_association_joins) 232: 233: @implicit_readonly = true unless association_joins.empty? && stashed_association_joins.empty? 234: 235: to_join = [] 236: 237: join_dependency.join_associations.each do |association| 238: if (association_relation = association.relation).is_a?(Array) 239: to_join << [association_relation.first, association.join_type, association.association_join.first] 240: to_join << [association_relation.last, association.join_type, association.association_join.last] 241: else 242: to_join << [association_relation, association.join_type, association.association_join] 243: end 244: end 245: 246: to_join.uniq.each do |left, join_type, right| 247: relation = relation.join(left, join_type).on(*right) 248: end 249: 250: relation.join(custom_joins) 251: end
# File lib/active_record/relation/query_methods.rb, line 253 253: def build_select(arel, selects) 254: unless selects.empty? 255: @implicit_readonly = false 256: arel.project(*selects) 257: else 258: arel.project(Arel::SqlLiteral.new(@klass.quoted_table_name + '.*')) 259: end 260: end
# File lib/active_record/relation/query_methods.rb, line 203 203: def build_where(opts, other = []) 204: case opts 205: when String, Array 206: [@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))] 207: when Hash 208: attributes = @klass.send(:expand_hash_conditions_for_aggregates, opts) 209: PredicateBuilder.new(table.engine).build_from_hash(attributes, table) 210: else 211: [opts] 212: end 213: end
# File lib/active_record/relation/query_methods.rb, line 269 269: def reverse_sql_order(order_query) 270: order_query.to_s.split(/,/).each { |s| 271: if s.match(/\s(asc|ASC)$/) 272: s.gsub!(/\s(asc|ASC)$/, ' DESC') 273: elsif s.match(/\s(desc|DESC)$/) 274: s.gsub!(/\s(desc|DESC)$/, ' ASC') 275: else 276: s.concat(' DESC') 277: end 278: }.join(',') 279: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.