FIX: use sql_fragment instead of sanitize_sql_array (#11460)

This is a follow up to comment under this PR https://github.com/discourse/discourse/pull/11441

Sam suggested using sql_fragment instead of sanitize_sql_array
This commit is contained in:
Krzysztof Kotlarek
2020-12-11 10:56:26 +11:00
committed by GitHub
parent aa0d4ea764
commit 3ea4f36f26
3 changed files with 8 additions and 8 deletions

View File

@ -20,12 +20,12 @@ class ThemeField < ActiveRecord::Base
return none unless locale_codes.present? return none unless locale_codes.present?
where(target_id: Theme.targets[:translations], name: locale_codes) where(target_id: Theme.targets[:translations], name: locale_codes)
.joins(self.sanitize_sql_array([ .joins(DB.sql_fragment(
"JOIN ( "JOIN (
SELECT * FROM (VALUES #{locale_codes.map { "(?)" }.join(",")}) as Y (locale_code, locale_sort_column) SELECT * FROM (VALUES #{locale_codes.map { "(?)" }.join(",")}) as Y (locale_code, locale_sort_column)
) as Y ON Y.locale_code = theme_fields.name", ) as Y ON Y.locale_code = theme_fields.name",
*locale_codes.map.with_index { |code, index| [code, index] } *locale_codes.map.with_index { |code, index| [code, index] }
])) ))
.order("Y.locale_sort_column") .order("Y.locale_sort_column")
} }

View File

@ -636,11 +636,11 @@ class Topic < ActiveRecord::Base
if raw.present? if raw.present?
similars similars
.select(sanitize_sql_array(["topics.*, similarity(topics.title, :title) + similarity(p.raw, :raw) AS similarity, p.cooked AS blurb", title: title, raw: raw])) .select(DB.sql_fragment("topics.*, similarity(topics.title, :title) + similarity(p.raw, :raw) AS similarity, p.cooked AS blurb", title: title, raw: raw))
.where("similarity(topics.title, :title) + similarity(p.raw, :raw) > 0.2", title: title, raw: raw) .where("similarity(topics.title, :title) + similarity(p.raw, :raw) > 0.2", title: title, raw: raw)
else else
similars similars
.select(sanitize_sql_array(["topics.*, similarity(topics.title, :title) AS similarity, p.cooked AS blurb", title: title])) .select(DB.sql_fragment("topics.*, similarity(topics.title, :title) AS similarity, p.cooked AS blurb", title: title))
.where("similarity(topics.title, :title) > 0.2", title: title) .where("similarity(topics.title, :title) > 0.2", title: title)
end end
end end

View File

@ -146,7 +146,7 @@ class TopicQuery
# strip out users in groups you already belong to # strip out users in groups you already belong to
target_users = target_users target_users = target_users
.joins("LEFT JOIN group_users gu ON gu.user_id = topic_allowed_users.user_id AND #{ActiveRecord::Base.sanitize_sql_array(['gu.group_id IN (?)', my_group_ids])}") .joins("LEFT JOIN group_users gu ON gu.user_id = topic_allowed_users.user_id AND #{DB.sql_fragment('gu.group_id IN (?)', my_group_ids)}")
.where('gu.group_id IS NULL') .where('gu.group_id IS NULL')
end end
@ -1014,7 +1014,7 @@ class TopicQuery
messages.joins(" messages.joins("
LEFT JOIN topic_allowed_users ta2 LEFT JOIN topic_allowed_users ta2
ON topics.id = ta2.topic_id ON topics.id = ta2.topic_id
AND #{ActiveRecord::Base.sanitize_sql_array(['ta2.user_id IN (?)', user_ids])} AND #{DB.sql_fragment('ta2.user_id IN (?)', user_ids)}
") ")
end end
@ -1023,7 +1023,7 @@ class TopicQuery
messages.joins(" messages.joins("
LEFT JOIN topic_allowed_groups tg2 LEFT JOIN topic_allowed_groups tg2
ON topics.id = tg2.topic_id ON topics.id = tg2.topic_id
AND #{ActiveRecord::Base.sanitize_sql_array(['tg2.group_id IN (?)', group_ids])} AND #{DB.sql_fragment('tg2.group_id IN (?)', group_ids)}
") ")
end end
@ -1046,7 +1046,7 @@ class TopicQuery
LEFT JOIN group_users gu LEFT JOIN group_users gu
ON gu.user_id = #{@user.id.to_i} ON gu.user_id = #{@user.id.to_i}
AND gu.group_id = _tg.group_id AND gu.group_id = _tg.group_id
WHERE #{ActiveRecord::Base.sanitize_sql_array(['gu.group_id IN (?)', group_ids])} WHERE #{DB.sql_fragment('gu.group_id IN (?)', group_ids)}
) tg ON topics.id = tg.topic_id ) tg ON topics.id = tg.topic_id
") ")
.where("tg.topic_id IS NOT NULL") .where("tg.topic_id IS NOT NULL")