This is an automated email from the ASF dual-hosted git repository.

michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 6db3a4d9d2 fix: Temporal filter conversion in viz migrations (#33224)
6db3a4d9d2 is described below

commit 6db3a4d9d25a73cfe2802427692d85c398262fbc
Author: Michael S. Molina <[email protected]>
AuthorDate: Fri May 2 08:27:49 2025 -0300

    fix: Temporal filter conversion in viz migrations (#33224)
---
 superset/migrations/shared/migrate_viz/base.py     | 36 +++++++++++++++++-----
 .../migrations/viz/time_related_fields_test.py     | 10 +++---
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/superset/migrations/shared/migrate_viz/base.py 
b/superset/migrations/shared/migrate_viz/base.py
index ba10de1ec2..fe434a52f4 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"]
-
-        rv_data["adhoc_filters"] = (rv_data.get("adhoc_filters") or []) + [
-            temporal_filter
-        ]
+            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"]
+
+                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 4494aff1cf..128342737b 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",
         }
     ]

Reply via email to