arel_extensions 1.2.2 → 1.2.13

Sign up to get free protection for your applications and to get access to all the features.
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