Class: DataMapper::Queries::SelectStatement

Inherits:
Object
  • Object
show all
Defined in:
lib/data_mapper/queries/select_statement.rb

Instance Method Summary collapse

Constructor Details

#initialize(database, options) ⇒ SelectStatement

Returns a new instance of SelectStatement.



8
9
10
# File 'lib/data_mapper/queries/select_statement.rb', line 8

def initialize(database, options)
  @database, @options = database, options
end

Instance Method Details

#conditionsObject



66
67
68
# File 'lib/data_mapper/queries/select_statement.rb', line 66

def conditions
  @conditions ||= Conditions.new(@database, @options)
end

#escape(conditions) ⇒ Object



28
29
30
# File 'lib/data_mapper/queries/select_statement.rb', line 28

def escape(conditions)
  @database.escape(conditions)
end

#has_id?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/data_mapper/queries/select_statement.rb', line 24

def has_id?
  conditions.has_id?
end

#include?(association_name) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
# File 'lib/data_mapper/queries/select_statement.rb', line 36

def include?(association_name)
  return false if includes.empty?
  includes.include?(association_name)
end

#includesObject



41
42
43
44
# File 'lib/data_mapper/queries/select_statement.rb', line 41

def includes
  list = @options[:include] ||= []
  list.kind_of?(Array) ? list : [list]
end

#inspectObject



32
33
34
# File 'lib/data_mapper/queries/select_statement.rb', line 32

def inspect
  @options.inspect
end

#instance_idObject



62
63
64
# File 'lib/data_mapper/queries/select_statement.rb', line 62

def instance_id
  @options[:id]
end

#klassObject



20
21
22
# File 'lib/data_mapper/queries/select_statement.rb', line 20

def klass
  @options[:class]
end

#limitObject



12
13
14
# File 'lib/data_mapper/queries/select_statement.rb', line 12

def limit
  @options[:limit]
end

#orderObject



16
17
18
# File 'lib/data_mapper/queries/select_statement.rb', line 16

def order
  @options[:order]
end

#reload?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/data_mapper/queries/select_statement.rb', line 46

def reload?
  @options[:reload]
end

#selectObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/data_mapper/queries/select_statement.rb', line 50

def select
  select_columns = @options[:select]
  unless select_columns.nil?
    select_columns = select_columns.kind_of?(Array) ? select_columns : (@options[:select] = [select_columns])
    select_columns.map { |column| @database.quote_column_name(column.to_s) }
  else
    @options[:select] = @database[klass].columns.select do |column|
      include?(column.name) || !column.lazy?
    end.map { |column| column.to_sql }
  end
end

#tableObject



70
71
72
73
74
75
76
# File 'lib/data_mapper/queries/select_statement.rb', line 70

def table
  @table_name || @table_name = if @options.has_key?(:table)
    @database.quote_table_name(@options[:table])
  else
    @database[klass].to_sql
  end
end

#to_sqlObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/data_mapper/queries/select_statement.rb', line 78

def to_sql
  sql = 'SELECT ' << select.join(', ') << ' FROM ' << table
  
  where = []
  
  where += conditions.to_a unless conditions.empty?
  
  unless where.empty?
    sql << ' WHERE (' << where.join(') AND (') << ')'
  end
  
  unless order.nil?
    sql << ' ORDER BY ' << order.to_s
  end
  
  unless limit.nil?
    sql << ' LIMIT ' << limit.to_s
  end
  
  return sql
end