Skip to content

Commit 74bc82b

Browse files
author
Christoph Ritler
committed
bug fix: multiline queries do not raise error when explained
Statement: == "SELECT [cars].* FROM [cars] WHERE (\n id = 1 \n)" Exception: == test: Unprepare previously prepared SQL should from multiline statement. (ShowplanTestSqlserver): NoMethodError: undefined method `[]' for nil:NilClass /Users/cr/git_repositories/github/activerecord-sqlserver-adapter/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb:26:in `unprepare_sqlserver_statement' /Users/cr/git_repositories/github/activerecord-sqlserver-adapter/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb:11:in `block in exec_explain' /Users/cr/git_repositories/github/activerecord-sqlserver-adapter/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb:11:in `map' /Users/cr/git_repositories/github/activerecord-sqlserver-adapter/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb:11:in `exec_explain' /Users/cr/.rvm/gems/ruby-1.9.3-p194@sqlserver-adapter/bundler/gems/rails-0ff738a6f491/activerecord/lib/active_record/relation.rb:147:in `explain' test/cases/showplan_test_sqlserver.rb:17:in `block (2 levels) in <class:ShowplanTestSqlserver>' /Users/cr/.rvm/gems/ruby-1.9.3-p194@sqlserver-adapter/gems/shoulda-2.10.3/lib/shoulda/context.rb:362:in `call' /Users/cr/.rvm/gems/ruby-1.9.3-p194@sqlserver-adapter/gems/shoulda-2.10.3/lib/shoulda/context.rb:362:in `block in create_test_from_should_hash' /Users/cr/.rvm/gems/ruby-1.9.3-p194@sqlserver-adapter/gems/mocha-0.9.8/lib/mocha/integration/mini_test/version_131_and_above.rb:26:in `run'
1 parent 03d08a4 commit 74bc82b

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def unprepare_sqlserver_statement(sql)
2323
executesql_args = executesql.split(', ')
2424
found_args = executesql_args.reject! { |arg| arg =~ SQLSERVER_PARAM_MATCHER }
2525
executesql_args.pop if found_args && executesql_args.many?
26-
executesql = executesql_args.join(', ').strip.match(/N'(.*)'/)[1]
26+
executesql = executesql_args.join(', ').strip.match(/N'(.*)'/m)[1]
2727
Utils.unquote_string(executesql)
2828
else
2929
sql

test/cases/showplan_test_sqlserver.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ class ShowplanTestSqlserver < ActiveRecord::TestCase
1212
assert plan.starts_with?("EXPLAIN for: SELECT [cars].* FROM [cars] WHERE [cars].[id] = 1")
1313
assert plan.include?("Clustered Index Seek"), 'make sure we do not showplan the sp_executesql'
1414
end
15+
16+
should 'from multiline statement' do
17+
plan = Car.where("\n id = 1 \n").explain
18+
assert plan.starts_with?("EXPLAIN for: SELECT [cars].* FROM [cars] WHERE (\n id = 1 \n)")
19+
assert plan.include?("Clustered Index Seek"), 'make sure we do not showplan the sp_executesql'
20+
end
1521

1622
should 'from prepared statement' do
1723
plan = capture_logger do

0 commit comments

Comments
 (0)