arel 7.0.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +27 -0
  3. data/MIT-LICENSE.txt +1 -1
  4. data/{README.markdown → README.md} +93 -31
  5. data/lib/arel/alias_predication.rb +1 -0
  6. data/lib/arel/attributes/attribute.rb +1 -0
  7. data/lib/arel/attributes.rb +1 -0
  8. data/lib/arel/collectors/bind.rb +6 -18
  9. data/lib/arel/collectors/composite.rb +32 -0
  10. data/lib/arel/collectors/plain_string.rb +2 -1
  11. data/lib/arel/collectors/sql_string.rb +1 -1
  12. data/lib/arel/collectors/substitute_binds.rb +28 -0
  13. data/lib/arel/compatibility/wheres.rb +1 -0
  14. data/lib/arel/crud.rb +1 -0
  15. data/lib/arel/delete_manager.rb +1 -0
  16. data/lib/arel/errors.rb +8 -0
  17. data/lib/arel/expressions.rb +1 -0
  18. data/lib/arel/factory_methods.rb +1 -0
  19. data/lib/arel/insert_manager.rb +6 -0
  20. data/lib/arel/math.rb +25 -0
  21. data/lib/arel/nodes/and.rb +1 -0
  22. data/lib/arel/nodes/ascending.rb +1 -0
  23. data/lib/arel/nodes/binary.rb +1 -0
  24. data/lib/arel/nodes/bind_param.rb +20 -2
  25. data/lib/arel/nodes/case.rb +58 -0
  26. data/lib/arel/nodes/casted.rb +6 -1
  27. data/lib/arel/nodes/count.rb +3 -0
  28. data/lib/arel/nodes/delete_statement.rb +1 -0
  29. data/lib/arel/nodes/descending.rb +1 -0
  30. data/lib/arel/nodes/equality.rb +1 -0
  31. data/lib/arel/nodes/extract.rb +1 -0
  32. data/lib/arel/nodes/false.rb +2 -0
  33. data/lib/arel/nodes/full_outer_join.rb +1 -0
  34. data/lib/arel/nodes/function.rb +3 -0
  35. data/lib/arel/nodes/grouping.rb +1 -0
  36. data/lib/arel/nodes/in.rb +1 -0
  37. data/lib/arel/nodes/infix_operation.rb +37 -1
  38. data/lib/arel/nodes/inner_join.rb +1 -0
  39. data/lib/arel/nodes/insert_statement.rb +1 -0
  40. data/lib/arel/nodes/join_source.rb +1 -0
  41. data/lib/arel/nodes/matches.rb +1 -0
  42. data/lib/arel/nodes/named_function.rb +1 -0
  43. data/lib/arel/nodes/node.rb +1 -0
  44. data/lib/arel/nodes/outer_join.rb +1 -0
  45. data/lib/arel/nodes/over.rb +1 -0
  46. data/lib/arel/nodes/regexp.rb +1 -0
  47. data/lib/arel/nodes/right_outer_join.rb +1 -0
  48. data/lib/arel/nodes/select_core.rb +1 -0
  49. data/lib/arel/nodes/select_statement.rb +1 -0
  50. data/lib/arel/nodes/sql_literal.rb +1 -0
  51. data/lib/arel/nodes/string_join.rb +1 -0
  52. data/lib/arel/nodes/table_alias.rb +1 -0
  53. data/lib/arel/nodes/terminal.rb +2 -0
  54. data/lib/arel/nodes/true.rb +2 -0
  55. data/lib/arel/nodes/unary.rb +7 -2
  56. data/lib/arel/nodes/unary_operation.rb +26 -0
  57. data/lib/arel/nodes/unqualified_column.rb +1 -0
  58. data/lib/arel/nodes/update_statement.rb +1 -0
  59. data/lib/arel/nodes/values.rb +1 -0
  60. data/lib/arel/nodes/values_list.rb +23 -0
  61. data/lib/arel/nodes/window.rb +2 -0
  62. data/lib/arel/nodes/with.rb +1 -0
  63. data/lib/arel/nodes.rb +6 -0
  64. data/lib/arel/order_predications.rb +1 -0
  65. data/lib/arel/predications.rb +9 -0
  66. data/lib/arel/select_manager.rb +2 -1
  67. data/lib/arel/table.rb +4 -19
  68. data/lib/arel/tree_manager.rb +3 -5
  69. data/lib/arel/update_manager.rb +1 -0
  70. data/lib/arel/visitors/depth_first.rb +15 -1
  71. data/lib/arel/visitors/dot.rb +15 -2
  72. data/lib/arel/visitors/ibm_db.rb +1 -0
  73. data/lib/arel/visitors/informix.rb +1 -2
  74. data/lib/arel/visitors/mssql.rb +1 -0
  75. data/lib/arel/visitors/mysql.rb +9 -0
  76. data/lib/arel/visitors/oracle.rb +16 -4
  77. data/lib/arel/visitors/oracle12.rb +10 -3
  78. data/lib/arel/visitors/postgresql.rb +38 -1
  79. data/lib/arel/visitors/reduce.rb +4 -2
  80. data/lib/arel/visitors/sqlite.rb +10 -0
  81. data/lib/arel/visitors/to_sql.rb +86 -86
  82. data/lib/arel/visitors/visitor.rb +4 -2
  83. data/lib/arel/visitors/where_sql.rb +1 -0
  84. data/lib/arel/visitors.rb +1 -23
  85. data/lib/arel/window_predications.rb +1 -0
  86. data/lib/arel.rb +4 -1
  87. metadata +27 -9
  88. data/lib/arel/visitors/bind_substitute.rb +0 -9
  89. 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 Visitors
3
4
  class Oracle < Arel::Visitors::ToSql
@@ -26,11 +27,22 @@ module Arel
26
27
  FROM ("
27
28
 
28
29
  collector = super(o, collector)
29
- collector << ") raw_sql_
30
+
31
+ if offset.expr.is_a? Nodes::BindParam
32
+ collector << ') raw_sql_ WHERE rownum <= ('
33
+ collector = visit offset.expr, collector
34
+ collector << ' + '
35
+ collector = visit limit, collector
36
+ collector << ") ) WHERE raw_rnum_ > "
37
+ collector = visit offset.expr, collector
38
+ return collector
39
+ else
40
+ collector << ") raw_sql_
30
41
  WHERE rownum <= #{offset.expr.to_i + limit}
31
42
  )
32
43
  WHERE "
33
- return visit(offset, collector)
44
+ return visit(offset, collector)
45
+ end
34
46
  end
35
47
 
36
48
  if o.limit
@@ -125,7 +137,7 @@ module Arel
125
137
  array[i] << ',' << part
126
138
  else
127
139
  # to ensure that array[i] will be String and not Arel::Nodes::SqlLiteral
128
- array[i] = '' << part
140
+ array[i] = part.to_s
129
141
  end
130
142
  i += 1 if array[i].count('(') == array[i].count(')')
131
143
  end
@@ -133,7 +145,7 @@ module Arel
133
145
  end
134
146
 
135
147
  def visit_Arel_Nodes_BindParam o, collector
136
- collector.add_bind(o) { |i| ":a#{i}" }
148
+ collector.add_bind(o.value) { |i| ":a#{i}" }
137
149
  end
138
150
 
139
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
@@ -6,10 +7,12 @@ module Arel
6
7
  def visit_Arel_Nodes_SelectStatement o, collector
7
8
  # Oracle does not allow LIMIT clause with select for update
8
9
  if o.limit && o.lock
9
- o = o.dup
10
- o.limit = []
10
+ raise ArgumentError, <<-MSG
11
+ 'Combination of limit and lock is not supported.
12
+ because generated SQL statements
13
+ `SELECT FOR UPDATE and FETCH FIRST n ROWS` generates ORA-02014.`
14
+ MSG
11
15
  end
12
-
13
16
  super
14
17
  end
15
18
 
@@ -48,6 +51,10 @@ module Arel
48
51
 
49
52
  super
50
53
  end
54
+
55
+ def visit_Arel_Nodes_BindParam o, collector
56
+ collector.add_bind(o.value) { |i| ":a#{i}" }
57
+ end
51
58
  end
52
59
  end
53
60
  end
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module Arel
2
3
  module Visitors
3
4
  class PostgreSQL < Arel::Visitors::ToSql
5
+ CUBE = 'CUBE'
6
+ ROLLUP = 'ROLLUP'
7
+ GROUPING_SET = 'GROUPING SET'
8
+
4
9
  private
5
10
 
6
11
  def visit_Arel_Nodes_Matches o, collector
@@ -41,7 +46,39 @@ module Arel
41
46
  end
42
47
 
43
48
  def visit_Arel_Nodes_BindParam o, collector
44
- collector.add_bind(o) { |i| "$#{i}" }
49
+ collector.add_bind(o.value) { |i| "$#{i}" }
50
+ end
51
+
52
+ def visit_Arel_Nodes_GroupingElement o, collector
53
+ collector << "( "
54
+ visit(o.expr, collector) << " )"
55
+ end
56
+
57
+ def visit_Arel_Nodes_Cube o, collector
58
+ collector << CUBE
59
+ grouping_array_or_grouping_element o, collector
60
+ end
61
+
62
+ def visit_Arel_Nodes_RollUp o, collector
63
+ collector << ROLLUP
64
+ grouping_array_or_grouping_element o, collector
65
+ end
66
+
67
+ def visit_Arel_Nodes_GroupingSet o, collector
68
+ collector << GROUPING_SET
69
+ grouping_array_or_grouping_element o, collector
70
+ end
71
+
72
+ # Utilized by GroupingSet, Cube & RollUp visitors to
73
+ # handle grouping aggregation semantics
74
+ def grouping_array_or_grouping_element o, collector
75
+ if o.expr.is_a? Array
76
+ collector << "( "
77
+ visit o.expr, collector
78
+ collector << " )"
79
+ else
80
+ visit o.expr, collector
81
+ end
45
82
  end
46
83
  end
47
84
  end
@@ -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
@@ -12,6 +13,15 @@ module Arel
12
13
  o.limit = Arel::Nodes::Limit.new(-1) if o.offset && !o.limit
13
14
  super
14
15
  end
16
+
17
+ def visit_Arel_Nodes_True o, collector
18
+ collector << "1"
19
+ end
20
+
21
+ def visit_Arel_Nodes_False o, collector
22
+ collector << "0"
23
+ end
24
+
15
25
  end
16
26
  end
17
27
  end
@@ -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,37 +166,41 @@ module Arel
169
166
  collector << "FALSE"
170
167
  end
171
168
 
172
- def table_exists? name
173
- schema_cache.table_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
- collector << ', '
203
+ collector << COMMA
203
204
  end
204
205
  }
205
206
 
@@ -243,53 +244,33 @@ module Arel
243
244
 
244
245
  collector = maybe_visit o.set_quantifier, collector
245
246
 
246
- unless o.projections.empty?
247
- collector << SPACE
248
- len = o.projections.length - 1
249
- o.projections.each_with_index do |x, i|
250
- collector = visit(x, collector)
251
- collector << COMMA unless len == i
252
- end
253
- end
247
+ collect_nodes_for o.projections, collector, SPACE
254
248
 
255
249
  if o.source && !o.source.empty?
256
250
  collector << " FROM "
257
251
  collector = visit o.source, collector
258
252
  end
259
253
 
260
- unless o.wheres.empty?
261
- collector << WHERE
262
- len = o.wheres.length - 1
263
- o.wheres.each_with_index do |x, i|
264
- collector = visit(x, collector)
265
- collector << AND unless len == i
266
- end
267
- end
268
-
269
- unless o.groups.empty?
270
- collector << GROUP_BY
271
- len = o.groups.length - 1
272
- o.groups.each_with_index do |x, i|
273
- collector = visit(x, collector)
274
- collector << COMMA unless len == i
275
- end
276
- end
277
-
254
+ collect_nodes_for o.wheres, collector, WHERE, AND
255
+ collect_nodes_for o.groups, collector, GROUP_BY
278
256
  unless o.havings.empty?
279
257
  collector << " HAVING "
280
258
  inject_join o.havings, collector, AND
281
259
  end
260
+ collect_nodes_for o.windows, collector, WINDOW
261
+
262
+ collector
263
+ end
282
264
 
283
- unless o.windows.empty?
284
- collector << WINDOW
285
- len = o.windows.length - 1
286
- o.windows.each_with_index do |x, i|
265
+ def collect_nodes_for nodes, collector, spacer, connector = COMMA
266
+ unless nodes.empty?
267
+ collector << spacer
268
+ len = nodes.length - 1
269
+ nodes.each_with_index do |x, i|
287
270
  collector = visit(x, collector)
288
- collector << COMMA unless len == i
271
+ collector << connector unless len == i
289
272
  end
290
273
  end
291
-
292
- collector
293
274
  end
294
275
 
295
276
  def visit_Arel_Nodes_Bin o, collector
@@ -306,12 +287,12 @@ module Arel
306
287
 
307
288
  def visit_Arel_Nodes_With o, collector
308
289
  collector << "WITH "
309
- inject_join o.children, collector, ', '
290
+ inject_join o.children, collector, COMMA
310
291
  end
311
292
 
312
293
  def visit_Arel_Nodes_WithRecursive o, collector
313
294
  collector << "WITH RECURSIVE "
314
- inject_join o.children, collector, ', '
295
+ inject_join o.children, collector, COMMA
315
296
  end
316
297
 
317
298
  def visit_Arel_Nodes_Union o, collector
@@ -349,13 +330,13 @@ module Arel
349
330
  end
350
331
 
351
332
  if o.orders.any?
352
- collector << ' ' if o.partitions.any?
333
+ collector << SPACE if o.partitions.any?
353
334
  collector << "ORDER BY "
354
335
  collector = inject_join o.orders, collector, ", "
355
336
  end
356
337
 
357
338
  if o.framing
358
- collector << ' ' if o.partitions.any? or o.orders.any?
339
+ collector << SPACE if o.partitions.any? or o.orders.any?
359
340
  collector = visit o.framing, collector
360
341
  end
361
342
 
@@ -446,7 +427,8 @@ module Arel
446
427
  end
447
428
 
448
429
  def visit_Arel_SelectManager o, collector
449
- collector << "(#{o.to_sql.rstrip})"
430
+ collector << '('
431
+ visit(o.ast, collector) << ')'
450
432
  end
451
433
 
452
434
  def visit_Arel_Nodes_Ascending o, collector
@@ -564,8 +546,8 @@ module Arel
564
546
  collector = visit o.left, collector
565
547
  end
566
548
  if o.right.any?
567
- collector << " " if o.left
568
- collector = inject_join o.right, collector, ' '
549
+ collector << SPACE if o.left
550
+ collector = inject_join o.right, collector, SPACE
569
551
  end
570
552
  collector
571
553
  end
@@ -672,7 +654,7 @@ module Arel
672
654
  else
673
655
  collector = visit o.left, collector
674
656
  collector << " = "
675
- collector << quote(o.right, column_for(o.left)).to_s
657
+ collector << quote(o.right).to_s
676
658
  end
677
659
  end
678
660
 
@@ -708,6 +690,35 @@ module Arel
708
690
  visit o.right, collector
709
691
  end
710
692
 
693
+ def visit_Arel_Nodes_Case o, collector
694
+ collector << "CASE "
695
+ if o.case
696
+ visit o.case, collector
697
+ collector << " "
698
+ end
699
+ o.conditions.each do |condition|
700
+ visit condition, collector
701
+ collector << " "
702
+ end
703
+ if o.default
704
+ visit o.default, collector
705
+ collector << " "
706
+ end
707
+ collector << "END"
708
+ end
709
+
710
+ def visit_Arel_Nodes_When o, collector
711
+ collector << "WHEN "
712
+ visit o.left, collector
713
+ collector << " THEN "
714
+ visit o.right, collector
715
+ end
716
+
717
+ def visit_Arel_Nodes_Else o, collector
718
+ collector << "ELSE "
719
+ visit o.expr, collector
720
+ end
721
+
711
722
  def visit_Arel_Nodes_UnqualifiedColumn o, collector
712
723
  collector << "#{quote_column_name o.name}"
713
724
  collector
@@ -727,18 +738,19 @@ module Arel
727
738
  def literal o, collector; collector << o.to_s; end
728
739
 
729
740
  def visit_Arel_Nodes_BindParam o, collector
730
- collector.add_bind(o) { "?" }
741
+ collector.add_bind(o.value) { "?" }
731
742
  end
732
743
 
733
744
  alias :visit_Arel_Nodes_SqlLiteral :literal
734
745
  alias :visit_Bignum :literal
735
746
  alias :visit_Fixnum :literal
747
+ alias :visit_Integer :literal
736
748
 
737
749
  def quoted o, a
738
750
  if a && a.able_to_type_cast?
739
751
  quote(a.type_cast_for_database(o))
740
752
  else
741
- quote(o, column_for(a))
753
+ quote(o)
742
754
  end
743
755
  end
744
756
 
@@ -772,17 +784,19 @@ module Arel
772
784
  alias :visit_Arel_Nodes_Multiplication :visit_Arel_Nodes_InfixOperation
773
785
  alias :visit_Arel_Nodes_Division :visit_Arel_Nodes_InfixOperation
774
786
 
787
+ def visit_Arel_Nodes_UnaryOperation o, collector
788
+ collector << " #{o.operator} "
789
+ visit o.expr, collector
790
+ end
791
+
775
792
  def visit_Array o, collector
776
793
  inject_join o, collector, ", "
777
794
  end
778
795
  alias :visit_Set :visit_Array
779
796
 
780
- def quote value, column = nil
797
+ def quote value
781
798
  return value if Arel::Nodes::SqlLiteral === value
782
- if column
783
- print_type_cast_deprecation
784
- end
785
- @connection.quote value, column
799
+ @connection.quote value
786
800
  end
787
801
 
788
802
  def quote_table_name name
@@ -831,20 +845,6 @@ module Arel
831
845
  collector
832
846
  end
833
847
  end
834
-
835
- def print_type_cast_deprecation
836
- unless defined?($arel_silence_type_casting_deprecation) && $arel_silence_type_casting_deprecation
837
- warn <<-eowarn
838
- 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.
839
-
840
- 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).
841
-
842
- 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)
843
-
844
- 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.
845
- eowarn
846
- end
847
- end
848
848
  end
849
849
  end
850
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'
@@ -14,28 +15,5 @@ require 'arel/visitors/informix'
14
15
 
15
16
  module Arel
16
17
  module Visitors
17
- VISITORS = {
18
- 'postgresql' => Arel::Visitors::PostgreSQL,
19
- 'mysql' => Arel::Visitors::MySQL,
20
- 'mysql2' => Arel::Visitors::MySQL,
21
- 'mssql' => Arel::Visitors::MSSQL,
22
- 'sqlserver' => Arel::Visitors::MSSQL,
23
- 'oracle_enhanced' => Arel::Visitors::Oracle,
24
- 'sqlite' => Arel::Visitors::SQLite,
25
- 'sqlite3' => Arel::Visitors::SQLite,
26
- 'ibm_db' => Arel::Visitors::IBM_DB,
27
- 'informix' => Arel::Visitors::Informix,
28
- }
29
-
30
- ENGINE_VISITORS = Hash.new do |hash, engine|
31
- pool = engine.connection_pool
32
- adapter = pool.spec.config[:adapter]
33
- hash[engine] = (VISITORS[adapter] || Visitors::ToSql).new(engine)
34
- end
35
-
36
- def self.visitor_for engine
37
- ENGINE_VISITORS[engine]
38
- end
39
- class << self; alias :for :visitor_for; end
40
18
  end
41
19
  end
@@ -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.0.0'
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.0.0
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: 2015-12-17 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
 
@@ -75,21 +89,24 @@ extensions: []
75
89
  extra_rdoc_files:
76
90
  - History.txt
77
91
  - MIT-LICENSE.txt
78
- - README.markdown
92
+ - README.md
79
93
  files:
80
94
  - History.txt
81
95
  - MIT-LICENSE.txt
82
- - README.markdown
96
+ - README.md
83
97
  - lib/arel.rb
84
98
  - lib/arel/alias_predication.rb
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
@@ -99,6 +116,7 @@ files:
99
116
  - lib/arel/nodes/ascending.rb
100
117
  - lib/arel/nodes/binary.rb
101
118
  - lib/arel/nodes/bind_param.rb
119
+ - lib/arel/nodes/case.rb
102
120
  - lib/arel/nodes/casted.rb
103
121
  - lib/arel/nodes/count.rb
104
122
  - lib/arel/nodes/delete_statement.rb
@@ -129,9 +147,11 @@ files:
129
147
  - lib/arel/nodes/terminal.rb
130
148
  - lib/arel/nodes/true.rb
131
149
  - lib/arel/nodes/unary.rb
150
+ - lib/arel/nodes/unary_operation.rb
132
151
  - lib/arel/nodes/unqualified_column.rb
133
152
  - lib/arel/nodes/update_statement.rb
134
153
  - lib/arel/nodes/values.rb
154
+ - lib/arel/nodes/values_list.rb
135
155
  - lib/arel/nodes/window.rb
136
156
  - lib/arel/nodes/with.rb
137
157
  - lib/arel/order_predications.rb
@@ -141,8 +161,6 @@ files:
141
161
  - lib/arel/tree_manager.rb
142
162
  - lib/arel/update_manager.rb
143
163
  - lib/arel/visitors.rb
144
- - lib/arel/visitors/bind_substitute.rb
145
- - lib/arel/visitors/bind_visitor.rb
146
164
  - lib/arel/visitors/depth_first.rb
147
165
  - lib/arel/visitors/dot.rb
148
166
  - lib/arel/visitors/ibm_db.rb
@@ -165,14 +183,14 @@ metadata: {}
165
183
  post_install_message:
166
184
  rdoc_options:
167
185
  - "--main"
168
- - README.markdown
186
+ - README.md
169
187
  require_paths:
170
188
  - lib
171
189
  required_ruby_version: !ruby/object:Gem::Requirement
172
190
  requirements:
173
191
  - - ">="
174
192
  - !ruby/object:Gem::Version
175
- version: '0'
193
+ version: 2.2.2
176
194
  required_rubygems_version: !ruby/object:Gem::Requirement
177
195
  requirements:
178
196
  - - ">="
@@ -180,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
198
  version: '0'
181
199
  requirements: []
182
200
  rubyforge_project:
183
- rubygems_version: 2.4.5.1
201
+ rubygems_version: 2.6.12
184
202
  signing_key:
185
203
  specification_version: 4
186
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