Class: Riddle::Query::Select

Inherits:
Object
  • Object
show all
Defined in:
lib/riddle/query/select.rb

Instance Method Summary collapse

Constructor Details

#initializeSelect

Returns a new instance of Select.



2
3
4
5
6
7
8
9
10
11
12
# File 'lib/riddle/query/select.rb', line 2

def initialize
  @indices               = []
  @matching              = nil
  @wheres                = {}
  @group_by              = nil
  @order_by              = nil
  @order_within_group_by = nil
  @offset                = nil
  @limit                 = nil
  @options               = {}
end

Instance Method Details

#from(*indices) ⇒ Object



14
15
16
17
# File 'lib/riddle/query/select.rb', line 14

def from(*indices)
  @indices += indices
  self
end

#group_by(attribute) ⇒ Object



29
30
31
32
# File 'lib/riddle/query/select.rb', line 29

def group_by(attribute)
  @group_by = attribute
  self
end

#limit(limit) ⇒ Object



44
45
46
47
# File 'lib/riddle/query/select.rb', line 44

def limit(limit)
  @limit = limit
  self
end

#matching(match) ⇒ Object



19
20
21
22
# File 'lib/riddle/query/select.rb', line 19

def matching(match)
  @matching = match
  self
end

#offset(offset) ⇒ Object



49
50
51
52
# File 'lib/riddle/query/select.rb', line 49

def offset(offset)
  @offset = offset
  self
end

#order_by(order) ⇒ Object



34
35
36
37
# File 'lib/riddle/query/select.rb', line 34

def order_by(order)
  @order_by = order
  self
end

#order_within_group_by(order) ⇒ Object



39
40
41
42
# File 'lib/riddle/query/select.rb', line 39

def order_within_group_by(order)
  @order_within_group_by = order
  self
end

#to_sqlObject



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/riddle/query/select.rb', line 59

def to_sql
  sql = "SELECT * FROM #{ @indices.join(', ') }"
  sql << " WHERE #{ combined_wheres }" if wheres?
  sql << " GROUP BY #{@group_by}"      if !@group_by.nil?
  sql << " ORDER BY #{@order_by}"      if !@order_by.nil?
  unless @order_within_group_by.nil?
    sql << " WITHIN GROUP ORDER BY #{@order_within_group_by}"
  end
  sql << " #{limit_clause}"   unless @limit.nil? && @offset.nil?
  sql << " #{options_clause}" unless @options.empty?

  sql
end

#where(filters = {}) ⇒ Object



24
25
26
27
# File 'lib/riddle/query/select.rb', line 24

def where(filters = {})
  @wheres.merge!(filters)
  self
end

#with_options(options = {}) ⇒ Object



54
55
56
57
# File 'lib/riddle/query/select.rb', line 54

def with_options(options = {})
  @options.merge! options
  self
end