arel_extensions 1.2.0 → 1.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ff15cd23745599b0d20b2ee2057aa60e67f884b
4
- data.tar.gz: c9f5c30cc2ba738fbdba34fab575fc93d1d01645
3
+ metadata.gz: 5d16042c9625c2efb1154a69f7717050b164269d
4
+ data.tar.gz: a9760058285052d730a80997691cbb1beeacc985
5
5
  SHA512:
6
- metadata.gz: b03cf4dcfe3f2f1c5c754e3ab42045702b7be1fd906ea44797a70dc6c8d44d6f2a7ed417e247dc95c1f1021bfd1d41574ba2b001fbdb9b7700ec3d8cce3a5126
7
- data.tar.gz: cfb1ebf5427a66e1637d3ab023e84eee3cfaa41353bc303ed8fccddfdfd517e670e54f7750b00dd8c14dd9cc5c8b2488d6d8854e221efca3a63887b99430c78b
6
+ metadata.gz: 42e83c94f94962e39052a624c772b88bdb5200a265b0dc062aed6f0cd76cb039b59797b3b163970742a80ac7db88b4648ebdec40739b153cffc798c9eabe046b
7
+ data.tar.gz: 31c805934070166c47f758f49732cd21efa56e1a7b4216edd443ed059e9039652789f431c3faa1cc2e40867849827270b9c485d0fdb790d57263e0e12062df5d
@@ -3,7 +3,7 @@ module ArelExtensions
3
3
  class JsonNode < Function
4
4
  RETURN_TYPE = :json
5
5
 
6
- attr_accessor :hash
6
+ attr_accessor :dict
7
7
 
8
8
  def merge *expr
9
9
  args = [self] + expr.map{|e| Json.new(e)}
@@ -22,6 +22,10 @@ module ArelExtensions
22
22
  JsonGroup.new(self,as_array, orders)
23
23
  end
24
24
 
25
+ def hash
26
+ [@dict].hash
27
+ end
28
+
25
29
  end
26
30
 
27
31
  class Json < JsonNode
@@ -30,30 +34,31 @@ module ArelExtensions
30
34
  if expr.length == 1
31
35
  case expr.first
32
36
  when JsonNode
33
- @hash = expr.first.hash
37
+ @dict = expr.first.dict
34
38
  when Array
35
- @hash = expr.first.map{|e|
39
+ @dict = expr.first.map{|e|
36
40
  (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_node(e)
37
41
  }
38
42
  when Hash
39
- @hash = expr.first.inject({}){|acc,v|
43
+ @dict = expr.first.inject({}){|acc,v|
40
44
  acc[convert_to_node(v[0])] = (v[1].is_a?(Array) || v[1].is_a?(Hash)) ? Json.new(v[1]) : convert_to_node(v[1])
41
45
  acc
42
46
  }
43
47
  when String, Numeric, TrueClass, FalseClass
44
- @hash = convert_to_node(expr.first)
48
+ @dict = convert_to_node(expr.first)
45
49
  when NilClass
46
- @hash = Arel.sql('null')
50
+ @dict = Arel.sql('null')
47
51
  else
48
52
  if expr.first.is_a?(String) || (expr.first.is_a?(Arel::Attributes::Attribute) && type_of_attribute(expr.first) == :string) || (expr.first.return_type == :string)
49
- @hash = convert_to_node(expr.first)
53
+ @dict = convert_to_node(expr.first)
50
54
  else
51
- @hash = [convert_to_node(expr.first)]
55
+ @dict = [convert_to_node(expr.first)]
52
56
  end
53
57
  end
54
58
  else
55
- @hash = expr.map{|e| (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_node(e) }
59
+ @dict = expr.map{|e| (e.is_a?(Array) || e.is_a?(Hash)) ? Json.new(e) : convert_to_node(e) }
56
60
  end
61
+ super
57
62
  end
58
63
 
59
64
  end
@@ -65,7 +70,7 @@ module ArelExtensions
65
70
  attr_accessor :as_array, :orders
66
71
 
67
72
  def initialize json, as_array = true, orders = nil
68
- @hash = as_array ? json : json.hash
73
+ @dict = as_array ? json : json.dict
69
74
  @as_array = as_array
70
75
  if orders
71
76
  if orders.is_a?(Array)
@@ -81,7 +86,7 @@ module ArelExtensions
81
86
  attr_accessor :key
82
87
 
83
88
  def initialize json, key
84
- @hash = json
89
+ @dict = json
85
90
  @key = convert_to_node(key)
86
91
  end
87
92
 
@@ -91,7 +96,7 @@ module ArelExtensions
91
96
  attr_accessor :key, :value
92
97
 
93
98
  def initialize json, key, value
94
- @hash = json
99
+ @dict = json
95
100
  @key = convert_to_node(key)
96
101
  @value = Json.new(value)
97
102
  end
@@ -1,3 +1,3 @@
1
1
  module ArelExtensions
2
- VERSION = "1.2.0".freeze
2
+ VERSION = "1.2.1".freeze
3
3
  end
@@ -517,7 +517,7 @@ module ArelExtensions
517
517
 
518
518
  def visit_ArelExtensions_Nodes_JsonGet o,collector
519
519
  collector << 'JSON_VALUE('
520
- collector = visit o.hash, collector
520
+ collector = visit o.dict, collector
521
521
  collector << Arel::Visitors::MySQL::COMMA
522
522
  if o.key.is_a?(Integer)
523
523
  collector << "\"$[#{o.key}]\""
@@ -402,10 +402,10 @@ module ArelExtensions
402
402
 
403
403
  def visit_ArelExtensions_Nodes_Json o,collector
404
404
  return super if !json_supported?
405
- case o.hash
405
+ case o.dict
406
406
  when Array
407
407
  collector << 'JSON_ARRAY('
408
- o.hash.each.with_index do |v,i|
408
+ o.dict.each.with_index do |v,i|
409
409
  if i != 0
410
410
  collector << Arel::Visitors::MySQL::COMMA
411
411
  end
@@ -414,7 +414,7 @@ module ArelExtensions
414
414
  collector << ')'
415
415
  when Hash
416
416
  collector << 'JSON_OBJECT('
417
- o.hash.each.with_index do |(k,v),i|
417
+ o.dict.each.with_index do |(k,v),i|
418
418
  if i != 0
419
419
  collector << Arel::Visitors::MySQL::COMMA
420
420
  end
@@ -424,7 +424,7 @@ module ArelExtensions
424
424
  end
425
425
  collector << ')'
426
426
  else
427
- collector = visit o.hash, collector
427
+ collector = visit o.dict, collector
428
428
  end
429
429
  collector
430
430
  end
@@ -443,7 +443,7 @@ module ArelExtensions
443
443
 
444
444
  def visit_ArelExtensions_Nodes_JsonGet o,collector
445
445
  collector << 'JSON_EXTRACT('
446
- collector = visit o.hash, collector
446
+ collector = visit o.dict, collector
447
447
  collector << Arel::Visitors::MySQL::COMMA
448
448
  if o.key.is_a?(Integer)
449
449
  collector << "\"$[#{o.key}]\""
@@ -456,7 +456,7 @@ module ArelExtensions
456
456
 
457
457
  def visit_ArelExtensions_Nodes_JsonSet o,collector
458
458
  collector << 'JSON_SET('
459
- collector = visit o.hash, collector
459
+ collector = visit o.dict, collector
460
460
  collector << Arel::Visitors::MySQL::COMMA
461
461
  if o.key.is_a?(Integer)
462
462
  collector << "\"$[#{o.key}]\""
@@ -473,13 +473,13 @@ module ArelExtensions
473
473
  return super if !json_supported?
474
474
  if o.as_array
475
475
  collector << 'JSON_ARRAYAGG('
476
- collector = visit o.hash, collector
476
+ collector = visit o.dict, collector
477
477
  collector << ')'
478
478
  else
479
- case o.hash
479
+ case o.dict
480
480
  when Hash
481
- collector << 'JSON_MERGE_PATCH(' if o.hash.length > 1
482
- o.hash.each.with_index do |(k,v),i|
481
+ collector << 'JSON_MERGE_PATCH(' if o.dict.length > 1
482
+ o.dict.each.with_index do |(k,v),i|
483
483
  if i != 0
484
484
  collector << Arel::Visitors::MySQL::COMMA
485
485
  end
@@ -489,10 +489,10 @@ module ArelExtensions
489
489
  collector = visit v, collector
490
490
  collector << ')'
491
491
  end
492
- collector << ')' if o.hash.length > 1
492
+ collector << ')' if o.dict.length > 1
493
493
  else
494
494
  collector << 'JSON_OBJECTAGG('
495
- collector = visit o.hash, collector
495
+ collector = visit o.dict, collector
496
496
  collector << ')'
497
497
  end
498
498
  end
@@ -1,70 +1,70 @@
1
1
  module ArelExtensions
2
2
  module Visitors
3
3
 
4
- Arel::Visitors.send(:remove_const,'Oracle12') if Arel::Visitors.const_defined?('Oracle12')
5
- Arel::Visitors.const_set('Oracle12',Class.new(Arel::Visitors::Oracle)).class_eval do
6
- def visit_Arel_Nodes_SelectStatement(o, collector)
7
- # Oracle does not allow LIMIT clause with select for update
8
- if o.limit && o.lock
9
- raise ArgumentError, <<-MSG
10
- 'Combination of limit and lock is not supported.
11
- because generated SQL statements
12
- `SELECT FOR UPDATE and FETCH FIRST n ROWS` generates ORA-02014.`
13
- MSG
14
- end
15
- super
16
- end
4
+ Arel::Visitors.send(:remove_const,'Oracle12') if Arel::Visitors.const_defined?('Oracle12')
5
+ Arel::Visitors.const_set('Oracle12',Class.new(Arel::Visitors::Oracle)).class_eval do
6
+ def visit_Arel_Nodes_SelectStatement(o, collector)
7
+ # Oracle does not allow LIMIT clause with select for update
8
+ if o.limit && o.lock
9
+ raise ArgumentError, <<-MSG
10
+ 'Combination of limit and lock is not supported.
11
+ because generated SQL statements
12
+ `SELECT FOR UPDATE and FETCH FIRST n ROWS` generates ORA-02014.`
13
+ MSG
14
+ end
15
+ super
16
+ end
17
17
 
18
- def visit_Arel_Nodes_SelectOptions(o, collector)
19
- collector = maybe_visit o.offset, collector
20
- collector = maybe_visit o.limit, collector
21
- maybe_visit o.lock, collector
22
- end
18
+ def visit_Arel_Nodes_SelectOptions(o, collector)
19
+ collector = maybe_visit o.offset, collector
20
+ collector = maybe_visit o.limit, collector
21
+ maybe_visit o.lock, collector
22
+ end
23
23
 
24
- def visit_Arel_Nodes_Limit(o, collector)
25
- collector << "FETCH FIRST "
26
- collector = visit o.expr, collector
27
- collector << " ROWS ONLY"
28
- end
24
+ def visit_Arel_Nodes_Limit(o, collector)
25
+ collector << "FETCH FIRST "
26
+ collector = visit o.expr, collector
27
+ collector << " ROWS ONLY"
28
+ end
29
29
 
30
- def visit_Arel_Nodes_Offset(o, collector)
31
- collector << "OFFSET "
32
- visit o.expr, collector
33
- collector << " ROWS"
34
- end
30
+ def visit_Arel_Nodes_Offset(o, collector)
31
+ collector << "OFFSET "
32
+ visit o.expr, collector
33
+ collector << " ROWS"
34
+ end
35
35
 
36
- def visit_Arel_Nodes_Except(o, collector)
37
- collector << "( "
38
- collector = infix_value o, collector, " MINUS "
39
- collector << " )"
40
- end
36
+ def visit_Arel_Nodes_Except(o, collector)
37
+ collector << "( "
38
+ collector = infix_value o, collector, " MINUS "
39
+ collector << " )"
40
+ end
41
41
 
42
- def visit_Arel_Nodes_UpdateStatement(o, collector)
43
- # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
44
- if o.orders.any? && o.limit.nil?
45
- # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
46
- # otherwise let the user deal with the error
47
- o = o.dup
48
- o.orders = []
49
- end
42
+ def visit_Arel_Nodes_UpdateStatement(o, collector)
43
+ # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
44
+ if o.orders.any? && o.limit.nil?
45
+ # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
46
+ # otherwise let the user deal with the error
47
+ o = o.dup
48
+ o.orders = []
49
+ end
50
+ super
51
+ end
50
52
 
51
- super
52
- end
53
+ def visit_Arel_Nodes_BindParam(o, collector)
54
+ collector.add_bind(o.value) { |i| ":a#{i}" }
55
+ end
53
56
 
54
- def visit_Arel_Nodes_BindParam(o, collector)
55
- collector.add_bind(o.value) { |i| ":a#{i}" }
56
- end
57
+ def is_distinct_from(o, collector)
58
+ collector << "DECODE("
59
+ collector = visit [o.left, o.right, 0, 1], collector
60
+ collector << ")"
61
+ end
57
62
 
58
- def is_distinct_from(o, collector)
59
- collector << "DECODE("
60
- collector = visit [o.left, o.right, 0, 1], collector
61
- collector << ")"
62
- end
63
63
  def visit_ArelExtensions_Nodes_Json o,collector
64
- case o.hash
64
+ case o.dict
65
65
  when Array
66
66
  collector << 'json_array('
67
- o.hash.each.with_index do |v,i|
67
+ o.dict.each.with_index do |v,i|
68
68
  if i != 0
69
69
  collector << Arel::Visitors::MySQL::COMMA
70
70
  end
@@ -73,7 +73,7 @@ module ArelExtensions
73
73
  collector << ')'
74
74
  when Hash
75
75
  collector << 'json__object('
76
- o.hash.each.with_index do |(k,v),i|
76
+ o.dict.each.with_index do |(k,v),i|
77
77
  if i != 0
78
78
  collector << Arel::Visitors::MySQL::COMMA
79
79
  end
@@ -85,19 +85,19 @@ module ArelExtensions
85
85
  end
86
86
  collector << ')'
87
87
  when String,Numeric,TrueClass,FalseClass
88
- collector = visit Arel::Nodes.build_quoted("#{o.hash}"), collector
88
+ collector = visit Arel::Nodes.build_quoted("#{o.dict}"), collector
89
89
  collector << ' FORMAT JSON'
90
90
  when NilClass
91
91
  collector << %Q['null' FORMAT JSON]
92
92
  when Arel::Attributes::Attribute
93
- collector = visit o.hash.cast('JSON'), collector
93
+ collector = visit o.dict.cast('JSON'), collector
94
94
  else
95
- collector = visit o.hash, collector
95
+ collector = visit o.dict, collector
96
96
  collector << ' FORMAT JSON'
97
97
  end
98
98
  collector
99
99
  end
100
100
 
101
- end
101
+ end
102
102
  end
103
103
  end
@@ -405,10 +405,10 @@ module ArelExtensions
405
405
  end
406
406
 
407
407
  def visit_ArelExtensions_Nodes_Json o,collector
408
- case o.hash
408
+ case o.dict
409
409
  when Array
410
410
  collector << 'to_jsonb(array['
411
- o.hash.each.with_index do |v,i|
411
+ o.dict.each.with_index do |v,i|
412
412
  if i != 0
413
413
  collector << Arel::Visitors::MySQL::COMMA
414
414
  end
@@ -417,7 +417,7 @@ module ArelExtensions
417
417
  collector << '])'
418
418
  when Hash
419
419
  collector << 'jsonb_build_object('
420
- o.hash.each.with_index do |(k,v),i|
420
+ o.dict.each.with_index do |(k,v),i|
421
421
  if i != 0
422
422
  collector << Arel::Visitors::MySQL::COMMA
423
423
  end
@@ -427,14 +427,14 @@ module ArelExtensions
427
427
  end
428
428
  collector << ')'
429
429
  when String,Numeric,TrueClass,FalseClass
430
- collector = visit Arel::Nodes.build_quoted("#{o.hash}"), collector
430
+ collector = visit Arel::Nodes.build_quoted("#{o.dict}"), collector
431
431
  collector << '::jsonb'
432
432
  when NilClass
433
433
  collector << %Q['null'::jsonb]
434
434
  when Arel::Attributes::Attribute
435
- collector = visit o.hash.cast(:jsonb), collector
435
+ collector = visit o.dict.cast(:jsonb), collector
436
436
  else
437
- collector = visit o.hash, collector
437
+ collector = visit o.dict, collector
438
438
  collector << '::jsonb'
439
439
  end
440
440
  collector
@@ -451,7 +451,7 @@ module ArelExtensions
451
451
  end
452
452
 
453
453
  def visit_ArelExtensions_Nodes_JsonGet o,collector
454
- collector = visit o.hash, collector
454
+ collector = visit o.dict, collector
455
455
  collector << ' -> '
456
456
  collector = visit o.key, collector
457
457
  collector
@@ -459,7 +459,7 @@ module ArelExtensions
459
459
 
460
460
  def visit_ArelExtensions_Nodes_JsonSet o,collector
461
461
  collector << 'jsonb_set('
462
- collector = visit o.hash, collector
462
+ collector = visit o.dict, collector
463
463
  collector << Arel::Visitors::MySQL::COMMA
464
464
  collector << 'array['
465
465
  collector = visit o.key, collector
@@ -474,12 +474,12 @@ module ArelExtensions
474
474
  def visit_ArelExtensions_Nodes_JsonGroup o, collector
475
475
  if o.as_array
476
476
  collector << 'jsonb_agg('
477
- collector = visit o.hash, collector
477
+ collector = visit o.dict, collector
478
478
  collector << ')'
479
479
  else
480
- case o.hash
480
+ case o.dict
481
481
  when Hash
482
- o.hash.each.with_index do |(k,v),i|
482
+ o.dict.each.with_index do |(k,v),i|
483
483
  if i != 0
484
484
  collector << ' || '
485
485
  end
@@ -491,7 +491,7 @@ module ArelExtensions
491
491
  end
492
492
  else
493
493
  collector << 'jsonb_object_agg('
494
- collector = visit o.hash, collector
494
+ collector = visit o.dict, collector
495
495
  collector << ')'
496
496
  end
497
497
  end
@@ -525,41 +525,58 @@ module ArelExtensions
525
525
 
526
526
  alias_method :old_visit_Arel_Nodes_And, :visit_Arel_Nodes_And
527
527
  def visit_Arel_Nodes_And o, collector
528
- if o.children.length == 2
529
- old_visit_Arel_Nodes_And o, collector
528
+ case o.children.length
529
+ when 0
530
+ collector << '1=1' # but this should not happen
531
+ when 1
532
+ collector = visit o.children[0], collector
530
533
  else
534
+ collector << '('
531
535
  o.children.each_with_index { |arg, i|
532
- if i == 0
533
- collector << '('
534
- else
536
+ if i != 0
535
537
  collector << ') AND ('
536
538
  end
537
539
  collector = visit arg, collector
538
540
  }
539
541
  collector << ')'
540
- collector
541
542
  end
543
+ collector
542
544
  end
543
545
 
544
546
  def visit_ArelExtensions_Nodes_Or o, collector
545
- collector << '('
546
- o.children.each_with_index { |arg, i|
547
- if i == 0
547
+ case o.children.length
548
+ when 0
549
+ collector << '0=1' # but this should not happen
550
+ when 1
551
+ collector = visit o.children[0], collector
552
+ else
548
553
  collector << '('
549
- else
550
- collector << ') OR ('
551
- end
552
- collector = visit arg, collector
553
- }
554
- collector << '))'
554
+ o.children.each_with_index { |arg, i|
555
+ if i != 0
556
+ collector << ') OR ('
557
+ end
558
+ collector = visit arg, collector
559
+ }
560
+ collector << ')'
561
+ end
562
+ collector
563
+ end
564
+
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 << ')'
555
572
  collector
556
573
  end
557
574
 
558
575
  def visit_ArelExtensions_Nodes_Json o,collector
559
- case o.hash
576
+ case o.dict
560
577
  when Array
561
578
  res = Arel::Nodes.build_quoted('[')
562
- o.hash.each.with_index do |v,i|
579
+ o.dict.each.with_index do |v,i|
563
580
  if i != 0
564
581
  res += ', '
565
582
  end
@@ -573,7 +590,7 @@ module ArelExtensions
573
590
  collector = visit res, collector
574
591
  when Hash
575
592
  res = Arel::Nodes.build_quoted('{')
576
- o.hash.each.with_index do |(k,v),i|
593
+ o.dict.each.with_index do |(k,v),i|
577
594
  if i != 0
578
595
  res += ', '
579
596
  end
@@ -587,19 +604,19 @@ module ArelExtensions
587
604
  res += '}'
588
605
  collector = visit res, collector
589
606
  else
590
- collector = visit o.hash, collector
607
+ collector = visit o.dict, collector
591
608
  end
592
609
  collector
593
610
  end
594
611
 
595
612
  def visit_ArelExtensions_Nodes_JsonGroup o, collector
596
613
  if o.as_array
597
- res = Arel::Nodes.build_quoted('[') + (o.orders ? o.hash.group_concat(', ',o.orders) : o.hash.group_concat(', ')) + ']'
614
+ res = Arel::Nodes.build_quoted('[') + (o.orders ? o.dict.group_concat(', ',o.orders) : o.dict.group_concat(', ')) + ']'
598
615
  collector = visit res, collector
599
616
  else
600
617
  res = Arel::Nodes.build_quoted('{')
601
- orders = o.orders || o.hash.keys
602
- o.hash.each.with_index do |(k,v),i|
618
+ orders = o.orders || o.dict.keys
619
+ o.dict.each.with_index do |(k,v),i|
603
620
  if i != 0
604
621
  res = res + ', '
605
622
  end
@@ -53,7 +53,7 @@ module ArelExtensions
53
53
  compile(c =~ '^test$').must_be_like %{REGEXP_LIKE("users"."name", '^test$')}
54
54
  compile(c !~ /\Ate\Dst\Z/).must_be_like %{NOT REGEXP_LIKE("users"."name", '^te[^0-9]st$')}
55
55
  compile(c.imatches('%test%')).must_be_like %{LOWER("users"."name") LIKE LOWER('%test%')}
56
- compile(c.imatches_any(['%test%', 't2'])).must_be_like %{(LOWER("users"."name") LIKE LOWER('%test%') OR LOWER("users"."name") LIKE LOWER('t2'))}
56
+ compile(c.imatches_any(['%test%', 't2'])).must_be_like %{((LOWER("users"."name") LIKE LOWER('%test%')) OR (LOWER("users"."name") LIKE LOWER('t2')))}
57
57
  compile(c.idoes_not_match('%test%')).must_be_like %{LOWER("users"."name") NOT LIKE LOWER('%test%')}
58
58
  end
59
59
 
@@ -90,7 +90,7 @@ module ArelExtensions
90
90
  compile(c =~ /\Atest\Z/).must_be_like %{"users"."name" REGEXP '^test$'}
91
91
  compile(c !~ /\Ate\Dst\Z/).must_be_like %{"users"."name" NOT REGEXP '^te[^0-9]st$'}
92
92
  compile(c.imatches('%test%')).must_be_like %{"users"."name" ILIKE '%test%'}
93
- compile(c.imatches_any(['%test%', 't2'])).must_be_like %{("users"."name" ILIKE '%test%' OR "users"."name" ILIKE 't2')}
93
+ compile(c.imatches_any(['%test%', 't2'])).must_be_like %{(("users"."name" ILIKE '%test%') OR ("users"."name" ILIKE 't2'))}
94
94
  compile(c.idoes_not_match('%test%')).must_be_like %{"users"."name" NOT ILIKE '%test%'}
95
95
 
96
96
  compile(c.substring(1)).must_be_like %{SUBSTRING("users"."name", 1)}
@@ -140,7 +140,7 @@ module ArelExtensions
140
140
  compile(c =~ /\Atest\Z/).must_be_like %{"users"."name" REGEXP '^test$'}
141
141
  compile(c !~ /\Ate\Dst\Z/).must_be_like %{"users"."name" NOT REGEXP '^te[^0-9]st$'}
142
142
  compile(c.imatches('%test%')).must_be_like %{"users"."name" ILIKE '%test%'}
143
- compile(c.imatches_any(['%test%', 't2'])).must_be_like %{("users"."name" ILIKE '%test%' OR "users"."name" ILIKE 't2')}
143
+ compile(c.imatches_any(['%test%', 't2'])).must_be_like %{(("users"."name" ILIKE '%test%') OR ("users"."name" ILIKE 't2'))}
144
144
  compile(c.idoes_not_match('%test%')).must_be_like %{"users"."name" NOT ILIKE '%test%'}
145
145
  end
146
146
 
@@ -322,9 +322,9 @@ module ArelExtensions
322
322
  compile(@table[:id].in([nil]))
323
323
  .must_be_like %{ISNULL("users"."id")}
324
324
  compile(@table[:id].in([nil,1]))
325
- .must_be_like %{ISNULL("users"."id") OR "users"."id" = 1}
325
+ .must_be_like %{(ISNULL("users"."id")) OR ("users"."id" = 1)}
326
326
  compile(@table[:id].in([nil,1,2]))
327
- .must_be_like %{ISNULL("users"."id") OR "users"."id" IN (1, 2)}
327
+ .must_be_like %{(ISNULL("users"."id")) OR ("users"."id" IN (1, 2))}
328
328
  compile(@table[:id].in(1))
329
329
  .must_be_like %{"users"."id" IN (1)}
330
330
  compile(@table[:id].in([1]))
@@ -335,9 +335,9 @@ module ArelExtensions
335
335
 
336
336
  it "should be possible to correctly use a Range on an IN" do
337
337
  compile(@table[:id].in(1..4))
338
- .must_be_like %{"users"."id" BETWEEN 1 AND 4}
338
+ .must_be_like %{"users"."id" BETWEEN (1) AND (4)}
339
339
  compile(@table[:created_at].in(@date .. Date.new(2017, 3, 31))) # @date = Date.new(2016, 3, 31)
340
- .must_be_like %{"users"."created_at" BETWEEN '2016-03-31' AND '2017-03-31'}
340
+ .must_be_like %{"users"."created_at" BETWEEN ('2016-03-31') AND ('2017-03-31')}
341
341
  end
342
342
 
343
343
  it "should be possible to add and substract as much as we want" do
@@ -378,9 +378,9 @@ module ArelExtensions
378
378
  compile((c == 1).and([c == 2, c == 3])).
379
379
  must_be_like %{("users"."id" = 1) AND ("users"."id" = 2) AND ("users"."id" = 3)}
380
380
  compile((c == 1).or(c == 2, c == 3)).
381
- must_be_like %{(("users"."id" = 1) OR ("users"."id" = 2) OR ("users"."id" = 3))}
381
+ must_be_like %{("users"."id" = 1) OR ("users"."id" = 2) OR ("users"."id" = 3)}
382
382
  compile((c == 1).or([c == 2, c == 3])).
383
- must_be_like %{(("users"."id" = 1) OR ("users"."id" = 2) OR ("users"."id" = 3))}
383
+ must_be_like %{("users"."id" = 1) OR ("users"."id" = 2) OR ("users"."id" = 3)}
384
384
  end
385
385
 
386
386
  puts "AREL VERSION : " + Arel::VERSION.to_s
@@ -721,7 +721,10 @@ module ArelExtensions
721
721
  assert_equal ({"5" => "Lucas", "15" => "Sophie", "23" => "Myung", "25" => "Laure", "Laure"=>25, "Lucas"=>5, "Myung"=>23, "Sophie"=>15}),
722
722
  parse_json(t(User.group(:score).where(@age.is_not_null).where(@score == 20.16),Arel.json({@age => @name,@name => @age}).group(false)))
723
723
  assert_equal ([{"5" => "Lucas"},{ "15" => "Sophie"},{ "23" => "Myung"},{ "25" => "Laure"}]),
724
- parse_json(t(User.group(:score).where(@age.is_not_null).where(@score == 20.16),Arel.json({@age => @name}).group(true,[@age])))
724
+ parse_json(t(User.group(:score).where(@age.is_not_null).where(@score == 20.16).select(@score),Arel.json({@age => @name}).group(true,[@age])))
725
+
726
+ #puts User.group(:score).where(@age.is_not_null).where(@score == 20.16).select(@score,Arel.json({@age => @name}).group(true,[@age])).to_sql
727
+ #puts User.group(:score).where(@age.is_not_null).where(@score == 20.16).select(@score,Arel.json({@age => @name}).group(true,[@age])).to_a
725
728
 
726
729
  skip "Not Yet Implemented" if $sqlite || ['oracle','mssql'].include?(@env_db)
727
730
  #get
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yann Azoury
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-04-11 00:00:00.000000000 Z
13
+ date: 2019-04-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: arel