arel_extensions 2.1.3 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -2
  3. data/.github/workflows/ruby.yml +4 -4
  4. data/.rubocop.yml +25 -1
  5. data/Gemfile +10 -10
  6. data/README.md +1 -2
  7. data/Rakefile +4 -4
  8. data/TODO +0 -1
  9. data/arel_extensions.gemspec +11 -11
  10. data/gemfiles/rails3.gemfile +10 -10
  11. data/gemfiles/rails4.gemfile +13 -13
  12. data/gemfiles/rails5_0.gemfile +12 -12
  13. data/gemfiles/rails5_1_4.gemfile +12 -12
  14. data/gemfiles/rails5_2.gemfile +13 -13
  15. data/gemfiles/rails6.gemfile +11 -11
  16. data/gemfiles/rails6_1.gemfile +11 -11
  17. data/gemfiles/rails7.gemfile +7 -7
  18. data/gemspecs/arel_extensions-v1.gemspec +12 -12
  19. data/gemspecs/arel_extensions-v2.gemspec +11 -11
  20. data/init/mssql.sql +0 -0
  21. data/init/mysql.sql +0 -0
  22. data/init/oracle.sql +0 -0
  23. data/init/postgresql.sql +0 -0
  24. data/init/sqlite.sql +0 -0
  25. data/lib/arel_extensions/attributes.rb +2 -2
  26. data/lib/arel_extensions/boolean_functions.rb +2 -4
  27. data/lib/arel_extensions/common_sql_functions.rb +10 -10
  28. data/lib/arel_extensions/comparators.rb +14 -14
  29. data/lib/arel_extensions/date_duration.rb +7 -7
  30. data/lib/arel_extensions/helpers.rb +16 -13
  31. data/lib/arel_extensions/insert_manager.rb +1 -1
  32. data/lib/arel_extensions/math.rb +16 -18
  33. data/lib/arel_extensions/math_functions.rb +18 -18
  34. data/lib/arel_extensions/nodes/abs.rb +0 -0
  35. data/lib/arel_extensions/nodes/aggregate_function.rb +0 -0
  36. data/lib/arel_extensions/nodes/blank.rb +1 -1
  37. data/lib/arel_extensions/nodes/case.rb +4 -6
  38. data/lib/arel_extensions/nodes/cast.rb +3 -3
  39. data/lib/arel_extensions/nodes/ceil.rb +0 -0
  40. data/lib/arel_extensions/nodes/change_case.rb +0 -0
  41. data/lib/arel_extensions/nodes/coalesce.rb +0 -0
  42. data/lib/arel_extensions/nodes/collate.rb +9 -9
  43. data/lib/arel_extensions/nodes/concat.rb +2 -2
  44. data/lib/arel_extensions/nodes/date_diff.rb +6 -6
  45. data/lib/arel_extensions/nodes/duration.rb +0 -0
  46. data/lib/arel_extensions/nodes/find_in_set.rb +0 -0
  47. data/lib/arel_extensions/nodes/floor.rb +0 -0
  48. data/lib/arel_extensions/nodes/format.rb +0 -0
  49. data/lib/arel_extensions/nodes/formatted_number.rb +2 -2
  50. data/lib/arel_extensions/nodes/function.rb +21 -21
  51. data/lib/arel_extensions/nodes/is_null.rb +0 -0
  52. data/lib/arel_extensions/nodes/json.rb +7 -7
  53. data/lib/arel_extensions/nodes/length.rb +0 -0
  54. data/lib/arel_extensions/nodes/levenshtein_distance.rb +1 -1
  55. data/lib/arel_extensions/nodes/locate.rb +0 -0
  56. data/lib/arel_extensions/nodes/log10.rb +0 -0
  57. data/lib/arel_extensions/nodes/matches.rb +1 -1
  58. data/lib/arel_extensions/nodes/md5.rb +0 -0
  59. data/lib/arel_extensions/nodes/power.rb +0 -0
  60. data/lib/arel_extensions/nodes/rand.rb +0 -0
  61. data/lib/arel_extensions/nodes/repeat.rb +0 -0
  62. data/lib/arel_extensions/nodes/replace.rb +2 -2
  63. data/lib/arel_extensions/nodes/round.rb +0 -0
  64. data/lib/arel_extensions/nodes/soundex.rb +2 -2
  65. data/lib/arel_extensions/nodes/std.rb +0 -0
  66. data/lib/arel_extensions/nodes/substring.rb +0 -0
  67. data/lib/arel_extensions/nodes/sum.rb +0 -0
  68. data/lib/arel_extensions/nodes/then.rb +0 -0
  69. data/lib/arel_extensions/nodes/trim.rb +0 -0
  70. data/lib/arel_extensions/nodes/union.rb +4 -4
  71. data/lib/arel_extensions/nodes/union_all.rb +3 -3
  72. data/lib/arel_extensions/nodes/wday.rb +0 -0
  73. data/lib/arel_extensions/nodes.rb +0 -0
  74. data/lib/arel_extensions/null_functions.rb +0 -0
  75. data/lib/arel_extensions/predications.rb +10 -10
  76. data/lib/arel_extensions/railtie.rb +1 -1
  77. data/lib/arel_extensions/set_functions.rb +3 -3
  78. data/lib/arel_extensions/string_functions.rb +8 -8
  79. data/lib/arel_extensions/tasks.rb +2 -2
  80. data/lib/arel_extensions/version.rb +1 -1
  81. data/lib/arel_extensions/visitors/convert_format.rb +0 -0
  82. data/lib/arel_extensions/visitors/ibm_db.rb +19 -19
  83. data/lib/arel_extensions/visitors/mssql.rb +127 -121
  84. data/lib/arel_extensions/visitors/mysql.rb +137 -145
  85. data/lib/arel_extensions/visitors/oracle.rb +128 -128
  86. data/lib/arel_extensions/visitors/oracle12.rb +16 -16
  87. data/lib/arel_extensions/visitors/postgresql.rb +139 -137
  88. data/lib/arel_extensions/visitors/sqlite.rb +83 -85
  89. data/lib/arel_extensions/visitors/to_sql.rb +143 -148
  90. data/lib/arel_extensions/visitors.rb +7 -7
  91. data/lib/arel_extensions.rb +46 -32
  92. data/test/arelx_test_helper.rb +14 -13
  93. data/test/database.yml +5 -5
  94. data/test/real_db_test.rb +78 -78
  95. data/test/support/fake_record.rb +1 -1
  96. data/test/test_comparators.rb +5 -5
  97. data/test/visitors/test_bulk_insert_oracle.rb +4 -4
  98. data/test/visitors/test_bulk_insert_sqlite.rb +4 -4
  99. data/test/visitors/test_bulk_insert_to_sql.rb +4 -4
  100. data/test/visitors/test_oracle.rb +14 -14
  101. data/test/visitors/test_to_sql.rb +82 -82
  102. data/test/with_ar/all_agnostic_test.rb +364 -299
  103. data/test/with_ar/insert_agnostic_test.rb +17 -14
  104. data/test/with_ar/test_bulk_sqlite.rb +4 -4
  105. data/test/with_ar/test_math_sqlite.rb +12 -12
  106. data/test/with_ar/test_string_mysql.rb +20 -20
  107. data/test/with_ar/test_string_sqlite.rb +20 -20
  108. data/version_v1.rb +1 -1
  109. data/version_v2.rb +1 -1
  110. metadata +2 -9
  111. data/.travis/oracle/download.js +0 -152
  112. data/.travis/oracle/download.sh +0 -30
  113. data/.travis/oracle/download_ojdbc.js +0 -116
  114. data/.travis/oracle/install.sh +0 -34
  115. data/.travis/setup_accounts.sh +0 -9
  116. data/.travis/sqlite3/extension-functions.sh +0 -6
  117. data/.travis.yml +0 -193
@@ -8,11 +8,11 @@ module ArelExtensions
8
8
 
9
9
  DATE_FORMAT_DIRECTIVES = {
10
10
  '%Y' => 'YYYY', '%C' => 'CC', '%y' => 'YY',
11
- '%m' => 'MM', '%B' => 'Month', '%^B' => 'MONTH', '%b' => 'Mon', '%^b' => 'MON',
12
- '%V' => 'IW', '%G' => 'IYYY', # ISO week number and year of week
13
- '%d' => 'DD', '%e' => 'FMDD', '%j' => 'DDD', '%w' => '', '%A' => 'Day', # day, weekday
14
- '%H' => 'HH24', '%k' => '', '%I' => 'HH', '%l' => '', '%P' => 'am', '%p' => 'AM', # hours
15
- '%M' => 'MI', '%S' => 'SS', '%L' => 'MS', '%N' => 'US', '%z' => 'tz', # seconds, subseconds
11
+ '%m' => 'MM', '%B' => 'TMMonth', '%^B' => 'TMMONTH', '%b' => 'TMMon', '%^b' => 'TMMON',
12
+ '%V' => 'IW', '%G' => 'IYYY', # ISO week number and year of week
13
+ '%d' => 'DD', '%e' => 'FMDD', '%j' => 'DDD', '%w' => '', '%a' => 'TMDy', '%A' => 'TMDay', # day, weekday
14
+ '%H' => 'HH24', '%k' => '', '%I' => 'HH', '%l' => '', '%P' => 'am', '%p' => 'AM', # hours
15
+ '%M' => 'MI', '%S' => 'SS', '%L' => 'MS', '%N' => 'US', '%z' => 'tz', # seconds, subseconds
16
16
  '%%' => '%',
17
17
  }.freeze
18
18
 
@@ -21,33 +21,33 @@ module ArelExtensions
21
21
  }.freeze
22
22
 
23
23
  def visit_ArelExtensions_Nodes_Rand o, collector
24
- collector << "RANDOM("
24
+ collector << 'RANDOM('
25
25
  if (o.left != nil && o.right != nil)
26
26
  collector = visit o.left, collector
27
27
  collector << COMMA
28
28
  collector = isit o.right, collector
29
29
  end
30
- collector << ")"
30
+ collector << ')'
31
31
  collector
32
32
  end
33
33
 
34
34
  def visit_ArelExtensions_Nodes_Power o, collector
35
- collector << "POWER("
35
+ collector << 'POWER('
36
36
  o.expressions.each_with_index { |arg, i|
37
37
  collector << Arel::Visitors::ToSql::COMMA if i != 0
38
38
  collector = visit arg, collector
39
39
  }
40
- collector << ")"
40
+ collector << ')'
41
41
  collector
42
42
  end
43
43
 
44
44
  def visit_ArelExtensions_Nodes_Log10 o, collector
45
- collector << "LOG("
45
+ collector << 'LOG('
46
46
  o.expressions.each_with_index { |arg, i|
47
47
  collector << Arel::Visitors::ToSql::COMMA if i != 0
48
48
  collector = visit arg, collector
49
49
  }
50
- collector << ")"
50
+ collector << ')'
51
51
  collector
52
52
  end
53
53
 
@@ -55,7 +55,7 @@ module ArelExtensions
55
55
  remove_method(:visit_Arel_Nodes_Regexp) rescue nil
56
56
  def visit_Arel_Nodes_Regexp o, collector
57
57
  collector = visit o.left, collector
58
- collector << " ~ "
58
+ collector << ' ~ '
59
59
  collector = visit o.right, collector
60
60
  collector
61
61
  end
@@ -63,7 +63,7 @@ module ArelExtensions
63
63
  remove_method(:visit_Arel_Nodes_NotRegexp) rescue nil
64
64
  def visit_Arel_Nodes_NotRegexp o, collector
65
65
  collector = visit o.left, collector
66
- collector << " !~ "
66
+ collector << ' !~ '
67
67
  collector = visit o.right, collector
68
68
  collector
69
69
  end
@@ -74,7 +74,7 @@ module ArelExtensions
74
74
  collector = visit arg, collector
75
75
  collector << ' || ' unless i == o.expressions.length - 1
76
76
  }
77
- collector << ")"
77
+ collector << ')'
78
78
  collector
79
79
  end
80
80
 
@@ -87,7 +87,7 @@ module ArelExtensions
87
87
  else
88
88
  collector = visit o.left, collector
89
89
  end
90
- collector << " AS "
90
+ collector << ' AS '
91
91
 
92
92
  # sometimes these values are already quoted, if they are, don't double quote it
93
93
  quote = o.right.is_a?(Arel::Nodes::SqlLiteral) && o.right[0] != '"' && o.right[-1] != '"'
@@ -101,38 +101,38 @@ module ArelExtensions
101
101
 
102
102
  def visit_Aggregate_For_AggregateFunction o, collector
103
103
  if !o.order.blank? || !o.group.blank?
104
- collector << " OVER ("
104
+ collector << ' OVER ('
105
105
  if !o.group.blank?
106
- collector << " PARTITION BY "
106
+ collector << ' PARTITION BY '
107
107
  o.group.each_with_index do |group, i|
108
108
  collector << COMMA if i != 0
109
109
  visit group, collector
110
110
  end
111
111
  end
112
112
  if !o.order.blank?
113
- collector << " ORDER BY "
113
+ collector << ' ORDER BY '
114
114
  o.order.each_with_index do |order, i|
115
115
  collector << COMMA if i != 0
116
116
  visit order, collector
117
117
  end
118
118
  end
119
- collector << ")"
119
+ collector << ')'
120
120
  end
121
121
  collector
122
122
  end
123
123
 
124
124
  def visit_ArelExtensions_Nodes_GroupConcat o, collector
125
- collector << "array_to_string(array_agg("
125
+ collector << 'array_to_string(array_agg('
126
126
  collector = visit o.left, collector
127
127
  if o.order && !o.order.blank?
128
- collector << " ORDER BY"
128
+ collector << ' ORDER BY'
129
129
  o.order.each_with_index do |order, i|
130
130
  collector << COMMA if i != 0
131
- collector << " "
131
+ collector << ' '
132
132
  visit order, collector
133
133
  end
134
134
  end
135
- collector << ")"
135
+ collector << ')'
136
136
  o.order = nil
137
137
  visit_Aggregate_For_AggregateFunction o, collector
138
138
  collector << COMMA
@@ -140,68 +140,68 @@ module ArelExtensions
140
140
  if o.separator && o.separator != 'NULL'
141
141
  visit o.separator, collector
142
142
  else
143
- visit Arel::Nodes.build_quoted(','), collector
143
+ visit Arel.quoted(','), collector
144
144
  end
145
- collector << ")"
145
+ collector << ')'
146
146
  collector
147
147
  end
148
148
 
149
149
  def visit_ArelExtensions_Nodes_Trim o, collector
150
- collector << 'TRIM(BOTH '
151
- collector = visit o.right, collector
152
- collector << " FROM "
153
- collector = visit o.left, collector
154
- collector << ")"
155
- collector
150
+ collector << 'TRIM(BOTH '
151
+ collector = visit o.right, collector
152
+ collector << ' FROM '
153
+ collector = visit o.left, collector
154
+ collector << ')'
155
+ collector
156
156
  end
157
157
 
158
158
  def visit_ArelExtensions_Nodes_Ltrim o, collector
159
- collector << 'TRIM(LEADING '
160
- collector = visit o.right, collector
161
- collector << " FROM "
162
- collector = visit o.left, collector
163
- collector << ")"
164
- collector
159
+ collector << 'TRIM(LEADING '
160
+ collector = visit o.right, collector
161
+ collector << ' FROM '
162
+ collector = visit o.left, collector
163
+ collector << ')'
164
+ collector
165
165
  end
166
166
 
167
167
  def visit_ArelExtensions_Nodes_Rtrim o, collector
168
168
  collector << 'TRIM(TRAILING '
169
169
  collector = visit o.right, collector
170
- collector << " FROM "
170
+ collector << ' FROM '
171
171
  collector = visit o.left, collector
172
- collector << ")"
172
+ collector << ')'
173
173
  collector
174
174
  end
175
175
 
176
176
  def visit_ArelExtensions_Nodes_Format o, collector
177
177
  fmt = ArelExtensions::Visitors::strftime_to_format(o.iso_format, DATE_FORMAT_DIRECTIVES)
178
- collector << "TO_CHAR("
178
+ collector << 'TO_CHAR('
179
179
  collector << '(' if o.time_zone
180
180
  collector = visit o.left, collector
181
181
  case o.time_zone
182
182
  when Hash
183
183
  src_tz, dst_tz = o.time_zone.first
184
184
  collector << ') AT TIME ZONE '
185
- collector = visit Arel::Nodes.build_quoted(src_tz), collector
185
+ collector = visit Arel.quoted(src_tz), collector
186
186
  collector << ' AT TIME ZONE '
187
- collector = visit Arel::Nodes.build_quoted(dst_tz), collector
187
+ collector = visit Arel.quoted(dst_tz), collector
188
188
  when String
189
189
  collector << ') AT TIME ZONE '
190
- collector = visit Arel::Nodes.build_quoted(o.time_zone), collector
190
+ collector = visit Arel.quoted(o.time_zone), collector
191
191
  end
192
192
  collector << COMMA
193
- collector = visit Arel::Nodes.build_quoted(fmt), collector
194
- collector << ")"
193
+ collector = visit Arel.quoted(fmt), collector
194
+ collector << ')'
195
195
  collector
196
196
  end
197
197
 
198
198
  def visit_ArelExtensions_Nodes_Repeat o, collector
199
- collector << "REPEAT("
199
+ collector << 'REPEAT('
200
200
  o.expressions.each_with_index { |arg, i|
201
201
  collector << Arel::Visitors::ToSql::COMMA if i != 0
202
202
  collector = visit arg, collector
203
203
  }
204
- collector << ")"
204
+ collector << ')'
205
205
  collector
206
206
  end
207
207
 
@@ -243,9 +243,9 @@ module ArelExtensions
243
243
 
244
244
  def visit_ArelExtensions_Nodes_Collate o, collector
245
245
  if o.ai
246
- collector << "unaccent("
246
+ collector << 'unaccent('
247
247
  collector = visit o.expressions.first, collector
248
- collector << ")"
248
+ collector << ')'
249
249
  elsif o.ci
250
250
  collector = visit o.expressions.first, collector
251
251
  else
@@ -264,16 +264,16 @@ module ArelExtensions
264
264
  def visit_ArelExtensions_Nodes_DateDiff o, collector
265
265
  if o.right_node_type == :ruby_date || o.right_node_type == :ruby_time || o.right_node_type == :date || o.right_node_type == :datetime || o.right_node_type == :time
266
266
  collector << if o.left_node_type == :ruby_time || o.left_node_type == :datetime || o.left_node_type == :time
267
- "DATEDIFF('second', "
267
+ "DATEDIFF('second', "
268
268
  else
269
- "DATEDIFF('day', "
269
+ "DATEDIFF('day', "
270
270
  end
271
271
  collector = visit o.right, collector
272
272
  collector << (o.right_node_type == :date ? '::date' : '::timestamp')
273
273
  collector << COMMA
274
274
  collector = visit o.left, collector
275
275
  collector << (o.left_node_type == :date ? '::date' : '::timestamp')
276
- collector << ")"
276
+ collector << ')'
277
277
  else
278
278
  collector << '('
279
279
  collector = visit o.left, collector
@@ -290,57 +290,57 @@ module ArelExtensions
290
290
  def visit_ArelExtensions_Nodes_Duration o, collector
291
291
  if o.with_interval
292
292
  interval = case o.left
293
- when 'd','m','y'
293
+ when 'd', 'm', 'y'
294
294
  'DAY'
295
- when 'h','mn','s'
295
+ when 'h', 'mn', 's'
296
296
  'SECOND'
297
297
  when /i\z/
298
- collector << "("
298
+ collector << '('
299
299
  collector = visit o.right, collector
300
- collector << ")"
300
+ collector << ')'
301
301
  collector << " * (INTERVAL '1' #{DATE_MAPPING[o.left[0..-2]]})"
302
302
  return collector
303
303
  end
304
304
  end
305
305
  collector << "EXTRACT(#{DATE_MAPPING[o.left]} FROM CAST("
306
306
  collector = visit o.right, collector
307
- collector << " AS TIMESTAMP WITH TIME ZONE))"
307
+ collector << ' AS TIMESTAMP WITH TIME ZONE))'
308
308
  collector << " * (INTERVAL '1' #{interval})" if interval && o.with_interval
309
309
  collector
310
310
  end
311
311
 
312
312
  def visit_ArelExtensions_Nodes_Locate o, collector
313
- collector << "POSITION("
313
+ collector << 'POSITION('
314
314
  collector = visit o.right, collector
315
- collector << " IN "
315
+ collector << ' IN '
316
316
  collector = visit o.left, collector
317
- collector << ")"
317
+ collector << ')'
318
318
  collector
319
319
  end
320
320
 
321
321
  def visit_ArelExtensions_Nodes_Substring o, collector
322
- collector << "SUBSTR("
322
+ collector << 'SUBSTR('
323
323
  o.expressions.each_with_index { |arg, i|
324
324
  collector << COMMA if i != 0
325
325
  collector = visit arg, collector
326
326
  }
327
- collector << ")"
327
+ collector << ')'
328
328
  collector
329
329
  end
330
330
 
331
331
  def visit_ArelExtensions_Nodes_RegexpReplace o, collector
332
- collector << "REGEXP_REPLACE("
332
+ collector << 'REGEXP_REPLACE('
333
333
  visit o.left, collector
334
334
  collector << Arel::Visitors::ToSql::COMMA
335
- tab = o.pattern.inspect+ 'g' # Make it always global
335
+ tab = o.pattern.inspect + 'g' # Make it always global
336
336
  pattern = tab.split('/')[1..-2].join('/')
337
337
  flags = tab.split('/')[-1]
338
- visit Arel::Nodes.build_quoted(pattern), collector
338
+ visit Arel.quoted(pattern), collector
339
339
  collector << Arel::Visitors::ToSql::COMMA
340
340
  visit o.substitute, collector
341
341
  collector << Arel::Visitors::ToSql::COMMA
342
- visit Arel::Nodes.build_quoted(flags+"g"), collector
343
- collector << ")"
342
+ visit Arel.quoted(flags + 'g'), collector
343
+ collector << ')'
344
344
  collector
345
345
  end
346
346
 
@@ -351,57 +351,59 @@ module ArelExtensions
351
351
  end
352
352
 
353
353
  def visit_ArelExtensions_Nodes_IsNotNull o, collector
354
- collector = visit o.expr, collector
354
+ collector = visit o.expr, collector
355
355
  collector << ' IS NOT NULL'
356
356
  collector
357
357
  end
358
358
 
359
359
  def visit_ArelExtensions_Nodes_Sum o, collector
360
- collector << "sum("
360
+ collector << 'sum('
361
361
  collector = visit o.expr, collector
362
- collector << ")"
362
+ collector << ')'
363
363
  visit_Aggregate_For_AggregateFunction o, collector
364
364
  collector
365
365
  end
366
366
 
367
367
  def visit_ArelExtensions_Nodes_Wday o, collector
368
- collector << "EXRTACT(DOW, "
368
+ collector << 'EXRTACT(DOW, '
369
369
  collector = visit o.date, collector
370
370
  collector << ')'
371
371
  collector
372
372
  end
373
373
 
374
374
  def visit_ArelExtensions_Nodes_Cast o, collector
375
- as_attr = case o.as_attr
376
- when :string
377
- Arel::Nodes::SqlLiteral.new('varchar')
378
- when :text, :ntext
379
- Arel::Nodes::SqlLiteral.new('text')
380
- when :time
381
- Arel::Nodes::SqlLiteral.new('time')
382
- when :int
383
- collector << "CAST(CAST("
384
- collector = visit o.left, collector
385
- collector << " AS numeric) AS int)"
386
- return collector
387
- when :number, :decimal, :float
388
- Arel::Nodes::SqlLiteral.new('numeric')
389
- when :datetime
390
- Arel::Nodes::SqlLiteral.new('timestamp with time zone')
391
- when :date
392
- Arel::Nodes::SqlLiteral.new('date')
393
- when :binary
394
- Arel::Nodes::SqlLiteral.new('binary')
395
- when :jsonb
396
- Arel::Nodes::SqlLiteral.new('jsonb')
397
- else
398
- Arel::Nodes::SqlLiteral.new(o.as_attr.to_s)
399
- end
400
- collector << "CAST("
375
+ as_attr =
376
+ case o.as_attr
377
+ when :string
378
+ 'varchar'
379
+ when :text, :ntext
380
+ 'text'
381
+ when :time
382
+ 'time'
383
+ when :int
384
+ collector << 'CAST(CAST('
385
+ collector = visit o.left, collector
386
+ collector << ' AS numeric) AS int)'
387
+ return collector
388
+ when :number, :decimal, :float
389
+ 'numeric'
390
+ when :datetime
391
+ 'timestamp with time zone'
392
+ when :date
393
+ 'date'
394
+ when :binary
395
+ 'binary'
396
+ when :jsonb
397
+ 'jsonb'
398
+ else
399
+ o.as_attr.to_s
400
+ end
401
+
402
+ collector << 'CAST('
401
403
  collector = visit o.left, collector
402
- collector << " AS "
403
- collector = visit as_attr, collector
404
- collector << ")"
404
+ collector << ' AS '
405
+ collector = visit Arel::Nodes::SqlLiteral.new(as_attr), collector
406
+ collector << ')'
405
407
  collector
406
408
  end
407
409
 
@@ -410,9 +412,9 @@ module ArelExtensions
410
412
  comma = o.precision == 0 ? '' : (NUMBER_COMMA_MAPPING[o.locale][0] || '.')
411
413
  thousand_separator = NUMBER_COMMA_MAPPING[o.locale][1] || (NUMBER_COMMA_MAPPING[o.locale] ? '' : 'G')
412
414
  nines_after = (1..o.precision).map{'9'}.join('')
413
- nines_before = ("999#{thousand_separator}"*4+"990")
415
+ nines_before = ("999#{thousand_separator}" * 4 + '990')
414
416
 
415
- sign = ArelExtensions::Nodes::Case.new.when(col<0).
417
+ sign = Arel.when(col < 0).
416
418
  then('-').
417
419
  else(o.flags.include?('+') ? '+' : (o.flags.include?(' ') ? ' ' : ''))
418
420
  sign_length = ArelExtensions::Nodes::Length.new([sign])
@@ -420,35 +422,35 @@ module ArelExtensions
420
422
  number =
421
423
  if o.scientific_notation
422
424
  ArelExtensions::Nodes::Concat.new([
423
- Arel::Nodes::NamedFunction.new('TRIM',[
424
- Arel::Nodes::NamedFunction.new('TO_CHAR',[
425
- Arel.when(col.not_eq 0).then(col.abs/Arel::Nodes.build_quoted(10).pow(col.abs.log10.floor)).else(1),
426
- Arel::Nodes.build_quoted('FM'+nines_before+'"'+comma+'"V'+nines_after)
425
+ Arel::Nodes::NamedFunction.new('TRIM', [
426
+ Arel::Nodes::NamedFunction.new('TO_CHAR', [
427
+ Arel.when(col.not_eq 0).then(col.abs / Arel.quoted(10).pow(col.abs.log10.floor)).else(1),
428
+ Arel.quoted('FM' + nines_before + '"' + comma + '"V' + nines_after)
427
429
  ])]),
428
430
  o.type,
429
- Arel::Nodes::NamedFunction.new('TRIM',[
430
- Arel::Nodes::NamedFunction.new('TO_CHAR',[
431
+ Arel::Nodes::NamedFunction.new('TRIM', [
432
+ Arel::Nodes::NamedFunction.new('TO_CHAR', [
431
433
  Arel.when(col.not_eq 0).then(col.abs.log10.floor).else(0),
432
- Arel::Nodes.build_quoted('FM'+nines_before)
434
+ Arel.quoted('FM' + nines_before)
433
435
  ])])
434
436
  ])
435
437
  else
436
- Arel::Nodes::NamedFunction.new('TRIM',[
437
- Arel::Nodes::NamedFunction.new('TO_CHAR',[
438
- Arel::Nodes.build_quoted(col.abs),
439
- Arel::Nodes.build_quoted('FM'+nines_before+'"'+comma+'"V'+nines_after)
438
+ Arel::Nodes::NamedFunction.new('TRIM', [
439
+ Arel::Nodes::NamedFunction.new('TO_CHAR', [
440
+ Arel.quoted(col.abs),
441
+ Arel.quoted('FM' + nines_before + '"' + comma + '"V' + nines_after)
440
442
  ])])
441
443
  end
442
444
 
443
- repeated_char = (o.width == 0) ? Arel::Nodes.build_quoted('') : ArelExtensions::Nodes::Case.new().
444
- when(Arel::Nodes.build_quoted(o.width).abs-(number.length+sign_length)>0).
445
- then(Arel::Nodes.build_quoted(
445
+ repeated_char = (o.width == 0) ? Arel.quoted('') : ArelExtensions::Nodes::Case.new.
446
+ when(Arel.quoted(o.width).abs - (number.length + sign_length) > 0).
447
+ then(Arel.quoted(
446
448
  o.flags.include?('-') ? ' ' : (o.flags.include?('0') ? '0' : ' ')
447
- ).repeat(Arel::Nodes.build_quoted(o.width).abs-(number.length+sign_length))
449
+ ).repeat(Arel.quoted(o.width).abs - (number.length + sign_length))
448
450
  ).
449
451
  else('')
450
- before = (!o.flags.include?('0'))&&(!o.flags.include?('-')) ? repeated_char : ''
451
- middle = (o.flags.include?('0'))&&(!o.flags.include?('-')) ? repeated_char : ''
452
+ before = (!o.flags.include?('0')) && (!o.flags.include?('-')) ? repeated_char : ''
453
+ middle = (o.flags.include?('0')) && (!o.flags.include?('-')) ? repeated_char : ''
452
454
  after = o.flags.include?('-') ? repeated_char : ''
453
455
  full_number = ArelExtensions::Nodes::Concat.new([
454
456
  before,
@@ -457,7 +459,7 @@ module ArelExtensions
457
459
  number,
458
460
  after
459
461
  ])
460
- collector = visit ArelExtensions::Nodes::Concat.new([Arel::Nodes.build_quoted(o.prefix),full_number,Arel::Nodes.build_quoted(o.suffix)]), collector
462
+ collector = visit ArelExtensions::Nodes::Concat.new([Arel.quoted(o.prefix), full_number, Arel.quoted(o.suffix)]), collector
461
463
  collector
462
464
  end
463
465
 
@@ -469,7 +471,7 @@ module ArelExtensions
469
471
  o = o.dup
470
472
  o.orders = []
471
473
  end
472
- old_visit_Arel_Nodes_SelectStatement(o,collector)
474
+ old_visit_Arel_Nodes_SelectStatement(o, collector)
473
475
  end
474
476
 
475
477
  alias_method(:old_visit_Arel_Nodes_TableAlias, :visit_Arel_Nodes_TableAlias) rescue nil
@@ -477,7 +479,7 @@ module ArelExtensions
477
479
  if o.name.length > 63
478
480
  o = Arel::Table.new(o.table_name).alias(Arel.shorten(o.name))
479
481
  end
480
- old_visit_Arel_Nodes_TableAlias(o,collector)
482
+ old_visit_Arel_Nodes_TableAlias(o, collector)
481
483
  end
482
484
 
483
485
  alias_method(:old_visit_Arel_Attributes_Attribute, :visit_Arel_Attributes_Attribute) rescue nil
@@ -490,26 +492,26 @@ module ArelExtensions
490
492
  end
491
493
 
492
494
  def visit_ArelExtensions_Nodes_Std o, collector
493
- collector << (o.unbiased_estimator ? "STDDEV_SAMP(" : "STDDEV_POP(")
495
+ collector << (o.unbiased_estimator ? 'STDDEV_SAMP(' : 'STDDEV_POP(')
494
496
  visit o.left, collector
495
- collector << ")"
497
+ collector << ')'
496
498
  visit_Aggregate_For_AggregateFunction o, collector
497
499
  collector
498
500
  end
499
501
 
500
502
  def visit_ArelExtensions_Nodes_Variance o, collector
501
- collector << (o.unbiased_estimator ? "VAR_SAMP(" : "VAR_POP(")
503
+ collector << (o.unbiased_estimator ? 'VAR_SAMP(' : 'VAR_POP(')
502
504
  visit o.left, collector
503
- collector << ")"
505
+ collector << ')'
504
506
  visit_Aggregate_For_AggregateFunction o, collector
505
507
  collector
506
508
  end
507
509
 
508
- def visit_ArelExtensions_Nodes_Json o,collector
510
+ def visit_ArelExtensions_Nodes_Json o, collector
509
511
  case o.dict
510
512
  when Array
511
513
  collector << 'to_jsonb(array['
512
- o.dict.each.with_index do |v,i|
514
+ o.dict.each.with_index do |v, i|
513
515
  if i != 0
514
516
  collector << Arel::Visitors::MySQL::COMMA
515
517
  end
@@ -518,7 +520,7 @@ module ArelExtensions
518
520
  collector << '])'
519
521
  when Hash
520
522
  collector << 'jsonb_build_object('
521
- o.dict.each.with_index do |(k,v),i|
523
+ o.dict.each.with_index do |(k, v), i|
522
524
  if i != 0
523
525
  collector << Arel::Visitors::MySQL::COMMA
524
526
  end
@@ -527,11 +529,11 @@ module ArelExtensions
527
529
  collector = visit v, collector
528
530
  end
529
531
  collector << ')'
530
- when String,Numeric,TrueClass,FalseClass
531
- collector = visit Arel::Nodes.build_quoted("#{o.dict}"), collector
532
+ when String, Numeric, TrueClass, FalseClass
533
+ collector = visit Arel.quoted("#{o.dict}"), collector
532
534
  collector << '::jsonb'
533
535
  when NilClass
534
- collector << %Q['null'::jsonb]
536
+ collector << %Q['null'::jsonb]
535
537
  else
536
538
  collector = visit o.dict, collector
537
539
  collector << '::jsonb'
@@ -539,8 +541,8 @@ module ArelExtensions
539
541
  collector
540
542
  end
541
543
 
542
- def visit_ArelExtensions_Nodes_JsonMerge o,collector
543
- o.expressions.each.with_index do |v,i|
544
+ def visit_ArelExtensions_Nodes_JsonMerge o, collector
545
+ o.expressions.each.with_index do |v, i|
544
546
  if i != 0
545
547
  collector << ' || '
546
548
  end
@@ -549,14 +551,14 @@ module ArelExtensions
549
551
  collector
550
552
  end
551
553
 
552
- def visit_ArelExtensions_Nodes_JsonGet o,collector
554
+ def visit_ArelExtensions_Nodes_JsonGet o, collector
553
555
  collector = visit o.dict, collector
554
556
  collector << ' ->> '
555
557
  collector = visit o.key, collector
556
558
  collector
557
559
  end
558
560
 
559
- def visit_ArelExtensions_Nodes_JsonSet o,collector
561
+ def visit_ArelExtensions_Nodes_JsonSet o, collector
560
562
  collector << 'jsonb_set('
561
563
  collector = visit o.dict, collector
562
564
  collector << Arel::Visitors::MySQL::COMMA
@@ -578,7 +580,7 @@ module ArelExtensions
578
580
  else
579
581
  case o.dict
580
582
  when Hash
581
- o.dict.each.with_index do |(k,v),i|
583
+ o.dict.each.with_index do |(k, v), i|
582
584
  if i != 0
583
585
  collector << ' || '
584
586
  end