Skip to content

Commit 43cc747

Browse files
committed
Introduce Dialect.getCatalogSeparator()
This is ":" on Informix. Also fix defaulted quoting strategy on Informix
1 parent 94c3afc commit 43cc747

File tree

7 files changed

+34
-10
lines changed

7 files changed

+34
-10
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
*/
55
package org.hibernate.community.dialect;
66

7+
import java.sql.DatabaseMetaData;
8+
import java.sql.SQLException;
79
import java.sql.Types;
810
import java.time.temporal.TemporalAccessor;
911
import java.util.Date;
1012
import java.util.TimeZone;
1113

14+
import org.checkerframework.checker.nullness.qual.Nullable;
1215
import org.hibernate.boot.Metadata;
1316
import org.hibernate.boot.model.FunctionContributions;
1417
import org.hibernate.boot.model.TypeContributions;
@@ -24,6 +27,9 @@
2427
import org.hibernate.dialect.NullOrdering;
2528
import org.hibernate.dialect.Replacer;
2629
import org.hibernate.dialect.SelectItemReferenceStrategy;
30+
import org.hibernate.engine.jdbc.env.spi.IdentifierCaseStrategy;
31+
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
32+
import org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder;
2733
import org.hibernate.exception.ConstraintViolationException;
2834
import org.hibernate.exception.LockAcquisitionException;
2935
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
@@ -737,6 +743,11 @@ public void appendBinaryLiteral(SqlAppender appender, byte[] bytes) {
737743
throw new UnsupportedOperationException( "Informix does not support binary literals" );
738744
}
739745

746+
@Override
747+
public String getCatalogSeparator() {
748+
return ":";
749+
}
750+
740751
@Override
741752
public SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy(
742753
EntityMappingType rootEntityDescriptor,
@@ -1036,4 +1047,13 @@ public boolean supportsRowValueConstructorSyntaxInInList() {
10361047
public boolean requiresColumnListInCreateView() {
10371048
return true;
10381049
}
1050+
1051+
@Override
1052+
public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, @Nullable DatabaseMetaData metadata)
1053+
throws SQLException {
1054+
if ( metadata == null ) {
1055+
builder.setUnquotedCaseStrategy( IdentifierCaseStrategy.LOWER );
1056+
}
1057+
return super.buildIdentifierHelper( builder, metadata );
1058+
}
10391059
}

hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3039,6 +3039,10 @@ public boolean supportsIfExistsAfterTypeName() {
30393039
return false;
30403040
}
30413041

3042+
public String getCatalogSeparator() {
3043+
return ".";
3044+
}
3045+
30423046
// callable statement support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30433047

30443048
/**

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ public JdbcEnvironmentImpl(final ServiceRegistryImplementor serviceRegistry, fin
101101
currentCatalog = identifierHelper.toIdentifier( cfgService.getSetting( DEFAULT_CATALOG, STRING ) );
102102
currentSchema = Identifier.toIdentifier( cfgService.getSetting( DEFAULT_SCHEMA, STRING ) );
103103

104-
qualifiedObjectNameFormatter = new QualifiedObjectNameFormatterStandardImpl( nameQualifierSupport );
104+
qualifiedObjectNameFormatter =
105+
new QualifiedObjectNameFormatterStandardImpl( nameQualifierSupport, dialect.getCatalogSeparator() );
105106

106107
lobCreatorBuilder = makeLobCreatorBuilder( dialect );
107108
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/QualifiedObjectNameFormatterStandardImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ private Format buildFormat(
5555
}
5656
}
5757

58-
public QualifiedObjectNameFormatterStandardImpl(NameQualifierSupport nameQualifierSupport) {
58+
public QualifiedObjectNameFormatterStandardImpl(NameQualifierSupport nameQualifierSupport, String catalogSeparator) {
5959
// most dbs simply do <catalog>.<schema>.<name>
60-
this( nameQualifierSupport, ".", false );
60+
this( nameQualifierSupport, catalogSeparator, false );
6161
}
6262

6363
public QualifiedObjectNameFormatterStandardImpl(

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import org.hibernate.boot.model.naming.DatabaseIdentifier;
1414
import org.hibernate.boot.model.naming.Identifier;
15+
import org.hibernate.boot.model.relational.QualifiedTableName;
1516
import org.hibernate.dialect.Dialect;
1617
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
1718
import org.hibernate.tool.schema.extract.spi.TableInformation;
@@ -157,11 +158,12 @@ protected void addColumns(TableInformation tableInformation) {
157158

158159
// We use this dummy query to retrieve the table information through the ResultSetMetaData
159160
// Significantly better than using DatabaseMetaData especially on Oracle with synonyms enabled
161+
final QualifiedTableName qualifiedTableName = tableInformation.getName();
160162
final String tableName =
161163
extractionContext.getSqlStringGenerationContext()
162164
// The name comes from the database, so the case is correct
163165
// But we quote here to avoid issues with reserved words
164-
.format( tableInformation.getName().quote() );
166+
.format( qualifiedTableName.quote() );
165167

166168
try {
167169
extractionContext.getQueryResults(
@@ -178,9 +180,7 @@ protected void addColumns(TableInformation tableInformation) {
178180
);
179181
}
180182
catch (SQLException e) {
181-
throw convertSQLException( e,
182-
"Error accessing column metadata: "
183-
+ tableInformation.getName().toString() );
183+
throw convertSQLException( e, "Error accessing column metadata: " + qualifiedTableName );
184184
}
185185
}
186186

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/spi/ExtractionContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import java.sql.Connection;
88
import java.sql.DatabaseMetaData;
9-
import java.sql.PreparedStatement;
109
import java.sql.ResultSet;
1110
import java.sql.SQLException;
1211

@@ -38,7 +37,7 @@ default <T> T getQueryResults(
3837
String queryString,
3938
Object[] positionalParameters,
4039
ResultSetProcessor<T> resultSetProcessor) throws SQLException {
41-
try (PreparedStatement statement = getJdbcConnection().prepareStatement( queryString )) {
40+
try ( var statement = getJdbcConnection().prepareStatement( queryString ) ) {
4241
if ( positionalParameters != null ) {
4342
for ( int i = 0 ; i < positionalParameters.length ; i++ ) {
4443
statement.setObject( i + 1, positionalParameters[i] );

tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockJdbcServicesInitiator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Identifier getCurrentSchema() {
5858

5959
@Override
6060
public QualifiedObjectNameFormatter getQualifiedObjectNameFormatter() {
61-
return new QualifiedObjectNameFormatterStandardImpl(getNameQualifierSupport());
61+
return new QualifiedObjectNameFormatterStandardImpl(getNameQualifierSupport(), ".");
6262
}
6363

6464
@Override

0 commit comments

Comments
 (0)