blob: 97336573655d294bd88bb94693e9a29490d16a21 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
module Arel
class Join
def table_sql(formatter = Sql::TableReference.new(self))
relation1.externalize.table_sql(formatter)
end
def joins(environment, formatter = Sql::TableReference.new(environment))
@joins ||= begin
this_join = [
join_sql,
relation2.externalize.table_sql(formatter),
("ON" unless predicates.blank?),
(ons + relation2.externalize.wheres).collect { |p| p.bind(environment.relation).to_sql(Sql::WhereClause.new(environment)) }.join(' AND ')
].compact.join(" ")
[relation1.joins(environment), this_join, relation2.joins(environment)].compact.join(" ")
end
end
end
class InnerJoin < Join
def join_sql; "INNER JOIN" end
end
class OuterJoin < Join
def join_sql; "LEFT OUTER JOIN" end
end
class StringJoin < Join
def joins(environment, formatter = Sql::TableReference.new(environment))
[relation1.joins(environment), relation2].compact.join(" ")
end
end
end
|