Skip to content

Commit e0fc2bb

Browse files
VladoKurucbeikov
authored andcommitted
HHH-19219 Fix for Informix Catalog and schema support
1 parent f30ed50 commit e0fc2bb

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

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

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.dialect.unique.UniqueDelegate;
3636
import org.hibernate.engine.jdbc.Size;
3737
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
38+
import org.hibernate.engine.jdbc.env.spi.NameQualifierSupport;
3839
import org.hibernate.engine.spi.LoadQueryInfluencers;
3940
import org.hibernate.engine.spi.SessionFactoryImplementor;
4041
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
@@ -693,6 +694,11 @@ public String[] getDropSchemaCommand(String schemaName) {
693694
return new String[] { "" };
694695
}
695696

697+
@Override
698+
public NameQualifierSupport getNameQualifierSupport() {
699+
return NameQualifierSupport.BOTH;
700+
}
701+
696702
@Override
697703
public boolean useCrossReferenceForeignKeys(){
698704
return true;

hibernate-core/src/test/java/org/hibernate/orm/test/boot/database/qualfiedTableNaming/DefaultCatalogAndSchemaTest.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.hibernate.boot.spi.BootstrapContext;
3333
import org.hibernate.boot.spi.MetadataImplementor;
3434
import org.hibernate.cfg.AvailableSettings;
35+
import org.hibernate.community.dialect.InformixDialect;
3536
import org.hibernate.dialect.Dialect;
3637
import org.hibernate.dialect.SQLServerDialect;
3738
import org.hibernate.dialect.SybaseDialect;
@@ -313,12 +314,17 @@ public void createSchema_fromSessionFactory() {
313314

314315
@Test
315316
@SkipForDialect(value = SQLServerDialect.class,
316-
comment = "SQL Server and Sybase support catalogs but their implementation of DatabaseMetaData"
317+
comment = "SQL Server support catalogs but their implementation of DatabaseMetaData"
317318
+ " throws exceptions when calling getSchemas/getTables with a non-existing catalog,"
318319
+ " which results in nasty errors when generating an update script"
319320
+ " and some catalogs don't exist.")
320321
@SkipForDialect(value = SybaseDialect.class,
321-
comment = "SQL Server and Sybase support catalogs but their implementation of DatabaseMetaData"
322+
comment = "Sybase support catalogs but their implementation of DatabaseMetaData"
323+
+ " throws exceptions when calling getSchemas/getTables with a non-existing catalog,"
324+
+ " which results in nasty errors when generating an update script"
325+
+ " and some catalogs don't exist.")
326+
@SkipForDialect(value = InformixDialect.class,
327+
comment = "Informix support catalogs but their implementation of DatabaseMetaData"
322328
+ " throws exceptions when calling getSchemas/getTables with a non-existing catalog,"
323329
+ " which results in nasty errors when generating an update script"
324330
+ " and some catalogs don't exist.")
@@ -775,8 +781,8 @@ String patternStringForNameWithDifferentQualifier(String patternStringForName) {
775781
}
776782

777783
private String patternStringForQualifier() {
778-
return ( catalog != null ? Pattern.quote( catalog + "." ) : "" )
779-
+ ( schema != null ? Pattern.quote( schema + "." ) : "" );
784+
return ( catalog != null ? Pattern.quote( catalog ) + "." : "" )
785+
+ ( schema != null ? Pattern.quote( schema ) + "." : "" );
780786
}
781787
}
782788

hibernate-core/src/test/java/org/hibernate/orm/test/schemaupdate/secondarytable/SecondaryTableTest.java

+9-13
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import java.util.Locale;
1212

1313
import org.hibernate.boot.MetadataSources;
14+
import org.hibernate.boot.model.naming.Identifier;
15+
import org.hibernate.boot.model.relational.QualifiedTypeName;
16+
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
17+
import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl;
1418
import org.hibernate.boot.registry.StandardServiceRegistry;
1519
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
1620
import org.hibernate.boot.spi.MetadataImplementor;
17-
import org.hibernate.engine.jdbc.env.spi.NameQualifierSupport;
18-
import org.hibernate.internal.util.StringHelper;
1921
import org.hibernate.tool.hbm2ddl.SchemaExport;
2022
import org.hibernate.tool.schema.TargetType;
2123

@@ -64,17 +66,11 @@ public void testSecondaryTablesAreCreated() throws Exception {
6466
}
6567

6668
private String getExpectedTableName(String tableName, String schema, String catalog) {
67-
String expectedTableName = tableName;
68-
NameQualifierSupport nameQualifierSupport = metadata.getDatabase()
69-
.getJdbcEnvironment()
70-
.getNameQualifierSupport();
71-
if ( StringHelper.isNotEmpty( schema ) && nameQualifierSupport.supportsSchemas() ) {
72-
expectedTableName = schema + "." + expectedTableName;
73-
}
74-
if ( StringHelper.isNotEmpty( catalog ) && nameQualifierSupport.supportsCatalogs() ) {
75-
expectedTableName = catalog + "." + expectedTableName;
76-
}
77-
return expectedTableName;
69+
SqlStringGenerationContext context = SqlStringGenerationContextImpl.forTests(
70+
metadata.getDatabase().getJdbcEnvironment(), catalog, schema );
71+
return context.format(
72+
new QualifiedTypeName( Identifier.toIdentifier( catalog ), Identifier.toIdentifier( schema ),
73+
Identifier.toIdentifier( tableName ) ) );
7874
}
7975

8076
private boolean isTableCreated(

0 commit comments

Comments
 (0)