From fb8ff3b940e9e672ace5c4889a8c0712ba28bd5d Mon Sep 17 00:00:00 2001 From: Viacheslav Dushin Date: Fri, 25 Oct 2024 12:51:20 +0300 Subject: [PATCH 1/3] adding compatibility_level setting --- .../sqlserver/database_tasks.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb index 1a22b23e6..e98b5b921 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb @@ -8,7 +8,9 @@ def create_database(database, options = {}) name = SQLServer::Utils.extract_identifiers(database) db_options = create_database_options(options) edition_options = create_database_edition_options(options) + compatibility_options = create_database_compatibility_options(options) execute "CREATE DATABASE #{name} #{db_options} #{edition_options}" + execute "ALTER DATABASE #{name} SET #{compatibility_options}" if compatibility_options.present? end def drop_database(database) @@ -31,6 +33,19 @@ def collation private + def create_database_compatibility_options(options = {}) + keys = [:compatibility_level] + copts = @connection_parameters + options = { + compatibility_level: copts[:compatibility_level] + }.merge(options.symbolize_keys).select { |_, v| + v.present? + }.slice(*keys).map { |k, v| + "#{k.to_s.upcase} = #{v}" + }.join(" ") + options + end + def create_database_options(options = {}) keys = [:collate] copts = @connection_parameters From d7dfafcf91b6f7d1b3b86ba8a8d2759025e9d70a Mon Sep 17 00:00:00 2001 From: Viacheslav Dushin Date: Fri, 25 Oct 2024 14:06:05 +0300 Subject: [PATCH 2/3] add compatibility_level level method --- .../connection_adapters/sqlserver/database_tasks.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb index e98b5b921..9e8f43341 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb @@ -27,6 +27,10 @@ def charset select_value "SELECT DATABASEPROPERTYEX(DB_NAME(), 'SqlCharSetName')" end + def compatibility_level + select_value "SELECT compatibility_level FROM sys.databases WHERE name = DB_NAME()" + end + def collation @collation ||= select_value "SELECT DATABASEPROPERTYEX(DB_NAME(), 'Collation')" end From 3bf4e22e5c1bd870662038e109ef036eaaf7345f Mon Sep 17 00:00:00 2001 From: Viacheslav Dushin Date: Fri, 25 Oct 2024 14:32:50 +0300 Subject: [PATCH 3/3] uppercase --- .../connection_adapters/sqlserver/database_tasks.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb index 9e8f43341..fa4be6d1f 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_tasks.rb @@ -28,7 +28,7 @@ def charset end def compatibility_level - select_value "SELECT compatibility_level FROM sys.databases WHERE name = DB_NAME()" + select_value "SELECT COMPATIBILITY_LEVEL FROM SYS.DATABASES WHERE NAME = DB_NAME()" end def collation