diff --git a/app/services/badge_granter.rb b/app/services/badge_granter.rb index b34b6543beb..670ada829eb 100644 --- a/app/services/badge_granter.rb +++ b/app/services/badge_granter.rb @@ -192,7 +192,8 @@ class BadgeGranter end query_plan = nil - query_plan = ActiveRecord::Base.exec_sql("EXPLAIN #{sql}", params) if opts[:explain] + # HACK: active record is weird, force it to go down the sanitization path that cares not for % stuff + query_plan = ActiveRecord::Base.exec_sql("EXPLAIN #{sql} /*:backfill*/", params) if opts[:explain] sample = SqlBuilder.map_exec(OpenStruct, grants_sql, params).map(&:to_h) diff --git a/spec/services/badge_granter_spec.rb b/spec/services/badge_granter_spec.rb index 37e5caec18f..8eec7f2b16b 100644 --- a/spec/services/badge_granter_spec.rb +++ b/spec/services/badge_granter_spec.rb @@ -38,8 +38,10 @@ describe BadgeGranter do describe 'preview' do it 'can correctly preview' do Fabricate(:user, email: 'sam@gmail.com') - result = BadgeGranter.preview('select id user_id, null post_id, created_at granted_at from users where email like \'%gmail.com\'') + result = BadgeGranter.preview('select id user_id, null post_id, created_at granted_at from users + where email like \'%gmail.com\'', explain: true) expect(result[:grant_count]).to eq(1) + expect(result[:query_plan]).to be_present end end