blob: d4eb4feb566593ae4d135f2948bac5ea8f458b6e (
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
class SelectBuilder < SqlBuilder
def select(&block)
@selects = SelectsBuilder.new(&block)
end
def from(table, &block)
@table = table
@joins = JoinsBuilder.new(&block)
end
delegate :inner_join, :left_outer_join, :to => :@joins
def where(&block)
@conditions ||= ConditionsBuilder.new
@conditions.call(&block)
end
def order_by(&block)
@orders = OrderBuilder.new(&block)
end
def limit(i, offset = nil)
@limit = i
offset(offset) if offset
end
def offset(i)
@offset = i
end
def to_s
[select_clause,
from_clause,
where_clause,
order_by_clause,
limit_clause,
offset_clause].compact.join("\n")
end
private
def select_clause
"SELECT #{@selects}" unless @selects.blank?
end
def from_clause
"FROM #{@table} #{@joins}" unless @table.blank?
end
def where_clause
"WHERE #{@conditions}" unless @conditions.blank?
end
def order_by_clause
"ORDER BY #{@orders}" unless @orders.blank?
end
def limit_clause
"LIMIT #{@limit}" unless @limit.blank?
end
def offset_clause
"OFFSET #{@offset}" unless @offset.blank?
end
end
|