Skip to content

Commit

Permalink
Fix query clause ordering (#691)
Browse files Browse the repository at this point in the history
  • Loading branch information
InfiniteStash authored Jul 16, 2023
1 parent bdccda7 commit 05ea352
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 23 deletions.
26 changes: 13 additions & 13 deletions pkg/sqlx/querybuilder_edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,15 @@ func (qb *editQueryBuilder) Count() (int, error) {
func (qb *editQueryBuilder) buildQuery(filter models.EditQueryInput, userID uuid.UUID) (*queryBuilder, error) {
query := newQueryBuilder(editDBTable)

if q := filter.UserID; q != nil {
query.Eq(editDBTable.Name()+".user_id", *q)
if q := filter.Voted; q != nil && *q != "" {
switch *filter.Voted {
case models.UserVotedFilterEnumNotVoted:
where := fmt.Sprintf("%s.user_id = ?", editVoteTable.name)
query.AddJoinTableFilter(editVoteTable, where, nil, true, userID)
default:
where := fmt.Sprintf("%[1]s.user_id = ? AND %[1]s.vote = ?", editVoteTable.Name())
query.AddJoinTableFilter(editVoteTable, where, nil, false, userID, q.String())
}
}

if targetID := filter.TargetID; targetID != nil {
Expand All @@ -230,17 +237,6 @@ func (qb *editQueryBuilder) buildQuery(filter models.EditQueryInput, userID uuid
query.Eq("target_type", q.String())
}

if q := filter.Voted; q != nil && *q != "" {
switch *filter.Voted {
case models.UserVotedFilterEnumNotVoted:
where := fmt.Sprintf("%s.user_id = ?", editVoteTable.name)
query.AddJoinTableFilter(editVoteTable, where, nil, true, userID)
default:
where := fmt.Sprintf("%[1]s.user_id = ? AND %[1]s.vote = ?", editVoteTable.Name())
query.AddJoinTableFilter(editVoteTable, where, nil, false, userID, q.String())
}
}

if q := filter.IsFavorite; q != nil && *q {
q := `
(edits.id IN (
Expand Down Expand Up @@ -278,6 +274,10 @@ func (qb *editQueryBuilder) buildQuery(filter models.EditQueryInput, userID uuid
query.AddArg(userID, userID, userID, userID, userID, userID)
}

if q := filter.UserID; q != nil {
query.Eq(editDBTable.Name()+".user_id", *q)
}

if q := filter.Status; q != nil {
query.Eq("status", q.String())
}
Expand Down
10 changes: 5 additions & 5 deletions pkg/sqlx/querybuilder_performer.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,11 @@ func (qb *performerQueryBuilder) buildQuery(filter models.PerformerQueryInput, u
query.AddArg(filter.StudioID)
}

if q := filter.URL; q != nil && *q != "" {
where := fmt.Sprintf("%s.url = ?", performerURLTable.Name())
query.AddJoinTableFilter(performerURLTable, where, nil, false, *q)
}

if q := filter.Name; q != nil && *q != "" {
searchColumns := []string{"performers.name"}
clause, thisArgs := getSearchBinding(searchColumns, *q, false, true)
Expand Down Expand Up @@ -278,11 +283,6 @@ func (qb *performerQueryBuilder) buildQuery(filter models.PerformerQueryInput, u
}
}

if q := filter.URL; q != nil && *q != "" {
where := fmt.Sprintf("%s.url = ?", performerURLTable.Name())
query.AddJoinTableFilter(performerURLTable, where, nil, false, *q)
}

if filter.IsFavorite != nil {
// userID is internal based on user context so it is safe to append rather than bind
q := fmt.Sprintf(" JOIN performer_favorites F ON performers.id = F.performer_id AND F.user_id = '%s'", userID)
Expand Down
10 changes: 5 additions & 5 deletions pkg/sqlx/querybuilder_studio.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,11 @@ func (qb *studioQueryBuilder) Query(filter models.StudioQueryInput, userID uuid.
query := newQueryBuilder(studioDBTable)
query.Body += "LEFT JOIN studios as parent_studio ON studios.parent_studio_id = parent_studio.id"

if q := filter.URL; q != nil && *q != "" {
where := fmt.Sprintf("%s.url = ?", studioURLTable.Name())
query.AddJoinTableFilter(studioURLTable, where, nil, false, *q)
}

if q := filter.Name; q != nil && *q != "" {
searchColumns := []string{"studios.name"}
clause, thisArgs := getSearchBinding(searchColumns, *q, false, true)
Expand Down Expand Up @@ -204,11 +209,6 @@ func (qb *studioQueryBuilder) Query(filter models.StudioQueryInput, userID uuid.
}
}

if q := filter.URL; q != nil && *q != "" {
where := fmt.Sprintf("%s.url = ?", studioURLTable.Name())
query.AddJoinTableFilter(studioURLTable, where, nil, false, *q)
}

query.Sort = qb.getStudioSort(filter)
query.Pagination = getPagination(filter.Page, filter.PerPage)

Expand Down

0 comments on commit 05ea352

Please sign in to comment.