# File lib/arel/engines/sql/relations/compiler.rb, line 65
65: def add_limit_on_delete(taken)
66: "LIMIT #{taken}"
67: end
# File lib/arel/engines/sql/relations/compiler.rb, line 33
33: def build_clauses
34: joins = relation.joins(self)
35: wheres = relation.where_clauses
36: groups = relation.group_clauses
37: havings = relation.having_clauses
38: orders = relation.order_clauses
39:
40: clauses = [ "",
41: joins,
42: ("WHERE #{wheres.join(' AND ')}" unless wheres.empty?),
43: ("GROUP BY #{groups.join(', ')}" unless groups.empty?),
44: ("HAVING #{havings.join(' AND ')}" unless havings.empty?),
45: ("ORDER BY #{orders.join(', ')}" unless orders.empty?)
46: ].compact.join ' '
47:
48: offset = relation.skipped
49: limit = relation.taken
50: @engine.connection.add_limit_offset!(clauses, :limit => limit,
51: :offset => offset) if offset || limit
52:
53: clauses << " #{locked}" unless locked.blank?
54: clauses unless clauses.blank?
55: end
# File lib/arel/engines/sql/relations/compiler.rb, line 11
11: def christener
12: relation.christener
13: end
# File lib/arel/engines/sql/relations/compiler.rb, line 57
57: def delete_sql
58: build_query "DELETE",
59: "FROM #{relation.table_sql}",
60: ("WHERE #{relation.wheres.collect { |x| x.to_sql }.join(' AND ')}" unless relation.wheres.blank? ),
61: (add_limit_on_delete(relation.taken) unless relation.taken.blank? )
62: end
# File lib/arel/engines/sql/relations/compiler.rb, line 69
69: def insert_sql(include_returning = true)
70: insertion_attributes_values_sql = if relation.record.is_a?(Value)
71: relation.record.value
72: else
73: attributes = relation.record.keys.sort_by do |attribute|
74: attribute.name.to_s
75: end
76:
77: first = attributes.collect do |key|
78: @engine.connection.quote_column_name(key.name)
79: end.join(', ')
80:
81: second = attributes.collect do |key|
82: key.format(relation.record[key])
83: end.join(', ')
84:
85: build_query "(#{first})", "VALUES (#{second})"
86: end
87:
88: build_query "INSERT",
89: "INTO #{relation.table_sql}",
90: insertion_attributes_values_sql,
91: ("RETURNING #{engine.connection.quote_column_name(relation.primary_key)}" if include_returning && relation.compiler.supports_insert_with_returning?)
92: end
# File lib/arel/engines/sql/relations/compiler.rb, line 15
15: def select_sql
16: projections = @relation.projections
17: if Count === projections.first && projections.size == 1 &&
18: (relation.taken.present? || relation.wheres.present?) && relation.joins(self).blank?
19: subquery = [
20: "SELECT 1 FROM #{relation.from_clauses}", build_clauses
21: ].join ' '
22: query = "SELECT COUNT(*) AS count_id FROM (#{subquery}) AS subquery"
23: else
24: query = [
25: "SELECT #{relation.select_clauses.join(', ')}",
26: "FROM #{relation.from_clauses}",
27: build_clauses
28: ].compact.join ' '
29: end
30: query
31: end
# File lib/arel/engines/sql/relations/compiler.rb, line 116
116: def assignment_sql
117: if relation.assignments.respond_to?(:collect)
118: attributes = relation.assignments.keys.sort_by do |attribute|
119: attribute.name.to_s
120: end
121:
122: attributes.map do |attribute|
123: value = relation.assignments[attribute]
124: "#{@engine.connection.quote_column_name(attribute.name)} = #{attribute.format(value)}"
125: end.join(", ")
126: else
127: relation.assignments.value
128: end
129: end
# File lib/arel/engines/sql/relations/compiler.rb, line 112
112: def build_query(*parts)
113: parts.compact.join(" ")
114: end
# File lib/arel/engines/sql/relations/compiler.rb, line 131
131: def build_update_conditions_sql
132: conditions = ""
133: conditions << " WHERE #{relation.wheres.map { |x| x.to_sql }.join(' AND ')}" unless relation.wheres.blank?
134: conditions << " ORDER BY #{relation.order_clauses.join(', ')}" unless relation.orders.blank?
135:
136: taken = relation.taken
137: unless taken.blank?
138: conditions = limited_update_conditions(conditions, taken)
139: end
140:
141: conditions
142: end
# File lib/arel/engines/sql/relations/compiler.rb, line 144
144: def limited_update_conditions(conditions, taken)
145: conditions << " LIMIT #{taken}"
146: quoted_primary_key = @engine.connection.quote_column_name(relation.primary_key)
147: "WHERE #{quoted_primary_key} IN (SELECT #{quoted_primary_key} FROM #{@engine.connection.quote_table_name relation.table.name} #{conditions})"
148: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.