From 83cb51ec471a2799a219b17613f176ed164ca81a Mon Sep 17 00:00:00 2001 From: DingDongSoLong4 <99329275+DingDongSoLong4@users.noreply.github.com> Date: Mon, 13 Feb 2023 03:14:41 +0200 Subject: [PATCH] Error reliably on invalid filter (#3428) --- pkg/sqlite/file.go | 4 +++- pkg/sqlite/gallery.go | 4 +++- pkg/sqlite/image.go | 4 +++- pkg/sqlite/movies.go | 4 +++- pkg/sqlite/performer.go | 4 +++- pkg/sqlite/query.go | 18 ++++-------------- pkg/sqlite/scene.go | 4 +++- pkg/sqlite/scene_marker.go | 4 +++- pkg/sqlite/studio.go | 4 +++- pkg/sqlite/tag.go | 4 +++- 10 files changed, 31 insertions(+), 23 deletions(-) diff --git a/pkg/sqlite/file.go b/pkg/sqlite/file.go index ba971c018..06c83b8d6 100644 --- a/pkg/sqlite/file.go +++ b/pkg/sqlite/file.go @@ -823,7 +823,9 @@ func (qb *FileStore) Query(ctx context.Context, options models.FileQueryOptions) } filter := qb.makeFilter(ctx, fileFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, err + } qb.setQuerySort(&query, findFilter) query.sortAndPagination += getPagination(findFilter) diff --git a/pkg/sqlite/gallery.go b/pkg/sqlite/gallery.go index d59f160aa..622bfd8e8 100644 --- a/pkg/sqlite/gallery.go +++ b/pkg/sqlite/gallery.go @@ -736,7 +736,9 @@ func (qb *GalleryStore) makeQuery(ctx context.Context, galleryFilter *models.Gal } filter := qb.makeFilter(ctx, galleryFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, err + } qb.setGallerySort(&query, findFilter) query.sortAndPagination += getPagination(findFilter) diff --git a/pkg/sqlite/image.go b/pkg/sqlite/image.go index 4e8e1b3ac..1dbae4853 100644 --- a/pkg/sqlite/image.go +++ b/pkg/sqlite/image.go @@ -728,7 +728,9 @@ func (qb *ImageStore) makeQuery(ctx context.Context, imageFilter *models.ImageFi } filter := qb.makeFilter(ctx, imageFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, err + } qb.setImageSortAndPagination(&query, findFilter) diff --git a/pkg/sqlite/movies.go b/pkg/sqlite/movies.go index a3b0e2f2b..e4d74cf9b 100644 --- a/pkg/sqlite/movies.go +++ b/pkg/sqlite/movies.go @@ -180,7 +180,9 @@ func (qb *movieQueryBuilder) Query(ctx context.Context, movieFilter *models.Movi filter := qb.makeFilter(ctx, movieFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, 0, err + } query.sortAndPagination = qb.getMovieSort(findFilter) + getPagination(findFilter) idsResult, countResult, err := query.executeFind(ctx) diff --git a/pkg/sqlite/performer.go b/pkg/sqlite/performer.go index 58f9f5e81..b506a1309 100644 --- a/pkg/sqlite/performer.go +++ b/pkg/sqlite/performer.go @@ -639,7 +639,9 @@ func (qb *PerformerStore) makeQuery(ctx context.Context, performerFilter *models } filter := qb.makeFilter(ctx, performerFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, err + } query.sortAndPagination = qb.getPerformerSort(findFilter) + getPagination(findFilter) diff --git a/pkg/sqlite/query.go b/pkg/sqlite/query.go index 00b790955..597ab66b9 100644 --- a/pkg/sqlite/query.go +++ b/pkg/sqlite/query.go @@ -22,8 +22,6 @@ type queryBuilder struct { recursiveWith bool sortAndPagination string - - err error } func (qb queryBuilder) body() string { @@ -61,20 +59,11 @@ func (qb queryBuilder) findIDs(ctx context.Context) ([]int, error) { } func (qb queryBuilder) executeFind(ctx context.Context) ([]int, int, error) { - if qb.err != nil { - return nil, 0, qb.err - } - body := qb.body() - return qb.repository.executeFindQuery(ctx, body, qb.args, qb.sortAndPagination, qb.whereClauses, qb.havingClauses, qb.withClauses, qb.recursiveWith) } func (qb queryBuilder) executeCount(ctx context.Context) (int, error) { - if qb.err != nil { - return 0, qb.err - } - body := qb.body() withClause := "" @@ -136,11 +125,10 @@ func (qb *queryBuilder) addJoins(joins ...join) { qb.joins.add(joins...) } -func (qb *queryBuilder) addFilter(f *filterBuilder) { +func (qb *queryBuilder) addFilter(f *filterBuilder) error { err := f.getError() if err != nil { - qb.err = err - return + return err } clause, args := f.generateWithClauses() @@ -172,6 +160,8 @@ func (qb *queryBuilder) addFilter(f *filterBuilder) { } qb.addJoins(f.getAllJoins()...) + + return nil } func (qb *queryBuilder) parseQueryString(columns []string, q string) { diff --git a/pkg/sqlite/scene.go b/pkg/sqlite/scene.go index cb753679c..e6aef4404 100644 --- a/pkg/sqlite/scene.go +++ b/pkg/sqlite/scene.go @@ -990,7 +990,9 @@ func (qb *SceneStore) Query(ctx context.Context, options models.SceneQueryOption } filter := qb.makeFilter(ctx, sceneFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, err + } qb.setSceneSort(&query, findFilter) query.sortAndPagination += getPagination(findFilter) diff --git a/pkg/sqlite/scene_marker.go b/pkg/sqlite/scene_marker.go index b0ed5ac84..d3f520be8 100644 --- a/pkg/sqlite/scene_marker.go +++ b/pkg/sqlite/scene_marker.go @@ -158,7 +158,9 @@ func (qb *sceneMarkerQueryBuilder) Query(ctx context.Context, sceneMarkerFilter filter := qb.makeFilter(ctx, sceneMarkerFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, 0, err + } query.sortAndPagination = qb.getSceneMarkerSort(&query, findFilter) + getPagination(findFilter) idsResult, countResult, err := query.executeFind(ctx) diff --git a/pkg/sqlite/studio.go b/pkg/sqlite/studio.go index 8509b74d7..5a3013c39 100644 --- a/pkg/sqlite/studio.go +++ b/pkg/sqlite/studio.go @@ -287,7 +287,9 @@ func (qb *studioQueryBuilder) Query(ctx context.Context, studioFilter *models.St } filter := qb.makeFilter(ctx, studioFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, 0, err + } query.sortAndPagination = qb.getStudioSort(findFilter) + getPagination(findFilter) idsResult, countResult, err := query.executeFind(ctx) diff --git a/pkg/sqlite/tag.go b/pkg/sqlite/tag.go index 9521e8a79..49f4c9bbd 100644 --- a/pkg/sqlite/tag.go +++ b/pkg/sqlite/tag.go @@ -366,7 +366,9 @@ func (qb *tagQueryBuilder) Query(ctx context.Context, tagFilter *models.TagFilte } filter := qb.makeFilter(ctx, tagFilter) - query.addFilter(filter) + if err := query.addFilter(filter); err != nil { + return nil, 0, err + } query.sortAndPagination = qb.getTagSort(&query, findFilter) + getPagination(findFilter) idsResult, countResult, err := query.executeFind(ctx)