From 12cdda42f0f37ff8a3069f87fd53397170e48322 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 1 Aug 2024 10:56:43 +0100 Subject: [PATCH 1/3] Fix issue with no SQL provided when parsing table name --- .../connection_adapters/sqlserver/schema_statements.rb | 2 ++ test/cases/schema_test_sqlserver.rb | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb index 5606e6b75..ec2e6c756 100644 --- a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb @@ -673,6 +673,8 @@ def get_table_name(sql) # Parses the raw table name that is used in the SQL. Table name could include database/schema/etc. def get_raw_table_name(sql) + return nil if sql.blank? + s = sql.gsub(/^\s*EXEC sp_executesql N'/i, "") if s.match?(/^\s*INSERT INTO.*/i) diff --git a/test/cases/schema_test_sqlserver.rb b/test/cases/schema_test_sqlserver.rb index 1751af622..255c58711 100644 --- a/test/cases/schema_test_sqlserver.rb +++ b/test/cases/schema_test_sqlserver.rb @@ -66,6 +66,10 @@ class SchemaTestSQLServer < ActiveRecord::TestCase it do assert_equal "[WITH - SPACES$DOLLAR]", connection.send(:get_raw_table_name, "SELECT id FROM [WITH - SPACES$DOLLAR]") end + + it do + assert_nil connection.send(:get_raw_table_name, nil) + end end describe 'INSERT statements' do From c5d3612cfef29d9d59f2be0c2e1d0fab65d37b54 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 1 Aug 2024 15:43:55 +0100 Subject: [PATCH 2/3] Cleanup --- .../connection_adapters/sqlserver/schema_statements.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb index ec2e6c756..7af3cae36 100644 --- a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb @@ -673,7 +673,7 @@ def get_table_name(sql) # Parses the raw table name that is used in the SQL. Table name could include database/schema/etc. def get_raw_table_name(sql) - return nil if sql.blank? + return if sql.blank? s = sql.gsub(/^\s*EXEC sp_executesql N'/i, "") From 2aed6f7f9c297fe84c1b2226b9107ad844bf207f Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Thu, 1 Aug 2024 16:09:54 +0100 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5c5544f3..ce6e97eb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## Unreleased + +#### Fixed + +- [#1210](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1210) Handle blank SQL when parsing table name + ## v7.1.6 #### Fixed