Skip to content

Commit e60e9ca

Browse files
authored
Merge pull request #2075 from yahonda/diag_2072
Remove `visit_Arel_Nodes_NotIn` and `visit_Arel_Nodes_In` visitors
2 parents 74de040 + 9405780 commit e60e9ca

File tree

3 files changed

+35
-106
lines changed

3 files changed

+35
-106
lines changed

lib/arel/visitors/oracle.rb

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -128,59 +128,6 @@ def visit_Arel_Nodes_HomogeneousIn(o, collector)
128128
collector
129129
end
130130

131-
def visit_Arel_Nodes_In(o, collector)
132-
attr, values = o.left, o.right
133-
134-
if Array === values
135-
unless values.empty?
136-
values.delete_if { |value| unboundable?(value) }
137-
end
138-
139-
return collector << "1=0" if values.empty?
140-
end
141-
142-
in_clause_length = @connection.in_clause_length
143-
144-
if !Array === values || values.length <= in_clause_length
145-
visit(attr, collector) << " IN ("
146-
visit(values, collector) << ")"
147-
else
148-
collector << "("
149-
values.each_slice(in_clause_length).each_with_index do |valuez, i|
150-
collector << " OR " unless i == 0
151-
visit(attr, collector) << " IN ("
152-
visit(valuez, collector) << ")"
153-
end
154-
collector << ")"
155-
end
156-
end
157-
158-
def visit_Arel_Nodes_NotIn(o, collector)
159-
attr, values = o.left, o.right
160-
161-
if Array === values
162-
unless values.empty?
163-
values.delete_if { |value| unboundable?(value) }
164-
end
165-
166-
return collector << "1=1" if values.empty?
167-
end
168-
169-
in_clause_length = @connection.in_clause_length
170-
171-
if !Array === values || values.length <= in_clause_length
172-
visit(attr, collector) << " NOT IN ("
173-
visit(values, collector) << ")"
174-
else
175-
values.each_slice(in_clause_length).each_with_index do |valuez, i|
176-
collector << " AND " unless i == 0
177-
visit(attr, collector) << " NOT IN ("
178-
visit(valuez, collector) << ")"
179-
end
180-
collector
181-
end
182-
end
183-
184131
def visit_Arel_Nodes_UpdateStatement(o, collector)
185132
# Oracle does not allow ORDER BY/LIMIT in UPDATEs.
186133
if o.orders.any? && o.limit.nil?

lib/arel/visitors/oracle12.rb

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -81,59 +81,6 @@ def visit_Arel_Nodes_HomogeneousIn(o, collector)
8181
collector
8282
end
8383

84-
def visit_Arel_Nodes_In(o, collector)
85-
attr, values = o.left, o.right
86-
87-
if Array === values
88-
unless values.empty?
89-
values.delete_if { |value| unboundable?(value) }
90-
end
91-
92-
return collector << "1=0" if values.empty?
93-
end
94-
95-
in_clause_length = @connection.in_clause_length
96-
97-
if !Array === values || values.length <= in_clause_length
98-
visit(attr, collector) << " IN ("
99-
visit(values, collector) << ")"
100-
else
101-
collector << "("
102-
values.each_slice(in_clause_length).each_with_index do |valuez, i|
103-
collector << " OR " unless i == 0
104-
visit(attr, collector) << " IN ("
105-
visit(valuez, collector) << ")"
106-
end
107-
collector << ")"
108-
end
109-
end
110-
111-
def visit_Arel_Nodes_NotIn(o, collector)
112-
attr, values = o.left, o.right
113-
114-
if Array === values
115-
unless values.empty?
116-
values.delete_if { |value| unboundable?(value) }
117-
end
118-
119-
return collector << "1=1" if values.empty?
120-
end
121-
122-
in_clause_length = @connection.in_clause_length
123-
124-
if !Array === values || values.length <= in_clause_length
125-
visit(attr, collector) << " NOT IN ("
126-
visit(values, collector) << ")"
127-
else
128-
values.each_slice(in_clause_length).each_with_index do |valuez, i|
129-
collector << " AND " unless i == 0
130-
visit(attr, collector) << " NOT IN ("
131-
visit(valuez, collector) << ")"
132-
end
133-
collector
134-
end
135-
end
136-
13784
def visit_Arel_Nodes_UpdateStatement(o, collector)
13885
# Oracle does not allow ORDER BY/LIMIT in UPDATEs.
13986
if o.orders.any? && o.limit.nil?

spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,4 +707,39 @@ class ::TestPost < ActiveRecord::Base
707707
expect(post.explain).to include("| TABLE ACCESS FULL| TEST_POSTS |")
708708
end
709709
end
710+
711+
describe "homogeneous in" do
712+
before(:all) do
713+
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
714+
@conn = ActiveRecord::Base.connection
715+
schema_define do
716+
create_table :test_posts, force: true
717+
create_table :test_comments, force: true do |t|
718+
t.integer :test_post_id
719+
end
720+
end
721+
class ::TestPost < ActiveRecord::Base
722+
has_many :test_comments
723+
end
724+
class ::TestComment < ActiveRecord::Base
725+
belongs_to :test_post
726+
end
727+
end
728+
729+
after(:all) do
730+
schema_define do
731+
drop_table :test_posts, if_exists: true
732+
drop_table :test_comments, if_exists: true
733+
end
734+
Object.send(:remove_const, "TestPost")
735+
Object.send(:remove_const, "TestComment")
736+
ActiveRecord::Base.clear_cache!
737+
end
738+
739+
it "should not raise undefined method length" do
740+
post = TestPost.create!
741+
post.test_comments << TestComment.create!
742+
expect(TestComment.where(test_post_id: TestPost.select(:id)).size).to eq(1)
743+
end
744+
end
710745
end

0 commit comments

Comments
 (0)