From 69fb487a6ea13222ee88390c48a3204334230c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Kuruc?= Date: Wed, 5 Jun 2024 21:16:15 +0200 Subject: [PATCH] HHH-16844 Fix for Informix VARCHAR, NVARCHAR mappings errors --- .../community/dialect/InformixDialect.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java index 89a4ae7bc3..c07269ba8f 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java @@ -28,6 +28,7 @@ import org.hibernate.dialect.temptable.TemporaryTable; import org.hibernate.dialect.temptable.TemporaryTableKind; import org.hibernate.dialect.unique.UniqueDelegate; +import org.hibernate.engine.jdbc.Size; import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo; import org.hibernate.engine.spi.LoadQueryInfluencers; import org.hibernate.engine.spi.SessionFactoryImplementor; @@ -63,6 +64,7 @@ import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor; import org.hibernate.tool.schema.internal.StandardForeignKeyExporter; import org.hibernate.tool.schema.spi.Exporter; +import org.hibernate.type.descriptor.sql.DdlType; import org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType; import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; import org.hibernate.type.spi.TypeConfiguration; @@ -185,14 +187,14 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR ); ddlTypeRegistry.addDescriptor( - CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), this ) + CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), "varchar(255)",this ) .withTypeCapacity( 255, "varchar($l)" ) .withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) ) .build() ); ddlTypeRegistry.addDescriptor( - CapacityDependentDdlType.builder( NVARCHAR, columnType( LONG32NVARCHAR ), this ) - .withTypeCapacity( 255, "varchar($l)" ) + CapacityDependentDdlType.builder( NVARCHAR, columnType( LONG32NVARCHAR ), "nvarchar(255)", this ) + .withTypeCapacity( 255, "nvarchar($l)" ) .withTypeCapacity( getMaxNVarcharLength(), columnType( NVARCHAR ) ) .build() ); @@ -678,7 +680,16 @@ public static Replacer datetimeFormat(String format) { @Override public String getSelectClauseNullString(int sqlType, TypeConfiguration typeConfiguration) { - String typeName = typeConfiguration.getDdlTypeRegistry().getDescriptor( sqlType).getRawTypeName(); + DdlType descriptor = typeConfiguration.getDdlTypeRegistry().getDescriptor( sqlType ); + if ( descriptor == null ) { + return "null"; + } + String typeName = descriptor.getTypeName( Size.length( Size.DEFAULT_LENGTH ) ); + //trim off the length/precision/scale + final int loc = typeName.indexOf( '(' ); + if ( loc > -1 ) { + typeName = typeName.substring( 0, loc ); + } return "null::" + typeName; }