From 486c88255d8270a4f72207e22c7611b8af0dc23b Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 11:05:27 +0100 Subject: [PATCH 1/8] Add Ruby 4.0 to the cross-compile list --- .github/workflows/ci.yml | 7 +++++++ CHANGELOG.md | 4 ++++ tasks/native_gem.rake | 2 +- tiny_tds.gemspec | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d48fb47..1fd04837 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -179,6 +179,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" name: install-windows-ucrt runs-on: windows-latest @@ -233,6 +234,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" name: test-windows-ucrt runs-on: windows-latest @@ -301,6 +303,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" name: install-windows-native runs-on: windows-latest @@ -359,6 +362,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" include: - platform: x86_64-linux-musl @@ -420,6 +424,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" runs-on: ubuntu-22.04 steps: @@ -482,6 +487,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" name: install-linux-native runs-on: ubuntu-22.04 @@ -528,6 +534,7 @@ jobs: - "3.2" - "3.3" - "3.4" + - "4.0" name: install-macos-m1 runs-on: macos-14 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ea8c4c5..dc0ef786 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## (unreleased) +## 3.4.0 + +* Add Ruby 4.0 to the cross compile list + ## 3.3.0 * Use freetds v1.5.4 and OpenSSL v3.5.2 for Windows and Linux builds. diff --git a/tasks/native_gem.rake b/tasks/native_gem.rake index f35cb661..da7c8809 100644 --- a/tasks/native_gem.rake +++ b/tasks/native_gem.rake @@ -7,7 +7,7 @@ CrossLibraries.each do |xlib| RakeCompilerDock.sh <<-EOT, platform: platform bundle install && - rake native:#{platform} pkg/#{SPEC.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=#{RakeCompilerDock.set_ruby_cc_version("~> 2.7", "~> 3.0")} MAKEFLAGS="V=1" + rake native:#{platform} pkg/#{SPEC.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=#{RakeCompilerDock.set_ruby_cc_version("~> 2.7", "~> 3.0", "~> 4.0")} MAKEFLAGS="V=1" EOT end diff --git a/tiny_tds.gemspec b/tiny_tds.gemspec index 9ec0a05d..620a43eb 100644 --- a/tiny_tds.gemspec +++ b/tiny_tds.gemspec @@ -22,7 +22,7 @@ Gem::Specification.new do |s| s.add_development_dependency "mini_portile2", "~> 2.8.0" s.add_development_dependency "rake", "~> 13.0.0" s.add_development_dependency "rake-compiler", "~> 1.2" - s.add_development_dependency "rake-compiler-dock", "~> 1.9.1" + s.add_development_dependency "rake-compiler-dock", "~> 1.11.0" s.add_development_dependency "minitest", "~> 5.25" s.add_development_dependency "minitest-reporters", "~> 1.6.1" s.add_development_dependency "connection_pool", "~> 2.2.0" From efe0fe753b77d555e2e5aabf4eb66a617d07c531 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 11:09:00 +0100 Subject: [PATCH 2/8] No longer ship a precompiled gem for Ruby 2.7 --- .github/workflows/ci.yml | 4 ---- CHANGELOG.md | 2 ++ tasks/native_gem.rake | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1fd04837..c98156f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,7 +60,6 @@ jobs: fail-fast: false matrix: ruby-version: - - "2.7" - "3.0" name: install-windows-mingw @@ -112,7 +111,6 @@ jobs: - 2019 - 2022 ruby-version: - - "2.7" - "3.0" name: test-windows-mingw @@ -356,7 +354,6 @@ jobs: - "aarch64-linux-musl" ruby-version: - - "2.7" - "3.0" - "3.1" - "3.2" @@ -418,7 +415,6 @@ jobs: - 2022 ruby-version: - - "2.7" - "3.0" - "3.1" - "3.2" diff --git a/CHANGELOG.md b/CHANGELOG.md index dc0ef786..4c5d0190 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## 3.4.0 * Add Ruby 4.0 to the cross compile list +* No longer ship a precompiled Gem for Ruby 2.7 + * This is due to an [upstream change](https://github.com/rake-compiler/rake-compiler-dock/releases/tag/v1.11.0). Users on Windows and Linux on Ruby v2.7 are advised to either upgrade or install FreeTDS manually. ## 3.3.0 diff --git a/tasks/native_gem.rake b/tasks/native_gem.rake index da7c8809..f3c59baa 100644 --- a/tasks/native_gem.rake +++ b/tasks/native_gem.rake @@ -7,7 +7,7 @@ CrossLibraries.each do |xlib| RakeCompilerDock.sh <<-EOT, platform: platform bundle install && - rake native:#{platform} pkg/#{SPEC.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=#{RakeCompilerDock.set_ruby_cc_version("~> 2.7", "~> 3.0", "~> 4.0")} MAKEFLAGS="V=1" + rake native:#{platform} pkg/#{SPEC.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=#{RakeCompilerDock.set_ruby_cc_version("~> 3.0", "~> 4.0")} MAKEFLAGS="V=1" EOT end From 5fdf69f8004f78827e18dedf8446c6a38afcecc8 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 11:15:42 +0100 Subject: [PATCH 3/8] Update OpenSSL and FreeTDS in precompiled gem --- CHANGELOG.md | 1 + ext/tiny_tds/extconsts.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c5d0190..6f9df4d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Add Ruby 4.0 to the cross compile list * No longer ship a precompiled Gem for Ruby 2.7 * This is due to an [upstream change](https://github.com/rake-compiler/rake-compiler-dock/releases/tag/v1.11.0). Users on Windows and Linux on Ruby v2.7 are advised to either upgrade or install FreeTDS manually. +* Use freetds v1.5.10 and OpenSSL v3.6.0 for Windows and Linux builds. ## 3.3.0 diff --git a/ext/tiny_tds/extconsts.rb b/ext/tiny_tds/extconsts.rb index 8e7417f9..4721c22c 100644 --- a/ext/tiny_tds/extconsts.rb +++ b/ext/tiny_tds/extconsts.rb @@ -1,8 +1,8 @@ ICONV_VERSION = ENV["TINYTDS_ICONV_VERSION"] || "1.18" ICONV_SOURCE_URI = "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-#{ICONV_VERSION}.tar.gz" -OPENSSL_VERSION = ENV["TINYTDS_OPENSSL_VERSION"] || "3.5.2" +OPENSSL_VERSION = ENV["TINYTDS_OPENSSL_VERSION"] || "3.6.0" OPENSSL_SOURCE_URI = "https://www.openssl.org/source/openssl-#{OPENSSL_VERSION}.tar.gz" -FREETDS_VERSION = ENV["TINYTDS_FREETDS_VERSION"] || "1.5.4" +FREETDS_VERSION = ENV["TINYTDS_FREETDS_VERSION"] || "1.5.10" FREETDS_SOURCE_URI = "http://www.freetds.org/files/stable/freetds-#{FREETDS_VERSION}.tar.bz2" From 0683abed39d16fc31159a07a06f2461c6c2678c9 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 11:23:23 +0100 Subject: [PATCH 4/8] Relax bigdecimal version requirement --- CHANGELOG.md | 1 + tiny_tds.gemspec | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f9df4d5..373e3695 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * No longer ship a precompiled Gem for Ruby 2.7 * This is due to an [upstream change](https://github.com/rake-compiler/rake-compiler-dock/releases/tag/v1.11.0). Users on Windows and Linux on Ruby v2.7 are advised to either upgrade or install FreeTDS manually. * Use freetds v1.5.10 and OpenSSL v3.6.0 for Windows and Linux builds. +* Lower `bigdecimal` requirement to `>= 2.0.0` (was 3.0 only) to allow `bigdecimal` 4.0 on Ruby 4.0. Closes #601. ## 3.3.0 diff --git a/tiny_tds.gemspec b/tiny_tds.gemspec index 620a43eb..17ed2b3c 100644 --- a/tiny_tds.gemspec +++ b/tiny_tds.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.license = "MIT" s.required_ruby_version = ">= 2.7.0" s.metadata["msys2_mingw_dependencies"] = "freetds" - s.add_dependency "bigdecimal", "~> 3" + s.add_dependency "bigdecimal", ">= 2.0.0" s.add_development_dependency "mini_portile2", "~> 2.8.0" s.add_development_dependency "rake", "~> 13.0.0" s.add_development_dependency "rake-compiler", "~> 1.2" From 7fa8d77d3285ed848e6fe028682b94e017f60c05 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 11:33:34 +0100 Subject: [PATCH 5/8] Bump Rake to v13.2.0 This removes the `ostruct` dependency from `rake` itself --- tiny_tds.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiny_tds.gemspec b/tiny_tds.gemspec index 17ed2b3c..1807718a 100644 --- a/tiny_tds.gemspec +++ b/tiny_tds.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |s| s.metadata["msys2_mingw_dependencies"] = "freetds" s.add_dependency "bigdecimal", ">= 2.0.0" s.add_development_dependency "mini_portile2", "~> 2.8.0" - s.add_development_dependency "rake", "~> 13.0.0" + s.add_development_dependency "rake", "~> 13.2.0" s.add_development_dependency "rake-compiler", "~> 1.2" s.add_development_dependency "rake-compiler-dock", "~> 1.11.0" s.add_development_dependency "minitest", "~> 5.25" From 1005eabedd348740b4ef5162913411d983337eba Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 14:29:47 +0100 Subject: [PATCH 6/8] Add `ostruct` for Ruby v4.0 --- tiny_tds.gemspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tiny_tds.gemspec b/tiny_tds.gemspec index 1807718a..890d04ce 100644 --- a/tiny_tds.gemspec +++ b/tiny_tds.gemspec @@ -28,4 +28,6 @@ Gem::Specification.new do |s| s.add_development_dependency "connection_pool", "~> 2.2.0" s.add_development_dependency "toxiproxy", "~> 2.0.0" s.add_development_dependency "standard", "~> 1.31.0" + # ostruct can be dropped when updating to Rubocop 1.65+ + s.add_development_dependency "ostruct" end From 8e71dc8771b4fd5fd3076d41864836b81aaf4013 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Fri, 26 Dec 2025 18:02:00 +0100 Subject: [PATCH 7/8] Remove dependency on `logger` --- test/thread_test.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/thread_test.rb b/test/thread_test.rb index c66ced94..692030c9 100644 --- a/test/thread_test.rb +++ b/test/thread_test.rb @@ -1,12 +1,9 @@ require "test_helper" -require "logger" require "benchmark" class ThreadTest < TinyTds::TestCase describe "Threaded SELECT queries" do before do - @logger = Logger.new $stdout - @logger.level = Logger::WARN @poolsize = 4 @numthreads = 10 @query = "waitfor delay '00:00:01'" @@ -22,19 +19,14 @@ class ThreadTest < TinyTds::TestCase x = Benchmark.realtime do threads = [] @numthreads.times do |i| - start = Time.new threads << Thread.new do - ts = Time.new @pool.with { |c| c.execute(@query).do } - te = Time.new - @logger.info "Thread #{i} finished in #{te - ts} thread seconds, #{te - start} real seconds" end end threads.each { |t| t.join } end assert x < @numthreads, "#{x} is not faster than #{@numthreads} seconds" mintime = (1.0 * @numthreads / @poolsize).ceil - @logger.info "#{@numthreads} queries on #{@poolsize} threads: #{x} sec. Minimum time: #{mintime} sec." assert x > mintime, "#{x} is not slower than #{mintime} seconds" end From 4f805635c48baebac270d255c6505c8359843577 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Sat, 27 Dec 2025 15:06:12 +0100 Subject: [PATCH 8/8] Add `benchmark` for Ruby v4.0 --- tiny_tds.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/tiny_tds.gemspec b/tiny_tds.gemspec index 890d04ce..cf101402 100644 --- a/tiny_tds.gemspec +++ b/tiny_tds.gemspec @@ -30,4 +30,5 @@ Gem::Specification.new do |s| s.add_development_dependency "standard", "~> 1.31.0" # ostruct can be dropped when updating to Rubocop 1.65+ s.add_development_dependency "ostruct" + s.add_development_dependency "benchmark" end