fix: adapt ClickHouse log LIKE filters

This commit is contained in:
CaIon
2026-06-27 17:03:25 +08:00
parent 4aee5f7d5a
commit df44a75d53
3 changed files with 81 additions and 20 deletions
+28 -2
View File
@@ -22,15 +22,41 @@ func applyExplicitLogTextFilter(tx *gorm.DB, column string, value string) (*gorm
return tx, nil
}
if strings.Contains(value, "%") {
pattern, err := sanitizeLikePattern(value)
condition, pattern, err := buildLogLikeCondition(column, value)
if err != nil {
return nil, err
}
return tx.Where(column+" LIKE ? ESCAPE '!'", pattern), nil
return tx.Where(condition, pattern), nil
}
return tx.Where(column+" = ?", value), nil
}
func buildLogLikeCondition(column string, value string) (string, string, error) {
if common.UsingLogDatabase(common.DatabaseTypeClickHouse) {
pattern, err := sanitizeClickHouseLikePattern(value)
if err != nil {
return "", "", err
}
return column + " LIKE ?", pattern, nil
}
pattern, err := sanitizeLikePattern(value)
if err != nil {
return "", "", err
}
return column + " LIKE ? ESCAPE '!'", pattern, nil
}
func sanitizeClickHouseLikePattern(input string) (string, error) {
input = strings.ReplaceAll(input, `\`, `\\`)
input = strings.ReplaceAll(input, `_`, `\_`)
if err := validateLikePattern(input); err != nil {
return "", err
}
return input, nil
}
type Log struct {
Id int `json:"id" gorm:"index:idx_created_at_id,priority:2;index:idx_user_id_id,priority:2"`
UserId int `json:"user_id" gorm:"index;index:idx_user_id_id,priority:1"`