From 77e1d0116b73cd57d374ccb0086c4dc5eb64a219 Mon Sep 17 00:00:00 2001 From: Sven Felix Oberquelle Date: Tue, 17 Dec 2019 14:51:59 +0100 Subject: [PATCH] Avoid exception when db-connection is lost The tiny_tds lib might return false on execute when the call fails. This caused exceptions when active? is called after the connection was lost. fixes #707 --- .../connection_adapters/sqlserver/database_statements.rb | 3 ++- lib/active_record/connection_adapters/sqlserver_adapter.rb | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/active_record/connection_adapters/sqlserver/database_statements.rb b/lib/active_record/connection_adapters/sqlserver/database_statements.rb index 9df2422e8..133306f4d 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb @@ -281,7 +281,8 @@ def sp_executesql_sql(sql, types, params, name) def raw_connection_do(sql) case @connection_options[:mode] when :dblib - @connection.execute(sql).do + result = @connection.execute(sql) + result == false ? false : result.do end ensure @update_sql = false diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb index 6dbed485e..11c14395b 100644 --- a/lib/active_record/connection_adapters/sqlserver_adapter.rb +++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb @@ -152,8 +152,7 @@ def disable_referential_integrity def active? return false unless @connection - raw_connection_do 'SELECT 1' - true + raw_connection_do('SELECT 1') == 1 rescue *connection_errors false end