aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sql_algebra/sql_builder/select_builder.rb
blob: 68df68db93fbd1371b8a26b503b3aa27693beb1c (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
class SelectBuilder < SqlBuilder  
  def select(&block)
    @selects = SelectsBuilder.new(&block)
  end
  
  def from(table, &block)
    @table = table
    @joins = JoinsBuilder.new(&block)
  end
  
  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