Handle missing studio ids in getHierarchicalValues (#3845)

This commit is contained in:
WithoutPants 2023-06-23 11:04:12 +10:00 committed by GitHub
parent f440e06dc7
commit cfc3912dcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package sqlite
import (
"context"
"database/sql"
"errors"
"fmt"
"path/filepath"
@ -950,13 +951,21 @@ WHERE id in {inBinding}
query := fmt.Sprintf("WITH RECURSIVE %s SELECT 'VALUES' || GROUP_CONCAT('(' || root_id || ', ' || item_id || ')') AS val FROM items", withClause)
var valuesClause string
var valuesClause sql.NullString
err := tx.Get(ctx, &valuesClause, query, args...)
if err != nil {
return "", fmt.Errorf("failed to get hierarchical values: %w", err)
}
return valuesClause, nil
// if no values are found, just return a values string with the values only
if !valuesClause.Valid {
for i, value := range values {
values[i] = fmt.Sprintf("(%s, %s)", value, value)
}
valuesClause.String = "VALUES" + strings.Join(values, ",")
}
return valuesClause.String, nil
}
func addHierarchicalConditionClauses(f *filterBuilder, criterion models.HierarchicalMultiCriterionInput, table, idColumn string) {

View File

@ -2116,6 +2116,8 @@ func TestSceneQuery(t *testing.T) {
var (
endpoint = sceneStashID(sceneIdxWithGallery).Endpoint
stashID = sceneStashID(sceneIdxWithGallery).StashID
depth = -1
)
tests := []struct {
@ -2219,6 +2221,20 @@ func TestSceneQuery(t *testing.T) {
nil,
false,
},
{
"with studio id 0 including child studios",
nil,
&models.SceneFilterType{
Studios: &models.HierarchicalMultiCriterionInput{
Value: []string{"0"},
Modifier: models.CriterionModifierIncludes,
Depth: &depth,
},
},
nil,
nil,
false,
},
}
for _, tt := range tests {