arel 5.0.1.20140414130214 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -2
  3. data/History.txt +9 -4
  4. data/Manifest.txt +9 -7
  5. data/README.markdown +85 -8
  6. data/Rakefile +1 -1
  7. data/arel.gemspec +15 -16
  8. data/lib/arel.rb +1 -12
  9. data/lib/arel/collectors/bind.rb +36 -0
  10. data/lib/arel/collectors/plain_string.rb +18 -0
  11. data/lib/arel/collectors/sql_string.rb +18 -0
  12. data/lib/arel/factory_methods.rb +1 -1
  13. data/lib/arel/insert_manager.rb +5 -1
  14. data/lib/arel/nodes.rb +41 -0
  15. data/lib/arel/nodes/and.rb +1 -5
  16. data/lib/arel/nodes/binary.rb +2 -0
  17. data/lib/arel/nodes/extract.rb +0 -2
  18. data/lib/arel/nodes/full_outer_join.rb +6 -0
  19. data/lib/arel/nodes/function.rb +0 -1
  20. data/lib/arel/nodes/insert_statement.rb +5 -2
  21. data/lib/arel/nodes/node.rb +5 -1
  22. data/lib/arel/nodes/right_outer_join.rb +6 -0
  23. data/lib/arel/nodes/window.rb +23 -5
  24. data/lib/arel/predications.rb +41 -33
  25. data/lib/arel/select_manager.rb +13 -37
  26. data/lib/arel/table.rb +13 -9
  27. data/lib/arel/tree_manager.rb +8 -2
  28. data/lib/arel/update_manager.rb +2 -2
  29. data/lib/arel/visitors.rb +0 -2
  30. data/lib/arel/visitors/bind_substitute.rb +9 -0
  31. data/lib/arel/visitors/bind_visitor.rb +10 -5
  32. data/lib/arel/visitors/depth_first.rb +60 -57
  33. data/lib/arel/visitors/dot.rb +84 -80
  34. data/lib/arel/visitors/ibm_db.rb +4 -2
  35. data/lib/arel/visitors/informix.rb +39 -21
  36. data/lib/arel/visitors/mssql.rb +41 -23
  37. data/lib/arel/visitors/mysql.rb +48 -22
  38. data/lib/arel/visitors/oracle.rb +33 -24
  39. data/lib/arel/visitors/postgresql.rb +15 -8
  40. data/lib/arel/visitors/reduce.rb +25 -0
  41. data/lib/arel/visitors/sqlite.rb +3 -2
  42. data/lib/arel/visitors/to_sql.rb +455 -248
  43. data/lib/arel/visitors/visitor.rb +2 -2
  44. data/lib/arel/visitors/where_sql.rb +3 -2
  45. data/test/attributes/test_attribute.rb +12 -3
  46. data/test/collectors/test_bind_collector.rb +70 -0
  47. data/test/collectors/test_sql_string.rb +38 -0
  48. data/test/helper.rb +10 -1
  49. data/test/nodes/test_bin.rb +2 -2
  50. data/test/nodes/test_count.rb +0 -6
  51. data/test/nodes/test_equality.rb +1 -1
  52. data/test/nodes/test_grouping.rb +1 -1
  53. data/test/nodes/test_infix_operation.rb +1 -1
  54. data/test/nodes/test_select_core.rb +7 -7
  55. data/test/nodes/test_sql_literal.rb +10 -6
  56. data/test/nodes/test_window.rb +9 -3
  57. data/test/support/fake_record.rb +16 -4
  58. data/test/test_factory_methods.rb +1 -1
  59. data/test/test_insert_manager.rb +33 -4
  60. data/test/test_select_manager.rb +164 -92
  61. data/test/test_table.rb +49 -4
  62. data/test/visitors/test_bind_visitor.rb +18 -10
  63. data/test/visitors/test_depth_first.rb +12 -0
  64. data/test/visitors/test_dot.rb +4 -4
  65. data/test/visitors/test_ibm_db.rb +11 -5
  66. data/test/visitors/test_informix.rb +14 -8
  67. data/test/visitors/test_mssql.rb +12 -8
  68. data/test/visitors/test_mysql.rb +17 -12
  69. data/test/visitors/test_oracle.rb +25 -21
  70. data/test/visitors/test_postgres.rb +50 -12
  71. data/test/visitors/test_sqlite.rb +2 -2
  72. data/test/visitors/test_to_sql.rb +177 -81
  73. metadata +24 -19
  74. data/lib/arel/deprecated.rb +0 -4
  75. data/lib/arel/expression.rb +0 -5
  76. data/lib/arel/sql/engine.rb +0 -10
  77. data/lib/arel/sql_literal.rb +0 -4
  78. data/lib/arel/visitors/join_sql.rb +0 -19
  79. data/lib/arel/visitors/order_clauses.rb +0 -11
  80. data/test/visitors/test_join_sql.rb +0 -42
@@ -52,26 +52,22 @@ primary_key (#{caller.first}) is deprecated and will be removed in Arel 4.0.0
52
52
  SelectManager.new(@engine, table)
53
53
  end
54
54
 
55
- def joins manager
56
- if $VERBOSE
57
- warn "joins is deprecated and will be removed in 4.0.0"
58
- warn "please remove your call to joins from #{caller.first}"
59
- end
60
- nil
61
- end
62
-
63
55
  def join relation, klass = Nodes::InnerJoin
64
56
  return from(self) unless relation
65
57
 
66
58
  case relation
67
59
  when String, Nodes::SqlLiteral
68
- raise if relation.blank?
60
+ raise if relation.empty?
69
61
  klass = Nodes::StringJoin
70
62
  end
71
63
 
72
64
  from(self).join(relation, klass)
73
65
  end
74
66
 
67
+ def outer_join relation
68
+ join(relation, Nodes::OuterJoin)
69
+ end
70
+
75
71
  def group *columns
76
72
  from(self).group(*columns)
77
73
  end
@@ -112,6 +108,14 @@ primary_key (#{caller.first}) is deprecated and will be removed in Arel 4.0.0
112
108
  InsertManager.new(@engine)
113
109
  end
114
110
 
111
+ def update_manager
112
+ UpdateManager.new(@engine)
113
+ end
114
+
115
+ def delete_manager
116
+ DeleteManager.new(@engine)
117
+ end
118
+
115
119
  def hash
116
120
  # Perf note: aliases, table alias and engine is excluded from the hash
117
121
  # aliases can have a loop back to this table breaking hashes in parent
@@ -1,3 +1,5 @@
1
+ require 'arel/collectors/sql_string'
2
+
1
3
  module Arel
2
4
  class TreeManager
3
5
  include Arel::FactoryMethods
@@ -13,7 +15,9 @@ module Arel
13
15
  end
14
16
 
15
17
  def to_dot
16
- Visitors::Dot.new.accept @ast
18
+ collector = Arel::Collectors::PlainString.new
19
+ collector = Visitors::Dot.new.accept @ast, collector
20
+ collector.value
17
21
  end
18
22
 
19
23
  def visitor
@@ -21,7 +25,9 @@ module Arel
21
25
  end
22
26
 
23
27
  def to_sql
24
- visitor.accept @ast
28
+ collector = Arel::Collectors::SQLString.new
29
+ collector = visitor.accept @ast, collector
30
+ collector.value
25
31
  end
26
32
 
27
33
  def initialize_copy other
@@ -7,12 +7,12 @@ module Arel
7
7
  end
8
8
 
9
9
  def take limit
10
- @ast.limit = Nodes::Limit.new(limit) if limit
10
+ @ast.limit = Nodes::Limit.new(Nodes.build_quoted(limit)) if limit
11
11
  self
12
12
  end
13
13
 
14
14
  def key= key
15
- @ast.key = key
15
+ @ast.key = Nodes.build_quoted(key)
16
16
  end
17
17
 
18
18
  def key
@@ -6,9 +6,7 @@ require 'arel/visitors/postgresql'
6
6
  require 'arel/visitors/mysql'
7
7
  require 'arel/visitors/mssql'
8
8
  require 'arel/visitors/oracle'
9
- require 'arel/visitors/join_sql'
10
9
  require 'arel/visitors/where_sql'
11
- require 'arel/visitors/order_clauses'
12
10
  require 'arel/visitors/dot'
13
11
  require 'arel/visitors/ibm_db'
14
12
  require 'arel/visitors/informix'
@@ -0,0 +1,9 @@
1
+ module Arel
2
+ module Visitors
3
+ class BindSubstitute
4
+ def initialize delegate
5
+ @delegate = delegate
6
+ end
7
+ end
8
+ end
9
+ end
@@ -6,24 +6,29 @@ module Arel
6
6
  super
7
7
  end
8
8
 
9
- def accept node, &block
9
+ def accept node, collector, &block
10
10
  @block = block if block_given?
11
11
  super
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def visit_Arel_Nodes_Assignment o, a
16
+ def visit_Arel_Nodes_Assignment o, collector
17
17
  if o.right.is_a? Arel::Nodes::BindParam
18
- "#{visit o.left, a} = #{visit o.right, a}"
18
+ collector = visit o.left, collector
19
+ collector << " = "
20
+ visit o.right, collector
19
21
  else
20
22
  super
21
23
  end
22
24
  end
23
25
 
24
- def visit_Arel_Nodes_BindParam o, a
26
+ def visit_Arel_Nodes_BindParam o, collector
25
27
  if @block
26
- @block.call
28
+ val = @block.call
29
+ if String === val
30
+ collector << val
31
+ end
27
32
  else
28
33
  super
29
34
  end
@@ -7,13 +7,13 @@ module Arel
7
7
 
8
8
  private
9
9
 
10
- def visit o, a = nil
10
+ def visit o
11
11
  super
12
12
  @block.call o
13
13
  end
14
14
 
15
- def unary o, a
16
- visit o.expr, a
15
+ def unary o
16
+ visit o.expr
17
17
  end
18
18
  alias :visit_Arel_Nodes_Group :unary
19
19
  alias :visit_Arel_Nodes_Grouping :unary
@@ -28,10 +28,10 @@ module Arel
28
28
  alias :visit_Arel_Nodes_Top :unary
29
29
  alias :visit_Arel_Nodes_UnqualifiedColumn :unary
30
30
 
31
- def function o, a
32
- visit o.expressions, a
33
- visit o.alias, a
34
- visit o.distinct, a
31
+ def function o
32
+ visit o.expressions
33
+ visit o.alias
34
+ visit o.distinct
35
35
  end
36
36
  alias :visit_Arel_Nodes_Avg :function
37
37
  alias :visit_Arel_Nodes_Exists :function
@@ -39,27 +39,27 @@ module Arel
39
39
  alias :visit_Arel_Nodes_Min :function
40
40
  alias :visit_Arel_Nodes_Sum :function
41
41
 
42
- def visit_Arel_Nodes_NamedFunction o, a
43
- visit o.name, a
44
- visit o.expressions, a
45
- visit o.distinct, a
46
- visit o.alias, a
42
+ def visit_Arel_Nodes_NamedFunction o
43
+ visit o.name
44
+ visit o.expressions
45
+ visit o.distinct
46
+ visit o.alias
47
47
  end
48
48
 
49
- def visit_Arel_Nodes_Count o, a
50
- visit o.expressions, a
51
- visit o.alias, a
52
- visit o.distinct, a
49
+ def visit_Arel_Nodes_Count o
50
+ visit o.expressions
51
+ visit o.alias
52
+ visit o.distinct
53
53
  end
54
54
 
55
- def nary o, a
56
- o.children.each { |child| visit child, a }
55
+ def nary o
56
+ o.children.each { |child| visit child}
57
57
  end
58
58
  alias :visit_Arel_Nodes_And :nary
59
59
 
60
- def binary o, a
61
- visit o.left, a
62
- visit o.right, a
60
+ def binary o
61
+ visit o.left
62
+ visit o.right
63
63
  end
64
64
  alias :visit_Arel_Nodes_As :binary
65
65
  alias :visit_Arel_Nodes_Assignment :binary
@@ -67,6 +67,7 @@ module Arel
67
67
  alias :visit_Arel_Nodes_DeleteStatement :binary
68
68
  alias :visit_Arel_Nodes_DoesNotMatch :binary
69
69
  alias :visit_Arel_Nodes_Equality :binary
70
+ alias :visit_Arel_Nodes_FullOuterJoin :binary
70
71
  alias :visit_Arel_Nodes_GreaterThan :binary
71
72
  alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
72
73
  alias :visit_Arel_Nodes_In :binary
@@ -78,18 +79,21 @@ module Arel
78
79
  alias :visit_Arel_Nodes_Matches :binary
79
80
  alias :visit_Arel_Nodes_NotEqual :binary
80
81
  alias :visit_Arel_Nodes_NotIn :binary
82
+ alias :visit_Arel_Nodes_NotRegexp :binary
81
83
  alias :visit_Arel_Nodes_Or :binary
82
84
  alias :visit_Arel_Nodes_OuterJoin :binary
85
+ alias :visit_Arel_Nodes_Regexp :binary
86
+ alias :visit_Arel_Nodes_RightOuterJoin :binary
83
87
  alias :visit_Arel_Nodes_TableAlias :binary
84
88
  alias :visit_Arel_Nodes_Values :binary
85
89
 
86
- def visit_Arel_Nodes_StringJoin o, a
87
- visit o.left, a
90
+ def visit_Arel_Nodes_StringJoin o
91
+ visit o.left
88
92
  end
89
93
 
90
- def visit_Arel_Attribute o, a
91
- visit o.relation, a
92
- visit o.name, a
94
+ def visit_Arel_Attribute o
95
+ visit o.relation
96
+ visit o.name
93
97
  end
94
98
  alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
95
99
  alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
@@ -99,11 +103,11 @@ module Arel
99
103
  alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
100
104
  alias :visit_Arel_Attributes_Decimal :visit_Arel_Attribute
101
105
 
102
- def visit_Arel_Table o, a
103
- visit o.name, a
106
+ def visit_Arel_Table o
107
+ visit o.name
104
108
  end
105
109
 
106
- def terminal o, a
110
+ def terminal o
107
111
  end
108
112
  alias :visit_ActiveSupport_Multibyte_Chars :terminal
109
113
  alias :visit_ActiveSupport_StringInquirer :terminal
@@ -112,7 +116,6 @@ module Arel
112
116
  alias :visit_Arel_Nodes_SqlLiteral :terminal
113
117
  alias :visit_Arel_Nodes_BindParam :terminal
114
118
  alias :visit_Arel_Nodes_Window :terminal
115
- alias :visit_Arel_SqlLiteral :terminal
116
119
  alias :visit_BigDecimal :terminal
117
120
  alias :visit_Bignum :terminal
118
121
  alias :visit_Class :terminal
@@ -127,43 +130,43 @@ module Arel
127
130
  alias :visit_Time :terminal
128
131
  alias :visit_TrueClass :terminal
129
132
 
130
- def visit_Arel_Nodes_InsertStatement o, a
131
- visit o.relation, a
132
- visit o.columns, a
133
- visit o.values, a
133
+ def visit_Arel_Nodes_InsertStatement o
134
+ visit o.relation
135
+ visit o.columns
136
+ visit o.values
134
137
  end
135
138
 
136
- def visit_Arel_Nodes_SelectCore o, a
137
- visit o.projections, a
138
- visit o.source, a
139
- visit o.wheres, a
140
- visit o.groups, a
141
- visit o.windows, a
142
- visit o.having, a
139
+ def visit_Arel_Nodes_SelectCore o
140
+ visit o.projections
141
+ visit o.source
142
+ visit o.wheres
143
+ visit o.groups
144
+ visit o.windows
145
+ visit o.having
143
146
  end
144
147
 
145
- def visit_Arel_Nodes_SelectStatement o, a
146
- visit o.cores, a
147
- visit o.orders, a
148
- visit o.limit, a
149
- visit o.lock, a
150
- visit o.offset, a
148
+ def visit_Arel_Nodes_SelectStatement o
149
+ visit o.cores
150
+ visit o.orders
151
+ visit o.limit
152
+ visit o.lock
153
+ visit o.offset
151
154
  end
152
155
 
153
- def visit_Arel_Nodes_UpdateStatement o, a
154
- visit o.relation, a
155
- visit o.values, a
156
- visit o.wheres, a
157
- visit o.orders, a
158
- visit o.limit, a
156
+ def visit_Arel_Nodes_UpdateStatement o
157
+ visit o.relation
158
+ visit o.values
159
+ visit o.wheres
160
+ visit o.orders
161
+ visit o.limit
159
162
  end
160
163
 
161
- def visit_Array o, a
162
- o.each { |i| visit i, a }
164
+ def visit_Array o
165
+ o.each { |i| visit i }
163
166
  end
164
167
 
165
- def visit_Hash o, a
166
- o.each { |k,v| visit(k, a); visit(v, a) }
168
+ def visit_Hash o
169
+ o.each { |k,v| visit(k); visit(v) }
167
170
  end
168
171
  end
169
172
  end
@@ -22,47 +22,50 @@ module Arel
22
22
  @seen = {}
23
23
  end
24
24
 
25
- def accept object
26
- super
27
- to_dot
25
+ def accept object, collector
26
+ visit object
27
+ collector << to_dot
28
28
  end
29
29
 
30
30
  private
31
- def visit_Arel_Nodes_Ordering o, a
32
- visit_edge o, a, "expr"
31
+
32
+ def visit_Arel_Nodes_Ordering o
33
+ visit_edge o, "expr"
33
34
  end
34
35
 
35
- def visit_Arel_Nodes_TableAlias o, a
36
- visit_edge o, a, "name"
37
- visit_edge o, a, "relation"
36
+ def visit_Arel_Nodes_TableAlias o
37
+ visit_edge o, "name"
38
+ visit_edge o, "relation"
38
39
  end
39
40
 
40
- def visit_Arel_Nodes_Count o, a
41
- visit_edge o, a, "expressions"
42
- visit_edge o, a, "distinct"
41
+ def visit_Arel_Nodes_Count o
42
+ visit_edge o, "expressions"
43
+ visit_edge o, "distinct"
43
44
  end
44
45
 
45
- def visit_Arel_Nodes_Values o, a
46
- visit_edge o, a, "expressions"
46
+ def visit_Arel_Nodes_Values o
47
+ visit_edge o, "expressions"
47
48
  end
48
49
 
49
- def visit_Arel_Nodes_StringJoin o, a
50
- visit_edge o, a, "left"
50
+ def visit_Arel_Nodes_StringJoin o
51
+ visit_edge o, "left"
51
52
  end
52
53
 
53
- def visit_Arel_Nodes_InnerJoin o, a
54
- visit_edge o, a, "left"
55
- visit_edge o, a, "right"
54
+ def visit_Arel_Nodes_InnerJoin o
55
+ visit_edge o, "left"
56
+ visit_edge o, "right"
56
57
  end
57
- alias :visit_Arel_Nodes_OuterJoin :visit_Arel_Nodes_InnerJoin
58
+ alias :visit_Arel_Nodes_FullOuterJoin :visit_Arel_Nodes_InnerJoin
59
+ alias :visit_Arel_Nodes_OuterJoin :visit_Arel_Nodes_InnerJoin
60
+ alias :visit_Arel_Nodes_RightOuterJoin :visit_Arel_Nodes_InnerJoin
58
61
 
59
- def visit_Arel_Nodes_DeleteStatement o, a
60
- visit_edge o, a, "relation"
61
- visit_edge o, a, "wheres"
62
+ def visit_Arel_Nodes_DeleteStatement o
63
+ visit_edge o, "relation"
64
+ visit_edge o, "wheres"
62
65
  end
63
66
 
64
- def unary o, a
65
- visit_edge o, a, "expr"
67
+ def unary o
68
+ visit_edge o, "expr"
66
69
  end
67
70
  alias :visit_Arel_Nodes_Group :unary
68
71
  alias :visit_Arel_Nodes_Grouping :unary
@@ -78,23 +81,25 @@ module Arel
78
81
  alias :visit_Arel_Nodes_Rows :unary
79
82
  alias :visit_Arel_Nodes_Range :unary
80
83
 
81
- def window o, a
82
- visit_edge o, a, "orders"
83
- visit_edge o, a, "framing"
84
+ def window o
85
+ visit_edge o, "partitions"
86
+ visit_edge o, "orders"
87
+ visit_edge o, "framing"
84
88
  end
85
89
  alias :visit_Arel_Nodes_Window :window
86
90
 
87
- def named_window o, a
88
- visit_edge o, a, "orders"
89
- visit_edge o, a, "framing"
90
- visit_edge o, a, "name"
91
+ def named_window o
92
+ visit_edge o, "partitions"
93
+ visit_edge o, "orders"
94
+ visit_edge o, "framing"
95
+ visit_edge o, "name"
91
96
  end
92
97
  alias :visit_Arel_Nodes_NamedWindow :named_window
93
98
 
94
- def function o, a
95
- visit_edge o, a, "expressions"
96
- visit_edge o, a, "distinct"
97
- visit_edge o, a, "alias"
99
+ def function o
100
+ visit_edge o, "expressions"
101
+ visit_edge o, "distinct"
102
+ visit_edge o, "alias"
98
103
  end
99
104
  alias :visit_Arel_Nodes_Exists :function
100
105
  alias :visit_Arel_Nodes_Min :function
@@ -102,52 +107,52 @@ module Arel
102
107
  alias :visit_Arel_Nodes_Avg :function
103
108
  alias :visit_Arel_Nodes_Sum :function
104
109
 
105
- def extract o, a
106
- visit_edge o, a, "expressions"
107
- visit_edge o, a, "alias"
110
+ def extract o
111
+ visit_edge o, "expressions"
112
+ visit_edge o, "alias"
108
113
  end
109
114
  alias :visit_Arel_Nodes_Extract :extract
110
115
 
111
- def visit_Arel_Nodes_NamedFunction o, a
112
- visit_edge o, a, "name"
113
- visit_edge o, a, "expressions"
114
- visit_edge o, a, "distinct"
115
- visit_edge o, a, "alias"
116
+ def visit_Arel_Nodes_NamedFunction o
117
+ visit_edge o, "name"
118
+ visit_edge o, "expressions"
119
+ visit_edge o, "distinct"
120
+ visit_edge o, "alias"
116
121
  end
117
122
 
118
- def visit_Arel_Nodes_InsertStatement o, a
119
- visit_edge o, a, "relation"
120
- visit_edge o, a, "columns"
121
- visit_edge o, a, "values"
123
+ def visit_Arel_Nodes_InsertStatement o
124
+ visit_edge o, "relation"
125
+ visit_edge o, "columns"
126
+ visit_edge o, "values"
122
127
  end
123
128
 
124
- def visit_Arel_Nodes_SelectCore o, a
125
- visit_edge o, a, "source"
126
- visit_edge o, a, "projections"
127
- visit_edge o, a, "wheres"
128
- visit_edge o, a, "windows"
129
+ def visit_Arel_Nodes_SelectCore o
130
+ visit_edge o, "source"
131
+ visit_edge o, "projections"
132
+ visit_edge o, "wheres"
133
+ visit_edge o, "windows"
129
134
  end
130
135
 
131
- def visit_Arel_Nodes_SelectStatement o, a
132
- visit_edge o, a, "cores"
133
- visit_edge o, a, "limit"
134
- visit_edge o, a, "orders"
135
- visit_edge o, a, "offset"
136
+ def visit_Arel_Nodes_SelectStatement o
137
+ visit_edge o, "cores"
138
+ visit_edge o, "limit"
139
+ visit_edge o, "orders"
140
+ visit_edge o, "offset"
136
141
  end
137
142
 
138
- def visit_Arel_Nodes_UpdateStatement o, a
139
- visit_edge o, a, "relation"
140
- visit_edge o, a, "wheres"
141
- visit_edge o, a, "values"
143
+ def visit_Arel_Nodes_UpdateStatement o
144
+ visit_edge o, "relation"
145
+ visit_edge o, "wheres"
146
+ visit_edge o, "values"
142
147
  end
143
148
 
144
- def visit_Arel_Table o, a
145
- visit_edge o, a, "name"
149
+ def visit_Arel_Table o
150
+ visit_edge o, "name"
146
151
  end
147
152
 
148
- def visit_Arel_Attribute o, a
149
- visit_edge o, a, "relation"
150
- visit_edge o, a, "name"
153
+ def visit_Arel_Attribute o
154
+ visit_edge o, "relation"
155
+ visit_edge o, "name"
151
156
  end
152
157
  alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
153
158
  alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
@@ -156,16 +161,16 @@ module Arel
156
161
  alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
157
162
  alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
158
163
 
159
- def nary o, a
164
+ def nary o
160
165
  o.children.each_with_index do |x,i|
161
- edge(i) { visit x, a }
166
+ edge(i) { visit x }
162
167
  end
163
168
  end
164
169
  alias :visit_Arel_Nodes_And :nary
165
170
 
166
- def binary o, a
167
- visit_edge o, a, "left"
168
- visit_edge o, a, "right"
171
+ def binary o
172
+ visit_edge o, "left"
173
+ visit_edge o, "right"
169
174
  end
170
175
  alias :visit_Arel_Nodes_As :binary
171
176
  alias :visit_Arel_Nodes_Assignment :binary
@@ -184,7 +189,7 @@ module Arel
184
189
  alias :visit_Arel_Nodes_Or :binary
185
190
  alias :visit_Arel_Nodes_Over :binary
186
191
 
187
- def visit_String o, a
192
+ def visit_String o
188
193
  @node_stack.last.fields << o
189
194
  end
190
195
  alias :visit_Time :visit_String
@@ -193,7 +198,6 @@ module Arel
193
198
  alias :visit_NilClass :visit_String
194
199
  alias :visit_TrueClass :visit_String
195
200
  alias :visit_FalseClass :visit_String
196
- alias :visit_Arel_SqlLiteral :visit_String
197
201
  alias :visit_Arel_Nodes_BindParam :visit_String
198
202
  alias :visit_Fixnum :visit_String
199
203
  alias :visit_BigDecimal :visit_String
@@ -201,23 +205,23 @@ module Arel
201
205
  alias :visit_Symbol :visit_String
202
206
  alias :visit_Arel_Nodes_SqlLiteral :visit_String
203
207
 
204
- def visit_Hash o, a
208
+ def visit_Hash o
205
209
  o.each_with_index do |pair, i|
206
- edge("pair_#{i}") { visit pair, a }
210
+ edge("pair_#{i}") { visit pair }
207
211
  end
208
212
  end
209
213
 
210
- def visit_Array o, a
214
+ def visit_Array o
211
215
  o.each_with_index do |x,i|
212
- edge(i) { visit x, a }
216
+ edge(i) { visit x }
213
217
  end
214
218
  end
215
219
 
216
- def visit_edge o, a, method
217
- edge(method) { visit o.send(method), a }
220
+ def visit_edge o, method
221
+ edge(method) { visit o.send(method) }
218
222
  end
219
223
 
220
- def visit o, a = nil
224
+ def visit o
221
225
  if node = @seen[o.object_id]
222
226
  @edge_stack.last.to = node
223
227
  return