File tree Expand file tree Collapse file tree 4 files changed +21
-4
lines changed
lib/active_record/relation Expand file tree Collapse file tree 4 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -85,9 +85,9 @@ def merge_select_values
85
85
return if other . select_values . empty?
86
86
87
87
if other . model == relation . model
88
- relation . select_values | = other . select_values
88
+ relation . select_values + = other . select_values
89
89
else
90
- relation . select_values | = other . instance_eval do
90
+ relation . select_values + = other . instance_eval do
91
91
arel_columns ( select_values )
92
92
end
93
93
end
Original file line number Diff line number Diff line change @@ -426,7 +426,7 @@ def select(*fields)
426
426
end
427
427
428
428
def _select! ( *fields ) # :nodoc:
429
- self . select_values | = fields
429
+ self . select_values + = fields
430
430
self
431
431
end
432
432
Original file line number Diff line number Diff line change @@ -115,6 +115,14 @@ def test_select_with_hash_argument_with_few_tables
115
115
assert_not_nil post . post_title
116
116
end
117
117
118
+ def test_select_preserves_duplicate_columns
119
+ quoted_posts_id = Regexp . escape ( quote_table_name ( "posts.id" ) )
120
+ quoted_posts = Regexp . escape ( quote_table_name ( "posts" ) )
121
+ assert_queries_match ( /SELECT #{ quoted_posts_id } , #{ quoted_posts_id } FROM #{ quoted_posts } /i ) do
122
+ Post . select ( :id , :id ) . to_a
123
+ end
124
+ end
125
+
118
126
def test_reselect
119
127
expected = Post . select ( :title ) . to_sql
120
128
assert_equal expected , Post . select ( :title , :body ) . reselect ( :title ) . to_sql
Original file line number Diff line number Diff line change @@ -50,7 +50,7 @@ def test_multi_values_deduplication_with_merge
50
50
}
51
51
expected . default = [ Object . new ]
52
52
53
- Relation ::MULTI_VALUE_METHODS . each do |method |
53
+ ( Relation ::MULTI_VALUE_METHODS - [ :select ] ) . each do |method |
54
54
getter , setter = "#{ method } _values" , "#{ method } _values="
55
55
values = expected [ method ]
56
56
relation = Relation . new ( FakeKlass )
@@ -293,6 +293,15 @@ def test_relation_merging_with_joins_as_join_dependency_pick_proper_parent
293
293
assert_equal 3 , relation . where ( id : post . id ) . pluck ( :id ) . size
294
294
end
295
295
296
+ def test_merge_preserves_duplicate_columns
297
+ quoted_posts_id = Regexp . escape ( quote_table_name ( "posts.id" ) )
298
+ quoted_posts = Regexp . escape ( quote_table_name ( "posts" ) )
299
+ posts = Post . select ( :id )
300
+ assert_queries_match ( /SELECT #{ quoted_posts_id } , #{ quoted_posts_id } FROM #{ quoted_posts } /i ) do
301
+ posts . merge ( posts ) . to_a
302
+ end
303
+ end
304
+
296
305
def test_merge_raises_with_invalid_argument
297
306
assert_raises ArgumentError do
298
307
relation = Relation . new ( FakeKlass )
You can’t perform that action at this time.
0 commit comments