mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 12:24:38 +03:00
* Move query builders to sqlite package * Add transaction system * Wrap model resolvers in transaction * Add error return value for StringSliceToIntSlice * Update/refactor mutation resolvers * Convert query builders * Remove unused join types * Add stash id unit tests * Use WAL journal mode
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package sqlite
|
|
|
|
import "github.com/stashapp/stash/pkg/models"
|
|
|
|
type queryBuilder struct {
|
|
repository *repository
|
|
|
|
body string
|
|
|
|
whereClauses []string
|
|
havingClauses []string
|
|
args []interface{}
|
|
|
|
sortAndPagination string
|
|
}
|
|
|
|
func (qb queryBuilder) executeFind() ([]int, int, error) {
|
|
return qb.repository.executeFindQuery(qb.body, qb.args, qb.sortAndPagination, qb.whereClauses, qb.havingClauses)
|
|
}
|
|
|
|
func (qb *queryBuilder) addWhere(clauses ...string) {
|
|
for _, clause := range clauses {
|
|
if len(clause) > 0 {
|
|
qb.whereClauses = append(qb.whereClauses, clause)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (qb *queryBuilder) addHaving(clauses ...string) {
|
|
for _, clause := range clauses {
|
|
if len(clause) > 0 {
|
|
qb.havingClauses = append(qb.havingClauses, clause)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (qb *queryBuilder) addArg(args ...interface{}) {
|
|
qb.args = append(qb.args, args...)
|
|
}
|
|
|
|
func (qb *queryBuilder) handleIntCriterionInput(c *models.IntCriterionInput, column string) {
|
|
if c != nil {
|
|
clause, count := getIntCriterionWhereClause(column, *c)
|
|
qb.addWhere(clause)
|
|
if count == 1 {
|
|
qb.addArg(c.Value)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (qb *queryBuilder) handleStringCriterionInput(c *models.StringCriterionInput, column string) {
|
|
if c != nil {
|
|
if modifier := c.Modifier; c.Modifier.IsValid() {
|
|
switch modifier {
|
|
case models.CriterionModifierIncludes:
|
|
clause, thisArgs := getSearchBinding([]string{column}, c.Value, false)
|
|
qb.addWhere(clause)
|
|
qb.addArg(thisArgs...)
|
|
case models.CriterionModifierExcludes:
|
|
clause, thisArgs := getSearchBinding([]string{column}, c.Value, true)
|
|
qb.addWhere(clause)
|
|
qb.addArg(thisArgs...)
|
|
case models.CriterionModifierEquals:
|
|
qb.addWhere(column + " LIKE ?")
|
|
qb.addArg(c.Value)
|
|
case models.CriterionModifierNotEquals:
|
|
qb.addWhere(column + " NOT LIKE ?")
|
|
qb.addArg(c.Value)
|
|
default:
|
|
clause, count := getSimpleCriterionClause(modifier, "?")
|
|
qb.addWhere(column + " " + clause)
|
|
if count == 1 {
|
|
qb.addArg(c.Value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|