fix: adapt ClickHouse log LIKE filters
This commit is contained in:
+28
-2
@@ -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"`
|
||||
|
||||
Reference in New Issue
Block a user