arel_extensions 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,32 +22,32 @@ module ArelExtensions
22
22
  collector
23
23
  end
24
24
  end
25
-
26
- def visit_ArelExtensions_Nodes_AiMatches o, collector
27
- collector = visit o.left.ai_collate, collector
28
- collector << ' LIKE '
29
- collector = visit o.right.ai_collate, collector
30
- if o.escape
31
- collector << ' ESCAPE '
32
- visit o.escape, collector
33
- else
34
- collector
35
- end
36
- end
37
-
38
- def visit_ArelExtensions_Nodes_AiIMatches o, collector
39
- collector = visit o.left.collate(true,true), collector
40
- collector << ' LIKE '
41
- collector = visit o.right.collate(true,true), collector
42
- if o.escape
43
- collector << ' ESCAPE '
44
- visit o.escape, collector
45
- else
46
- collector
47
- end
48
- end
49
25
 
50
- def visit_ArelExtensions_Nodes_SMatches o, collector
26
+ def visit_ArelExtensions_Nodes_AiMatches o, collector
27
+ collector = visit o.left.ai_collate, collector
28
+ collector << ' LIKE '
29
+ collector = visit o.right.ai_collate, collector
30
+ if o.escape
31
+ collector << ' ESCAPE '
32
+ visit o.escape, collector
33
+ else
34
+ collector
35
+ end
36
+ end
37
+
38
+ def visit_ArelExtensions_Nodes_AiIMatches o, collector
39
+ collector = visit o.left.collate(true,true), collector
40
+ collector << ' LIKE '
41
+ collector = visit o.right.collate(true,true), collector
42
+ if o.escape
43
+ collector << ' ESCAPE '
44
+ visit o.escape, collector
45
+ else
46
+ collector
47
+ end
48
+ end
49
+
50
+ def visit_ArelExtensions_Nodes_SMatches o, collector
51
51
  collector = visit o.left.collate, collector
52
52
  collector << ' LIKE '
53
53
  collector = visit o.right.collate, collector
@@ -57,22 +57,22 @@ module ArelExtensions
57
57
  else
58
58
  collector
59
59
  end
60
- end
61
-
62
- def visit_ArelExtensions_Nodes_Collate o, collector
63
- if o.ai
64
- collector = visit o.expressions.first, collector
65
- collector << ' COLLATE NOACCENTS'
66
- elsif o.ci
67
- collector = visit o.expressions.first, collector
68
- collector << ' COLLATE NOCASE'
69
- else
70
- collector = visit o.expressions.first, collector
71
- collector << ' COLLATE BINARY'
72
- end
60
+ end
61
+
62
+ def visit_ArelExtensions_Nodes_Collate o, collector
63
+ if o.ai
64
+ collector = visit o.expressions.first, collector
65
+ collector << ' COLLATE NOACCENTS'
66
+ elsif o.ci
67
+ collector = visit o.expressions.first, collector
68
+ collector << ' COLLATE NOCASE'
69
+ else
70
+ collector = visit o.expressions.first, collector
71
+ collector << ' COLLATE BINARY'
72
+ end
73
73
  collector
74
- end
75
-
74
+ end
75
+
76
76
 
77
77
  def visit_ArelExtensions_Nodes_IDoesNotMatch o, collector
78
78
  collector = visit o.left.lower, collector
@@ -154,16 +154,16 @@ module ArelExtensions
154
154
  collector << ' IS NULL'
155
155
  collector
156
156
  end
157
-
158
- def visit_ArelExtensions_Nodes_IsNotNull o, collector
159
- collector = visit o.left, collector
160
- collector << ' IS NOT NULL'
161
- collector
162
- end
157
+
158
+ def visit_ArelExtensions_Nodes_IsNotNull o, collector
159
+ collector = visit o.left, collector
160
+ collector << ' IS NOT NULL'
161
+ collector
162
+ end
163
163
 
164
164
  def visit_ArelExtensions_Nodes_Rand o, collector
165
165
  collector << "RANDOM("
166
- if o.left != nil && o.right != nil
166
+ if o.left != nil && o.right != nil
167
167
  collector = visit o.left, collector
168
168
  collector << Arel::Visitors::SQLite::COMMA
169
169
  collector = visit o.right, collector
@@ -221,155 +221,166 @@ module ArelExtensions
221
221
  collector
222
222
  end
223
223
 
224
- if Arel::VERSION.to_i < 7
225
- def visit_ArelExtensions_InsertManager_BulkValues o, collector
226
- o.left.each_with_index do |row, idx|
227
- collector << 'SELECT '
228
- v = Arel::Nodes::Values.new(row, o.cols)
229
- len = v.expressions.length - 1
230
- v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
231
- case value
232
- when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
233
- collector = visit value.as(attr.name), collector
234
- else
235
- collector << quote(value, attr && column_for(attr)).to_s
236
- if idx == 0
237
- collector << " AS "
238
- collector << quote(attr.name)
224
+ if Arel::VERSION.to_i < 7
225
+ def visit_ArelExtensions_InsertManager_BulkValues o, collector
226
+ o.left.each_with_index do |row, idx|
227
+ collector << 'SELECT '
228
+ v = Arel::Nodes::Values.new(row, o.cols)
229
+ len = v.expressions.length - 1
230
+ v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
231
+ case value
232
+ when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
233
+ collector = visit value.as(attr.name), collector
234
+ else
235
+ collector << quote(value, attr && column_for(attr)).to_s
236
+ if idx == 0
237
+ collector << " AS "
238
+ collector << quote(attr.name)
239
+ end
239
240
  end
240
- end
241
- collector << Arel::Visitors::SQLite::COMMA unless i == len
242
- }
243
- collector << ' UNION ALL ' unless idx == o.left.length - 1
241
+ collector << Arel::Visitors::SQLite::COMMA unless i == len
242
+ }
243
+ collector << ' UNION ALL ' unless idx == o.left.length - 1
244
+ end
245
+ collector
246
+ end
247
+ else
248
+ def visit_ArelExtensions_InsertManager_BulkValues o, collector
249
+ o.left.each_with_index do |row, idx|
250
+ collector << 'SELECT '
251
+ v = Arel::Nodes::Values.new(row, o.cols)
252
+ len = v.expressions.length - 1
253
+ v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
254
+ case value
255
+ when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
256
+ collector = visit value.as(attr.name), collector
257
+ else
258
+ collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
259
+ if idx == 0
260
+ collector << " AS "
261
+ collector << quote(attr.name)
262
+ end
263
+ end
264
+ collector << Arel::Visitors::SQLite::COMMA unless i == len
265
+ }
266
+ collector << ' UNION ALL ' unless idx == o.left.length - 1
267
+ end
268
+ collector
269
+ end
270
+ end
271
+
272
+ def visit_ArelExtensions_Nodes_Union o, collector
273
+ if o.left.is_a?(Arel::SelectManager)
274
+ collector = visit o.left.ast, collector
275
+ else
276
+ collector = visit o.left, collector
277
+ end
278
+ collector << " UNION "
279
+ if o.right.is_a?(Arel::SelectManager)
280
+ collector = visit o.right.ast, collector
281
+ else
282
+ collector = visit o.right, collector
244
283
  end
245
284
  collector
246
285
  end
247
- else
248
- def visit_ArelExtensions_InsertManager_BulkValues o, collector
249
- o.left.each_with_index do |row, idx|
250
- collector << 'SELECT '
251
- v = Arel::Nodes::Values.new(row, o.cols)
252
- len = v.expressions.length - 1
253
- v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
254
- case value
255
- when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
256
- collector = visit value.as(attr.name), collector
257
- else
258
- collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
259
- if idx == 0
260
- collector << " AS "
261
- collector << quote(attr.name)
262
- end
263
- end
264
- collector << Arel::Visitors::SQLite::COMMA unless i == len
265
- }
266
- collector << ' UNION ALL ' unless idx == o.left.length - 1
286
+
287
+ def visit_ArelExtensions_Nodes_UnionAll o, collector
288
+ if o.left.is_a?(Arel::SelectManager)
289
+ collector = visit o.left.ast, collector
290
+ else
291
+ collector = visit o.left, collector
292
+ end
293
+ collector << " UNION ALL "
294
+ if o.right.is_a?(Arel::SelectManager)
295
+ collector = visit o.right.ast, collector
296
+ else
297
+ collector = visit o.right, collector
267
298
  end
268
299
  collector
269
300
  end
270
- end
271
-
272
-
273
- def visit_ArelExtensions_Nodes_Union o, collector
274
- if o.left.is_a?(Arel::SelectManager)
275
- collector = visit o.left.ast, collector
276
- else
277
- collector = visit o.left, collector
278
- end
279
- collector << " UNION "
280
- if o.right.is_a?(Arel::SelectManager)
281
- collector = visit o.right.ast, collector
282
- else
283
- collector = visit o.right, collector
284
- end
285
- collector
286
- end
287
-
288
- def visit_ArelExtensions_Nodes_UnionAll o, collector
289
- if o.left.is_a?(Arel::SelectManager)
290
- collector = visit o.left.ast, collector
291
- else
292
- collector = visit o.left, collector
293
- end
294
- collector << " UNION ALL "
295
- if o.right.is_a?(Arel::SelectManager)
296
- collector = visit o.right.ast, collector
297
- else
298
- collector = visit o.right, collector
299
- end
300
- collector
301
- end
302
-
303
-
304
- def get_time_converted element
305
- if element.is_a?(Time)
306
- return Arel::Nodes::NamedFunction.new('STRFTIME',[element, '%H:%M:%S'])
307
- elsif element.is_a?(Arel::Attributes::Attribute)
308
- col = Arel::Table.engine.connection.schema_cache.columns_hash(element.relation.table_name)[element.name.to_s]
309
- if col && (col.type == :time)
310
- return Arel::Nodes::NamedFunction.new('STRFTIME',[element, '%H:%M:%S'])
311
- else
312
- return element
313
- end
314
- else
315
- return element
316
- end
317
- end
318
-
319
- remove_method(:visit_Arel_Nodes_GreaterThanOrEqual) rescue nil
320
- def visit_Arel_Nodes_GreaterThanOrEqual o, collector
321
- collector = visit get_time_converted(o.left), collector
322
- collector << " >= "
323
- collector = visit get_time_converted(o.right), collector
324
- collector
325
- end
326
-
327
- remove_method(:visit_Arel_Nodes_GreaterThan) rescue nil
328
- def visit_Arel_Nodes_GreaterThan o, collector
329
- collector = visit get_time_converted(o.left), collector
330
- collector << " > "
331
- collector = visit get_time_converted(o.right), collector
332
- collector
333
- end
334
-
335
- remove_method(:visit_Arel_Nodes_LessThanOrEqual) rescue nil
336
- def visit_Arel_Nodes_LessThanOrEqual o, collector
337
- collector = visit get_time_converted(o.left), collector
338
- collector << " <= "
339
- collector = visit get_time_converted(o.right), collector
340
- collector
341
- end
342
-
343
- remove_method(:visit_Arel_Nodes_LessThan) rescue nil
344
- def visit_Arel_Nodes_LessThan o, collector
345
- collector = visit get_time_converted(o.left), collector
346
- collector << " < "
347
- collector = visit get_time_converted(o.right), collector
348
- collector
349
- end
350
-
351
-
352
- alias_method :old_visit_Arel_Nodes_SelectStatement, :visit_Arel_Nodes_SelectStatement
353
- def visit_Arel_Nodes_SelectStatement o, collector
354
- if !collector.value.blank? && o.limit.blank?
355
- o = o.dup
356
- o.orders = []
357
- end
358
- old_visit_Arel_Nodes_SelectStatement(o,collector)
359
- end
360
-
361
- def visit_ArelExtensions_Nodes_FormattedNumber o, collector
362
-
363
- format = Arel::Nodes::NamedFunction.new('printf',[Arel::Nodes.build_quoted(o.original_string),o.left])
364
- locale_map = Arel::Visitors::SQLite::NUMBER_COMMA_MAPPING[o.locale]
365
- if locale_map
366
- format = format.replace(',',locale_map[',']).replace('.',locale_map['.'])
367
- end
368
- visit format, collector
369
- collector
370
- end
371
-
372
-
301
+
302
+ def get_time_converted element
303
+ if element.is_a?(Time)
304
+ return Arel::Nodes::NamedFunction.new('STRFTIME',[element, '%H:%M:%S'])
305
+ elsif element.is_a?(Arel::Attributes::Attribute)
306
+ col = Arel::Table.engine.connection.schema_cache.columns_hash(element.relation.table_name)[element.name.to_s]
307
+ if col && (col.type == :time)
308
+ return Arel::Nodes::NamedFunction.new('STRFTIME',[element, '%H:%M:%S'])
309
+ else
310
+ return element
311
+ end
312
+ else
313
+ return element
314
+ end
315
+ end
316
+
317
+ remove_method(:visit_Arel_Nodes_GreaterThanOrEqual) rescue nil
318
+ def visit_Arel_Nodes_GreaterThanOrEqual o, collector
319
+ collector = visit get_time_converted(o.left), collector
320
+ collector << " >= "
321
+ collector = visit get_time_converted(o.right), collector
322
+ collector
323
+ end
324
+
325
+ remove_method(:visit_Arel_Nodes_GreaterThan) rescue nil
326
+ def visit_Arel_Nodes_GreaterThan o, collector
327
+ collector = visit get_time_converted(o.left), collector
328
+ collector << " > "
329
+ collector = visit get_time_converted(o.right), collector
330
+ collector
331
+ end
332
+
333
+ remove_method(:visit_Arel_Nodes_LessThanOrEqual) rescue nil
334
+ def visit_Arel_Nodes_LessThanOrEqual o, collector
335
+ collector = visit get_time_converted(o.left), collector
336
+ collector << " <= "
337
+ collector = visit get_time_converted(o.right), collector
338
+ collector
339
+ end
340
+
341
+ remove_method(:visit_Arel_Nodes_LessThan) rescue nil
342
+ def visit_Arel_Nodes_LessThan o, collector
343
+ collector = visit get_time_converted(o.left), collector
344
+ collector << " < "
345
+ collector = visit get_time_converted(o.right), collector
346
+ collector
347
+ end
348
+
349
+
350
+ alias_method :old_visit_Arel_Nodes_SelectStatement, :visit_Arel_Nodes_SelectStatement
351
+ def visit_Arel_Nodes_SelectStatement o, collector
352
+ if !collector.value.blank? && o.limit.blank?
353
+ o = o.dup
354
+ o.orders = []
355
+ end
356
+ old_visit_Arel_Nodes_SelectStatement(o,collector)
357
+ end
358
+
359
+ alias_method :old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As
360
+ def visit_Arel_Nodes_As o, collector
361
+ if o.left.is_a?(Arel::Nodes::Binary)
362
+ collector << '('
363
+ collector = visit o.left, collector
364
+ collector << ')'
365
+ else
366
+ collector = visit o.left, collector
367
+ end
368
+ collector << " AS \""
369
+ collector = visit o.right, collector
370
+ collector << "\""
371
+ collector
372
+ end
373
+
374
+ def visit_ArelExtensions_Nodes_FormattedNumber o, collector
375
+ format = Arel::Nodes::NamedFunction.new('printf',[Arel::Nodes.build_quoted(o.original_string),o.left])
376
+ locale_map = Arel::Visitors::SQLite::NUMBER_COMMA_MAPPING[o.locale]
377
+ if locale_map
378
+ format = format.replace(',',locale_map[',']).replace('.',locale_map['.'])
379
+ end
380
+ visit format, collector
381
+ collector
382
+ end
383
+
373
384
  end
374
385
  end
375
386
  end