[PLT-7764] Fix in:channel search when channel name/displayname includes - (#7603)
* fix in:channel search when channel name/displayname includes `-` * fix failing test in PostgreSQL * add lowercase indexes of channel's name and displayname to postgresql, and add unit tests
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
66b07a72ce
Коммит
521e27f4ac
@@ -1028,6 +1028,28 @@ var ignoreUserSearchChar = []string{
|
||||
"*",
|
||||
}
|
||||
|
||||
func generateSearchQuery(searchQuery, term, searchField string, parameters map[string]interface{}, isPostgreSQL bool) string {
|
||||
splitTerms := strings.Fields(term)
|
||||
splitFields := strings.Split(searchField, ", ")
|
||||
|
||||
terms := []string{}
|
||||
for i, term := range splitTerms {
|
||||
fields := []string{}
|
||||
for _, field := range splitFields {
|
||||
if isPostgreSQL {
|
||||
fields = append(fields, fmt.Sprintf("lower(%s) LIKE lower(%s) escape '*' ", field, fmt.Sprintf(":Term%d", i)))
|
||||
} else {
|
||||
fields = append(fields, fmt.Sprintf("%s LIKE %s escape '*' ", field, fmt.Sprintf(":Term%d", i)))
|
||||
}
|
||||
}
|
||||
terms = append(terms, fmt.Sprintf("(%s)", strings.Join(fields, " OR ")))
|
||||
parameters[fmt.Sprintf("Term%d", i)] = fmt.Sprintf("%s%%", term)
|
||||
}
|
||||
|
||||
searchClause := strings.Join(terms, " AND ")
|
||||
return strings.Replace(searchQuery, "SEARCH_CLAUSE", fmt.Sprintf(" AND %s ", searchClause), 1)
|
||||
}
|
||||
|
||||
func (us SqlUserStore) performSearch(searchQuery string, term string, options map[string]bool, parameters map[string]interface{}) store.StoreResult {
|
||||
result := store.StoreResult{}
|
||||
|
||||
@@ -1059,25 +1081,8 @@ func (us SqlUserStore) performSearch(searchQuery string, term string, options ma
|
||||
if term == "" {
|
||||
searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", "", 1)
|
||||
} else {
|
||||
splitTerms := strings.Fields(term)
|
||||
splitFields := strings.Split(searchType, ", ")
|
||||
|
||||
terms := []string{}
|
||||
for i, term := range splitTerms {
|
||||
fields := []string{}
|
||||
for _, field := range splitFields {
|
||||
if us.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
fields = append(fields, fmt.Sprintf("lower(%s) LIKE lower(%s) escape '*' ", field, fmt.Sprintf(":Term%d", i)))
|
||||
} else {
|
||||
fields = append(fields, fmt.Sprintf("%s LIKE %s escape '*' ", field, fmt.Sprintf(":Term%d", i)))
|
||||
}
|
||||
}
|
||||
terms = append(terms, fmt.Sprintf("(%s)", strings.Join(fields, " OR ")))
|
||||
parameters[fmt.Sprintf("Term%d", i)] = fmt.Sprintf("%s%%", term)
|
||||
}
|
||||
|
||||
term := strings.Join(terms, " AND ")
|
||||
searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", fmt.Sprintf(" AND %s ", term), 1)
|
||||
isPostgreSQL := us.DriverName() == model.DATABASE_DRIVER_POSTGRES
|
||||
searchQuery = generateSearchQuery(searchQuery, term, searchType, parameters, isPostgreSQL)
|
||||
}
|
||||
|
||||
var users []*model.User
|
||||
|
||||
Ссылка в новой задаче
Block a user