Skip to content

Commit 0f92db2

Browse files
committed
Fix EagerLoadingTooManyIdsTest#test_preloading_too_many_ids
Since rails/rails#36074, `in_clause_length` will no longer help the adapter to avoid complex query limitation, and will be removed from Rails code base (rails/rails#39057).
1 parent 4d3255d commit 0f92db2

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require "active_record/associations/preloader"
2+
3+
module ActiveRecord
4+
module ConnectionAdapters
5+
module SQLServer
6+
module CoreExt
7+
module Preloader
8+
private
9+
10+
def records_for(ids)
11+
ids.each_slice(in_clause_length).flat_map do |slice|
12+
scope.where(association_key_name => slice).load do |record|
13+
# Processing only the first owner
14+
# because the record is modified but not an owner
15+
owner = owners_by_key[convert_key(record[association_key_name])].first
16+
association = owner.association(reflection.name)
17+
association.set_inverse_instance(record)
18+
end.records
19+
end
20+
end
21+
22+
def in_clause_length
23+
10_000
24+
end
25+
end
26+
end
27+
end
28+
end
29+
end
30+
31+
ActiveSupport.on_load(:active_record) do
32+
mod = ActiveRecord::ConnectionAdapters::SQLServer::CoreExt::Preloader
33+
ActiveRecord::Associations::Preloader::Association.prepend(mod)
34+
end

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
require 'active_record/connection_adapters/sqlserver/core_ext/attribute_methods'
1010
require 'active_record/connection_adapters/sqlserver/core_ext/finder_methods'
1111
require 'active_record/connection_adapters/sqlserver/core_ext/query_methods'
12+
require 'active_record/connection_adapters/sqlserver/core_ext/preloader'
1213
require 'active_record/connection_adapters/sqlserver/version'
1314
require 'active_record/connection_adapters/sqlserver/type'
1415
require 'active_record/connection_adapters/sqlserver/database_limits'

0 commit comments

Comments
 (0)