From f5b71436ffbdcee3ca7f569490bb298b68bc8ea0 Mon Sep 17 00:00:00 2001
From: Joel Fouse <joel.fouse@smarsh.com>
Date: Sat, 21 Dec 2024 14:03:12 -0500
Subject: [PATCH 1/2] Fix pp_sql frozen string handling

- When PpSql.rewrite_to_sql_method is false,
  the pp_sql method would fail with a frozen string.
  This is fixed; test case included
- Added a couple other test cases to clarify/confirm
  the rewrite_to_sql_method flag
- Also cleaned up a duplicate dependency version
  in gemspec
---
 lib/pp_sql.rb                    |  2 +-
 pp_sql.gemspec                   |  2 +-
 test/pp_sql_activerecord_test.rb | 30 ++++++++++++++++++++++++++++--
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/lib/pp_sql.rb b/lib/pp_sql.rb
index 93e3868..9cb5e70 100644
--- a/lib/pp_sql.rb
+++ b/lib/pp_sql.rb
@@ -41,7 +41,7 @@ def pp_sql
         puts to_sql
       else
         extend Formatter
-        puts _sql_formatter.format(to_sql.to_s)
+        puts _sql_formatter.format(to_sql.dup)
       end
     end
   end
diff --git a/pp_sql.gemspec b/pp_sql.gemspec
index 5e2874f..16d168f 100644
--- a/pp_sql.gemspec
+++ b/pp_sql.gemspec
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
   s.required_ruby_version = '>= 3.1.0'
 
   s.add_dependency 'activerecord'
-  s.add_dependency 'anbt-sql-formatter', '~> 0.1.0', '~> 0.1.0'
+  s.add_dependency 'anbt-sql-formatter', '~> 0.1.0'
 
   s.add_development_dependency 'minitest'
   s.add_development_dependency 'minitest-focus'
diff --git a/test/pp_sql_activerecord_test.rb b/test/pp_sql_activerecord_test.rb
index 68027e3..b3f5982 100644
--- a/test/pp_sql_activerecord_test.rb
+++ b/test/pp_sql_activerecord_test.rb
@@ -25,7 +25,7 @@ class User < ActiveRecord::Base; end
 describe PpSql do
   after { clear_logs! && set_default_config! }
 
-  it 'ActiveRecord with formatted output' do
+  it 'ActiveRecord logs with formatted output' do
     User.create
     assert(LOGGER.string.lines.detect { |line| line =~ /INTO\n/ })
     clear_logs!
@@ -33,7 +33,7 @@ class User < ActiveRecord::Base; end
     assert_equal LOGGER.string.lines.count, 6
   end
 
-  it 'ActiveRecord with default output' do
+  it 'ActiveRecord logs with default output' do
     PpSql.add_rails_logger_formatting = false
     User.create
     clear_logs!
@@ -46,6 +46,21 @@ class User < ActiveRecord::Base; end
     assert_equal User.all.to_sql, "SELECT\n    \"users\" . *\n  FROM\n    \"users\""
   end
 
+  it 'to_sql with default output' do
+    PpSql.rewrite_to_sql_method = false
+    User.create
+    assert_equal User.all.to_sql.lines.count, 1
+  end
+
+  it 'to_sql with default output but formatted logs' do
+    PpSql.rewrite_to_sql_method = false
+    User.create
+    assert_equal User.all.to_sql.lines.count, 1
+    clear_logs!
+    User.first
+    assert_equal LOGGER.string.lines.count, 6
+  end
+
   it 'pp_sql formats a relation properly' do
     User.create
     out, = capture_io do
@@ -54,6 +69,16 @@ class User < ActiveRecord::Base; end
     assert_equal out, "SELECT\n    \"users\" . *\n  FROM\n    \"users\"\n"
   end
 
+  it 'pp_sql formats frozen strings properly' do
+    PpSql.rewrite_to_sql_method = false
+    User.create
+    frozen_clause = 'id > 0'.freeze
+    out, = capture_io do
+      User.all.where(frozen_clause).pp_sql
+    end
+    assert_equal out.lines.count, 8
+  end
+
   private
 
   def clear_logs!
@@ -61,6 +86,7 @@ def clear_logs!
   end
 
   def set_default_config!
+    PpSql.rewrite_to_sql_method = true
     PpSql.add_rails_logger_formatting = true
   end
 end

From f791e8f69823c8200b34eb377454b9a34ff78649 Mon Sep 17 00:00:00 2001
From: Joel Fouse <joel.fouse@smarsh.com>
Date: Sat, 21 Dec 2024 14:44:55 -0500
Subject: [PATCH 2/2] missed the frozen_string_literal at the top of the test
 file

---
 test/pp_sql_activerecord_test.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/pp_sql_activerecord_test.rb b/test/pp_sql_activerecord_test.rb
index b3f5982..46834d2 100644
--- a/test/pp_sql_activerecord_test.rb
+++ b/test/pp_sql_activerecord_test.rb
@@ -72,7 +72,7 @@ class User < ActiveRecord::Base; end
   it 'pp_sql formats frozen strings properly' do
     PpSql.rewrite_to_sql_method = false
     User.create
-    frozen_clause = 'id > 0'.freeze
+    frozen_clause = 'id > 0'
     out, = capture_io do
       User.all.where(frozen_clause).pp_sql
     end