Methods

Class Index [+]

Quicksearch

Arel::Visitors::ToSql

Public Class Methods

new(engine) click to toggle source
    # File lib/arel/visitors/to_sql.rb, line 7
 7:       def initialize engine
 8:         @engine         = engine
 9:         @connection     = nil
10:         @last_column    = nil
11:         @quoted_tables  = {}
12:         @quoted_columns = {}
13:       end

Public Instance Methods

accept(object) click to toggle source
    # File lib/arel/visitors/to_sql.rb, line 15
15:       def accept object
16:         @last_column = nil
17:         @engine.connection_pool.with_connection do |conn|
18:           @connection = conn
19:           super
20:         end
21:       end

Private Instance Methods

quote(value, column = nil) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 286
286:       def quote value, column = nil
287:         @connection.quote value, column
288:       end
quote_column_name(name) click to toggle source
     # 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
quote_table_name(name) click to toggle source
     # 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
visit_ActiveSupport_Multibyte_Chars(o;) click to toggle source
Alias for: visit_String
visit_ActiveSupport_StringInquirer(o;) click to toggle source
Alias for: visit_String
visit_Arel_Attributes_Attribute(o) click to toggle source
     # 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
visit_Arel_Attributes_Boolean(o) click to toggle source
visit_Arel_Attributes_Decimal(o) click to toggle source
visit_Arel_Attributes_Float(o) click to toggle source
visit_Arel_Attributes_Integer(o) click to toggle source
visit_Arel_Attributes_String(o) click to toggle source
visit_Arel_Attributes_Time(o) click to toggle source
visit_Arel_Nodes_And(o) click to toggle source
     # 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
visit_Arel_Nodes_Assignment(o) click to toggle source
     # 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
visit_Arel_Nodes_Avg(o) click to toggle source
     # 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
visit_Arel_Nodes_Between(o) click to toggle source
     # 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
visit_Arel_Nodes_Count(o) click to toggle source
     # 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
visit_Arel_Nodes_DeleteStatement(o) click to toggle source
    # 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
visit_Arel_Nodes_DoesNotMatch(o) click to toggle source
     # 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
visit_Arel_Nodes_Equality(o) click to toggle source
     # 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
visit_Arel_Nodes_Exists(o) click to toggle source
    # 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
visit_Arel_Nodes_GreaterThan(o) click to toggle source
     # 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
visit_Arel_Nodes_GreaterThanOrEqual(o) click to toggle source
     # 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
visit_Arel_Nodes_Group(o) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 116
116:       def visit_Arel_Nodes_Group o
117:         visit o.expr
118:       end
visit_Arel_Nodes_Grouping(o) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 108
108:       def visit_Arel_Nodes_Grouping o
109:         "(#{visit o.expr})"
110:       end
visit_Arel_Nodes_Having(o) click to toggle source
    # File lib/arel/visitors/to_sql.rb, line 95
95:       def visit_Arel_Nodes_Having o
96:         "HAVING #{visit o.expr}"
97:       end
visit_Arel_Nodes_In(o) click to toggle source
     # 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
visit_Arel_Nodes_InnerJoin(o) click to toggle source
     # 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
visit_Arel_Nodes_InsertStatement(o) click to toggle source
    # 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
visit_Arel_Nodes_LessThan(o) click to toggle source
     # 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
visit_Arel_Nodes_LessThanOrEqual(o) click to toggle source
     # 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
visit_Arel_Nodes_Lock(o) click to toggle source

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
visit_Arel_Nodes_Matches(o) click to toggle source
     # 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
visit_Arel_Nodes_Max(o) click to toggle source
     # 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
visit_Arel_Nodes_Min(o) click to toggle source
     # 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
visit_Arel_Nodes_NotEqual(o) click to toggle source
     # 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
visit_Arel_Nodes_NotIn(o) click to toggle source
     # 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
visit_Arel_Nodes_Offset(o) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 99
 99:       def visit_Arel_Nodes_Offset o
100:         "OFFSET #{visit o.value}"
101:       end
visit_Arel_Nodes_On(o) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 190
190:       def visit_Arel_Nodes_On o
191:         "ON #{visit o.expr}"
192:       end
visit_Arel_Nodes_Or(o) click to toggle source
     # 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
visit_Arel_Nodes_Ordering(o) click to toggle source
     # 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
visit_Arel_Nodes_OuterJoin(o) click to toggle source
     # 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
visit_Arel_Nodes_SelectCore(o) click to toggle source
    # 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
visit_Arel_Nodes_SelectStatement(o) click to toggle source
    # 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
visit_Arel_Nodes_SqlLiteral(o;) click to toggle source
Alias for: visit_Fixnum
visit_Arel_Nodes_StringJoin(o) click to toggle source
     # 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
visit_Arel_Nodes_Sum(o) click to toggle source
     # 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
visit_Arel_Nodes_TableAlias(o) click to toggle source
     # 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
visit_Arel_Nodes_UnqualifiedColumn(o) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 249
249:       def visit_Arel_Nodes_UnqualifiedColumn o
250:         "#{quote_column_name o.name}"
251:       end
visit_Arel_Nodes_UpdateStatement(o) click to toggle source
    # 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
visit_Arel_Nodes_Values(o) click to toggle source
    # 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
visit_Arel_SqlLiteral(o;) click to toggle source
Alias for: visit_Fixnum
visit_Arel_Table(o) click to toggle source
     # 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
visit_BigDecimal(o;) click to toggle source
Alias for: visit_String
visit_Bignum(o;) click to toggle source
Alias for: visit_Fixnum
visit_Class(o;) click to toggle source
Alias for: visit_String
visit_Date(o;) click to toggle source
Alias for: visit_String
visit_DateTime(o;) click to toggle source
Alias for: visit_String
visit_FalseClass(o;) click to toggle source
Alias for: visit_String
visit_Fixnum(o;) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 265
265:       def visit_Fixnum o; o end
visit_Float(o;) click to toggle source
Alias for: visit_String
visit_Hash(o;) click to toggle source
Alias for: visit_String
visit_NilClass(o;) click to toggle source
Alias for: visit_String
visit_String(o;) click to toggle source
     # File lib/arel/visitors/to_sql.rb, line 270
270:       def visit_String o; quote(o, @last_column) end
visit_Symbol(o;) click to toggle source
Alias for: visit_String
visit_Time(o;) click to toggle source
Alias for: visit_String
visit_TrueClass(o;) click to toggle source
Alias for: visit_String

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.