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


##########
superset/common/query_context_processor.py:
##########
@@ -116,7 +117,53 @@ def get_df_payload(
                         )
                     )
 
-                query_result = self.get_query_result(query_obj)
+                # Create a persisted Query row for chart queries so we can 
expose a
+                # client_id and allow cancellation later. This mirrors SQL 
Lab's
+                # behavior; it is best-effort and only created if the 
datasource has
+                # an underlying database.
+                query_model = None
+                try:
+                    from uuid import uuid4
+
+                    from superset.extensions import db as _db
+                    from superset.models.sql_lab import Query as SqlLabQuery
+                    from superset.utils.core import get_user_id
+
+                    # Use client_id if provided by the client (e.g., frontend)
+                    provided_client_id = (
+                        self._query_context.cache_values.get("client_id")
+                        if isinstance(self._query_context.cache_values, dict)
+                        else None
+                    )
+
+                    if hasattr(self._qc_datasource, "database") and getattr(
+                        self._qc_datasource, "database", None
+                    ) is not None:
+                        client_id = provided_client_id or uuid4().hex[:11]
+
+                        # If a Query with this client_id already exists, reuse 
it.
+                        query_model = _db.session.query(SqlLabQuery).filter_by(
+                            client_id=client_id
+                        ).one_or_none()
+
+                        if not query_model:
+                            query_model = SqlLabQuery(
+                                client_id=client_id,
+                                database_id=self._qc_datasource.database.id,
+                                user_id=get_user_id(),
+                            )
+                            _db.session.add(query_model)
+                            _db.session.commit()
+                        # Emit debug info to help trace lifecycle of the 
persisted Query
+                        try:
+                            print(
+                                f"[query_context_processor] Query model 
created/reused: id={getattr(query_model, 'id', None)} "
+                                f"client_id={getattr(query_model, 'client_id', 
None)} database_id={getattr(query_model, 'database_id', None)}"
+                            )
+                except Exception:  # pragma: no cover - best-effort creation
+                    logger.debug("Could not create Query model for chart 
query", exc_info=True)

Review Comment:
   <div>
   
   
   <div id="suggestion">
   <div id="issue"><b>Missing except or finally block after try</b></div>
   <div id="fix">
   
   The `try` block starting at line 125 is missing an `except` or `finally` 
clause. Line 163 has a bare `except Exception` that is not properly indented as 
part of the try-except structure. Add proper exception handling or move the 
except block to the correct indentation level.
   </div>
   
   
   <details>
   <summary>
   <b>Code suggestion</b>
   </summary>
   <blockquote>Check the AI-generated fix before applying</blockquote>
   <div id="code">
   
   
   ````suggestion
                       from uuid import uuid4
    
                       from superset.extensions import db as _db
                       from superset.models.sql_lab import Query as SqlLabQuery
                       from superset.utils.core import get_user_id
    
                       # Use client_id if provided by the client (e.g., 
frontend)
                       provided_client_id = (
                           self._query_context.cache_values.get("client_id")
                           if isinstance(self._query_context.cache_values, dict)
                           else None
                       )
    
                       if hasattr(self._qc_datasource, "database") and getattr(
                           self._qc_datasource, "database", None
                       ) is not None:
                           client_id = provided_client_id or uuid4().hex[:11]
    
                           # If a Query with this client_id already exists, 
reuse it.
                           query_model = 
_db.session.query(SqlLabQuery).filter_by(
                               client_id=client_id
                           ).one_or_none()
    
                           if not query_model:
                               query_model = SqlLabQuery(
                                   client_id=client_id,
                                   database_id=self._qc_datasource.database.id,
                                   user_id=get_user_id(),
                               )
                               _db.session.add(query_model)
                               _db.session.commit()
                           # Emit debug info to help trace lifecycle of the 
persisted Query
                           try:
                               print(
                                   f"[query_context_processor] Query model 
created/reused: id={getattr(query_model, 'id', None)} "
                                   f"client_id={getattr(query_model, 
'client_id', None)} database_id={getattr(query_model, 'database_id', None)}"
                               )
                           except Exception:  # pragma: no cover - best-effort 
creation
                               logger.debug("Could not create Query model for 
chart query", exc_info=True)
                   except Exception:  # pragma: no cover - best-effort creation
                       logger.debug("Could not create Query model for chart 
query", exc_info=True)
   ````
   
   </div>
   </details>
   
   
   
   </div>
   
   
   
   
   <small><i>Code Review Run #e5c3d0</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