From 1e4c7dfbe77b853cd342687fb050183efd8b712b Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 28 May 2015 16:06:22 +1000 Subject: [PATCH] FIX: invalid plan generation when % in query on badge definition UI --- app/services/badge_granter.rb | 3 ++- spec/services/badge_granter_spec.rb | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) 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