# File lib/arel/visitors/to_sql.rb, line 286
286: def quote value, column = nil
287: @connection.quote value, column
288: end
# File lib/arel/visitors/to_sql.rb, line 294
294: def quote_column_name name
295: @quoted_columns[name] ||= @connection.quote_column_name(name)
296: end
# File lib/arel/visitors/to_sql.rb, line 290
290: def quote_table_name name
291: @quoted_tables[name] ||= @connection.quote_table_name(name)
292: end
# File lib/arel/visitors/to_sql.rb, line 253
253: def visit_Arel_Attributes_Attribute o
254: @last_column = o.column
255: join_name = o.relation.table_alias || o.relation.name
256: "#{quote_table_name join_name}.#{quote_column_name o.name}"
257: end
# File lib/arel/visitors/to_sql.rb, line 216
216: def visit_Arel_Nodes_And o
217: "#{visit o.left} AND #{visit o.right}"
218: end
# File lib/arel/visitors/to_sql.rb, line 224
224: def visit_Arel_Nodes_Assignment o
225: right = quote(o.right, o.left.column)
226: "#{visit o.left} = #{right}"
227: end
# File lib/arel/visitors/to_sql.rb, line 141
141: def visit_Arel_Nodes_Avg o
142: "AVG(#{o.expressions.map { |x|
143: visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
144: end
# File lib/arel/visitors/to_sql.rb, line 150
150: def visit_Arel_Nodes_Between o
151: "#{visit o.left} BETWEEN #{visit o.right}"
152: end
# File lib/arel/visitors/to_sql.rb, line 120
120: def visit_Arel_Nodes_Count o
121: "COUNT(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x|
122: visit x
123: }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
124: end
# File lib/arel/visitors/to_sql.rb, line 24
24: def visit_Arel_Nodes_DeleteStatement o
25: [
26: "DELETE FROM #{visit o.relation}",
27: ("WHERE #{o.wheres.map { |x| visit x }.join ' AND '}" unless o.wheres.empty?)
28: ].compact.join ' '
29: end
# File lib/arel/visitors/to_sql.rb, line 174
174: def visit_Arel_Nodes_DoesNotMatch o
175: "#{visit o.left} NOT LIKE #{visit o.right}"
176: end
# File lib/arel/visitors/to_sql.rb, line 229
229: def visit_Arel_Nodes_Equality o
230: right = o.right
231:
232: if right.nil?
233: "#{visit o.left} IS NULL"
234: else
235: "#{visit o.left} = #{visit right}"
236: end
237: end
# File lib/arel/visitors/to_sql.rb, line 64
64: def visit_Arel_Nodes_Exists o
65: "EXISTS (#{visit o.select_stmt})#{
66: o.alias ? " AS #{visit o.alias}" : ''}"
67: end
# File lib/arel/visitors/to_sql.rb, line 158
158: def visit_Arel_Nodes_GreaterThan o
159: "#{visit o.left} > #{visit o.right}"
160: end
# File lib/arel/visitors/to_sql.rb, line 154
154: def visit_Arel_Nodes_GreaterThanOrEqual o
155: "#{visit o.left} >= #{visit o.right}"
156: end
# File lib/arel/visitors/to_sql.rb, line 116
116: def visit_Arel_Nodes_Group o
117: visit o.expr
118: end
# File lib/arel/visitors/to_sql.rb, line 108
108: def visit_Arel_Nodes_Grouping o
109: "(#{visit o.expr})"
110: end
# File lib/arel/visitors/to_sql.rb, line 95
95: def visit_Arel_Nodes_Having o
96: "HAVING #{visit o.expr}"
97: end
# File lib/arel/visitors/to_sql.rb, line 202
202: def visit_Arel_Nodes_In o
203: right = o.right
204: "#{visit o.left} IN (#{
205: right.empty? ? 'NULL' : right.map { |x| visit x }.join(', ')
206: })"
207: end
# File lib/arel/visitors/to_sql.rb, line 186
186: def visit_Arel_Nodes_InnerJoin o
187: "#{visit o.left} INNER JOIN #{visit o.right} #{visit o.constraint if o.constraint}"
188: end
# File lib/arel/visitors/to_sql.rb, line 52
52: def visit_Arel_Nodes_InsertStatement o
53: [
54: "INSERT INTO #{visit o.relation}",
55:
56: ("(#{o.columns.map { |x|
57: quote_column_name x.name
58: }.join ', '})" unless o.columns.empty?),
59:
60: (visit o.values if o.values),
61: ].compact.join ' '
62: end
# File lib/arel/visitors/to_sql.rb, line 166
166: def visit_Arel_Nodes_LessThan o
167: "#{visit o.left} < #{visit o.right}"
168: end
# File lib/arel/visitors/to_sql.rb, line 162
162: def visit_Arel_Nodes_LessThanOrEqual o
163: "#{visit o.left} <= #{visit o.right}"
164: end
FIXME: this does nothing on SQLLite3, but should do things on other databases.
# File lib/arel/visitors/to_sql.rb, line 105
105: def visit_Arel_Nodes_Lock o
106: end
# File lib/arel/visitors/to_sql.rb, line 170
170: def visit_Arel_Nodes_Matches o
171: "#{visit o.left} LIKE #{visit o.right}"
172: end
# File lib/arel/visitors/to_sql.rb, line 131
131: def visit_Arel_Nodes_Max o
132: "MAX(#{o.expressions.map { |x|
133: visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
134: end
# File lib/arel/visitors/to_sql.rb, line 136
136: def visit_Arel_Nodes_Min o
137: "MIN(#{o.expressions.map { |x|
138: visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
139: end
# File lib/arel/visitors/to_sql.rb, line 239
239: def visit_Arel_Nodes_NotEqual o
240: right = o.right
241:
242: if right.nil?
243: "#{visit o.left} IS NOT NULL"
244: else
245: "#{visit o.left} != #{visit right}"
246: end
247: end
# File lib/arel/visitors/to_sql.rb, line 209
209: def visit_Arel_Nodes_NotIn o
210: right = o.right
211: "#{visit o.left} NOT IN (#{
212: right.empty? ? 'NULL' : right.map { |x| visit x }.join(', ')
213: })"
214: end
# File lib/arel/visitors/to_sql.rb, line 99
99: def visit_Arel_Nodes_Offset o
100: "OFFSET #{visit o.value}"
101: end
# File lib/arel/visitors/to_sql.rb, line 190
190: def visit_Arel_Nodes_On o
191: "ON #{visit o.expr}"
192: end
# File lib/arel/visitors/to_sql.rb, line 220
220: def visit_Arel_Nodes_Or o
221: "#{visit o.left} OR #{visit o.right}"
222: end
# File lib/arel/visitors/to_sql.rb, line 112
112: def visit_Arel_Nodes_Ordering o
113: "#{visit o.expr} #{o.descending? ? 'DESC' : 'ASC'}"
114: end
# File lib/arel/visitors/to_sql.rb, line 182
182: def visit_Arel_Nodes_OuterJoin o
183: "#{visit o.left} LEFT OUTER JOIN #{visit o.right} #{visit o.constraint}"
184: end
# File lib/arel/visitors/to_sql.rb, line 85
85: def visit_Arel_Nodes_SelectCore o
86: [
87: "SELECT #{o.projections.map { |x| visit x }.join ', '}",
88: ("FROM #{visit o.froms}" if o.froms),
89: ("WHERE #{o.wheres.map { |x| visit x }.join ' AND ' }" unless o.wheres.empty?),
90: ("GROUP BY #{o.groups.map { |x| visit x }.join ', ' }" unless o.groups.empty?),
91: (visit(o.having) if o.having),
92: ].compact.join ' '
93: end
# File lib/arel/visitors/to_sql.rb, line 75
75: def visit_Arel_Nodes_SelectStatement o
76: [
77: o.cores.map { |x| visit_Arel_Nodes_SelectCore x }.join,
78: ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
79: ("LIMIT #{o.limit}" if o.limit),
80: (visit(o.offset) if o.offset),
81: (visit(o.lock) if o.lock),
82: ].compact.join ' '
83: end
# File lib/arel/visitors/to_sql.rb, line 178
178: def visit_Arel_Nodes_StringJoin o
179: "#{visit o.left} #{visit o.right}"
180: end
# File lib/arel/visitors/to_sql.rb, line 126
126: def visit_Arel_Nodes_Sum o
127: "SUM(#{o.expressions.map { |x|
128: visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
129: end
# File lib/arel/visitors/to_sql.rb, line 146
146: def visit_Arel_Nodes_TableAlias o
147: "#{visit o.relation} #{quote_table_name o.name}"
148: end
# File lib/arel/visitors/to_sql.rb, line 249
249: def visit_Arel_Nodes_UnqualifiedColumn o
250: "#{quote_column_name o.name}"
251: end
# File lib/arel/visitors/to_sql.rb, line 31
31: def visit_Arel_Nodes_UpdateStatement o
32: if o.orders.empty? && o.limit.nil?
33: wheres = o.wheres
34: else
35: stmt = Nodes::SelectStatement.new
36: core = stmt.cores.first
37: core.froms = o.relation
38: core.projections = [o.relation.primary_key]
39: stmt.limit = o.limit
40: stmt.orders = o.orders
41:
42: wheres = [Nodes::In.new(o.relation.primary_key, [stmt])]
43: end
44:
45: [
46: "UPDATE #{visit o.relation}",
47: ("SET #{o.values.map { |value| visit value }.join ', '}" unless o.values.empty?),
48: ("WHERE #{wheres.map { |x| visit x }.join ' AND '}" unless wheres.empty?)
49: ].compact.join ' '
50: end
# File lib/arel/visitors/to_sql.rb, line 69
69: def visit_Arel_Nodes_Values o
70: "VALUES (#{o.expressions.zip(o.columns).map { |value, column|
71: quote(value, column && column.column)
72: }.join ', '})"
73: end
# File lib/arel/visitors/to_sql.rb, line 194
194: def visit_Arel_Table o
195: if o.table_alias
196: "#{quote_table_name o.name} #{quote_table_name o.table_alias}"
197: else
198: quote_table_name o.name
199: end
200: end
# File lib/arel/visitors/to_sql.rb, line 265
265: def visit_Fixnum o; o end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.