From 9737938a4abb91f794621054288f85e172035681 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Thu, 8 Nov 2018 12:28:50 +0800 Subject: [PATCH] Add option to skip tabels when using `DbHelper.remap`. --- lib/db_helper.rb | 5 ++++- spec/lib/db_helper_spec.rb | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/db_helper.rb b/lib/db_helper.rb index 15bed3c2579..04c9f8d3fb3 100644 --- a/lib/db_helper.rb +++ b/lib/db_helper.rb @@ -8,7 +8,7 @@ class DbHelper AND (data_type LIKE 'char%' OR data_type LIKE 'text%') ORDER BY table_name, column_name" - def self.remap(from, to, anchor_left = false, anchor_right = false) + def self.remap(from, to, anchor_left: false, anchor_right: false, exclude_tables: []) results = DB.query(REMAP_SQL).to_a like = "#{anchor_left ? '' : "%"}#{from}#{anchor_right ? '' : "%"}" @@ -19,7 +19,10 @@ class DbHelper remappable_columns[result.table_name] << result.column_name end + exclude_tables = exclude_tables.map(&:to_s) + remappable_columns.each do |table_name, column_names| + next if exclude_tables.include?(table_name) set_clause = column_names.map do |column_name| "#{column_name} = REPLACE(#{column_name}, :from, :to)" end.join(", ") diff --git a/spec/lib/db_helper_spec.rb b/spec/lib/db_helper_spec.rb index a99059591b4..e9d796257cf 100644 --- a/spec/lib/db_helper_spec.rb +++ b/spec/lib/db_helper_spec.rb @@ -32,5 +32,13 @@ RSpec.describe DbHelper do expect(badge_attributes.except("query")) .to eq(badge.attributes.except("query")) end + + it 'allows tables to be excluded from scanning' do + post = Fabricate(:post, cooked: "test") + + DbHelper.remap("test", "something else", exclude_tables: %w{posts}) + + expect(post.reload.cooked).to eq('test') + end end end