From fb8ff3b940e9e672ace5c4889a8c0712ba28bd5d Mon Sep 17 00:00:00 2001
From: Viacheslav Dushin <slava@dushin.pro>
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 <slava@dushin.pro>
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 <slava@dushin.pro>
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