Skip to content

Commit c0be0f6

Browse files
committed
HHH-19621 Don't render code units for DB2 for i
1 parent 94acfa3 commit c0be0f6

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;
@@ -59,9 +60,14 @@ public DB2iLegacyDialect(DatabaseVersion version) {
5960

6061
@Override
6162
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
62-
super.initializeFunctionRegistry(functionContributions);
63+
super.initializeFunctionRegistry( functionContributions );
64+
// DB2 for i doesn't allow code units: https://www.ibm.com/docs/en/i/7.1.0?topic=functions-substring
65+
functionContributions.getFunctionRegistry().register(
66+
"substring",
67+
new DB2SubstringFunction( false, functionContributions.getTypeConfiguration() )
68+
);
6369
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
64-
CommonFunctionFactory functionFactory = new CommonFunctionFactory(functionContributions);
70+
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions );
6571
functionFactory.listagg( null );
6672
functionFactory.inverseDistributionOrderedSetAggregates();
6773
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
@@ -9,6 +9,7 @@
99
import org.hibernate.LockOptions;
1010
import org.hibernate.boot.model.FunctionContributions;
1111
import org.hibernate.dialect.function.CommonFunctionFactory;
12+
import org.hibernate.dialect.function.DB2SubstringFunction;
1213
import org.hibernate.dialect.identity.DB2IdentityColumnSupport;
1314
import org.hibernate.dialect.identity.DB2zIdentityColumnSupport;
1415
import org.hibernate.dialect.identity.IdentityColumnSupport;
@@ -65,9 +66,14 @@ protected DatabaseVersion getMinimumSupportedVersion() {
6566

6667
@Override
6768
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
68-
super.initializeFunctionRegistry(functionContributions);
69+
super.initializeFunctionRegistry( functionContributions );
70+
// DB2 for i doesn't allow code units: https://www.ibm.com/docs/en/i/7.1.0?topic=functions-substring
71+
functionContributions.getFunctionRegistry().register(
72+
"substring",
73+
new DB2SubstringFunction( false, functionContributions.getTypeConfiguration() )
74+
);
6975
if ( getVersion().isSameOrAfter( 7, 2 ) ) {
70-
CommonFunctionFactory functionFactory = new CommonFunctionFactory(functionContributions);
76+
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions );
7177
functionFactory.listagg( null );
7278
functionFactory.inverseDistributionOrderedSetAggregates();
7379
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
@@ -30,14 +30,21 @@
3030
*/
3131
public class DB2SubstringFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
3232

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

4350
@Override
@@ -53,7 +60,7 @@ public void render(
5360
sqlAppender.appendSql( ',' );
5461
arguments.get( i ).accept( walker );
5562
}
56-
if ( argumentCount != 4 ) {
63+
if ( argumentCount != 4 && needsCodeUnit ) {
5764
sqlAppender.appendSql( ",codeunits32" );
5865
}
5966
sqlAppender.appendSql( ')' );

0 commit comments

Comments
 (0)