Local method handling error while processing the SQL
(
ex: Exception,
query: Query,
session: Session,
payload: Optional[Dict[str, Any]] = None,
prefix_message: str = "",
)
| 72 | |
| 73 | |
| 74 | def handle_query_error( |
| 75 | ex: Exception, |
| 76 | query: Query, |
| 77 | session: Session, |
| 78 | payload: Optional[Dict[str, Any]] = None, |
| 79 | prefix_message: str = "", |
| 80 | ) -> Dict[str, Any]: |
| 81 | """Local method handling error while processing the SQL""" |
| 82 | payload = payload or {} |
| 83 | msg = f"{prefix_message} {str(ex)}".strip() |
| 84 | troubleshooting_link = config["TROUBLESHOOTING_LINK"] |
| 85 | query.error_message = msg |
| 86 | query.status = QueryStatus.FAILED |
| 87 | query.tmp_table_name = None |
| 88 | |
| 89 | # extract DB-specific errors (invalid column, eg) |
| 90 | if isinstance(ex, SupersetErrorException): |
| 91 | errors = [ex.error] |
| 92 | elif isinstance(ex, SupersetErrorsException): |
| 93 | errors = ex.errors |
| 94 | else: |
| 95 | errors = query.database.db_engine_spec.extract_errors(str(ex)) |
| 96 | |
| 97 | errors_payload = [dataclasses.asdict(error) for error in errors] |
| 98 | if errors: |
| 99 | query.set_extra_json_key("errors", errors_payload) |
| 100 | |
| 101 | session.commit() |
| 102 | payload.update({"status": query.status, "error": msg, "errors": errors_payload}) |
| 103 | if troubleshooting_link: |
| 104 | payload["link"] = troubleshooting_link |
| 105 | return payload |
| 106 | |
| 107 | |
| 108 | def get_query_backoff_handler(details: Dict[Any, Any]) -> None: |
no test coverage detected