bito-code-review[bot] commented on code in PR #35662:
URL: https://github.com/apache/superset/pull/35662#discussion_r3581836774


##########
superset/jinja_context.py:
##########
@@ -1101,28 +1104,91 @@ def get_template_processor(
 
 
 def dataset_macro(
-    dataset_id: int,
+    dataset_id: Union[int, str],
     include_metrics: bool = False,
     columns: list[str] | None = None,
     from_dttm: datetime | None = None,
     to_dttm: datetime | None = None,
+    schema: str | None = None,
+    catalog: str | None = None,
+    database_id: Union[int, str] | None = None,
+    alias: str | None = None,
 ) -> str:
     """
-    Given a dataset ID, return the SQL that represents it.
+    Given a dataset ID or name, return the SQL that represents it.
+
+    If ``dataset_id`` is an integer, it is treated as the unique dataset ID and
+    the optional ``schema``, ``catalog`` and ``database_id`` parameters are
+    ignored.
+
+    If ``dataset_id`` is a string, it is treated as a dataset name. The 
optional
+    ``schema``, ``catalog`` and ``database_id`` parameters are used to narrow
+    down the search when provided. If multiple datasets match the provided
+    criteria, an error is raised because the dataset name is ambiguous.
 
     The generated SQL includes all columns (including computed) by default. 
Optionally
     the user can also request metrics to be included, and columns to group by.
 
-    The from_dttm and to_dttm parameters are filled in from filter values in 
explore
-    views, and we take them to make those properties available to jinja 
templates in
-    the underlying dataset.
+    The ``from_dttm`` and ``to_dttm`` parameters are filled in from filter 
values in
+    explore views, and we take them to make those properties available to jinja
+    templates in the underlying dataset.
+
+    The ``alias`` parameter allows the user to specify an explicit alias for 
the
+    returned subquery.
     """
     # pylint: disable=import-outside-toplevel
+    from sqlalchemy.orm.exc import MultipleResultsFound
+
     from superset.daos.dataset import DatasetDAO
 
-    dataset = DatasetDAO.find_by_id(dataset_id)
+    filters = {
+        key: value
+        for key, value in {
+            "database_id": database_id,
+            "catalog": catalog,
+            "schema": schema,
+        }.items()
+        if value is not None
+    }
+
+    if isinstance(dataset_id, str):
+        try:
+            dataset = DatasetDAO.get_table_by_catalog_schema_and_name(
+                table_name=dataset_id,
+                **cast(
+                    dict[str, Any],
+                    filters,
+                ),
+            )

Review Comment:
   <div>
   
   
   <div id="suggestion">
   <div id="issue"><b>Tests broken by new code path</b></div>
   <div id="fix">
   
   Test setup only mocks `DatasetDAO.find_by_id` (line 861), but when 
`dataset_macro` is called with a string argument (e.g., 
`dataset_macro("old_dataset")`), the new code path at line 1154 calls 
`DatasetDAO.get_table_by_catalog_schema_and_name` which is not mocked. This 
causes the method to return `None`, triggering `DatasetNotFoundError` on line 
1185. The test cases at lines 878, 886, and 902 all pass string arguments and 
will fail with `AssertionError` instead of producing the expected SQL output.
   </div>
   
   
   </div>
   
   
   
   
   <small><i>Code Review Run #8ee02b</i></small>
   </div>
   
   ---
   Should Bito avoid suggestions like this for future reviews? (<a 
href=https://alpha.bito.ai/home/ai-agents/review-rules>Manage Rules</a>)
   - [ ] Yes, avoid them



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to