From 7a856080f0c8b7373efd25c3bf93d219af5c014d Mon Sep 17 00:00:00 2001 From: Wanderson Policarpo Date: Tue, 23 Jun 2020 11:35:48 +0100 Subject: [PATCH] Handle TinyTDS returning `false` as result of a query Backport #818 to v5.2. --- .../connection_adapters/sqlserver/database_statements.rb | 9 ++++++++- 1 file changed, 8 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 6f543a59a..f07580dd6 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb @@ -318,7 +318,14 @@ 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) + + # TinyTDS returns false instead of raising an exception if connection fails. + # Getting around this by raising an exception ourselves while this PR + # https://github.com/rails-sqlserver/tiny_tds/pull/469 is not released. + raise TinyTds::Error, "failed to execute statement" if result.is_a?(FalseClass) + + result.do end ensure @update_sql = false