public QueryException createException(QueryStage queryStage, QueryActionStats queryActionStats, SQLException cause)
    {
        Optional<Throwable> clusterConnectionExceptionCause = getClusterConnectionExceptionCause(cause);
        if (clusterConnectionExceptionCause.isPresent()) {
            return new ClusterConnectionException(clusterConnectionExceptionCause.get(), queryStage);
        }

        Optional<Throwable> requestThrottledExceptionCause = getRequestThrottleExceptionCause(cause);
        if (requestThrottledExceptionCause.isPresent()) {
            return new ThrottlingException(cause, queryStage);
        }

        Optional<ErrorCodeSupplier> errorCode = getErrorCode(cause.getErrorCode());
        boolean retryable = errorCode.isPresent() && isRetryable(errorCode.get(), queryStage, cause.getMessage());
        return new PrestoQueryException(cause, retryable, queryStage, errorCode, queryActionStats);
    }
@Test
    public void testUnknownPrestoException()
    {
        SQLException sqlException = new SQLException("", "", 0xabcd_1234, new RuntimeException());
        assertPrestoQueryException(
                classifier.createException(QUERY_STAGE, QUERY_ACTION_STATS, sqlException),
                Optional.empty(),
                false,
                QUERY_ACTION_STATS,
                QUERY_STAGE);
    }