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:
departure18
2023-05-24 04:19:35 +01:00
committed by GitHub
parent 58a6c22072
commit 776c7e6c35
52 changed files with 1051 additions and 184 deletions

View File

@@ -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{}) {