Skip to content

Commit c0804d3

Browse files
committed
Fix rendering of xmltable and boolean handling for older versions of DB2
1 parent 29b00d6 commit c0804d3

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/function/xml/DB2XmlTableFunction.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,18 @@ public DB2XmlTableFunction(TypeConfiguration typeConfiguration) {
3737
protected void renderXmlTable(SqlAppender sqlAppender, XmlTableArguments arguments, AnonymousTupleTableGroupProducer tupleType, String tableIdentifierVariable, SqlAstTranslator<?> walker) {
3838
sqlAppender.appendSql( "xmltable(" );
3939
// DB2 doesn't like parameters for the xpath expression
40-
walker.render( arguments.xpath(), SqlAstNodeRenderingMode.INLINE_PARAMETERS );
40+
final String xpath = walker.getLiteralValue( arguments.xpath() );
41+
sqlAppender.appendSingleQuoteEscapedString( "$d" + xpath );
4142
sqlAppender.appendSql( " passing " );
4243
if ( !arguments.isXmlType() ) {
4344
sqlAppender.appendSql( "xmlparse(document " );
4445
}
4546
// DB2 needs parameters to be casted here
4647
walker.render( arguments.xmlDocument(), SqlAstNodeRenderingMode.NO_PLAIN_PARAMETER );
4748
if ( !arguments.isXmlType() ) {
48-
sqlAppender.appendSql( ")" );
49+
sqlAppender.appendSql( ')' );
4950
}
51+
sqlAppender.appendSql( " as \"d\"" );
5052
renderColumns( sqlAppender, arguments.columnsClause(), walker );
5153
sqlAppender.appendSql( ')' );
5254
}
@@ -69,7 +71,10 @@ protected void renderXmlValueColumnDefinition(SqlAppender sqlAppender, XmlTableV
6971
}
7072

7173
static boolean isBoolean(JdbcMapping type) {
72-
return type.getJdbcType().isBoolean();
74+
return switch ( type.getCastType() ) {
75+
case BOOLEAN, TF_BOOLEAN, YN_BOOLEAN, INTEGER_BOOLEAN -> true;
76+
default -> false;
77+
};
7378
}
7479

7580
private static class DB2XmlTableSetReturningFunctionTypeResolver extends XmlTableSetReturningFunctionTypeResolver {

hibernate-core/src/main/java/org/hibernate/dialect/function/xml/HANAXmlTableFunction.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,10 @@ protected void renderDefaultExpression(@Nullable Expression expression, SqlAppen
417417
}
418418

419419
static boolean isBoolean(JdbcMapping type) {
420-
return type.getJdbcType().isBoolean();
420+
return switch ( type.getCastType() ) {
421+
case BOOLEAN, TF_BOOLEAN, YN_BOOLEAN, INTEGER_BOOLEAN -> true;
422+
default -> false;
423+
};
421424
}
422425

423426
private static class DB2XmlTableSetReturningFunctionTypeResolver extends XmlTableSetReturningFunctionTypeResolver {

hibernate-core/src/main/java/org/hibernate/dialect/function/xml/SybaseASEXmlTableFunction.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@ protected void addSelectableMapping(List<SelectableMapping> selectableMappings,
203203
}
204204

205205
public static boolean isBoolean(JdbcMapping type) {
206-
return type.getJavaTypeDescriptor().getJavaTypeClass() == Boolean.class;
206+
return switch ( type.getCastType() ) {
207+
case BOOLEAN, TF_BOOLEAN, YN_BOOLEAN, INTEGER_BOOLEAN -> true;
208+
default -> false;
209+
};
207210
}
208211
}

0 commit comments

Comments
 (0)