diff --git a/CHANGELOG.md b/CHANGELOG.md index c57d482ef..4bc848f72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,4 +10,6 @@ #### Fixed +- [#1393](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1393) Treat TinyTDS `failed dbsqlsend() function` errors as `ConnectionNotEstablished` so they're retried instead of surfaced as `StatementInvalid`. + Please check [8-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/8-1-stable/CHANGELOG.md) for previous changes. diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb index 586618c75..da8fd8411 100644 --- a/lib/active_record/connection_adapters/sqlserver_adapter.rb +++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb @@ -483,7 +483,7 @@ def type_map def translate_exception(exception, message:, sql:, binds:) case message - when /(SQL Server client is not connected)|(failed to execute statement)/i + when /(SQL Server client is not connected)|(failed to execute statement)|(failed dbsqlsend)/i ConnectionNotEstablished.new(message, connection_pool: @pool) when /(cannot insert duplicate key .* with unique index) | (violation of (unique|primary) key constraint)/i RecordNotUnique.new(message, sql: sql, binds: binds, connection_pool: @pool)