Skip to content

Commit 3db2d60

Browse files
aidanharanwpolicarpo
authored andcommitted
Order by selected items when using distinct exists
1 parent fd06686 commit 3db2d60

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require 'active_record/relation'
2+
require 'active_record/version'
3+
4+
module ActiveRecord
5+
module ConnectionAdapters
6+
module SQLServer
7+
module CoreExt
8+
module FinderMethods
9+
10+
private
11+
12+
# Same as original except we order by values in distinct select if present.
13+
def construct_relation_for_exists(conditions)
14+
if distinct_value && offset_value
15+
relation = limit!(1)
16+
17+
if select_values.present?
18+
relation = relation.order(*select_values)
19+
else
20+
relation = relation.except(:order)
21+
end
22+
else
23+
relation = except(:select, :distinct, :order)._select!(::ActiveRecord::FinderMethods::ONE_AS_ONE).limit!(1)
24+
end
25+
26+
case conditions
27+
when Array, Hash
28+
relation.where!(conditions) unless conditions.empty?
29+
else
30+
relation.where!(primary_key => conditions) unless conditions == :none
31+
end
32+
33+
relation
34+
end
35+
end
36+
end
37+
end
38+
end
39+
end
40+
41+
ActiveSupport.on_load(:active_record) do
42+
ActiveRecord::Relation.include(ActiveRecord::ConnectionAdapters::SQLServer::CoreExt::FinderMethods)
43+
end

lib/active_record/connection_adapters/sqlserver_adapter.rb

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
require 'active_record/connection_adapters/sqlserver/core_ext/explain'
88
require 'active_record/connection_adapters/sqlserver/core_ext/explain_subscriber'
99
require 'active_record/connection_adapters/sqlserver/core_ext/attribute_methods'
10+
require 'active_record/connection_adapters/sqlserver/core_ext/finder_methods'
1011
require 'active_record/connection_adapters/sqlserver/version'
1112
require 'active_record/connection_adapters/sqlserver/type'
1213
require 'active_record/connection_adapters/sqlserver/database_limits'

0 commit comments

Comments
 (0)