arel_extensions 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +131 -5
  4. data/Makefile +31 -1
  5. data/NEWS.md +15 -0
  6. data/README.md +11 -2
  7. data/Rakefile +5 -3
  8. data/arel_extensions.gemspec +3 -5
  9. data/gemfiles/rails5.gemfile +15 -8
  10. data/gemfiles/rails5_1_4.gemfile +11 -9
  11. data/gemfiles/rails5_2.gemfile +16 -9
  12. data/gemfiles/rails6.gemfile +13 -7
  13. data/gemfiles/rails6_1.gemfile +13 -7
  14. data/gemfiles/rails7.gemfile +15 -9
  15. data/gemfiles/rails7_1.gemfile +15 -8
  16. data/gemfiles/rails7_2.gemfile +12 -6
  17. data/gemfiles/rails8.gemfile +7 -7
  18. data/gemfiles/rails8_1.gemfile +4 -4
  19. data/gemspecs/arel_extensions-v1.gemspec +3 -5
  20. data/gemspecs/arel_extensions-v2.gemspec +3 -5
  21. data/lib/arel_extensions/aliases.rb +3 -3
  22. data/lib/arel_extensions/attributes.rb +2 -0
  23. data/lib/arel_extensions/boolean_functions.rb +9 -7
  24. data/lib/arel_extensions/common_sql_functions.rb +5 -3
  25. data/lib/arel_extensions/comparators.rb +6 -4
  26. data/lib/arel_extensions/date_duration.rb +2 -0
  27. data/lib/arel_extensions/helpers.rb +17 -17
  28. data/lib/arel_extensions/insert_manager.rb +5 -1
  29. data/lib/arel_extensions/math.rb +40 -44
  30. data/lib/arel_extensions/math_functions.rb +28 -30
  31. data/lib/arel_extensions/nodes/aggregate_function.rb +4 -4
  32. data/lib/arel_extensions/nodes/blank.rb +6 -4
  33. data/lib/arel_extensions/nodes/case.rb +15 -12
  34. data/lib/arel_extensions/nodes/cast.rb +3 -5
  35. data/lib/arel_extensions/nodes/coalesce.rb +1 -1
  36. data/lib/arel_extensions/nodes/collate.rb +1 -1
  37. data/lib/arel_extensions/nodes/concat.rb +6 -6
  38. data/lib/arel_extensions/nodes/date_diff.rb +40 -49
  39. data/lib/arel_extensions/nodes/duration.rb +2 -2
  40. data/lib/arel_extensions/nodes/format.rb +2 -2
  41. data/lib/arel_extensions/nodes/formatted_date.rb +2 -2
  42. data/lib/arel_extensions/nodes/formatted_number.rb +2 -2
  43. data/lib/arel_extensions/nodes/function.rb +6 -4
  44. data/lib/arel_extensions/nodes/is_null.rb +2 -0
  45. data/lib/arel_extensions/nodes/json.rb +27 -15
  46. data/lib/arel_extensions/nodes/levenshtein_distance.rb +2 -2
  47. data/lib/arel_extensions/nodes/locate.rb +1 -1
  48. data/lib/arel_extensions/nodes/power.rb +2 -2
  49. data/lib/arel_extensions/nodes/rand.rb +2 -2
  50. data/lib/arel_extensions/nodes/repeat.rb +2 -2
  51. data/lib/arel_extensions/nodes/replace.rb +3 -3
  52. data/lib/arel_extensions/nodes/rollup.rb +4 -4
  53. data/lib/arel_extensions/nodes/round.rb +3 -3
  54. data/lib/arel_extensions/nodes/select.rb +1 -1
  55. data/lib/arel_extensions/nodes/std.rb +4 -4
  56. data/lib/arel_extensions/nodes/substring.rb +52 -2
  57. data/lib/arel_extensions/nodes/then.rb +1 -1
  58. data/lib/arel_extensions/nodes/trim.rb +2 -2
  59. data/lib/arel_extensions/nodes/union.rb +3 -3
  60. data/lib/arel_extensions/nodes/union_all.rb +3 -3
  61. data/lib/arel_extensions/nodes/wday.rb +2 -2
  62. data/lib/arel_extensions/null_functions.rb +5 -7
  63. data/lib/arel_extensions/predications.rb +22 -18
  64. data/lib/arel_extensions/string_functions.rb +26 -27
  65. data/lib/arel_extensions/version.rb +3 -1
  66. data/lib/arel_extensions/visitors/convert_format.rb +2 -2
  67. data/lib/arel_extensions/visitors/ibm_db.rb +5 -5
  68. data/lib/arel_extensions/visitors/mssql.rb +91 -92
  69. data/lib/arel_extensions/visitors/mysql.rb +89 -69
  70. data/lib/arel_extensions/visitors/oracle.rb +100 -104
  71. data/lib/arel_extensions/visitors/oracle12.rb +5 -6
  72. data/lib/arel_extensions/visitors/postgresql.rb +107 -94
  73. data/lib/arel_extensions/visitors/sqlite.rb +57 -65
  74. data/lib/arel_extensions/visitors/to_sql.rb +84 -74
  75. data/lib/arel_extensions/visitors.rb +6 -6
  76. data/lib/arel_extensions/warning.rb +5 -5
  77. data/lib/arel_extensions.rb +34 -27
  78. data/test/real_db_test.rb +31 -31
  79. data/test/visitors/test_to_sql.rb +2 -2
  80. data/test/with_ar/all_agnostic_test.rb +149 -15
  81. data/version_v1.rb +3 -1
  82. data/version_v2.rb +3 -1
  83. metadata +2 -30
@@ -13,41 +13,41 @@ module ArelExtensions
13
13
  }
14
14
  NUMBER_COMMA_MAPPING = {'en_US' => '.,', 'fr_FR' => ',', 'sv_SE' => ', '}
15
15
 
16
- def visit_ArelExtensions_Nodes_ByteSize o, collector
16
+ def visit_ArelExtensions_Nodes_ByteSize(o, collector)
17
17
  collector << 'LENGTHB('
18
18
  collector = visit o.expr.coalesce(''), collector
19
19
  collector << ')'
20
20
  collector
21
21
  end
22
22
 
23
- def visit_ArelExtensions_Nodes_CharLength o, collector
23
+ def visit_ArelExtensions_Nodes_CharLength(o, collector)
24
24
  collector << 'LENGTH('
25
25
  collector = visit o.expr.coalesce(''), collector
26
26
  collector << ')'
27
27
  collector
28
28
  end
29
29
 
30
- def visit_ArelExtensions_Nodes_Log10 o, collector
30
+ def visit_ArelExtensions_Nodes_Log10(o, collector)
31
31
  collector << 'LOG('
32
32
  o.expressions.each_with_index { |arg, i|
33
- collector << Arel::Visitors::ToSql::COMMA if i != 0
33
+ collector << COMMA if i != 0
34
34
  collector = visit arg, collector
35
35
  }
36
36
  collector << ',10)'
37
37
  collector
38
38
  end
39
39
 
40
- def visit_ArelExtensions_Nodes_Power o, collector
40
+ def visit_ArelExtensions_Nodes_Power(o, collector)
41
41
  collector << 'POWER('
42
42
  o.expressions.each_with_index { |arg, i|
43
- collector << Arel::Visitors::ToSql::COMMA if i != 0
43
+ collector << COMMA if i != 0
44
44
  collector = visit arg, collector
45
45
  }
46
46
  collector << ')'
47
47
  collector
48
48
  end
49
49
 
50
- def visit_ArelExtensions_Nodes_Concat o, collector
50
+ def visit_ArelExtensions_Nodes_Concat(o, collector)
51
51
  collector << '('
52
52
  o.expressions.each_with_index { |arg, i|
53
53
  collector = visit o.convert_to_string_node(arg), collector
@@ -57,7 +57,7 @@ module ArelExtensions
57
57
  collector
58
58
  end
59
59
 
60
- def visit_ArelExtensions_Nodes_IMatches o, collector
60
+ def visit_ArelExtensions_Nodes_IMatches(o, collector)
61
61
  collector << 'LOWER('
62
62
  collector = visit o.left, collector
63
63
  collector << ') LIKE LOWER('
@@ -71,7 +71,7 @@ module ArelExtensions
71
71
  end
72
72
  end
73
73
 
74
- def visit_ArelExtensions_Nodes_AiMatches o, collector
74
+ def visit_ArelExtensions_Nodes_AiMatches(o, collector)
75
75
  collector = visit o.left.ai_collate, collector
76
76
  collector << ' LIKE '
77
77
  collector = visit o.right.ai_collate, collector
@@ -83,7 +83,7 @@ module ArelExtensions
83
83
  end
84
84
  end
85
85
 
86
- def visit_ArelExtensions_Nodes_AiIMatches o, collector
86
+ def visit_ArelExtensions_Nodes_AiIMatches(o, collector)
87
87
  collector = visit o.left.ai_collate, collector
88
88
  collector << ' LIKE '
89
89
  collector = visit o.right.ai_collate, collector
@@ -95,7 +95,7 @@ module ArelExtensions
95
95
  end
96
96
  end
97
97
 
98
- def visit_ArelExtensions_Nodes_SMatches o, collector
98
+ def visit_ArelExtensions_Nodes_SMatches(o, collector)
99
99
  collector = visit o.left, collector
100
100
  collector << ' LIKE '
101
101
  collector = visit o.right, collector
@@ -107,7 +107,7 @@ module ArelExtensions
107
107
  end
108
108
  end
109
109
 
110
- def visit_ArelExtensions_Nodes_IDoesNotMatch o, collector
110
+ def visit_ArelExtensions_Nodes_IDoesNotMatch(o, collector)
111
111
  collector << 'LOWER('
112
112
  collector = visit o.left, collector
113
113
  collector << ') NOT LIKE LOWER('
@@ -121,7 +121,7 @@ module ArelExtensions
121
121
  end
122
122
  end
123
123
 
124
- def visit_ArelExtensions_Nodes_Collate o, collector
124
+ def visit_ArelExtensions_Nodes_Collate(o, collector)
125
125
  if o.ai
126
126
  collector << 'NLSSORT('
127
127
  collector = visit o.expressions.first, collector
@@ -137,39 +137,39 @@ module ArelExtensions
137
137
  else
138
138
  collector = visit o.expressions.first, collector
139
139
  end
140
- collector
140
+ collector
141
141
  end
142
142
 
143
143
  def visit_Arel_Nodes_RollUp(o, collector)
144
- collector << "ROLLUP"
144
+ collector << 'ROLLUP'
145
145
  grouping_array_or_grouping_element o, collector
146
146
  end
147
147
 
148
- def visit_ArelExtensions_Nodes_GroupConcat o, collector
148
+ def visit_ArelExtensions_Nodes_GroupConcat(o, collector)
149
149
  collector << '(LISTAGG('
150
150
  collector = visit o.left, collector
151
151
  collector << COMMA
152
152
  sep = o.separator.is_a?(Arel::Nodes::Quoted) ? o.separator.expr : o.separator
153
153
  collector =
154
- if 'NULL' != sep
155
- visit o.separator, collector
156
- else
154
+ if 'NULL' == sep
157
155
  visit Arel.quoted(','), collector
156
+ else
157
+ visit o.separator, collector
158
158
  end
159
159
  collector << ') WITHIN GROUP (ORDER BY '
160
- if !o.order.blank?
160
+ if o.order.blank?
161
+ collector = visit o.left, collector
162
+ else
161
163
  o.order.each_with_index do |order, i|
162
164
  collector << COMMA if i != 0
163
165
  collector = visit order, collector
164
166
  end
165
- else
166
- collector = visit o.left, collector
167
167
  end
168
168
  collector << '))'
169
169
  collector
170
170
  end
171
171
 
172
- def visit_ArelExtensions_Nodes_Coalesce o, collector
172
+ def visit_ArelExtensions_Nodes_Coalesce(o, collector)
173
173
  collector << 'COALESCE('
174
174
  o.expressions.each_with_index { |arg, i|
175
175
  collector << COMMA if i != 0
@@ -189,7 +189,7 @@ module ArelExtensions
189
189
  collector
190
190
  end
191
191
 
192
- def visit_ArelExtensions_Nodes_MD5 o, collector
192
+ def visit_ArelExtensions_Nodes_MD5(o, collector)
193
193
  collector << 'LOWER (RAWTOHEX (DBMS_OBFUSCATION_TOOLKIT.md5(input => UTL_I18N.STRING_TO_RAW('
194
194
  collector = visit o.left, collector
195
195
  collector << ", 'AL32UTF8'))))"
@@ -197,9 +197,9 @@ module ArelExtensions
197
197
  end
198
198
 
199
199
  # :date is not possible in Oracle since this type does not really exist
200
- def visit_ArelExtensions_Nodes_DateDiff o, collector
201
- lc = o.left_node_type == :ruby_date || o.left_node_type == :ruby_time
202
- rc = o.right_node_type == :ruby_date || o.right_node_type == :ruby_time
200
+ def visit_ArelExtensions_Nodes_DateDiff(o, collector)
201
+ lc = %i[ruby_date ruby_time].include?(o.left_node_type)
202
+ rc = %i[ruby_date ruby_time].include?(o.right_node_type)
203
203
  if rc || o.right_node_type == :date || o.right_node_type == :datetime || o.right_node_type == :time
204
204
  collector << '('
205
205
  collector << 'TO_DATE(' if lc
@@ -210,7 +210,7 @@ module ArelExtensions
210
210
  collector = visit o.right, collector
211
211
  collector << ')' if rc
212
212
  collector << ')'
213
- if (o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time)
213
+ if %i[ruby_time datetime time].include?(o.left_node_type)
214
214
  collector << ' * (CASE WHEN (TRUNC('
215
215
  collector << 'TO_DATE(' if lc
216
216
  collector = visit o.left, collector
@@ -236,7 +236,7 @@ module ArelExtensions
236
236
  collector
237
237
  end
238
238
 
239
- def visit_ArelExtensions_Nodes_Duration o, collector
239
+ def visit_ArelExtensions_Nodes_Duration(o, collector)
240
240
  case o.left
241
241
  when 'wd', 'w'
242
242
  collector << 'TO_CHAR('
@@ -244,23 +244,24 @@ module ArelExtensions
244
244
  collector << COMMA
245
245
  collector = visit Arel.quoted(DATE_MAPPING[o.left]), collector
246
246
  else
247
- right = case o.left
248
- when 'd', 'm', 'y'
249
- interval = 'DAY'
250
- o.right.cast(:date)
251
- when 'h', 'mn', 's'
252
- interval = 'SECOND'
253
- o.right.cast(:datetime)
254
- when /i\z/
255
- interval = DATE_MAPPING[o.left[0..-2]]
256
- collector << '('
257
- collector = visit o.right, collector
258
- collector << ") * (INTERVAL '1' #{interval})"
259
- return collector
260
- else
261
- interval = nil
262
- o.right
263
- end
247
+ right =
248
+ case o.left
249
+ when 'd', 'm', 'y'
250
+ interval = 'DAY'
251
+ o.right.cast(:date)
252
+ when 'h', 'mn', 's'
253
+ interval = 'SECOND'
254
+ o.right.cast(:datetime)
255
+ when /i\z/
256
+ interval = DATE_MAPPING[o.left[0..-2]]
257
+ collector << '('
258
+ collector = visit o.right, collector
259
+ collector << ") * (INTERVAL '1' #{interval})"
260
+ return collector
261
+ else
262
+ interval = nil
263
+ o.right
264
+ end
264
265
  collector << "EXTRACT(#{DATE_MAPPING[o.left]} FROM "
265
266
  collector = visit right, collector
266
267
  end
@@ -269,7 +270,7 @@ module ArelExtensions
269
270
  collector
270
271
  end
271
272
 
272
- def visit_ArelExtensions_Nodes_Cast o, collector
273
+ def visit_ArelExtensions_Nodes_Cast(o, collector)
273
274
  case o.as_attr
274
275
  when :string
275
276
  collector << 'TO_CHAR('
@@ -328,26 +329,26 @@ module ArelExtensions
328
329
  collector
329
330
  end
330
331
 
331
- def visit_ArelExtensions_Nodes_Length o, collector
332
- collector << "LENGTH#{o.bytewise ? 'B' : ''}("
332
+ def visit_ArelExtensions_Nodes_Length(o, collector)
333
+ collector << "LENGTH#{'B' if o.bytewise}("
333
334
  collector = visit o.expr, collector
334
335
  collector << ')'
335
336
  collector
336
337
  end
337
338
 
338
- def visit_ArelExtensions_Nodes_IsNull o, collector
339
+ def visit_ArelExtensions_Nodes_IsNull(o, collector)
339
340
  collector = visit o.expr, collector
340
341
  collector << ' IS NULL'
341
342
  collector
342
343
  end
343
344
 
344
- def visit_ArelExtensions_Nodes_IsNotNull o, collector
345
+ def visit_ArelExtensions_Nodes_IsNotNull(o, collector)
345
346
  collector = visit o.expr, collector
346
347
  collector << ' IS NOT NULL'
347
348
  collector
348
349
  end
349
350
 
350
- def visit_ArelExtensions_Nodes_Rand o, collector
351
+ def visit_ArelExtensions_Nodes_Rand(o, collector)
351
352
  collector << 'DBMS_RANDOM.VALUE('
352
353
  if o.left && o.right
353
354
  collector = visit o.left, collector
@@ -358,7 +359,7 @@ module ArelExtensions
358
359
  collector
359
360
  end
360
361
 
361
- def visit_Arel_Nodes_Regexp o, collector
362
+ def visit_Arel_Nodes_Regexp(o, collector)
362
363
  collector << ' REGEXP_LIKE('
363
364
  collector = visit o.left, collector
364
365
  collector << COMMA
@@ -367,7 +368,7 @@ module ArelExtensions
367
368
  collector
368
369
  end
369
370
 
370
- def visit_Arel_Nodes_NotRegexp o, collector
371
+ def visit_Arel_Nodes_NotRegexp(o, collector)
371
372
  collector << ' NOT REGEXP_LIKE('
372
373
  collector = visit o.left, collector
373
374
  collector << COMMA
@@ -376,7 +377,7 @@ module ArelExtensions
376
377
  collector
377
378
  end
378
379
 
379
- def visit_ArelExtensions_Nodes_Locate o, collector
380
+ def visit_ArelExtensions_Nodes_Locate(o, collector)
380
381
  collector << 'INSTR('
381
382
  o.expressions.each_with_index { |arg, i|
382
383
  collector << COMMA if i != 0
@@ -386,7 +387,9 @@ module ArelExtensions
386
387
  collector
387
388
  end
388
389
 
389
- def visit_ArelExtensions_Nodes_Substring o, collector
390
+ def visit_ArelExtensions_Nodes_Substring(o, collector)
391
+ return visit(o.range_substring_node, collector) if o.range?
392
+
390
393
  collector << 'SUBSTR('
391
394
  o.expressions.each_with_index { |arg, i|
392
395
  collector << COMMA if i != 0
@@ -396,7 +399,7 @@ module ArelExtensions
396
399
  collector
397
400
  end
398
401
 
399
- def visit_ArelExtensions_Nodes_Trim o, collector
402
+ def visit_ArelExtensions_Nodes_Trim(o, collector)
400
403
  collector << 'TRIM(' # BOTH
401
404
  if o.right.expr && SPECIAL_CHARS[o.right.expr]
402
405
  collector << SPECIAL_CHARS[o.right.expr]
@@ -422,7 +425,7 @@ module ArelExtensions
422
425
  collector
423
426
  end
424
427
 
425
- def visit_ArelExtensions_Nodes_Ltrim o, collector
428
+ def visit_ArelExtensions_Nodes_Ltrim(o, collector)
426
429
  collector << 'TRIM(LEADING '
427
430
  if o.right.expr && SPECIAL_CHARS[o.right.expr]
428
431
  collector << SPECIAL_CHARS[o.right.expr]
@@ -435,7 +438,7 @@ module ArelExtensions
435
438
  collector
436
439
  end
437
440
 
438
- def visit_ArelExtensions_Nodes_Rtrim o, collector
441
+ def visit_ArelExtensions_Nodes_Rtrim(o, collector)
439
442
  collector << 'TRIM(TRAILING '
440
443
  if o.right.expr && SPECIAL_CHARS[o.right.expr]
441
444
  collector << SPECIAL_CHARS[o.right.expr]
@@ -448,15 +451,15 @@ module ArelExtensions
448
451
  collector
449
452
  end
450
453
 
451
- def visit_ArelExtensions_Nodes_Blank o, collector
454
+ def visit_ArelExtensions_Nodes_Blank(o, collector)
452
455
  visit o.expr.trim.length.coalesce(0).eq(0), collector
453
456
  end
454
457
 
455
- def visit_ArelExtensions_Nodes_NotBlank o, collector
458
+ def visit_ArelExtensions_Nodes_NotBlank(o, collector)
456
459
  visit o.expr.trim.length.coalesce(0).gt(0), collector
457
460
  end
458
461
 
459
- def visit_ArelExtensions_Nodes_DateAdd o, collector
462
+ def visit_ArelExtensions_Nodes_DateAdd(o, collector)
460
463
  collector << '('
461
464
  collector = visit o.left, collector
462
465
  collector << ' + ' # (o.right.value >= 0 ? ' + ' : ' - ')
@@ -465,12 +468,12 @@ module ArelExtensions
465
468
  collector
466
469
  end
467
470
 
468
- def visit_ArelExtensions_Nodes_Format o, collector
471
+ def visit_ArelExtensions_Nodes_Format(o, collector)
469
472
  visit_ArelExtensions_Nodes_FormattedDate o, collector
470
473
  end
471
474
 
472
- def visit_ArelExtensions_Nodes_FormattedDate o, collector
473
- fmt = ArelExtensions::Visitors::strftime_to_format(o.iso_format, DATE_FORMAT_DIRECTIVES)
475
+ def visit_ArelExtensions_Nodes_FormattedDate(o, collector)
476
+ fmt = ArelExtensions::Visitors.strftime_to_format(o.iso_format, DATE_FORMAT_DIRECTIVES)
474
477
  collector << 'TO_CHAR('
475
478
  collector << 'CAST(' if o.time_zone
476
479
  collector = visit o.left, collector
@@ -479,7 +482,7 @@ module ArelExtensions
479
482
  src_tz, dst_tz = o.time_zone.first
480
483
  collector << ' as timestamp) at time zone '
481
484
  collector = visit Arel.quoted(src_tz), collector
482
- collector < ' at time zone '
485
+ collector << ' at time zone '
483
486
  collector = visit Arel.quoted(dst_tz), collector
484
487
  when String
485
488
  collector << ' as timestamp) at time zone '
@@ -491,12 +494,12 @@ module ArelExtensions
491
494
  collector
492
495
  end
493
496
 
494
- def visit_ArelExtensions_Nodes_Repeat o, collector
497
+ def visit_ArelExtensions_Nodes_Repeat(o, collector)
495
498
  collector << 'LPAD('
496
499
  collector = visit o.expressions[0], collector # can't put empty string, otherwise it wouldn't work
497
- collector << Arel::Visitors::ToSql::COMMA
500
+ collector << COMMA
498
501
  collector = visit o.expressions[1], collector
499
- collector << Arel::Visitors::ToSql::COMMA
502
+ collector << COMMA
500
503
  collector = visit o.expressions[0], collector
501
504
  collector << ')'
502
505
  collector
@@ -504,7 +507,7 @@ module ArelExtensions
504
507
 
505
508
  # add primary_key if not present, avoid zip
506
509
  if AREL_VERSION < V7
507
- def visit_ArelExtensions_InsertManager_BulkValues o, collector
510
+ def visit_ArelExtensions_InsertManager_BulkValues(o, collector)
508
511
  collector << '('
509
512
  o.left.each_with_index do |row, idx| # values
510
513
  collector << ' UNION ALL ' if idx != 0
@@ -525,7 +528,7 @@ module ArelExtensions
525
528
  collector
526
529
  end
527
530
  else
528
- def visit_ArelExtensions_InsertManager_BulkValues o, collector
531
+ def visit_ArelExtensions_InsertManager_BulkValues(o, collector)
529
532
  collector << '('
530
533
  o.left.each_with_index do |row, idx|
531
534
  collector << ' UNION ALL ' if idx != 0
@@ -549,8 +552,7 @@ module ArelExtensions
549
552
  end
550
553
  end
551
554
 
552
-
553
- def get_time_converted element
555
+ def get_time_converted(element)
554
556
  if element.is_a?(Time)
555
557
  ArelExtensions::Nodes::Format.new [element, '%H:%M:%S']
556
558
  elsif element.is_a?(Arel::Attributes::Attribute)
@@ -565,42 +567,36 @@ module ArelExtensions
565
567
  end
566
568
  end
567
569
 
568
-
569
570
  remove_method(:visit_Arel_Nodes_GreaterThanOrEqual) rescue nil
570
- def visit_Arel_Nodes_GreaterThanOrEqual o, collector
571
+ def visit_Arel_Nodes_GreaterThanOrEqual(o, collector)
571
572
  collector = visit get_time_converted(o.left), collector
572
573
  collector << ' >= '
573
- collector = visit get_time_converted(o.right), collector
574
- collector
574
+ visit get_time_converted(o.right), collector
575
575
  end
576
576
 
577
577
  remove_method(:visit_Arel_Nodes_GreaterThan) rescue nil
578
- def visit_Arel_Nodes_GreaterThan o, collector
578
+ def visit_Arel_Nodes_GreaterThan(o, collector)
579
579
  collector = visit get_time_converted(o.left), collector
580
580
  collector << ' > '
581
- collector = visit get_time_converted(o.right), collector
582
- collector
581
+ visit get_time_converted(o.right), collector
583
582
  end
584
583
 
585
584
  remove_method(:visit_Arel_Nodes_LessThanOrEqual) rescue nil
586
- def visit_Arel_Nodes_LessThanOrEqual o, collector
585
+ def visit_Arel_Nodes_LessThanOrEqual(o, collector)
587
586
  collector = visit get_time_converted(o.left), collector
588
587
  collector << ' <= '
589
- collector = visit get_time_converted(o.right), collector
590
- collector
588
+ visit get_time_converted(o.right), collector
591
589
  end
592
590
 
593
591
  remove_method(:visit_Arel_Nodes_LessThan) rescue nil
594
- def visit_Arel_Nodes_LessThan o, collector
592
+ def visit_Arel_Nodes_LessThan(o, collector)
595
593
  collector = visit get_time_converted(o.left), collector
596
594
  collector << ' < '
597
- collector = visit get_time_converted(o.right), collector
598
- collector
595
+ visit get_time_converted(o.right), collector
599
596
  end
600
597
 
601
-
602
- alias_method(:old_visit_Arel_Nodes_SelectStatement, :visit_Arel_Nodes_SelectStatement) rescue nil
603
- def visit_Arel_Nodes_SelectStatement o, collector
598
+ alias old_visit_Arel_Nodes_SelectStatement visit_Arel_Nodes_SelectStatement rescue nil
599
+ def visit_Arel_Nodes_SelectStatement(o, collector)
604
600
  if !(collector.value.blank? || (collector.value.is_a?(Array) && collector.value[0].blank?)) && o.limit.blank? && o.offset.blank?
605
601
  o = o.dup
606
602
  o.orders = []
@@ -608,16 +604,16 @@ module ArelExtensions
608
604
  old_visit_Arel_Nodes_SelectStatement(o, collector)
609
605
  end
610
606
 
611
- alias_method(:old_visit_Arel_Nodes_TableAlias, :visit_Arel_Nodes_TableAlias) rescue nil
612
- def visit_Arel_Nodes_TableAlias o, collector
607
+ alias old_visit_Arel_Nodes_TableAlias visit_Arel_Nodes_TableAlias rescue nil
608
+ def visit_Arel_Nodes_TableAlias(o, collector)
613
609
  if o.name.length > 30
614
610
  o = Arel::Table.new(o.table_name).alias(Arel.shorten(o.name))
615
611
  end
616
612
  old_visit_Arel_Nodes_TableAlias(o, collector)
617
613
  end
618
614
 
619
- alias_method(:old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As) rescue nil
620
- def visit_Arel_Nodes_As o, collector
615
+ alias old_visit_Arel_Nodes_As visit_Arel_Nodes_As rescue nil
616
+ def visit_Arel_Nodes_As(o, collector)
621
617
  if o.left.is_a?(Arel::Nodes::Binary)
622
618
  collector << '('
623
619
  collector = visit o.left, collector
@@ -632,12 +628,12 @@ module ArelExtensions
632
628
  collector
633
629
  end
634
630
 
635
- def visit_ArelExtensions_Nodes_As o, collector
631
+ def visit_ArelExtensions_Nodes_As(o, collector)
636
632
  visit_Arel_Nodes_As o, collector
637
633
  end
638
634
 
639
- alias_method(:old_visit_Arel_Attributes_Attribute, :visit_Arel_Attributes_Attribute) rescue nil
640
- def visit_Arel_Attributes_Attribute o, collector
635
+ alias old_visit_Arel_Attributes_Attribute visit_Arel_Attributes_Attribute rescue nil
636
+ def visit_Arel_Attributes_Attribute(o, collector)
641
637
  join_name = o.relation.table_alias || o.relation.name
642
638
  if join_name.length > 30
643
639
  join_name = Arel.shorten(join_name)
@@ -645,11 +641,11 @@ module ArelExtensions
645
641
  collector << "#{quote_table_name join_name}.#{quote_column_name o.name}"
646
642
  end
647
643
 
648
- def visit_ArelExtensions_Nodes_FormattedNumber o, collector
644
+ def visit_ArelExtensions_Nodes_FormattedNumber(o, collector)
649
645
  col = o.left.coalesce(0)
650
646
  comma = NUMBER_COMMA_MAPPING[o.locale] || '.,'
651
647
  comma_in_format = o.precision == 0 ? '' : 'D'
652
- nines_after = (1..o.precision - 1).map{'9'}.join('') + '0'
648
+ nines_after = (1..o.precision - 1).map { '9' }.join('') + '0'
653
649
  if comma.length == 1
654
650
  options = Arel.quoted("NLS_NUMERIC_CHARACTERS = '#{comma} '")
655
651
  nines_before = ('999' * 4 + '990')
@@ -707,24 +703,24 @@ module ArelExtensions
707
703
  collector
708
704
  end
709
705
 
710
- def visit_ArelExtensions_Nodes_Std o, collector
706
+ def visit_ArelExtensions_Nodes_Std(o, collector)
711
707
  collector << (o.unbiased_estimator ? 'STDDEV_SAMP(' : 'STDDEV_POP(')
712
708
  visit o.left, collector
713
709
  collector << ')'
714
710
  collector
715
711
  end
716
712
 
717
- def visit_ArelExtensions_Nodes_Variance o, collector
713
+ def visit_ArelExtensions_Nodes_Variance(o, collector)
718
714
  collector << (o.unbiased_estimator ? 'VAR_SAMP(' : 'VAR_POP(')
719
715
  visit o.left, collector
720
716
  collector << ')'
721
717
  collector
722
718
  end
723
719
 
724
- def visit_ArelExtensions_Nodes_LevenshteinDistance o, collector
720
+ def visit_ArelExtensions_Nodes_LevenshteinDistance(o, collector)
725
721
  collector << 'UTL_MATCH.edit_distance('
726
722
  collector = visit o.left, collector
727
- collector << Arel::Visitors::ToSql::COMMA
723
+ collector << COMMA
728
724
  collector = visit o.right, collector
729
725
  collector << ')'
730
726
  collector
@@ -734,9 +730,9 @@ module ArelExtensions
734
730
  # handle grouping aggregation semantics
735
731
  def grouping_array_or_grouping_element(o, collector)
736
732
  if o.expr.is_a? Array
737
- collector << "( "
733
+ collector << '( '
738
734
  visit o.expr, collector
739
- collector << " )"
735
+ collector << ' )'
740
736
  else
741
737
  visit o.expr, collector
742
738
  end
@@ -1,8 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
  Arel::Visitors.send(:remove_const, 'Oracle12') if Arel::Visitors.const_defined?('Oracle12')
4
- Arel::Visitors.const_set('Oracle12', Class.new(Arel::Visitors::Oracle)).class_eval do
5
-
4
+ Arel::Visitors.const_set(:Oracle12, Class.new(Arel::Visitors::Oracle)).class_eval do
6
5
  def visit_Arel_Nodes_SelectOptions(o, collector)
7
6
  collector = maybe_visit o.offset, collector
8
7
  collector = maybe_visit o.limit, collector
@@ -48,13 +47,13 @@ module ArelExtensions
48
47
  collector << ')'
49
48
  end
50
49
 
51
- def visit_ArelExtensions_Nodes_Json o, collector
50
+ def visit_ArelExtensions_Nodes_Json(o, collector)
52
51
  case o.dict
53
52
  when Array
54
53
  collector << 'json_array('
55
54
  o.dict.each.with_index do |v, i|
56
55
  if i != 0
57
- collector << Arel::Visitors::MySQL::COMMA
56
+ collector << COMMA
58
57
  end
59
58
  collector = visit v, collector
60
59
  end
@@ -63,7 +62,7 @@ module ArelExtensions
63
62
  collector << 'json__object('
64
63
  o.dict.each.with_index do |(k, v), i|
65
64
  if i != 0
66
- collector << Arel::Visitors::MySQL::COMMA
65
+ collector << COMMA
67
66
  end
68
67
  collector << 'KEY '
69
68
  collector = visit k, collector
@@ -76,7 +75,7 @@ module ArelExtensions
76
75
  collector = visit Arel.quoted("#{o.dict}"), collector
77
76
  collector << ' FORMAT JSON'
78
77
  when NilClass
79
- collector << %Q['null' FORMAT JSON]
78
+ collector << %('null' FORMAT JSON)
80
79
  when Arel::Attributes::Attribute
81
80
  collector = visit o.dict.cast('JSON'), collector
82
81
  else