mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Filter migration fix (#4151)
* Exclude value for is null/not null Also includes changes to the error message in the migration to include the filter string. * Ignore null when setting from encoded criterion
This commit is contained in:
@@ -133,17 +133,17 @@ func (m *schema49Migrator) migrateSavedFilters(ctx context.Context) error {
|
|||||||
|
|
||||||
newFindFilter, err := m.getFindFilter(asRawMessage)
|
newFindFilter, err := m.getFindFilter(asRawMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get find filter for saved filter %d: %w", id, err)
|
return fmt.Errorf("failed to get find filter for saved filter %s : %w", findFilter, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
objectFilter, err := m.getObjectFilter(mode, asRawMessage)
|
objectFilter, err := m.getObjectFilter(mode, asRawMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get object filter for saved filter %d: %w", id, err)
|
return fmt.Errorf("failed to get object filter for saved filter %s : %w", findFilter, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
uiOptions, err := m.getDisplayOptions(asRawMessage)
|
uiOptions, err := m.getDisplayOptions(asRawMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get display options for saved filter %d: %w", id, err)
|
return fmt.Errorf("failed to get display options for saved filter %s : %w", findFilter, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = m.db.Exec("UPDATE saved_filters SET find_filter = ?, object_filter = ?, ui_options = ? WHERE id = ?", newFindFilter, objectFilter, uiOptions, id)
|
_, err = m.db.Exec("UPDATE saved_filters SET find_filter = ?, object_filter = ?, ui_options = ? WHERE id = ?", newFindFilter, objectFilter, uiOptions, id)
|
||||||
@@ -252,23 +252,29 @@ func (m *schema49Migrator) convertCriterion(mode models.FilterMode, out map[stri
|
|||||||
}
|
}
|
||||||
delete(ret, "type")
|
delete(ret, "type")
|
||||||
|
|
||||||
// Find out whether the object needs some adjustment/has non-string content attached
|
// unset the value for IS_NULL or NOT_NULL modifiers
|
||||||
// Only adjust if value is present
|
modifier := models.CriterionModifier(ret["modifier"].(string))
|
||||||
if v, ok := ret["value"]; ok && v != nil {
|
if modifier == models.CriterionModifierIsNull || modifier == models.CriterionModifierNotNull {
|
||||||
var err error
|
delete(ret, "value")
|
||||||
switch {
|
} else {
|
||||||
case arrayContains(migrate49TypeResolution["Boolean"], field):
|
// Find out whether the object needs some adjustment/has non-string content attached
|
||||||
ret["value"], err = m.adjustCriterionValue(ret["value"], "bool")
|
// Only adjust if value is present
|
||||||
case arrayContains(migrate49TypeResolution["Int"], field):
|
if v, ok := ret["value"]; ok && v != nil {
|
||||||
ret["value"], err = m.adjustCriterionValue(ret["value"], "int")
|
var err error
|
||||||
case arrayContains(migrate49TypeResolution["Float"], field):
|
switch {
|
||||||
ret["value"], err = m.adjustCriterionValue(ret["value"], "float64")
|
case arrayContains(migrate49TypeResolution["Boolean"], field):
|
||||||
case arrayContains(migrate49TypeResolution["Object"], field):
|
ret["value"], err = m.adjustCriterionValue(ret["value"], "bool")
|
||||||
ret["value"], err = m.adjustCriterionValue(ret["value"], "object")
|
case arrayContains(migrate49TypeResolution["Int"], field):
|
||||||
}
|
ret["value"], err = m.adjustCriterionValue(ret["value"], "int")
|
||||||
|
case arrayContains(migrate49TypeResolution["Float"], field):
|
||||||
|
ret["value"], err = m.adjustCriterionValue(ret["value"], "float64")
|
||||||
|
case arrayContains(migrate49TypeResolution["Object"], field):
|
||||||
|
ret["value"], err = m.adjustCriterionValue(ret["value"], "object")
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to adjust criterion value for %q: %w", field, err)
|
return fmt.Errorf("failed to adjust criterion value for %q: %w", field, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,10 @@ export abstract class Criterion<V extends CriterionValue> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public setFromEncodedCriterion(encodedCriterion: IEncodedCriterion<V>) {
|
public setFromEncodedCriterion(encodedCriterion: IEncodedCriterion<V>) {
|
||||||
if (encodedCriterion.value !== undefined) {
|
if (
|
||||||
|
encodedCriterion.value !== undefined &&
|
||||||
|
encodedCriterion.value !== null
|
||||||
|
) {
|
||||||
this.value = encodedCriterion.value;
|
this.value = encodedCriterion.value;
|
||||||
}
|
}
|
||||||
this.modifier = encodedCriterion.modifier;
|
this.modifier = encodedCriterion.modifier;
|
||||||
|
|||||||
Reference in New Issue
Block a user