Skip to content

Commit f21c7f4

Browse files
committed
Fix distinct alias when multiple databases used
1 parent e06f1fd commit f21c7f4

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## Unreleased
2+
3+
#### Fixed
4+
5+
- [#1262](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1262) Fix distinct alias when multiple databases used.
6+
17
## v7.2.2
28

39
#### Fixed

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,12 +347,16 @@ def add_timestamps(table_name, **options)
347347

348348
def columns_for_distinct(columns, orders)
349349
order_columns = orders.reject(&:blank?).map { |s|
350-
s = s.to_sql unless s.is_a?(String)
350+
s = visitor.compile(s) unless s.is_a?(String)
351351
s.gsub(/\s+(?:ASC|DESC)\b/i, "")
352352
.gsub(/\s+NULLS\s+(?:FIRST|LAST)\b/i, "")
353-
}.reject(&:blank?).map.with_index { |column, i| "#{column} AS alias_#{i}" }
353+
}
354+
.reject(&:blank?)
355+
.reject { |s| columns.include?(s) }
354356

355-
(order_columns << super).join(", ")
357+
order_columns_aliased = order_columns.map.with_index { |column, i| "#{column} AS alias_#{i}" }
358+
359+
(order_columns_aliased << super).join(", ")
356360
end
357361

358362
def update_table_definition(table_name, base)

test/cases/adapter_test_sqlserver.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,4 +594,13 @@ def test_doesnt_error_when_a_select_query_is_called_while_preventing_writes
594594
assert_equal Task.where("starting < ?", DateTime.current).count, 1
595595
end
596596
end
597+
598+
describe "distinct select query" do
599+
it "generated SQL does not contain unnecessary alias projection" do
600+
sqls = capture_sql do
601+
Post.includes(:comments).joins(:comments).first
602+
end
603+
assert_no_match(/AS alias_0/, sqls.first)
604+
end
605+
end
597606
end

0 commit comments

Comments
 (0)