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