Skip to content

Commit 2ba0c8a

Browse files
authored
Fix distinct alias when multiple databases used (#1262)
1 parent 13ad9cd commit 2ba0c8a

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

CHANGELOG.md

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
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
## v8.0.0
28

39
#### Changed
410

5-
- [#1216](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1216) Refactor adapter interface to match abstract adapter
6-
- [#1225](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1225) Drop support to Ruby 3.1
11+
- [#1216](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1216) Refactor adapter interface to match abstract adapter.
12+
- [#1225](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1225) Drop support to Ruby 3.1.
713

814
#### Fixed
915

10-
- [#1215](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1215) Fix mismatched foreign key errors
16+
- [#1215](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1215) Fix mismatched foreign key errors.
1117

1218
Please check [7-2-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/7-2-stable/CHANGELOG.md) for previous changes.

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

+7-3
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

+9
Original file line numberDiff line numberDiff line change
@@ -616,4 +616,13 @@ def setup
616616
assert_equal Task.where("starting < ?", DateTime.current).count, 1
617617
end
618618
end
619+
620+
describe "distinct select query" do
621+
it "generated SQL does not contain unnecessary alias projection" do
622+
sqls = capture_sql do
623+
Post.includes(:comments).joins(:comments).first
624+
end
625+
assert_no_match(/AS alias_0/, sqls.first)
626+
end
627+
end
619628
end

0 commit comments

Comments
 (0)