From 2f1aac31ba7d4463fa212bdc6565ca61ce66d6e0 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 2 Oct 2025 14:37:03 +0100 Subject: [PATCH 1/4] Use latest Ubuntu --- issue_1360.rb | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 issue_1360.rb diff --git a/issue_1360.rb b/issue_1360.rb new file mode 100644 index 000000000..9019a7f26 --- /dev/null +++ b/issue_1360.rb @@ -0,0 +1,46 @@ +require 'bundler/inline' + +gemfile do + source 'https://rubygems.org' + gem 'rails', '~> 7.1.0' + # gem 'activerecord-sqlserver-adapter', '~> 7.1.11' + + gem 'activerecord-sqlserver-adapter', path: "." + # + gem 'tiny_tds' + + gem "pry" +end + +require 'active_record' + +# Configure database connection +ActiveRecord::Base.establish_connection( + adapter: 'sqlserver', + host: 'sqlserver', # Replace with your SQL Server host + database: 'activerecord_unittest', # Replace with your database + username: 'rails', # Replace with your username + password: '' # Replace with your password +) + +# This should trigger the bug +begin + puts "Attempting to call use_database as first operation..." + ActiveRecord::Base.connection.use_database('activerecord_unittest') + puts "Success: No error occurred" +rescue NoMethodError => e + puts "BUG REPRODUCED: #{e.message}" + puts "Error class: #{e.class}" + puts "Backtrace:" + puts e.backtrace.first(10) +end + +# Workaround: Force connection establishment first +# begin +# puts "\nTesting workaround - establishing connection first..." +# ActiveRecord::Base.connection.execute('SELECT 1') # calling something like ActiveRecord::Base.connection.raw_connection _also_ works +# ActiveRecord::Base.connection.use_database('activerecord_unittest') +# puts "Workaround successful" +# rescue => e +# puts "Workaround failed: #{e.message}" +# end From a9a9f0a0195cba9820b2acb1a6af9a10c2d1137b Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 2 Oct 2025 14:38:41 +0100 Subject: [PATCH 2/4] Fix CI --- .github/workflows/ci.yml | 3 ++- issue_1360.rb | 46 ---------------------------------------- 2 files changed, 2 insertions(+), 47 deletions(-) delete mode 100644 issue_1360.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b790e93d9..baa261701 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,8 @@ on: [push, pull_request] jobs: test: name: Run test suite - runs-on: ubuntu-20.04 # TODO: Change back to 'ubuntu-latest' when https://github.com/microsoft/mssql-docker/issues/899 resolved. + runs-on: ubuntu-latest + timeout-minutes: 10 env: COMPOSE_FILE: docker-compose.ci.yml diff --git a/issue_1360.rb b/issue_1360.rb deleted file mode 100644 index 9019a7f26..000000000 --- a/issue_1360.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'bundler/inline' - -gemfile do - source 'https://rubygems.org' - gem 'rails', '~> 7.1.0' - # gem 'activerecord-sqlserver-adapter', '~> 7.1.11' - - gem 'activerecord-sqlserver-adapter', path: "." - # - gem 'tiny_tds' - - gem "pry" -end - -require 'active_record' - -# Configure database connection -ActiveRecord::Base.establish_connection( - adapter: 'sqlserver', - host: 'sqlserver', # Replace with your SQL Server host - database: 'activerecord_unittest', # Replace with your database - username: 'rails', # Replace with your username - password: '' # Replace with your password -) - -# This should trigger the bug -begin - puts "Attempting to call use_database as first operation..." - ActiveRecord::Base.connection.use_database('activerecord_unittest') - puts "Success: No error occurred" -rescue NoMethodError => e - puts "BUG REPRODUCED: #{e.message}" - puts "Error class: #{e.class}" - puts "Backtrace:" - puts e.backtrace.first(10) -end - -# Workaround: Force connection establishment first -# begin -# puts "\nTesting workaround - establishing connection first..." -# ActiveRecord::Base.connection.execute('SELECT 1') # calling something like ActiveRecord::Base.connection.raw_connection _also_ works -# ActiveRecord::Base.connection.use_database('activerecord_unittest') -# puts "Workaround successful" -# rescue => e -# puts "Workaround failed: #{e.message}" -# end From 3ad3228bfc569ceb7c57e0960ed77ca7e9f77705 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 2 Oct 2025 18:22:59 +0100 Subject: [PATCH 3/4] Fix tests following FreeTDS release --- test/cases/rake_test_sqlserver.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/cases/rake_test_sqlserver.rb b/test/cases/rake_test_sqlserver.rb index 145bc7119..ea1074d76 100644 --- a/test/cases/rake_test_sqlserver.rb +++ b/test/cases/rake_test_sqlserver.rb @@ -138,18 +138,22 @@ class SQLServerRakeStructureDumpLoadTest < SQLServerRakeTest it "dumps structure and accounts for defncopy oddities" do skip "debug defncopy on windows later" if host_windows? + quietly { db_tasks.structure_dump configuration, filename } + _(filedata).wont_match %r{\AUSE.*\z} _(filedata).wont_match %r{\AGO.*\z} - _(filedata).must_match %r{email\s+nvarchar\(4000\)} - _(filedata).must_match %r{background1\s+nvarchar\(max\)} - _(filedata).must_match %r{background2\s+text\s+} + _(filedata).must_match %r{\[email\]\s+nvarchar\(4000\)} + _(filedata).must_match %r{\[background1\]\s+nvarchar\(max\)} + _(filedata).must_match %r{\[background2\]\s+text\s+} end it "can load dumped structure" do skip "debug defncopy on windows later" if host_windows? + quietly { db_tasks.structure_dump configuration, filename } - _(filedata).must_match %r{CREATE TABLE dbo\.users} + + _(filedata).must_match %r{CREATE TABLE \[dbo\]\.\[users\]} db_tasks.purge(configuration) _(connection.tables).wont_include "users" db_tasks.load_schema db_config, :sql, filename From 6fa2f251da8e83be353739b84b48fb16407d64d6 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 2 Oct 2025 18:31:42 +0100 Subject: [PATCH 4/4] Fix for Ruby 3.0 and 3.1 --- test/cases/rake_test_sqlserver.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/cases/rake_test_sqlserver.rb b/test/cases/rake_test_sqlserver.rb index ea1074d76..88b93977d 100644 --- a/test/cases/rake_test_sqlserver.rb +++ b/test/cases/rake_test_sqlserver.rb @@ -143,9 +143,9 @@ class SQLServerRakeStructureDumpLoadTest < SQLServerRakeTest _(filedata).wont_match %r{\AUSE.*\z} _(filedata).wont_match %r{\AGO.*\z} - _(filedata).must_match %r{\[email\]\s+nvarchar\(4000\)} - _(filedata).must_match %r{\[background1\]\s+nvarchar\(max\)} - _(filedata).must_match %r{\[background2\]\s+text\s+} + _(filedata).must_match %r{\[?email\]?\s+nvarchar\(4000\)} + _(filedata).must_match %r{\[?background1\]?\s+nvarchar\(max\)} + _(filedata).must_match %r{\[?background2\]?\s+text\s+} end it "can load dumped structure" do @@ -153,7 +153,7 @@ class SQLServerRakeStructureDumpLoadTest < SQLServerRakeTest quietly { db_tasks.structure_dump configuration, filename } - _(filedata).must_match %r{CREATE TABLE \[dbo\]\.\[users\]} + _(filedata).must_match %r{CREATE TABLE \[?dbo\]?\.\[?users\]?} db_tasks.purge(configuration) _(connection.tables).wont_include "users" db_tasks.load_schema db_config, :sql, filename