class PrestoException extends RuntimeException {

    @Override
    public String getMessage()
    {
        String message = getRawMessage();
        if (location.isPresent()) {
            message = format("line %s:%s: %s", location.get().getLineNumber(), location.get().getColumnNumber(), message);
        }
        return message;
    }

    public  PrestoException(ErrorCodeSupplier errorCode, String message);
    public  PrestoException(ErrorCodeSupplier errorCode, Throwable throwable);
    public  PrestoException(ErrorCodeSupplier errorCode, String message, Throwable cause);
    public  PrestoException(ErrorCodeSupplier errorCodeSupplier, Optional<Location> location, String message, Throwable cause);

}