From 7c1a54152ed26661d368ad4d3ca7500774b90b45 Mon Sep 17 00:00:00 2001 From: Thomas Steinhausen Date: Wed, 9 Dec 2020 10:18:50 +0100 Subject: [PATCH 1/3] Load mssql jdbc driver with safety checks First check if a jdbc driver is already loaded and then check if driver major version is sufficient. Otherwise require "jdbc/mssql". --- lib/jdbc_mssql_driver_loader.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lib/jdbc_mssql_driver_loader.rb diff --git a/lib/jdbc_mssql_driver_loader.rb b/lib/jdbc_mssql_driver_loader.rb new file mode 100644 index 000000000..2012cf813 --- /dev/null +++ b/lib/jdbc_mssql_driver_loader.rb @@ -0,0 +1,22 @@ +module JdbcMssqlDriverLoader + def self.check_and_maybe_load_driver + driver_name = "com.microsoft.sqlserver.jdbc.SQLServerDriver" + if (Java::JavaClass.for_name(driver_name) rescue nil) + driver = Java::ComMicrosoftSqlserverJdbc::SQLServerDriver.new + which = driver + .getClass().getClassLoader().loadClass(driver_name) + .getProtectionDomain().getCodeSource().getLocation().to_s + warn "You alreday required a mssql jdbc driver (#{which}), skipping gem jdbc-mssql" + + major_version = driver.major_version + required_major_version = 8 + if major_version < required_major_version + raise "MSSQL jdbc driver version is to old (given major version #{major_version} < required major version #{required_major_version})" + end + else + require "jdbc/mssql" + end + end + + check_and_maybe_load_driver +end From f60ee594368f79747cc6092acf08d6c812a6d9f2 Mon Sep 17 00:00:00 2001 From: Thomas Steinhausen Date: Wed, 9 Dec 2020 10:20:46 +0100 Subject: [PATCH 2/3] Update activerecord-jdbcsqlserver-adapter.rb --- lib/activerecord-jdbcsqlserver-adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/activerecord-jdbcsqlserver-adapter.rb b/lib/activerecord-jdbcsqlserver-adapter.rb index bc034c800..b5fad00c3 100644 --- a/lib/activerecord-jdbcsqlserver-adapter.rb +++ b/lib/activerecord-jdbcsqlserver-adapter.rb @@ -5,7 +5,7 @@ require 'active_record/log_subscriber' # Need to make sure this is loaded before we load Core for monkey patching # Load the jar file for the jdbc driver -require 'jdbc/mssql' +require_relative './jdbc_mssql_driver_loader' # Standadard arjdbc functionality require 'arjdbc/abstract/connection_management' From aaa4acd79b3148b2ce61e723338e2e90a688cb3d Mon Sep 17 00:00:00 2001 From: Thomas Steinhausen Date: Wed, 9 Dec 2020 17:15:55 +0100 Subject: [PATCH 3/3] Fix typo --- lib/jdbc_mssql_driver_loader.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jdbc_mssql_driver_loader.rb b/lib/jdbc_mssql_driver_loader.rb index 2012cf813..b63f38b6f 100644 --- a/lib/jdbc_mssql_driver_loader.rb +++ b/lib/jdbc_mssql_driver_loader.rb @@ -6,7 +6,7 @@ def self.check_and_maybe_load_driver which = driver .getClass().getClassLoader().loadClass(driver_name) .getProtectionDomain().getCodeSource().getLocation().to_s - warn "You alreday required a mssql jdbc driver (#{which}), skipping gem jdbc-mssql" + warn "You already required a mssql jdbc driver (#{which}), skipping gem jdbc-mssql" major_version = driver.major_version required_major_version = 8