arel_extensions 1.2.2 → 1.2.13

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 (94) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +7 -4
  3. data/.travis.yml +59 -91
  4. data/Gemfile +2 -2
  5. data/README.md +17 -12
  6. data/Rakefile +38 -27
  7. data/appveyor.yml +1 -1
  8. data/arel_extensions.gemspec +1 -1
  9. data/functions.html +3 -3
  10. data/gemfiles/rails4.gemfile +1 -1
  11. data/gemfiles/rails6.gemfile +30 -0
  12. data/gemspec_v2/arel_extensions-v2.gemspec +28 -0
  13. data/generate_gems.sh +14 -0
  14. data/init/mssql.sql +4 -4
  15. data/init/mysql.sql +38 -38
  16. data/init/postgresql.sql +21 -21
  17. data/lib/arel_extensions.rb +63 -19
  18. data/lib/arel_extensions/attributes.rb +0 -1
  19. data/lib/arel_extensions/boolean_functions.rb +38 -13
  20. data/lib/arel_extensions/common_sql_functions.rb +5 -4
  21. data/lib/arel_extensions/comparators.rb +4 -2
  22. data/lib/arel_extensions/insert_manager.rb +26 -24
  23. data/lib/arel_extensions/math.rb +3 -3
  24. data/lib/arel_extensions/math_functions.rb +10 -5
  25. data/lib/arel_extensions/nodes.rb +1 -1
  26. data/lib/arel_extensions/nodes/abs.rb +0 -0
  27. data/lib/arel_extensions/nodes/aggregate_function.rb +14 -0
  28. data/lib/arel_extensions/nodes/blank.rb +14 -11
  29. data/lib/arel_extensions/nodes/case.rb +8 -4
  30. data/lib/arel_extensions/nodes/ceil.rb +0 -0
  31. data/lib/arel_extensions/nodes/change_case.rb +2 -2
  32. data/lib/arel_extensions/nodes/coalesce.rb +2 -2
  33. data/lib/arel_extensions/nodes/collate.rb +12 -12
  34. data/lib/arel_extensions/nodes/concat.rb +6 -13
  35. data/lib/arel_extensions/nodes/date_diff.rb +3 -5
  36. data/lib/arel_extensions/nodes/duration.rb +0 -2
  37. data/lib/arel_extensions/nodes/find_in_set.rb +0 -0
  38. data/lib/arel_extensions/nodes/floor.rb +0 -0
  39. data/lib/arel_extensions/nodes/format.rb +8 -8
  40. data/lib/arel_extensions/nodes/formatted_number.rb +23 -23
  41. data/lib/arel_extensions/nodes/function.rb +10 -0
  42. data/lib/arel_extensions/nodes/is_null.rb +10 -8
  43. data/lib/arel_extensions/nodes/json.rb +28 -30
  44. data/lib/arel_extensions/nodes/length.rb +0 -0
  45. data/lib/arel_extensions/nodes/levenshtein_distance.rb +5 -5
  46. data/lib/arel_extensions/nodes/locate.rb +7 -7
  47. data/lib/arel_extensions/nodes/matches.rb +4 -4
  48. data/lib/arel_extensions/nodes/power.rb +6 -5
  49. data/lib/arel_extensions/nodes/rand.rb +0 -0
  50. data/lib/arel_extensions/nodes/repeat.rb +2 -2
  51. data/lib/arel_extensions/nodes/replace.rb +24 -6
  52. data/lib/arel_extensions/nodes/round.rb +5 -5
  53. data/lib/arel_extensions/nodes/soundex.rb +16 -15
  54. data/lib/arel_extensions/nodes/std.rb +19 -21
  55. data/lib/arel_extensions/nodes/substring.rb +8 -15
  56. data/lib/arel_extensions/nodes/sum.rb +7 -0
  57. data/lib/arel_extensions/nodes/trim.rb +3 -3
  58. data/lib/arel_extensions/nodes/union.rb +2 -3
  59. data/lib/arel_extensions/nodes/union_all.rb +1 -2
  60. data/lib/arel_extensions/nodes/wday.rb +0 -0
  61. data/lib/arel_extensions/null_functions.rb +2 -2
  62. data/lib/arel_extensions/predications.rb +35 -33
  63. data/lib/arel_extensions/set_functions.rb +16 -16
  64. data/lib/arel_extensions/string_functions.rb +34 -12
  65. data/lib/arel_extensions/tasks.rb +5 -5
  66. data/lib/arel_extensions/version.rb +1 -1
  67. data/lib/arel_extensions/visitors.rb +1 -1
  68. data/lib/arel_extensions/visitors/ibm_db.rb +1 -1
  69. data/lib/arel_extensions/visitors/mssql.rb +18 -17
  70. data/lib/arel_extensions/visitors/mysql.rb +92 -46
  71. data/lib/arel_extensions/visitors/oracle.rb +40 -28
  72. data/lib/arel_extensions/visitors/oracle12.rb +1 -1
  73. data/lib/arel_extensions/visitors/postgresql.rb +80 -34
  74. data/lib/arel_extensions/visitors/sqlite.rb +54 -46
  75. data/lib/arel_extensions/visitors/to_sql.rb +75 -62
  76. data/test/arelx_test_helper.rb +28 -0
  77. data/test/real_db_test.rb +1 -1
  78. data/test/support/fake_record.rb +4 -0
  79. data/test/test_comparators.rb +9 -8
  80. data/test/visitors/test_bulk_insert_oracle.rb +8 -7
  81. data/test/visitors/test_bulk_insert_sqlite.rb +9 -8
  82. data/test/visitors/test_bulk_insert_to_sql.rb +8 -10
  83. data/test/visitors/test_oracle.rb +41 -40
  84. data/test/visitors/test_to_sql.rb +367 -193
  85. data/test/with_ar/all_agnostic_test.rb +85 -39
  86. data/test/with_ar/insert_agnostic_test.rb +3 -2
  87. data/test/with_ar/test_bulk_sqlite.rb +6 -5
  88. data/test/with_ar/test_math_sqlite.rb +4 -4
  89. data/test/with_ar/test_string_mysql.rb +4 -6
  90. data/test/with_ar/test_string_sqlite.rb +3 -7
  91. data/version_v1.rb +3 -0
  92. data/version_v2.rb +3 -0
  93. metadata +13 -7
  94. data/test/helper.rb +0 -18
@@ -1,6 +1,6 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
- Arel::Visitors::SQLite.class_eval do
3
+ class Arel::Visitors::SQLite
4
4
  Arel::Visitors::SQLite::DATE_MAPPING = {'d' => '%d', 'm' => '%m', 'w' => '%W', 'y' => '%Y', 'wd' => '%w', 'M' => '%M', 'h' => '%H', 'mn' => '%M', 's' => '%S'}
5
5
  Arel::Visitors::SQLite::DATE_FORMAT_DIRECTIVES = { # ISO C / POSIX
6
6
  '%Y' => '%Y', '%C' => '', '%y' => '%y', '%m' => '%m', '%B' => '%M', '%b' => '%b', '%^b' => '%b', # year, month
@@ -150,13 +150,13 @@ module ArelExtensions
150
150
  end
151
151
 
152
152
  def visit_ArelExtensions_Nodes_IsNull o, collector
153
- collector = visit o.left, collector
153
+ collector = visit o.expr, collector
154
154
  collector << ' IS NULL'
155
155
  collector
156
156
  end
157
157
 
158
158
  def visit_ArelExtensions_Nodes_IsNotNull o, collector
159
- collector = visit o.left, collector
159
+ collector = visit o.expr, collector
160
160
  collector << ' IS NOT NULL'
161
161
  collector
162
162
  end
@@ -193,18 +193,28 @@ module ArelExtensions
193
193
  collector
194
194
  end
195
195
 
196
- # CASE WHEN ROUND(3.42,1) > round(3.42) THEN round(3.42) ELSE round(3.42)-1 END
197
- # OR CAST(3.14 AS INTEGER)
196
+ # CAST(
197
+ # CASE
198
+ # WHEN 3.42 >= 0 THEN CAST(3.42 AS INT)
199
+ # WHEN CAST(3.42 AS INT) = 3.42 THEN CAST(3.42 AS INT)
200
+ # ELSE CAST((3.42 - 1.0) AS INT)
201
+ # END
202
+ # AS FLOAT
203
+ # )
198
204
  def visit_ArelExtensions_Nodes_Floor o, collector
199
- collector << "CASE WHEN ROUND("
205
+ collector << "CAST(CASE WHEN "
200
206
  collector = visit o.left, collector
201
- collector << ", 1) > ROUND("
207
+ collector << " >= 0 THEN CAST("
202
208
  collector = visit o.left, collector
203
- collector << ") THEN ROUND("
209
+ collector << " AS INT) WHEN CAST("
210
+ collector = visit o.left, collector
211
+ collector << " AS INT) = "
204
212
  collector = visit o.left, collector
205
- collector << ") ELSE ROUND("
213
+ collector << " THEN CAST("
206
214
  collector = visit o.left, collector
207
- collector << ") - 1 END"
215
+ collector << " AS INT) ELSE CAST(("
216
+ collector = visit o.left, collector
217
+ collector << " - 1.0) AS INT) END AS FLOAT)"
208
218
  collector
209
219
  end
210
220
 
@@ -225,9 +235,8 @@ module ArelExtensions
225
235
  def visit_ArelExtensions_InsertManager_BulkValues o, collector
226
236
  o.left.each_with_index do |row, idx|
227
237
  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|
238
+ len = row.length - 1
239
+ row.zip(o.cols).each_with_index { |(value, attr), i|
231
240
  case value
232
241
  when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
233
242
  collector = visit value.as(attr.name), collector
@@ -248,12 +257,17 @@ module ArelExtensions
248
257
  def visit_ArelExtensions_InsertManager_BulkValues o, collector
249
258
  o.left.each_with_index do |row, idx|
250
259
  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|
260
+ len = row.length - 1
261
+ row.zip(o.cols).each_with_index { |(value, attr), i|
254
262
  case value
255
263
  when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
256
264
  collector = visit value.as(attr.name), collector
265
+ when Integer
266
+ collector << value.to_s
267
+ if idx == 0
268
+ collector << " AS "
269
+ collector << quote(attr.name)
270
+ end
257
271
  else
258
272
  collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
259
273
  if idx == 0
@@ -270,32 +284,36 @@ module ArelExtensions
270
284
  end
271
285
 
272
286
  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
287
+ collector =
288
+ if o.left.is_a?(Arel::SelectManager)
289
+ visit o.left.ast, collector
290
+ else
291
+ visit o.left, collector
292
+ end
278
293
  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
283
- end
294
+ collector =
295
+ if o.right.is_a?(Arel::SelectManager)
296
+ visit o.right.ast, collector
297
+ else
298
+ visit o.right, collector
299
+ end
284
300
  collector
285
301
  end
286
302
 
287
303
  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
304
+ collector =
305
+ if o.left.is_a?(Arel::SelectManager)
306
+ visit o.left.ast, collector
307
+ else
308
+ visit o.left, collector
309
+ end
293
310
  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
298
- end
311
+ collector =
312
+ if o.right.is_a?(Arel::SelectManager)
313
+ visit o.right.ast, collector
314
+ else
315
+ visit o.right, collector
316
+ end
299
317
  collector
300
318
  end
301
319
 
@@ -346,16 +364,6 @@ module ArelExtensions
346
364
  collector
347
365
  end
348
366
 
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
367
  alias_method :old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As
360
368
  def visit_Arel_Nodes_As o, collector
361
369
  if o.left.is_a?(Arel::Nodes::Binary)
@@ -1,6 +1,7 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
- Arel::Visitors::ToSql.class_eval do
3
+ class Arel::Visitors::ToSql
4
+ Arel::Visitors::ToSql::COMMA = ', ' unless defined?(Arel::Visitors::ToSql::COMMA)
4
5
 
5
6
  # Math Functions
6
7
  def visit_ArelExtensions_Nodes_Abs o, collector
@@ -52,14 +53,14 @@ module ArelExtensions
52
53
  collector << ")"
53
54
  collector
54
55
  end
55
-
56
+
56
57
  def visit_ArelExtensions_Nodes_Log10 o, collector
57
58
  collector << "LOG10("
58
59
  collector = visit o.left, collector
59
60
  collector << ")"
60
61
  collector
61
62
  end
62
-
63
+
63
64
  def visit_ArelExtensions_Nodes_Power o, collector
64
65
  collector << "POW("
65
66
  o.expressions.each_with_index { |arg, i|
@@ -70,6 +71,13 @@ module ArelExtensions
70
71
  collector
71
72
  end
72
73
 
74
+ def visit_ArelExtensions_Nodes_Sum o, collector
75
+ collector << "SUM("
76
+ collector = visit o.expr, collector
77
+ collector << ")"
78
+ collector
79
+ end
80
+
73
81
  # String functions
74
82
  def visit_ArelExtensions_Nodes_Concat o, collector
75
83
  collector << "CONCAT("
@@ -84,9 +92,9 @@ module ArelExtensions
84
92
  def visit_ArelExtensions_Nodes_GroupConcat o, collector
85
93
  collector << "GROUP_CONCAT("
86
94
  collector = visit o.left, collector
87
- if o.right && o.right != 'NULL'
95
+ if o.separator && o.separator != 'NULL'
88
96
  collector << Arel::Visitors::ToSql::COMMA
89
- collector = visit o.right, collector
97
+ collector = visit o.separator, collector
90
98
  end
91
99
  collector << ")"
92
100
  collector
@@ -127,14 +135,26 @@ module ArelExtensions
127
135
 
128
136
  def visit_ArelExtensions_Nodes_Replace o, collector
129
137
  collector << "REPLACE("
130
- o.expressions.each_with_index { |arg, i|
131
- collector << Arel::Visitors::ToSql::COMMA unless i == 0
132
- collector = visit arg, collector
133
- }
138
+ visit o.left, collector
139
+ collector << Arel::Visitors::ToSql::COMMA
140
+ visit o.pattern, collector
141
+ collector << Arel::Visitors::ToSql::COMMA
142
+ visit o.substitute, collector
134
143
  collector << ")"
135
144
  collector
136
145
  end
137
-
146
+
147
+ def visit_ArelExtensions_Nodes_RegexpReplace o, collector
148
+ collector << "REGEXP_REPLACE("
149
+ visit o.left, collector
150
+ collector << Arel::Visitors::ToSql::COMMA
151
+ visit Arel::Nodes.build_quoted(o.pattern.to_s), collector
152
+ collector << Arel::Visitors::ToSql::COMMA
153
+ visit o.substitute, collector
154
+ collector << ")"
155
+ collector
156
+ end
157
+
138
158
  def visit_ArelExtensions_Nodes_Repeat o, collector
139
159
  collector << "REPEAT("
140
160
  o.expressions.each_with_index { |arg, i|
@@ -218,7 +238,7 @@ module ArelExtensions
218
238
  def visit_ArelExtensions_Nodes_Blank o, collector
219
239
  #visit o.left.coalesce('').trim.length.eq(0), collector
220
240
  collector << 'LENGTH(TRIM(COALESCE('
221
- collector = visit o.left, collector
241
+ collector = visit o.expr, collector
222
242
  collector << Arel::Visitors::ToSql::COMMA
223
243
  collector = visit Arel::Nodes.build_quoted(''), collector
224
244
  collector << "))) = 0"
@@ -229,7 +249,7 @@ module ArelExtensions
229
249
  def visit_ArelExtensions_Nodes_NotBlank o, collector
230
250
  #visit o.left.coalesce('').trim.length.gt(0), collector
231
251
  collector << 'LENGTH(TRIM(COALESCE('
232
- collector = visit o.left, collector
252
+ collector = visit o.expr, collector
233
253
  collector << Arel::Visitors::ToSql::COMMA
234
254
  collector = visit Arel::Nodes.build_quoted(''), collector
235
255
  collector << "))) > 0"
@@ -269,12 +289,12 @@ module ArelExtensions
269
289
  as_attr = Arel::Nodes::SqlLiteral.new('int')
270
290
  when :decimal, :float, :number
271
291
  as_attr = Arel::Nodes::SqlLiteral.new('float')
272
- when :datetime
292
+ when :datetime
273
293
  as_attr = Arel::Nodes::SqlLiteral.new('datetime')
274
294
  when :time
275
295
  as_attr = Arel::Nodes::SqlLiteral.new('time')
276
- when :binary
277
- as_attr = Arel::Nodes::SqlLiteral.new('binary')
296
+ when :binary
297
+ as_attr = Arel::Nodes::SqlLiteral.new('binary')
278
298
  else
279
299
  as_attr = Arel::Nodes::SqlLiteral.new(o.as_attr.to_s)
280
300
  end
@@ -305,7 +325,7 @@ module ArelExtensions
305
325
  collector << ")"
306
326
  collector
307
327
  end
308
-
328
+
309
329
  def visit_ArelExtensions_Nodes_DateSub o, collector
310
330
  collector << "DATE_SUB("
311
331
  collector = visit o.left, collector
@@ -367,14 +387,14 @@ module ArelExtensions
367
387
 
368
388
  def visit_ArelExtensions_Nodes_IsNull o, collector
369
389
  collector << "ISNULL("
370
- collector = visit o.left, collector
390
+ collector = visit o.expr, collector
371
391
  collector << ")"
372
392
  collector
373
393
  end
374
394
 
375
395
  def visit_ArelExtensions_Nodes_IsNotNull o, collector
376
396
  collector << "NOT ISNULL("
377
- collector = visit o.left, collector
397
+ collector = visit o.expr, collector
378
398
  collector << ")"
379
399
  collector
380
400
  end
@@ -384,7 +404,7 @@ module ArelExtensions
384
404
  collector = visit o.left, collector
385
405
  collector << ") THEN "
386
406
  collector = visit o.right, collector
387
- if o.expressions[2]
407
+ if o.expressions[2]
388
408
  collector << " ELSE "
389
409
  collector = visit o.expressions[2], collector
390
410
  end
@@ -408,16 +428,15 @@ module ArelExtensions
408
428
  row_nb = o.left.length
409
429
  o.left.each_with_index do |row, idx|
410
430
  collector << '('
411
- v = Arel::Nodes::Values.new(row, o.cols)
412
- len = v.expressions.length - 1
413
- v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
414
- case value
415
- when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
416
- collector = visit value, collector
417
- else
418
- collector << quote(value, attr && column_for(attr)).to_s
419
- end
420
- collector << Arel::Visitors::ToSql::COMMA unless i == len
431
+ len = row.length - 1
432
+ row.zip(o.cols).each_with_index { |(value, attr), i|
433
+ case value
434
+ when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
435
+ collector = visit value, collector
436
+ else
437
+ collector << quote(value, attr && column_for(attr)).to_s
438
+ end
439
+ collector << Arel::Visitors::ToSql::COMMA unless i == len
421
440
  }
422
441
  collector << (idx == row_nb-1 ? ')' : '), ')
423
442
  end
@@ -429,16 +448,17 @@ module ArelExtensions
429
448
  row_nb = o.left.length
430
449
  o.left.each_with_index do |row, idx|
431
450
  collector << '('
432
- v = Arel::Nodes::Values.new(row, o.cols)
433
- len = v.expressions.length - 1
434
- v.expressions.zip(v.columns).each_with_index { |(value, attr), i|
435
- case value
436
- when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
437
- collector = visit value, collector
438
- else
439
- collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
440
- end
441
- collector << Arel::Visitors::ToSql::COMMA unless i == len
451
+ len = row.length - 1
452
+ row.zip(o.cols).each_with_index { |(value, attr), i|
453
+ case value
454
+ when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam
455
+ collector = visit value, collector
456
+ when Integer
457
+ collector << value.to_s
458
+ else
459
+ collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
460
+ end
461
+ collector << Arel::Visitors::ToSql::COMMA unless i == len
442
462
  }
443
463
  collector << (idx == row_nb-1 ? ')' : '), ')
444
464
  end
@@ -452,7 +472,7 @@ module ArelExtensions
452
472
  collector = visit o.right, collector
453
473
  collector
454
474
  end
455
-
475
+
456
476
  def visit_ArelExtensions_Nodes_UnionAll o, collector
457
477
  collector = visit o.left, collector
458
478
  collector << " UNION ALL "
@@ -489,25 +509,25 @@ module ArelExtensions
489
509
  visit Arel::Nodes.build_quoted(o.expr), collector
490
510
  end
491
511
 
492
- def visit_ArelExtensions_Nodes_FormattedNumber o, collector
512
+ def visit_ArelExtensions_Nodes_FormattedNumber o, collector
493
513
  visit o.left, collector
494
514
  end
495
-
496
- remove_method(:visit_Arel_Nodes_LessThan) rescue nil
515
+
516
+ remove_method(:visit_Arel_Nodes_LessThan) rescue nil
497
517
  def visit_Arel_Nodes_LessThan o, collector
498
518
  collector = visit o.left, collector
499
519
  collector << " < "
500
520
  visit o.right, collector
501
521
  end
502
-
503
- def visit_ArelExtensions_Nodes_Std o, collector
522
+
523
+ def visit_ArelExtensions_Nodes_Std o, collector
504
524
  collector << "STD("
505
525
  visit o.left, collector
506
526
  collector << ")"
507
527
  collector
508
528
  end
509
-
510
- def visit_ArelExtensions_Nodes_Variance o, collector
529
+
530
+ def visit_ArelExtensions_Nodes_Variance o, collector
511
531
  collector << "VARIANCE("
512
532
  visit o.left, collector
513
533
  collector << ")"
@@ -523,11 +543,13 @@ module ArelExtensions
523
543
  collector
524
544
  end
525
545
 
546
+ # Boolean logic.
547
+
526
548
  alias_method :old_visit_Arel_Nodes_And, :visit_Arel_Nodes_And
527
549
  def visit_Arel_Nodes_And o, collector
528
550
  case o.children.length
529
551
  when 0
530
- collector << '1=1' # but this should not happen
552
+ collector << '1 = 1' # but this should not happen
531
553
  when 1
532
554
  collector = visit o.children[0], collector
533
555
  else
@@ -543,10 +565,11 @@ module ArelExtensions
543
565
  collector
544
566
  end
545
567
 
546
- def visit_ArelExtensions_Nodes_Or o, collector
568
+ alias_method :old_visit_Arel_Nodes_Or, :visit_Arel_Nodes_Or
569
+ def visit_Arel_Nodes_Or o, collector
547
570
  case o.children.length
548
571
  when 0
549
- collector << '0=1' # but this should not happen
572
+ collector << '1 = 0' # but this should not happen
550
573
  when 1
551
574
  collector = visit o.children[0], collector
552
575
  else
@@ -562,16 +585,6 @@ module ArelExtensions
562
585
  collector
563
586
  end
564
587
 
565
- alias_method :old_visit_Arel_Nodes_Or, :visit_Arel_Nodes_Or
566
- def visit_Arel_Nodes_Or o, collector
567
- collector << '('
568
- collector = visit o.left, collector
569
- collector << ') OR ('
570
- collector = visit o.right, collector
571
- collector << ')'
572
- collector
573
- end
574
-
575
588
  def visit_ArelExtensions_Nodes_Json o,collector
576
589
  case o.dict
577
590
  when Array
@@ -611,7 +624,7 @@ module ArelExtensions
611
624
 
612
625
  def visit_ArelExtensions_Nodes_JsonGroup o, collector
613
626
  if o.as_array
614
- res = Arel::Nodes.build_quoted('[') + (o.orders ? o.dict.group_concat(', ',o.orders) : o.dict.group_concat(', ')) + ']'
627
+ res = Arel::Nodes.build_quoted('[') + (o.orders ? o.dict.group_concat(', ', order: Array(o.orders)) : o.dict.group_concat(', ')).coalesce('') + ']'
615
628
  collector = visit res, collector
616
629
  else
617
630
  res = Arel::Nodes.build_quoted('{')
@@ -626,7 +639,7 @@ module ArelExtensions
626
639
  else
627
640
  kv += v
628
641
  end
629
- res = res + kv.group_concat(', ',orders)
642
+ res = res + kv.group_concat(', ', order: Array(orders)).coalesce('')
630
643
  end
631
644
  res = res + '}'
632
645
  collector = visit res, collector