Ejemplo n.º 1
0
    def run(  # pylint: disable=too-many-statements,useless-suppression
        self,
    ) -> CommandResult:
        """Runs arbitrary sql and returns data as json"""
        try:
            query = self._try_get_existing_query()
            if self.is_query_handled(query):
                self._execution_context.set_query(query)  # type: ignore
                status = SqlJsonExecutionStatus.QUERY_ALREADY_CREATED
            else:
                status = self._run_sql_json_exec_from_scratch()

            self._execution_context_convertor.set_payload(
                self._execution_context, status
            )

            # save columns into metadata_json
            self._query_dao.save_metadata(
                self._execution_context.query, self._execution_context_convertor.payload
            )

            return {
                "status": status,
                "payload": self._execution_context_convertor.serialize_payload(),
            }
        except (SqlLabException, SupersetErrorsException) as ex:
            raise ex
        except Exception as ex:
            raise SqlLabException(self._execution_context, exception=ex) from ex
Ejemplo n.º 2
0
 def _save_new_query(self, query: Query) -> None:
     try:
         self._query_dao.save(query)
     except DAOCreateFailedError as ex:
         raise SqlLabException(
             self._execution_context,
             SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
             "The query record was not created as expected",
             ex,
             "Please contact an administrator for further assistance or try again.",
         ) from ex
Ejemplo n.º 3
0
    def run(  # pylint: disable=too-many-statements,useless-suppression
        self, ) -> CommandResult:
        """Runs arbitrary sql and returns data as json"""
        try:
            query = self._try_get_existing_query()
            if self.is_query_handled(query):
                self._execution_context.set_query(query)  # type: ignore
                status = SqlJsonExecutionStatus.QUERY_ALREADY_CREATED
            else:
                status = self._run_sql_json_exec_from_scratch()

            self._execution_context_convertor.set_payload(
                self._execution_context, status)

            # save columns into metadata_json
            self._query_dao.save_metadata(
                self._execution_context.query,
                self._execution_context_convertor.payload)

            return {
                "status": status,
                "payload":
                self._execution_context_convertor.serialize_payload(),
            }
        except SupersetErrorsException as ex:
            if all(ex.error_type == SupersetErrorType.SYNTAX_ERROR
                   for ex in ex.errors):
                raise SupersetSyntaxErrorException(ex.errors) from ex
            raise ex
        except SupersetException as ex:
            if ex.error_type == SupersetErrorType.SYNTAX_ERROR:
                raise SupersetSyntaxErrorException([
                    SupersetError(
                        message=ex.message,
                        error_type=ex.error_type,
                        level=ErrorLevel.ERROR,
                    )
                ]) from ex
            raise ex
        except Exception as ex:
            raise SqlLabException(self._execution_context,
                                  exception=ex) from ex