Skip to content

Commit dfe6a09

Browse files
VladoKurucmbellade
authored andcommitted
HHH-18561 Fix for Informix primary key constraint syntax error
1 parent eacbd78 commit dfe6a09

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@
4242
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
4343
import org.hibernate.exception.spi.ViolatedConstraintNameExtractor;
4444
import org.hibernate.internal.util.JdbcExceptionHelper;
45+
import org.hibernate.mapping.Column;
4546
import org.hibernate.mapping.ForeignKey;
47+
import org.hibernate.mapping.PrimaryKey;
48+
import org.hibernate.mapping.Table;
49+
import org.hibernate.mapping.UniqueKey;
4650
import org.hibernate.metamodel.mapping.EntityMappingType;
4751
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
4852
import org.hibernate.query.spi.QueryOptions;
@@ -70,6 +74,7 @@
7074
import org.hibernate.sql.exec.spi.JdbcOperation;
7175
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
7276
import org.hibernate.tool.schema.internal.StandardForeignKeyExporter;
77+
import org.hibernate.tool.schema.internal.StandardTableExporter;
7378
import org.hibernate.tool.schema.spi.Exporter;
7479
import org.hibernate.type.descriptor.jdbc.ClobJdbcType;
7580
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
@@ -137,6 +142,30 @@ public String[] getSqlCreateStrings(
137142
return results;
138143
}
139144
};
145+
private final StandardTableExporter informixTableExporter = new StandardTableExporter( this ) {
146+
@Override
147+
protected String primaryKeyString(PrimaryKey key) {
148+
final StringBuilder constraint = new StringBuilder();
149+
constraint.append( "primary key (" );
150+
boolean first = true;
151+
for ( Column column : key.getColumns() ) {
152+
if ( first ) {
153+
first = false;
154+
}
155+
else {
156+
constraint.append(", ");
157+
}
158+
constraint.append( column.getQuotedName( dialect ) );
159+
}
160+
constraint.append(')');
161+
final UniqueKey orderingUniqueKey = key.getOrderingUniqueKey();
162+
if ( orderingUniqueKey != null && orderingUniqueKey.isNameExplicit() ) {
163+
constraint.append( " constraint " )
164+
.append( orderingUniqueKey.getName() ).append( ' ' );
165+
}
166+
return constraint.toString();
167+
}
168+
};
140169

141170
public InformixDialect(DialectResolutionInfo info) {
142171
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
@@ -662,6 +691,11 @@ public IdentityColumnSupport getIdentityColumnSupport() {
662691
return InformixIdentityColumnSupport.INSTANCE;
663692
}
664693

694+
@Override
695+
public Exporter<Table> getTableExporter() {
696+
return this.informixTableExporter;
697+
}
698+
665699
@Override
666700
public void appendBooleanValueString(SqlAppender appender, boolean bool) {
667701
appender.appendSql( bool ? "'t'" : "'f'" );

0 commit comments

Comments
 (0)