# File lib/arel/algebra/relations/operations/join.rb, line 7
7: def initialize(relation1, relation2 = Nil.instance, *predicates)
8: @relation1 = relation1
9: @relation2 = relation2
10: @predicates = predicates
11: @attributes = nil
12: end
# File lib/arel/algebra/relations/operations/join.rb, line 18
18: def attributes
19: @attributes ||= (relation1.externalize.attributes | relation2.externalize.attributes).bind(self)
20: end
# File lib/arel/algebra/relations/operations/join.rb, line 40
40: def engine
41: relation1.engine != relation2.engine ? Memory::Engine.new : relation1.engine
42: end
# File lib/arel/algebra/relations/operations/join.rb, line 60
60: def eval
61: result = []
62: relation1.call.each do |row1|
63: relation2.call.each do |row2|
64: combined_row = row1.combine(row2, self)
65: if predicates.all? { |p| p.eval(combined_row) }
66: result << combined_row
67: end
68: end
69: end
70: result
71: end
TESTME
# File lib/arel/algebra/relations/operations/join.rb, line 32
32: def externalizable?
33: relation1.externalizable? or relation2.externalizable?
34: end
# File lib/arel/algebra/relations/operations/join.rb, line 36
36: def join?
37: true
38: end
# File lib/arel/algebra/relations/operations/join.rb, line 48
48: def joins(environment, formatter = Sql::TableReference.new(environment))
49: @joins ||= begin
50: this_join = [
51: join_sql,
52: relation2.externalize.table_sql(formatter),
53: ("ON" unless predicates.blank?),
54: (ons + relation2.externalize.wheres).collect { |p| p.bind(environment.relation).to_sql(Sql::WhereClause.new(environment)) }.join(' AND ')
55: ].compact.join(" ")
56: [relation1.joins(environment), this_join, relation2.joins(environment)].compact.join(" ")
57: end
58: end
# File lib/arel/algebra/relations/operations/join.rb, line 14
14: def name
15: relation1.name
16: end
# File lib/arel/algebra/relations/operations/join.rb, line 27
27: def ons
28: @ons ||= @predicates.collect { |p| p.bind(self) }
29: end
# File lib/arel/algebra/relations/operations/join.rb, line 44
44: def table_sql(formatter = Sql::TableReference.new(self))
45: relation1.externalize.table_sql(formatter)
46: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.