Skip to content

Commit 7a05b75

Browse files
committed
HHH-18332 Fix DB2 support for procedure output ref_cursors parameters
1 parent cf5e013 commit 7a05b75

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,11 +777,24 @@ static String selectNullString(int sqlType) {
777777
return "nullif(" + literal + "," + literal + ')';
778778
}
779779

780+
@Override
781+
public Boolean supportsRefCursors() {
782+
// DB2 supports the binding with Types.REF_CURSOR but doesn't support statement.getObject(position, ResultSet.class)
783+
return false;
784+
}
785+
780786
@Override
781787
public int registerResultSetOutParameter(CallableStatement statement, int col) throws SQLException {
788+
statement.registerOutParameter( col++, Types.REF_CURSOR );
782789
return col;
783790
}
784791

792+
@Override
793+
public int registerResultSetOutParameter(CallableStatement statement, String name) throws SQLException {
794+
statement.registerOutParameter( name, Types.REF_CURSOR );
795+
return 1;
796+
}
797+
785798
@Override
786799
public ResultSet getResultSet(CallableStatement ps) throws SQLException {
787800
boolean isResultSet = ps.execute();
@@ -793,6 +806,16 @@ public ResultSet getResultSet(CallableStatement ps) throws SQLException {
793806
return ps.getResultSet();
794807
}
795808

809+
@Override
810+
public ResultSet getResultSet(CallableStatement statement, int position) throws SQLException {
811+
return (ResultSet) statement.getObject( position );
812+
}
813+
814+
@Override
815+
public ResultSet getResultSet(CallableStatement statement, String name) throws SQLException {
816+
return (ResultSet) statement.getObject( name );
817+
}
818+
796819
@Override
797820
public boolean supportsCommentOn() {
798821
return true;

hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,11 +843,24 @@ public static String selectNullString(int sqlType) {
843843
return "nullif(" + literal + "," + literal + ')';
844844
}
845845

846+
@Override
847+
public Boolean supportsRefCursors() {
848+
// DB2 supports the binding with Types.REF_CURSOR but doesn't support statement.getObject(position, ResultSet.class)
849+
return false;
850+
}
851+
846852
@Override
847853
public int registerResultSetOutParameter(CallableStatement statement, int col) throws SQLException {
854+
statement.registerOutParameter( col++, Types.REF_CURSOR );
848855
return col;
849856
}
850857

858+
@Override
859+
public int registerResultSetOutParameter(CallableStatement statement, String name) throws SQLException {
860+
statement.registerOutParameter( name, Types.REF_CURSOR );
861+
return 1;
862+
}
863+
851864
@Override
852865
public ResultSet getResultSet(CallableStatement ps) throws SQLException {
853866
boolean isResultSet = ps.execute();
@@ -859,6 +872,16 @@ public ResultSet getResultSet(CallableStatement ps) throws SQLException {
859872
return ps.getResultSet();
860873
}
861874

875+
@Override
876+
public ResultSet getResultSet(CallableStatement statement, int position) throws SQLException {
877+
return (ResultSet) statement.getObject( position );
878+
}
879+
880+
@Override
881+
public ResultSet getResultSet(CallableStatement statement, String name) throws SQLException {
882+
return (ResultSet) statement.getObject( name );
883+
}
884+
862885
@Override
863886
public boolean supportsCommentOn() {
864887
return true;

0 commit comments

Comments
 (0)