From 3042c08352e60b2bf017173bf5cc05d625ad3a1f Mon Sep 17 00:00:00 2001 From: Davide Silvestri <75379892+silvestrid@users.noreply.github.com> Date: Tue, 5 May 2026 09:12:27 +0200 Subject: [PATCH] fix: skip invalid formula fields in periodic update (#5298) (#5299) --- .../contrib/database/fields/field_types.py | 2 +- .../database/field/test_field_tasks.py | 24 +++++++++++++++++++ ...lid_formula_fields_in_periodic_update.json | 9 +++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 changelog/entries/unreleased/bug/5298_skip_invalid_formula_fields_in_periodic_update.json diff --git a/backend/src/baserow/contrib/database/fields/field_types.py b/backend/src/baserow/contrib/database/fields/field_types.py index 7fd76e893d..6ecb170df1 100755 --- a/backend/src/baserow/contrib/database/fields/field_types.py +++ b/backend/src/baserow/contrib/database/fields/field_types.py @@ -5676,7 +5676,7 @@ def get_fields_needing_periodic_update(self) -> Optional[QuerySet]: table__trashed=False, table__database__trashed=False, table__database__workspace__trashed=False, - ) + ).exclude(formula_type=BaserowFormulaInvalidType.type) def run_periodic_update( self, diff --git a/backend/tests/baserow/contrib/database/field/test_field_tasks.py b/backend/tests/baserow/contrib/database/field/test_field_tasks.py index 6a368394e5..b1a104749d 100644 --- a/backend/tests/baserow/contrib/database/field/test_field_tasks.py +++ b/backend/tests/baserow/contrib/database/field/test_field_tasks.py @@ -581,3 +581,27 @@ def test_link_row_fields_deps_are_excluded_from_periodic_updates(data_fixture): row_a.refresh_from_db() assert getattr(row_a, formula_a.db_column) == "02" + + +@pytest.mark.django_db +def test_invalid_formula_is_skipped_by_periodic_update(data_fixture): + table = data_fixture.create_database_table() + date_field = data_fixture.create_date_field(table=table, date_include_time=True) + bool_formula = data_fixture.create_formula_field( + table=table, + formula=f"today() > field('{date_field.name}')", + ) + data_fixture.create_formula_field( + table=table, + formula=f"if(field('{bool_formula.name}'), 'YES', 'NO')", + ) + + assert bool_formula.needs_periodic_update is True + assert bool_formula.formula_type == "boolean" + + bool_formula.mark_as_invalid_and_save("simulated invalid state") + bool_formula.refresh_from_db() + assert bool_formula.formula_type == "invalid" + assert bool_formula.needs_periodic_update is True + + assert FormulaFieldType().get_fields_needing_periodic_update().exists() is False diff --git a/changelog/entries/unreleased/bug/5298_skip_invalid_formula_fields_in_periodic_update.json b/changelog/entries/unreleased/bug/5298_skip_invalid_formula_fields_in_periodic_update.json new file mode 100644 index 0000000000..2d0e46f561 --- /dev/null +++ b/changelog/entries/unreleased/bug/5298_skip_invalid_formula_fields_in_periodic_update.json @@ -0,0 +1,9 @@ +{ + "type": "bug", + "message": "Skip invalid formula fields in the periodic field update task.", + "issue_origin": "github", + "issue_number": 5298, + "domain": "database", + "bullet_points": [], + "created_at": "2026-05-04" +}