diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb index ed509cc1e..3d00e10ed 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb @@ -23,7 +23,7 @@ def unprepare_sqlserver_statement(sql) executesql_args = executesql.split(', ') found_args = executesql_args.reject! { |arg| arg =~ SQLSERVER_PARAM_MATCHER } executesql_args.pop if found_args && executesql_args.many? - executesql = executesql_args.join(', ').strip.match(/N'(.*)'/)[1] + executesql = executesql_args.join(', ').strip.match(/N'(.*)'/m)[1] Utils.unquote_string(executesql) else sql diff --git a/test/cases/showplan_test_sqlserver.rb b/test/cases/showplan_test_sqlserver.rb index 2016223a3..6c5a22ac5 100644 --- a/test/cases/showplan_test_sqlserver.rb +++ b/test/cases/showplan_test_sqlserver.rb @@ -12,6 +12,12 @@ class ShowplanTestSqlserver < ActiveRecord::TestCase assert plan.starts_with?("EXPLAIN for: SELECT [cars].* FROM [cars] WHERE [cars].[id] = 1") assert plan.include?("Clustered Index Seek"), 'make sure we do not showplan the sp_executesql' end + + should 'from multiline statement' do + plan = Car.where("\n id = 1 \n").explain + assert plan.starts_with?("EXPLAIN for: SELECT [cars].* FROM [cars] WHERE (\n id = 1 \n)") + assert plan.include?("Clustered Index Seek"), 'make sure we do not showplan the sp_executesql' + end should 'from prepared statement' do plan = capture_logger do