Skip to content

Commit 30c9faf

Browse files
committed
HHH-19621 Don't render code units for DB2 for i
1 parent 3071603 commit 30c9faf

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.hibernate.boot.model.FunctionContributions;
1010
import org.hibernate.dialect.DatabaseVersion;
1111
import org.hibernate.dialect.function.CommonFunctionFactory;
12+
import org.hibernate.dialect.function.DB2SubstringFunction;
1213
import org.hibernate.dialect.identity.DB2390IdentityColumnSupport;
1314
import org.hibernate.dialect.identity.DB2IdentityColumnSupport;
1415
import org.hibernate.dialect.identity.IdentityColumnSupport;
@@ -57,9 +58,14 @@ public DB2iLegacyDialect(DatabaseVersion version) {
5758

5859
@Override
5960
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
60-
super.initializeFunctionRegistry(functionContributions);
61+
super.initializeFunctionRegistry( functionContributions );
62+
// DB2 for i doesn't allow code units: https://www.ibm.com/docs/en/i/7.1.0?topic=functions-substring
63+
functionContributions.getFunctionRegistry().register(
64+
"substring",
65+
new DB2SubstringFunction( false, functionContributions.getTypeConfiguration() )
66+
);
6167
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
62-
CommonFunctionFactory functionFactory = new CommonFunctionFactory(functionContributions);
68+
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions );
6369
functionFactory.listagg( null );
6470
functionFactory.inverseDistributionOrderedSetAggregates();
6571
functionFactory.hypotheticalOrderedSetAggregates_windowEmulation();

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import org.hibernate.boot.model.FunctionContributions;
1010
import org.hibernate.dialect.function.CommonFunctionFactory;
11+
import org.hibernate.dialect.function.DB2SubstringFunction;
1112
import org.hibernate.dialect.identity.DB2IdentityColumnSupport;
1213
import org.hibernate.dialect.identity.DB2zIdentityColumnSupport;
1314
import org.hibernate.dialect.identity.IdentityColumnSupport;
@@ -61,9 +62,14 @@ protected DatabaseVersion getMinimumSupportedVersion() {
6162

6263
@Override
6364
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
64-
super.initializeFunctionRegistry(functionContributions);
65+
super.initializeFunctionRegistry( functionContributions );
66+
// DB2 for i doesn't allow code units: https://www.ibm.com/docs/en/i/7.1.0?topic=functions-substring
67+
functionContributions.getFunctionRegistry().register(
68+
"substring",
69+
new DB2SubstringFunction( false, functionContributions.getTypeConfiguration() )
70+
);
6571
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
66-
CommonFunctionFactory functionFactory = new CommonFunctionFactory(functionContributions);
72+
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions );
6773
functionFactory.listagg( null );
6874
functionFactory.inverseDistributionOrderedSetAggregates();
6975
functionFactory.hypotheticalOrderedSetAggregates_windowEmulation();

hibernate-core/src/main/java/org/hibernate/dialect/function/DB2SubstringFunction.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,21 @@
2929
*/
3030
public class DB2SubstringFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
3131

32+
private final boolean needsCodeUnit;
33+
3234
public DB2SubstringFunction(TypeConfiguration typeConfiguration) {
35+
this( true, typeConfiguration );
36+
}
37+
38+
public DB2SubstringFunction(boolean needsCodeUnit, TypeConfiguration typeConfiguration) {
3339
super(
3440
"substring",
3541
new ArgumentTypesValidator( StandardArgumentsValidators.between( 2, 4 ), STRING, INTEGER, INTEGER, FunctionParameterType.ANY ),
3642
StandardFunctionReturnTypeResolvers.invariant( typeConfiguration.getBasicTypeRegistry().resolve(
3743
StandardBasicTypes.STRING ) ),
3844
StandardFunctionArgumentTypeResolvers.invariant( typeConfiguration, STRING, INTEGER, INTEGER )
3945
);
46+
this.needsCodeUnit = needsCodeUnit;
4047
}
4148

4249
@Override
@@ -51,7 +58,7 @@ public void render(
5158
sqlAppender.appendSql( ',' );
5259
arguments.get( i ).accept( walker );
5360
}
54-
if ( argumentCount != 4 ) {
61+
if ( argumentCount != 4 && needsCodeUnit ) {
5562
sqlAppender.appendSql( ",codeunits32" );
5663
}
5764
sqlAppender.appendSql( ')' );

0 commit comments

Comments
 (0)