From dfe6a09f3121b5d744df5fd9d2bdba34c2107c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Kuruc?= Date: Wed, 4 Sep 2024 10:00:51 +0200 Subject: [PATCH] HHH-18561 Fix for Informix primary key constraint syntax error --- .../community/dialect/InformixDialect.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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 7ab4b96f9d..8e59fd9b03 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 @@ -42,7 +42,11 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor; import org.hibernate.exception.spi.ViolatedConstraintNameExtractor; import org.hibernate.internal.util.JdbcExceptionHelper; +import org.hibernate.mapping.Column; import org.hibernate.mapping.ForeignKey; +import org.hibernate.mapping.PrimaryKey; +import org.hibernate.mapping.Table; +import org.hibernate.mapping.UniqueKey; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; import org.hibernate.query.spi.QueryOptions; @@ -70,6 +74,7 @@ import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.spi.JdbcOperation; import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor; import org.hibernate.tool.schema.internal.StandardForeignKeyExporter; +import org.hibernate.tool.schema.internal.StandardTableExporter; import org.hibernate.tool.schema.spi.Exporter; import org.hibernate.type.descriptor.jdbc.ClobJdbcType; import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry; @@ -137,6 +142,30 @@ public class InformixDialect extends Dialect { return results; } }; + private final StandardTableExporter informixTableExporter = new StandardTableExporter( this ) { + @Override + protected String primaryKeyString(PrimaryKey key) { + final StringBuilder constraint = new StringBuilder(); + constraint.append( "primary key (" ); + boolean first = true; + for ( Column column : key.getColumns() ) { + if ( first ) { + first = false; + } + else { + constraint.append(", "); + } + constraint.append( column.getQuotedName( dialect ) ); + } + constraint.append(')'); + final UniqueKey orderingUniqueKey = key.getOrderingUniqueKey(); + if ( orderingUniqueKey != null && orderingUniqueKey.isNameExplicit() ) { + constraint.append( " constraint " ) + .append( orderingUniqueKey.getName() ).append( ' ' ); + } + return constraint.toString(); + } + }; public InformixDialect(DialectResolutionInfo info) { this( info.makeCopyOrDefault( DEFAULT_VERSION ) ); @@ -662,6 +691,11 @@ public class InformixDialect extends Dialect { return InformixIdentityColumnSupport.INSTANCE; } + @Override + public Exporter getTableExporter() { + return this.informixTableExporter; + } + @Override public void appendBooleanValueString(SqlAppender appender, boolean bool) { appender.appendSql( bool ? "'t'" : "'f'" );