From f8d96b3e9c2cc6a6d737c7a03f2cf667b401b25e Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 21 Feb 2020 10:12:20 +0100 Subject: [PATCH] Polishing Use specific exception for TDS protocol errors. [#141] --- src/main/java/io/r2dbc/mssql/ExceptionFactory.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/r2dbc/mssql/ExceptionFactory.java b/src/main/java/io/r2dbc/mssql/ExceptionFactory.java index 67e1c8bb..53a5db20 100644 --- a/src/main/java/io/r2dbc/mssql/ExceptionFactory.java +++ b/src/main/java/io/r2dbc/mssql/ExceptionFactory.java @@ -17,6 +17,7 @@ package io.r2dbc.mssql; import io.r2dbc.mssql.message.Message; +import io.r2dbc.mssql.message.tds.ProtocolException; import io.r2dbc.mssql.message.token.AbstractInfoToken; import io.r2dbc.mssql.message.token.ErrorToken; import io.r2dbc.mssql.message.token.InfoToken; @@ -32,6 +33,8 @@ import io.r2dbc.spi.R2dbcTransientResourceException; import reactor.core.publisher.SynchronousSink; +import static io.r2dbc.mssql.message.token.AbstractInfoToken.Classification.GENERAL_ERROR; + /** * Factory for SQL Server-specific {@link R2dbcException}s. * @@ -131,6 +134,10 @@ static R2dbcException createException(AbstractInfoToken token, String sql) { return new MssqlTransientResourceException(createExceptionDetails(token)); } + if (token.getClassification() == GENERAL_ERROR && token.getNumber() == 4002) { + return new ProtocolException(token.getMessage()); + } + switch (token.getClassification()) { case OBJECT_DOES_NOT_EXIST: case SYNTAX_ERROR: @@ -170,7 +177,7 @@ void handleErrorResponse(Message message, SynchronousSink sink) { * * @param message the message. */ - Exception createException(ErrorToken message) { + RuntimeException createException(ErrorToken message) { return createException(message, this.sql); }