Skip to content

Commit 4143a27

Browse files
authored
[Rails 7.1] Initial changes required to run tests (#1065)
1 parent d9efae7 commit 4143a27

12 files changed

+48
-33
lines changed

Dockerfile.ci

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ WORKDIR $WORKDIR
99

1010
COPY . $WORKDIR
1111

12-
RUN bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3
12+
RUN RAILS_MAIN=1 bundle install --jobs `expr $(cat /proc/cpuinfo | grep -c "cpu cores") - 1` --retry 3
1313

1414
CMD ["sh"]

Gemfile

+3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@ gem "sqlite3", "~> 1.4"
1212
gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
1313
gem "benchmark-ips"
1414
gem "minitest", ">= 5.15.0", "< 5.16"
15+
gem "msgpack", ">= 1.7.0"
1516

1617
if ENV["RAILS_SOURCE"]
1718
gemspec path: ENV["RAILS_SOURCE"]
19+
elsif ENV["RAILS_MAIN"]
20+
gem "rails", github: "rails/rails", branch: 'main'
1821
else
1922
# Need to get rails source because the gem doesn't include tests
2023
version = ENV["RAILS_VERSION"] || begin

Rakefile

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ task test: ["test:dblib"]
99
task default: [:test]
1010

1111
namespace :test do
12+
ENV["ARCONN"] = "sqlserver"
13+
1214
%w(dblib).each do |mode|
1315
Rake::TestTask.new(mode) do |t|
1416
t.libs = ARTest::SQLServer.test_load_paths
@@ -19,7 +21,7 @@ namespace :test do
1921
end
2022

2123
task "dblib:env" do
22-
ENV["ARCONN"] = "dblib"
24+
ENV["ARCONN_MODE"] = "dblib"
2325
end
2426
end
2527

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7.0.3.0
1+
7.1.0.alpha

activerecord-sqlserver-adapter.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ Gem::Specification.new do |spec|
2727
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
2828
spec.require_paths = ["lib"]
2929

30-
spec.add_dependency "activerecord", "~> 7.0.0"
30+
spec.add_dependency "activerecord", "~> 7.1.0.alpha"
3131
spec.add_dependency "tiny_tds"
3232
end

docker-compose.ci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ services:
55
ci:
66
environment:
77
- ACTIVERECORD_UNITTEST_HOST=sqlserver
8+
- RAILS_MAIN=1
89
build:
910
context: .
1011
dockerfile: Dockerfile.ci

lib/active_record/connection_adapters/sqlserver/database_statements.rb

+8-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def execute(sql, name = nil)
2929
end
3030
end
3131

32-
def exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
32+
def internal_exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
3333
sql = transform_query(sql)
3434
if preventing_writes? && write_query?(sql)
3535
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
@@ -41,7 +41,7 @@ def exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
4141
sp_executesql(sql, name, binds, prepare: prepare, async: async)
4242
end
4343

44-
def exec_insert(sql, name = nil, binds = [], pk = nil, _sequence_name = nil)
44+
def exec_insert(sql, name = nil, binds = [], pk = nil, _sequence_name = nil, returning: nil)
4545
if id_insert_table_name = exec_insert_requires_identity?(sql, pk, binds)
4646
with_identity_insert_enabled(id_insert_table_name) { super(sql, name, binds, pk) }
4747
else
@@ -263,7 +263,7 @@ def newsequentialid_function
263263

264264
protected
265265

266-
def sql_for_insert(sql, pk, binds)
266+
def sql_for_insert(sql, pk, binds, _returning)
267267
if pk.nil?
268268
table_name = query_requires_identity_insert?(sql)
269269
pk = primary_key(table_name)
@@ -301,6 +301,8 @@ def set_identity_insert(table_name, enable = true)
301301
# === SQLServer Specific (Executing) ============================ #
302302

303303
def do_execute(sql, name = "SQL")
304+
connect if @connection.nil?
305+
304306
materialize_transactions
305307
mark_transaction_written_if_write(sql)
306308

@@ -328,6 +330,7 @@ def sp_executesql_types_and_parameters(binds)
328330
end
329331

330332
def sp_executesql_sql_type(attr)
333+
return "nvarchar(max)".freeze if attr.is_a?(Symbol)
331334
return attr.type.sqlserver_type if attr.type.respond_to?(:sqlserver_type)
332335

333336
case value = attr.value_for_database
@@ -339,6 +342,8 @@ def sp_executesql_sql_type(attr)
339342
end
340343

341344
def sp_executesql_sql_param(attr)
345+
return quote(attr) if attr.is_a?(Symbol)
346+
342347
case value = attr.value_for_database
343348
when Type::Binary::Data,
344349
ActiveRecord::Type::SQLServer::Data

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def drop_table(table_name, **options)
2626
do_execute "DELETE FROM #{quote_table_name(fktable)} WHERE #{quote_column_name(fkcolmn)} IN ( SELECT #{quote_column_name(pkcolmn)} FROM #{quote_table_name(pktable)} )"
2727
end
2828
end
29-
if options[:if_exists] && @version_year < 2016
29+
if options[:if_exists] && version_year < 2016
3030
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = #{quote(table_name)}) DROP TABLE #{quote_table_name(table_name)}", "SCHEMA"
3131
else
3232
super

lib/active_record/connection_adapters/sqlserver/table_definition.rb

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ def new_column_definition(name, type, **options)
113113

114114
super
115115
end
116+
117+
private
118+
119+
def valid_column_definition_options
120+
super + [:is_identity]
121+
end
116122
end
117123

118124
class Table < ActiveRecord::ConnectionAdapters::Table

lib/active_record/connection_adapters/sqlserver_adapter.rb

+20-13
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,14 @@ def config_encoding(config)
154154
end
155155
end
156156

157-
def initialize(connection, logger, _connection_options, config)
158-
super(connection, logger, config)
159-
@connection_options = config
160-
perform_connection_configuration
157+
def initialize(...)
158+
super
159+
160+
@config = @config.symbolize_keys
161+
@config.reverse_merge!(mode: :dblib)
162+
@config[:mode] = @config[:mode].to_s.downcase.underscore.to_sym
163+
164+
@connection_options ||= @config
161165
end
162166

163167
# === Abstract Adapter ========================================== #
@@ -229,7 +233,7 @@ def supports_datetime_with_precision?
229233
end
230234

231235
def supports_json?
232-
@version_year >= 2016
236+
version_year >= 2016
233237
end
234238

235239
def supports_comments?
@@ -253,7 +257,7 @@ def supports_lazy_transactions?
253257
end
254258

255259
def supports_in_memory_oltp?
256-
@version_year >= 2014
260+
version_year >= 2014
257261
end
258262

259263
def supports_insert_returning?
@@ -308,7 +312,7 @@ def disconnect!
308312
@collation = nil
309313
end
310314

311-
def clear_cache!
315+
def clear_cache!(...)
312316
@view_information = nil
313317
super
314318
end
@@ -534,11 +538,15 @@ def initialize_dateformatter
534538
end
535539

536540
def version_year
537-
return 2016 if sqlserver_version =~ /vNext/
538-
539-
/SQL Server (\d+)/.match(sqlserver_version).to_a.last.to_s.to_i
540-
rescue StandardError
541-
2016
541+
@version_year ||= begin
542+
if sqlserver_version =~ /vNext/
543+
2016
544+
else
545+
/SQL Server (\d+)/.match(sqlserver_version).to_a.last.to_s.to_i
546+
end
547+
rescue StandardError
548+
2016
549+
end
542550
end
543551

544552
def sqlserver_version
@@ -559,7 +567,6 @@ def perform_connection_configuration
559567

560568
def configure_connection_defaults
561569
@spid = _raw_select("SELECT @@SPID", fetch: :rows).first.first
562-
@version_year = version_year
563570

564571
initialize_dateformatter
565572
use_database

lib/active_record/sqlserver_base.rb

+1-10
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,7 @@ def sqlserver_adapter_class
77
end
88

99
def sqlserver_connection(config) #:nodoc:
10-
config = config.symbolize_keys
11-
config.reverse_merge!(mode: :dblib)
12-
config[:mode] = config[:mode].to_s.downcase.underscore.to_sym
13-
14-
sqlserver_adapter_class.new(
15-
sqlserver_adapter_class.new_client(config),
16-
logger,
17-
nil,
18-
config
19-
)
10+
sqlserver_adapter_class.new(config)
2011
end
2112
end
2213
end

test/config.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
default_connection_info: &default_connection_info
33
adapter: sqlserver
4-
mode: <%= ENV['ARCONN'] || 'dblib' %>
4+
mode: <%= ENV['ARCONN_MODE'] || 'dblib' %>
55
host: <%= ENV['ACTIVERECORD_UNITTEST_HOST'] || 'localhost' %>
66
port: <%= ENV['ACTIVERECORD_UNITTEST_PORT'] %>
77
database: activerecord_unittest
@@ -12,7 +12,7 @@ default_connection_info: &default_connection_info
1212

1313
connections:
1414

15-
dblib:
15+
sqlserver:
1616
arunit:
1717
<<: *default_connection_info
1818
appname: SQLServerAdptrUnit

0 commit comments

Comments
 (0)