HHH-8687 Better exception message for PostgreSQL81Dialect and named REF_CURSOR parameter binding

This commit is contained in:
Dmytro Bondar 2016-07-11 10:44:26 +03:00 committed by Vlad Mihalcea
parent fa00cb3f41
commit 63ea1f812a
2 changed files with 30 additions and 10 deletions

View File

@ -587,7 +587,7 @@ public class PostgreSQL81Dialect extends Dialect {
@Override
public ResultSet getResultSet(CallableStatement statement, String name) throws SQLException {
throw new UnsupportedOperationException( "PostgreSQL only supports accessing REF_CURSOR parameters by name" );
throw new UnsupportedOperationException( "PostgreSQL only supports accessing REF_CURSOR parameters by position" );
}
@Override

View File

@ -6,23 +6,29 @@
*/
package org.hibernate.dialect;
import java.sql.BatchUpdateException;
import java.sql.CallableStatement;
import java.sql.SQLException;
import org.hibernate.JDBCException;
import org.hibernate.LockMode;
import org.hibernate.LockOptions;
import org.hibernate.PessimisticLockException;
import org.hibernate.exception.LockAcquisitionException;
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test;
import java.sql.BatchUpdateException;
import java.sql.SQLException;
import org.mockito.Mockito;
import static junit.framework.TestCase.assertEquals;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Testing of patched support for PostgreSQL Lock error detection. HHH-7251
@ -78,4 +84,18 @@ public class PostgreSQL81DialectTestCase extends BaseUnitTestCase {
String constraintName = dialect.getViolatedConstraintNameExtracter().extractConstraintName(batchUpdateException);
assertThat(constraintName, is("uk_4bm1x2ultdmq63y3h5r3eg0ej"));
}
@Test
@TestForIssue(jiraKey = "HHH-8687")
public void testMessageException() throws SQLException {
PostgreSQL81Dialect dialect = new PostgreSQL81Dialect();
try {
dialect.getResultSet( Mockito.mock( CallableStatement.class), "abc" );
fail( "Expected UnsupportedOperationException" );
}
catch (Exception e) {
assertTrue( e instanceof UnsupportedOperationException );
assertEquals( "PostgreSQL only supports accessing REF_CURSOR parameters by position", e.getMessage() );
}
}
}