search: fix invalid username searches returning wrong results.
Partial fix for #4389. * Fix invalid username searches returning all posts instead of no posts. * Fix "user:A user:B" returning results for user:B instead of no results. * Fix "approver:A approver:B" returning results for approver:B instead of no results. * Add support for negated -commenter, -noter, -noteupdater, -upvote, -downvote metatags. * Add support for "any" and "none" values for all username metatags, including negated metatags that didn't support "any" or "none" before. * Change noter:any and commenter:any to include posts with deleted notes or comments. Note that commenter:<username> already included deleted comments before. This is so that commenter:any has the same behavior as commenter:<username>
This commit is contained in:
@@ -145,9 +145,14 @@ class User < ApplicationRecord
|
||||
find_by_name(name).try(:id)
|
||||
end
|
||||
|
||||
# XXX downcasing is the wrong way to do case-insensitive comparison for unicode (should use casefolding).
|
||||
# XXX should casefold instead of lowercasing.
|
||||
# XXX using lower(name) instead of ilike so we can use the index.
|
||||
def name_matches(name)
|
||||
where("lower(name) = ?", normalize_name(name)).limit(1)
|
||||
end
|
||||
|
||||
def find_by_name(name)
|
||||
where_iequals(:name, normalize_name(name)).first
|
||||
name_matches(name).first
|
||||
end
|
||||
|
||||
def normalize_name(name)
|
||||
|
||||
Reference in New Issue
Block a user