diff --git a/superset/migrations/shared/migrate_viz/base.py b/superset/migrations/shared/migrate_viz/base.py index ba10de1ec22..fe434a52f4b 100644 --- a/superset/migrations/shared/migrate_viz/base.py +++ b/superset/migrations/shared/migrate_viz/base.py @@ -26,6 +26,7 @@ from superset import conf from superset.constants import TimeGrain from superset.migrations.shared.utils import paginated_update, try_load_json from superset.utils import json +from superset.utils.date_parser import get_since_until logger = logging.getLogger("alembic") @@ -113,14 +114,33 @@ class MigrateViz: } if isinstance(granularity_sqla, dict): - temporal_filter["comparator"] = None - temporal_filter["expressionType"] = "SQL" - temporal_filter["subject"] = granularity_sqla["label"] - temporal_filter["sqlExpression"] = granularity_sqla["sqlExpression"] + since, until = get_since_until(time_range=time_range) + if not since and not until: + temporal_filter = {} + else: + temporal_filter["comparator"] = None + temporal_filter["expressionType"] = "SQL" + temporal_filter["subject"] = granularity_sqla["label"] - rv_data["adhoc_filters"] = (rv_data.get("adhoc_filters") or []) + [ - temporal_filter - ] + start_date = since.isoformat() if since else None + end_date = until.isoformat() if until else None + if start_date and end_date: + temporal_filter["sqlExpression"] = ( + f"{granularity_sqla['sqlExpression']} >= '{start_date}' AND " + f"{granularity_sqla['sqlExpression']} < '{end_date}'" + ) + elif start_date: + temporal_filter["sqlExpression"] = ( + f"{granularity_sqla['sqlExpression']} >= '{start_date}'" + ) + elif end_date: + temporal_filter["sqlExpression"] = ( + f"{granularity_sqla['sqlExpression']} < '{end_date}'" + ) + + rv_data["adhoc_filters"] = rv_data.get("adhoc_filters") or [] + if temporal_filter: + rv_data["adhoc_filters"].append(temporal_filter) @classmethod def upgrade_slice(cls, slc: Slice) -> None: diff --git a/tests/unit_tests/migrations/viz/time_related_fields_test.py b/tests/unit_tests/migrations/viz/time_related_fields_test.py index 4494aff1cf2..128342737bd 100644 --- a/tests/unit_tests/migrations/viz/time_related_fields_test.py +++ b/tests/unit_tests/migrations/viz/time_related_fields_test.py @@ -21,7 +21,7 @@ from tests.unit_tests.migrations.viz.utils import migrate_and_assert SOURCE_FORM_DATA: dict[str, Any] = { "granularity_sqla": "ds", - "time_range": "100 years ago : now", + "time_range": "100 years ago : today", "viz_type": "pivot_table", } @@ -29,7 +29,7 @@ TARGET_FORM_DATA: dict[str, Any] = { "form_data_bak": SOURCE_FORM_DATA, "granularity_sqla": "ds", "rowOrder": "value_z_to_a", - "time_range": "100 years ago : now", + "time_range": "100 years ago : today", "viz_type": "pivot_table_v2", } @@ -40,7 +40,7 @@ def test_migration() -> None: target["adhoc_filters"] = [ { "clause": "WHERE", - "comparator": "100 years ago : now", + "comparator": "100 years ago : today", "expressionType": "SIMPLE", "operator": "TEMPORAL_RANGE", "subject": "ds", @@ -65,7 +65,9 @@ def test_custom_sql_time_column() -> None: "comparator": None, "expressionType": "SQL", "operator": "TEMPORAL_RANGE", - "sqlExpression": "sum(ds)", + "sqlExpression": ( + "sum(ds) >= '1925-04-24T00:00:00' AND sum(ds) < '2025-04-24T00:00:00'" + ), "subject": "ds", } ]