mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +03:00
Add penis length and circumcision stats to performers. (#3627)
* Add penis length stat to performers. * Modified the UI to display and edit the stat. * Added the ability to filter floats to allow filtering by penis length. * Add circumcision stat to performer. * Refactor enum filtering * Change boolean filter to radio buttons * Return null for empty enum values --------- Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
@@ -159,6 +159,22 @@ func getStringSearchClause(columns []string, q string, not bool) sqlClause {
|
||||
return makeClause("("+likes+")", args...)
|
||||
}
|
||||
|
||||
func getEnumSearchClause(column string, enumVals []string, not bool) sqlClause {
|
||||
var args []interface{}
|
||||
|
||||
notStr := ""
|
||||
if not {
|
||||
notStr = " NOT"
|
||||
}
|
||||
|
||||
clause := fmt.Sprintf("(%s%s IN %s)", column, notStr, getInBinding(len(enumVals)))
|
||||
for _, enumVal := range enumVals {
|
||||
args = append(args, enumVal)
|
||||
}
|
||||
|
||||
return makeClause(clause, args...)
|
||||
}
|
||||
|
||||
func getInBinding(length int) string {
|
||||
bindings := strings.Repeat("?, ", length)
|
||||
bindings = strings.TrimRight(bindings, ", ")
|
||||
@@ -175,8 +191,26 @@ func getIntWhereClause(column string, modifier models.CriterionModifier, value i
|
||||
upper = &u
|
||||
}
|
||||
|
||||
args := []interface{}{value}
|
||||
betweenArgs := []interface{}{value, *upper}
|
||||
args := []interface{}{value, *upper}
|
||||
return getNumericWhereClause(column, modifier, args)
|
||||
}
|
||||
|
||||
func getFloatCriterionWhereClause(column string, input models.FloatCriterionInput) (string, []interface{}) {
|
||||
return getFloatWhereClause(column, input.Modifier, input.Value, input.Value2)
|
||||
}
|
||||
|
||||
func getFloatWhereClause(column string, modifier models.CriterionModifier, value float64, upper *float64) (string, []interface{}) {
|
||||
if upper == nil {
|
||||
u := 0.0
|
||||
upper = &u
|
||||
}
|
||||
|
||||
args := []interface{}{value, *upper}
|
||||
return getNumericWhereClause(column, modifier, args)
|
||||
}
|
||||
|
||||
func getNumericWhereClause(column string, modifier models.CriterionModifier, args []interface{}) (string, []interface{}) {
|
||||
singleArgs := args[0:1]
|
||||
|
||||
switch modifier {
|
||||
case models.CriterionModifierIsNull:
|
||||
@@ -184,20 +218,20 @@ func getIntWhereClause(column string, modifier models.CriterionModifier, value i
|
||||
case models.CriterionModifierNotNull:
|
||||
return fmt.Sprintf("%s IS NOT NULL", column), nil
|
||||
case models.CriterionModifierEquals:
|
||||
return fmt.Sprintf("%s = ?", column), args
|
||||
return fmt.Sprintf("%s = ?", column), singleArgs
|
||||
case models.CriterionModifierNotEquals:
|
||||
return fmt.Sprintf("%s != ?", column), args
|
||||
return fmt.Sprintf("%s != ?", column), singleArgs
|
||||
case models.CriterionModifierBetween:
|
||||
return fmt.Sprintf("%s BETWEEN ? AND ?", column), betweenArgs
|
||||
return fmt.Sprintf("%s BETWEEN ? AND ?", column), args
|
||||
case models.CriterionModifierNotBetween:
|
||||
return fmt.Sprintf("%s NOT BETWEEN ? AND ?", column), betweenArgs
|
||||
return fmt.Sprintf("%s NOT BETWEEN ? AND ?", column), args
|
||||
case models.CriterionModifierLessThan:
|
||||
return fmt.Sprintf("%s < ?", column), args
|
||||
return fmt.Sprintf("%s < ?", column), singleArgs
|
||||
case models.CriterionModifierGreaterThan:
|
||||
return fmt.Sprintf("%s > ?", column), args
|
||||
return fmt.Sprintf("%s > ?", column), singleArgs
|
||||
}
|
||||
|
||||
panic("unsupported int modifier type " + modifier)
|
||||
panic("unsupported numeric modifier type " + modifier)
|
||||
}
|
||||
|
||||
func getDateCriterionWhereClause(column string, input models.DateCriterionInput) (string, []interface{}) {
|
||||
|
||||
Reference in New Issue
Block a user