From 733f9b4bef621552770ff736eb3108885627f9d8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:51:25 +0000 Subject: [PATCH 1/2] Initial plan From 31d1f4050ca32fa2b7bb5e02a4b3e8469ea6b377 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:04:14 +0000 Subject: [PATCH 2/2] Fix UUID primary key insertion when pk not passed to sql_for_insert In Rails main (commit 3eae6ecea7), `_insert_record` no longer passes the `pk` argument to `connection.insert`, so `pk` is always nil in `sql_for_insert`. Previously `sql_for_insert` would detect pk from `query_requires_identity_insert?` (only works for IDENTITY columns), but UUID and non-identity primary key tables returned false. Fix: When pk is still nil after the identity insert check and `use_output_inserted?` is true, fall back to detecting the table name with `get_table_name` and looking up pk from the schema cache. This ensures `OUTPUT INSERTED.[pk]` is correctly generated for UUID pk tables and trigger tables with UUID pks. --- .../connection_adapters/sqlserver/database_statements.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/sqlserver/database_statements.rb b/lib/active_record/connection_adapters/sqlserver/database_statements.rb index a3fbe0126..69c5cff6c 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb @@ -364,7 +364,12 @@ def newsequentialid_function def sql_for_insert(sql, pk, binds, returning) if pk.nil? table_name = query_requires_identity_insert?(sql) - pk = schema_cache.primary_keys(table_name) + pk = schema_cache.primary_keys(table_name) if table_name + end + + if pk.nil? && use_output_inserted? && !database_prefix_remote_server? + table_name ||= get_table_name(sql) + pk = schema_cache.primary_keys(table_name) if table_name end sql = if pk && use_output_inserted? && !database_prefix_remote_server?