arel 7.1.4 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +10 -18
  3. data/README.md +14 -3
  4. data/lib/arel/alias_predication.rb +1 -0
  5. data/lib/arel/attributes/attribute.rb +1 -0
  6. data/lib/arel/attributes.rb +1 -0
  7. data/lib/arel/collectors/bind.rb +6 -18
  8. data/lib/arel/collectors/composite.rb +32 -0
  9. data/lib/arel/collectors/plain_string.rb +2 -1
  10. data/lib/arel/collectors/sql_string.rb +1 -1
  11. data/lib/arel/collectors/substitute_binds.rb +28 -0
  12. data/lib/arel/compatibility/wheres.rb +1 -0
  13. data/lib/arel/crud.rb +1 -0
  14. data/lib/arel/delete_manager.rb +1 -0
  15. data/lib/arel/errors.rb +8 -0
  16. data/lib/arel/expressions.rb +1 -0
  17. data/lib/arel/factory_methods.rb +1 -0
  18. data/lib/arel/insert_manager.rb +6 -0
  19. data/lib/arel/math.rb +1 -0
  20. data/lib/arel/nodes/and.rb +1 -0
  21. data/lib/arel/nodes/ascending.rb +1 -0
  22. data/lib/arel/nodes/binary.rb +1 -0
  23. data/lib/arel/nodes/bind_param.rb +20 -2
  24. data/lib/arel/nodes/case.rb +1 -0
  25. data/lib/arel/nodes/casted.rb +2 -1
  26. data/lib/arel/nodes/count.rb +3 -0
  27. data/lib/arel/nodes/delete_statement.rb +1 -0
  28. data/lib/arel/nodes/descending.rb +1 -0
  29. data/lib/arel/nodes/equality.rb +1 -0
  30. data/lib/arel/nodes/extract.rb +1 -0
  31. data/lib/arel/nodes/false.rb +2 -0
  32. data/lib/arel/nodes/full_outer_join.rb +1 -0
  33. data/lib/arel/nodes/function.rb +3 -0
  34. data/lib/arel/nodes/grouping.rb +1 -0
  35. data/lib/arel/nodes/in.rb +1 -0
  36. data/lib/arel/nodes/infix_operation.rb +1 -0
  37. data/lib/arel/nodes/inner_join.rb +1 -0
  38. data/lib/arel/nodes/insert_statement.rb +1 -0
  39. data/lib/arel/nodes/join_source.rb +1 -0
  40. data/lib/arel/nodes/matches.rb +1 -0
  41. data/lib/arel/nodes/named_function.rb +1 -0
  42. data/lib/arel/nodes/node.rb +1 -0
  43. data/lib/arel/nodes/outer_join.rb +1 -0
  44. data/lib/arel/nodes/over.rb +1 -0
  45. data/lib/arel/nodes/regexp.rb +1 -0
  46. data/lib/arel/nodes/right_outer_join.rb +1 -0
  47. data/lib/arel/nodes/select_core.rb +1 -0
  48. data/lib/arel/nodes/select_statement.rb +1 -0
  49. data/lib/arel/nodes/sql_literal.rb +1 -0
  50. data/lib/arel/nodes/string_join.rb +1 -0
  51. data/lib/arel/nodes/table_alias.rb +1 -0
  52. data/lib/arel/nodes/terminal.rb +2 -0
  53. data/lib/arel/nodes/true.rb +2 -0
  54. data/lib/arel/nodes/unary.rb +1 -0
  55. data/lib/arel/nodes/unary_operation.rb +1 -0
  56. data/lib/arel/nodes/unqualified_column.rb +1 -0
  57. data/lib/arel/nodes/update_statement.rb +1 -0
  58. data/lib/arel/nodes/values.rb +1 -0
  59. data/lib/arel/nodes/values_list.rb +23 -0
  60. data/lib/arel/nodes/window.rb +2 -0
  61. data/lib/arel/nodes/with.rb +1 -0
  62. data/lib/arel/nodes.rb +2 -0
  63. data/lib/arel/order_predications.rb +1 -0
  64. data/lib/arel/predications.rb +1 -0
  65. data/lib/arel/select_manager.rb +2 -1
  66. data/lib/arel/table.rb +2 -13
  67. data/lib/arel/tree_manager.rb +3 -5
  68. data/lib/arel/update_manager.rb +1 -0
  69. data/lib/arel/visitors/depth_first.rb +1 -0
  70. data/lib/arel/visitors/dot.rb +2 -1
  71. data/lib/arel/visitors/ibm_db.rb +1 -0
  72. data/lib/arel/visitors/informix.rb +1 -2
  73. data/lib/arel/visitors/mssql.rb +1 -0
  74. data/lib/arel/visitors/mysql.rb +1 -0
  75. data/lib/arel/visitors/oracle.rb +7 -6
  76. data/lib/arel/visitors/oracle12.rb +2 -1
  77. data/lib/arel/visitors/postgresql.rb +2 -1
  78. data/lib/arel/visitors/reduce.rb +4 -2
  79. data/lib/arel/visitors/sqlite.rb +1 -0
  80. data/lib/arel/visitors/to_sql.rb +34 -49
  81. data/lib/arel/visitors/visitor.rb +4 -2
  82. data/lib/arel/visitors/where_sql.rb +1 -0
  83. data/lib/arel/visitors.rb +1 -0
  84. data/lib/arel/window_predications.rb +1 -0
  85. data/lib/arel.rb +4 -1
  86. metadata +22 -6
  87. data/lib/arel/visitors/bind_substitute.rb +0 -9
  88. data/lib/arel/visitors/bind_visitor.rb +0 -39
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Nodes
3
4
  class Window < Arel::Nodes::Node
@@ -106,6 +107,7 @@ module Arel
106
107
  def eql? other
107
108
  self.class == other.class
108
109
  end
110
+ alias :== :eql?
109
111
  end
110
112
 
111
113
  class Preceding < Unary
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Nodes
3
4
  class With < Arel::Nodes::Unary
data/lib/arel/nodes.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # node
2
3
  require 'arel/nodes/node'
3
4
  require 'arel/nodes/select_statement'
@@ -43,6 +44,7 @@ require 'arel/nodes/function'
43
44
  require 'arel/nodes/count'
44
45
  require 'arel/nodes/extract'
45
46
  require 'arel/nodes/values'
47
+ require 'arel/nodes/values_list'
46
48
  require 'arel/nodes/named_function'
47
49
 
48
50
  # windows
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module OrderPredications
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Predications
3
4
  def not_eq other
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'arel/collectors/sql_string'
2
3
 
3
4
  module Arel
@@ -106,7 +107,7 @@ module Arel
106
107
 
107
108
  case relation
108
109
  when String, Nodes::SqlLiteral
109
- raise if relation.empty?
110
+ raise EmptyJoinError if relation.empty?
110
111
  klass = Nodes::StringJoin
111
112
  end
112
113
 
data/lib/arel/table.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  class Table
3
4
  include Arel::Crud
@@ -13,7 +14,6 @@ module Arel
13
14
 
14
15
  def initialize(name, as: nil, type_caster: nil)
15
16
  @name = name.to_s
16
- @columns = nil
17
17
  @type_caster = type_caster
18
18
 
19
19
  # Sometime AR sends an :as parameter to table, to let the table know
@@ -38,7 +38,7 @@ module Arel
38
38
 
39
39
  case relation
40
40
  when String, Nodes::SqlLiteral
41
- raise if relation.empty?
41
+ raise EmptyJoinError if relation.empty?
42
42
  klass = Nodes::StringJoin
43
43
  end
44
44
 
@@ -106,16 +106,5 @@ module Arel
106
106
  protected
107
107
 
108
108
  attr_reader :type_caster
109
-
110
- private
111
-
112
- def attributes_for columns
113
- return nil unless columns
114
-
115
- columns.map do |column|
116
- Attributes.for(column).new self, column.name.to_sym
117
- end
118
- end
119
-
120
109
  end
121
110
  end
@@ -1,16 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  require 'arel/collectors/sql_string'
2
3
 
3
4
  module Arel
4
5
  class TreeManager
5
6
  include Arel::FactoryMethods
6
7
 
7
- attr_reader :ast, :engine
8
-
9
- attr_accessor :bind_values
8
+ attr_reader :ast
10
9
 
11
10
  def initialize
12
- @ctx = nil
13
- @bind_values = []
11
+ @ctx = nil
14
12
  end
15
13
 
16
14
  def to_dot
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  class UpdateManager < Arel::TreeManager
3
4
  def initialize
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class DepthFirst < Arel::Visitors::Visitor
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class Dot < Arel::Visitors::Visitor
@@ -277,7 +278,7 @@ module Arel
277
278
  label = "<f0>#{node.name}"
278
279
 
279
280
  node.fields.each_with_index do |field, i|
280
- label << "|<f#{i + 1}>#{quote field}"
281
+ label += "|<f#{i + 1}>#{quote field}"
281
282
  end
282
283
 
283
284
  "#{node.id} [label=\"#{label}\"];"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class IBM_DB < Arel::Visitors::ToSql
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class Informix < Arel::Visitors::ToSql
@@ -17,9 +18,7 @@ module Arel
17
18
  end
18
19
  def visit_Arel_Nodes_SelectCore o, collector
19
20
  collector = inject_join o.projections, collector, ", "
20
- froms = false
21
21
  if o.source && !o.source.empty?
22
- froms = true
23
22
  collector << " FROM "
24
23
  collector = visit o.source, collector
25
24
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class MSSQL < Arel::Visitors::ToSql
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class MySQL < Arel::Visitors::ToSql
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class Oracle < Arel::Visitors::ToSql
@@ -28,12 +29,12 @@ module Arel
28
29
  collector = super(o, collector)
29
30
 
30
31
  if offset.expr.is_a? Nodes::BindParam
31
- offset_bind = nil
32
32
  collector << ') raw_sql_ WHERE rownum <= ('
33
- collector.add_bind(offset.expr) { |i| offset_bind = ":a#{i}" }
33
+ collector = visit offset.expr, collector
34
34
  collector << ' + '
35
- collector.add_bind(limit) { |i| ":a#{i}" }
36
- collector << ") ) WHERE raw_rnum_ > #{offset_bind}"
35
+ collector = visit limit, collector
36
+ collector << ") ) WHERE raw_rnum_ > "
37
+ collector = visit offset.expr, collector
37
38
  return collector
38
39
  else
39
40
  collector << ") raw_sql_
@@ -136,7 +137,7 @@ module Arel
136
137
  array[i] << ',' << part
137
138
  else
138
139
  # to ensure that array[i] will be String and not Arel::Nodes::SqlLiteral
139
- array[i] = '' << part
140
+ array[i] = part.to_s
140
141
  end
141
142
  i += 1 if array[i].count('(') == array[i].count(')')
142
143
  end
@@ -144,7 +145,7 @@ module Arel
144
145
  end
145
146
 
146
147
  def visit_Arel_Nodes_BindParam o, collector
147
- collector.add_bind(o) { |i| ":a#{i}" }
148
+ collector.add_bind(o.value) { |i| ":a#{i}" }
148
149
  end
149
150
 
150
151
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class Oracle12 < Arel::Visitors::ToSql
@@ -52,7 +53,7 @@ module Arel
52
53
  end
53
54
 
54
55
  def visit_Arel_Nodes_BindParam o, collector
55
- collector.add_bind(o) { |i| ":a#{i}" }
56
+ collector.add_bind(o.value) { |i| ":a#{i}" }
56
57
  end
57
58
  end
58
59
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class PostgreSQL < Arel::Visitors::ToSql
@@ -45,7 +46,7 @@ module Arel
45
46
  end
46
47
 
47
48
  def visit_Arel_Nodes_BindParam o, collector
48
- collector.add_bind(o) { |i| "$#{i}" }
49
+ collector.add_bind(o.value) { |i| "$#{i}" }
49
50
  end
50
51
 
51
52
  def visit_Arel_Nodes_GroupingElement o, collector
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'arel/visitors/visitor'
2
3
 
3
4
  module Arel
@@ -10,9 +11,10 @@ module Arel
10
11
  private
11
12
 
12
13
  def visit object, collector
13
- send dispatch[object.class], object, collector
14
+ dispatch_method = dispatch[object.class]
15
+ send dispatch_method, object, collector
14
16
  rescue NoMethodError => e
15
- raise e if respond_to?(dispatch[object.class], true)
17
+ raise e if respond_to?(dispatch_method, true)
16
18
  superklass = object.class.ancestors.find { |klass|
17
19
  respond_to?(dispatch[klass], true)
18
20
  }
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class SQLite < Arel::Visitors::ToSql
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'bigdecimal'
2
3
  require 'date'
3
4
  require 'arel/visitors/reduce'
@@ -75,15 +76,11 @@ module Arel
75
76
 
76
77
  private
77
78
 
78
- def schema_cache
79
- @connection.schema_cache
80
- end
81
-
82
79
  def visit_Arel_Nodes_DeleteStatement o, collector
83
80
  collector << 'DELETE FROM '
84
81
  collector = visit o.relation, collector
85
82
  if o.wheres.any?
86
- collector << ' WHERE '
83
+ collector << WHERE
87
84
  collector = inject_join o.wheres, collector, AND
88
85
  end
89
86
 
@@ -169,34 +166,38 @@ module Arel
169
166
  collector << "FALSE"
170
167
  end
171
168
 
172
- def table_exists? name
173
- schema_cache.data_source_exists?(name)
174
- end
175
-
176
- def column_for attr
177
- return unless attr
178
- name = attr.name.to_s
179
- table = attr.relation.table_name
180
-
181
- return nil unless table_exists? table
182
-
183
- column_cache(table)[name]
184
- end
185
-
186
- def column_cache(table)
187
- schema_cache.columns_hash(table)
169
+ def visit_Arel_Nodes_ValuesList o, collector
170
+ collector << "VALUES "
171
+
172
+ len = o.rows.length - 1
173
+ o.rows.each_with_index { |row, i|
174
+ collector << '('
175
+ row_len = row.length - 1
176
+ row.each_with_index do |value, k|
177
+ case value
178
+ when Nodes::SqlLiteral, Nodes::BindParam
179
+ collector = visit(value, collector)
180
+ else
181
+ collector << quote(value)
182
+ end
183
+ collector << COMMA unless k == row_len
184
+ end
185
+ collector << ')'
186
+ collector << COMMA unless i == len
187
+ }
188
+ collector
188
189
  end
189
190
 
190
191
  def visit_Arel_Nodes_Values o, collector
191
192
  collector << "VALUES ("
192
193
 
193
194
  len = o.expressions.length - 1
194
- o.expressions.zip(o.columns).each_with_index { |(value, attr), i|
195
+ o.expressions.each_with_index { |value, i|
195
196
  case value
196
197
  when Nodes::SqlLiteral, Nodes::BindParam
197
198
  collector = visit value, collector
198
199
  else
199
- collector << quote(value, attr && column_for(attr)).to_s
200
+ collector << quote(value).to_s
200
201
  end
201
202
  unless i == len
202
203
  collector << COMMA
@@ -286,12 +287,12 @@ module Arel
286
287
 
287
288
  def visit_Arel_Nodes_With o, collector
288
289
  collector << "WITH "
289
- inject_join o.children, collector, ', '
290
+ inject_join o.children, collector, COMMA
290
291
  end
291
292
 
292
293
  def visit_Arel_Nodes_WithRecursive o, collector
293
294
  collector << "WITH RECURSIVE "
294
- inject_join o.children, collector, ', '
295
+ inject_join o.children, collector, COMMA
295
296
  end
296
297
 
297
298
  def visit_Arel_Nodes_Union o, collector
@@ -426,7 +427,8 @@ module Arel
426
427
  end
427
428
 
428
429
  def visit_Arel_SelectManager o, collector
429
- collector << "(#{o.to_sql.rstrip})"
430
+ collector << '('
431
+ visit(o.ast, collector) << ')'
430
432
  end
431
433
 
432
434
  def visit_Arel_Nodes_Ascending o, collector
@@ -545,7 +547,7 @@ module Arel
545
547
  end
546
548
  if o.right.any?
547
549
  collector << SPACE if o.left
548
- collector = inject_join o.right, collector, ' '
550
+ collector = inject_join o.right, collector, SPACE
549
551
  end
550
552
  collector
551
553
  end
@@ -652,7 +654,7 @@ module Arel
652
654
  else
653
655
  collector = visit o.left, collector
654
656
  collector << " = "
655
- collector << quote(o.right, column_for(o.left)).to_s
657
+ collector << quote(o.right).to_s
656
658
  end
657
659
  end
658
660
 
@@ -736,7 +738,7 @@ module Arel
736
738
  def literal o, collector; collector << o.to_s; end
737
739
 
738
740
  def visit_Arel_Nodes_BindParam o, collector
739
- collector.add_bind(o) { "?" }
741
+ collector.add_bind(o.value) { "?" }
740
742
  end
741
743
 
742
744
  alias :visit_Arel_Nodes_SqlLiteral :literal
@@ -748,7 +750,7 @@ module Arel
748
750
  if a && a.able_to_type_cast?
749
751
  quote(a.type_cast_for_database(o))
750
752
  else
751
- quote(o, column_for(a))
753
+ quote(o)
752
754
  end
753
755
  end
754
756
 
@@ -792,12 +794,9 @@ module Arel
792
794
  end
793
795
  alias :visit_Set :visit_Array
794
796
 
795
- def quote value, column = nil
797
+ def quote value
796
798
  return value if Arel::Nodes::SqlLiteral === value
797
- if column
798
- print_type_cast_deprecation
799
- end
800
- @connection.quote value, column
799
+ @connection.quote value
801
800
  end
802
801
 
803
802
  def quote_table_name name
@@ -846,20 +845,6 @@ module Arel
846
845
  collector
847
846
  end
848
847
  end
849
-
850
- def print_type_cast_deprecation
851
- unless defined?($arel_silence_type_casting_deprecation) && $arel_silence_type_casting_deprecation
852
- warn <<-eowarn
853
- Arel performing automatic type casting is deprecated, and will be removed in Arel 8.0. If you are seeing this, it is because you are manually passing a value to an Arel predicate, and the `Arel::Table` object was constructed manually. The easiest way to remove this warning is to use an `Arel::Table` object returned from calling `arel_table` on an ActiveRecord::Base subclass.
854
-
855
- If you're certain the value is already of the right type, change `attribute.eq(value)` to `attribute.eq(Arel::Nodes::Quoted.new(value))` (you will be able to remove that in Arel 8.0, it is only required to silence this deprecation warning).
856
-
857
- You can also silence this warning globally by setting `$arel_silence_type_casting_deprecation` to `true`. (Do NOT do this if you are a library author)
858
-
859
- If you are passing user input to a predicate, you must either give an appropriate type caster object to the `Arel::Table`, or manually cast the value before passing it to Arel.
860
- eowarn
861
- end
862
- end
863
848
  end
864
849
  end
865
850
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class Visitor
@@ -26,9 +27,10 @@ module Arel
26
27
  end
27
28
 
28
29
  def visit object
29
- send dispatch[object.class], object
30
+ dispatch_method = dispatch[object.class]
31
+ send dispatch_method, object
30
32
  rescue NoMethodError => e
31
- raise e if respond_to?(dispatch[object.class], true)
33
+ raise e if respond_to?(dispatch_method, true)
32
34
  superklass = object.class.ancestors.find { |klass|
33
35
  respond_to?(dispatch[klass], true)
34
36
  }
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class WhereSql < Arel::Visitors::ToSql
data/lib/arel/visitors.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'arel/visitors/visitor'
2
3
  require 'arel/visitors/depth_first'
3
4
  require 'arel/visitors/to_sql'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module WindowPredications
3
4
 
data/lib/arel.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ require 'arel/errors'
3
+
1
4
  require 'arel/crud'
2
5
  require 'arel/factory_methods'
3
6
 
@@ -21,7 +24,7 @@ require 'arel/delete_manager'
21
24
  require 'arel/nodes'
22
25
 
23
26
  module Arel
24
- VERSION = '7.1.4'
27
+ VERSION = '9.0.0'
25
28
 
26
29
  def self.sql raw_sql
27
30
  Arel::Nodes::SqlLiteral.new raw_sql
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.4
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-10-10 00:00:00.000000000 Z
14
+ date: 2017-11-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: minitest
@@ -55,6 +55,20 @@ dependencies:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: concurrent-ruby
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '1.0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.0'
58
72
  description: |-
59
73
  Arel Really Exasperates Logicians
60
74
 
@@ -85,11 +99,14 @@ files:
85
99
  - lib/arel/attributes.rb
86
100
  - lib/arel/attributes/attribute.rb
87
101
  - lib/arel/collectors/bind.rb
102
+ - lib/arel/collectors/composite.rb
88
103
  - lib/arel/collectors/plain_string.rb
89
104
  - lib/arel/collectors/sql_string.rb
105
+ - lib/arel/collectors/substitute_binds.rb
90
106
  - lib/arel/compatibility/wheres.rb
91
107
  - lib/arel/crud.rb
92
108
  - lib/arel/delete_manager.rb
109
+ - lib/arel/errors.rb
93
110
  - lib/arel/expressions.rb
94
111
  - lib/arel/factory_methods.rb
95
112
  - lib/arel/insert_manager.rb
@@ -134,6 +151,7 @@ files:
134
151
  - lib/arel/nodes/unqualified_column.rb
135
152
  - lib/arel/nodes/update_statement.rb
136
153
  - lib/arel/nodes/values.rb
154
+ - lib/arel/nodes/values_list.rb
137
155
  - lib/arel/nodes/window.rb
138
156
  - lib/arel/nodes/with.rb
139
157
  - lib/arel/order_predications.rb
@@ -143,8 +161,6 @@ files:
143
161
  - lib/arel/tree_manager.rb
144
162
  - lib/arel/update_manager.rb
145
163
  - lib/arel/visitors.rb
146
- - lib/arel/visitors/bind_substitute.rb
147
- - lib/arel/visitors/bind_visitor.rb
148
164
  - lib/arel/visitors/depth_first.rb
149
165
  - lib/arel/visitors/dot.rb
150
166
  - lib/arel/visitors/ibm_db.rb
@@ -174,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
190
  requirements:
175
191
  - - ">="
176
192
  - !ruby/object:Gem::Version
177
- version: '0'
193
+ version: 2.2.2
178
194
  required_rubygems_version: !ruby/object:Gem::Requirement
179
195
  requirements:
180
196
  - - ">="
@@ -182,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
198
  version: '0'
183
199
  requirements: []
184
200
  rubyforge_project:
185
- rubygems_version: 2.5.1
201
+ rubygems_version: 2.6.12
186
202
  signing_key:
187
203
  specification_version: 4
188
204
  summary: Arel Really Exasperates Logicians Arel is a SQL AST manager for Ruby
@@ -1,9 +0,0 @@
1
- module Arel
2
- module Visitors
3
- class BindSubstitute
4
- def initialize delegate
5
- @delegate = delegate
6
- end
7
- end
8
- end
9
- end
@@ -1,39 +0,0 @@
1
- module Arel
2
- module Visitors
3
- module BindVisitor
4
- def initialize target
5
- @block = nil
6
- super
7
- end
8
-
9
- def accept node, collector, &block
10
- @block = block if block_given?
11
- super
12
- end
13
-
14
- private
15
-
16
- def visit_Arel_Nodes_Assignment o, collector
17
- if o.right.is_a? Arel::Nodes::BindParam
18
- collector = visit o.left, collector
19
- collector << " = "
20
- visit o.right, collector
21
- else
22
- super
23
- end
24
- end
25
-
26
- def visit_Arel_Nodes_BindParam o, collector
27
- if @block
28
- val = @block.call
29
- if String === val
30
- collector << val
31
- end
32
- else
33
- super
34
- end
35
- end
36
-
37
- end
38
- end
39
- end