Skip to content

Commit

Permalink
HHH-18080 Fix default version handling in dialects when not using JDB…
Browse files Browse the repository at this point in the history
…C metadata

* Use the minimum supported version instead of '0.0.0'
* Don't warn about version '0.0.0'
  • Loading branch information
yrodiere authored and sebersole committed May 10, 2024
1 parent 73edbac commit 32d4f15
Show file tree
Hide file tree
Showing 18 changed files with 121 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public AltibaseDialect() {
}

public AltibaseDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( MINIMUM_VERSION ) );
registerKeywords( info );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@ public class DB2iLegacyDialect extends DB2LegacyDialect {

final static DatabaseVersion DB2_LUW_VERSION9 = DatabaseVersion.make( 9, 0);

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 7 );

public DB2iLegacyDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

public DB2iLegacyDialect() {
this( DatabaseVersion.make(7) );
this( DEFAULT_VERSION );
}

public DB2iLegacyDialect(DatabaseVersion version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,15 @@ public class DB2zLegacyDialect extends DB2LegacyDialect {

final static DatabaseVersion DB2_LUW_VERSION9 = DatabaseVersion.make( 9, 0);

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 7 );

public DB2zLegacyDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

public DB2zLegacyDialect() {
this( DatabaseVersion.make( 7 ) );
this( DEFAULT_VERSION );
}

public DB2zLegacyDialect(DatabaseVersion version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.NationalizationSupport;
import org.hibernate.dialect.SimpleDatabaseVersion;
import org.hibernate.dialect.TimeZoneSupport;
import org.hibernate.dialect.function.CommonFunctionFactory;
import org.hibernate.dialect.identity.IdentityColumnSupport;
Expand Down Expand Up @@ -116,13 +117,15 @@
*/
public class FirebirdDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 2, 5 );

@SuppressWarnings("unused")
public FirebirdDialect() {
this( DatabaseVersion.make( 2, 5 ) );
this( DEFAULT_VERSION );
}

public FirebirdDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,16 +84,18 @@
*/
public class InformixDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 7, 0 );

private final UniqueDelegate uniqueDelegate;
private final LimitHandler limitHandler;

public InformixDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

public InformixDialect() {
this( DatabaseVersion.make( 7, 0 ) );
this( DEFAULT_VERSION );
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,17 @@
*/
public class IngresDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 9, 2 );

private final LimitHandler limitHandler;
private final SequenceSupport sequenceSupport;

public IngresDialect() {
this( DatabaseVersion.make( 9, 2 ) );
this( DEFAULT_VERSION );
}

public IngresDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@
*/
public class MySQLLegacyDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 5, 0 );

private final MySQLStorageEngine storageEngine = createStorageEngine();
private final SizeStrategy sizeStrategy = new SizeStrategyImpl() {
@Override
Expand All @@ -140,7 +142,7 @@ public Size resolveSize(
private final boolean noBackslashEscapesEnabled;

public MySQLLegacyDialect() {
this( DatabaseVersion.make( 5, 0 ) );
this( DEFAULT_VERSION );
}

public MySQLLegacyDialect(DatabaseVersion version) {
Expand Down Expand Up @@ -181,7 +183,7 @@ protected static DatabaseVersion createVersion(DialectResolutionInfo info) {
// Ignore
}
}
return info.makeCopy();
return info.makeCopyOrDefault( DEFAULT_VERSION );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,15 +95,17 @@
*/
public class SQLiteDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 2, 0 );

private final UniqueDelegate uniqueDelegate;

public SQLiteDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

public SQLiteDialect() {
this( DatabaseVersion.make( 2, 0 ) );
this( DEFAULT_VERSION );
}

public SQLiteDialect(DatabaseVersion version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,17 @@
*/
public class TeradataDialect extends Dialect {

private static final DatabaseVersion DEFAULT_VERSION = DatabaseVersion.make( 12, 0 );

private static final int PARAM_LIST_SIZE_LIMIT = 1024;

public TeradataDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( DEFAULT_VERSION ) );
registerKeywords( info );
}

public TeradataDialect() {
this( DatabaseVersion.make( 12, 0 ) );
this( DEFAULT_VERSION );
}

public TeradataDialect(DatabaseVersion version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public CockroachDialect(DialectResolutionInfo info) {

public CockroachDialect(DialectResolutionInfo info, String versionString) {
this(
versionString != null ? parseVersion( versionString ) : info.makeCopy(),
versionString != null ? parseVersion( versionString ) : info.makeCopyOrDefault( MINIMUM_VERSION ),
PostgreSQLDriverKind.determineKind( info )
);
registerKeywords( info );
Expand Down Expand Up @@ -177,7 +177,7 @@ protected static DatabaseVersion fetchDataBaseVersion(DialectResolutionInfo info
// default to the dialect-specific configuration setting
versionString = ConfigurationHelper.getString( COCKROACH_VERSION_STRING, info.getConfigurationValues() );
}
return versionString != null ? parseVersion( versionString ) : info.makeCopy();
return versionString != null ? parseVersion( versionString ) : info.makeCopyOrDefault( MINIMUM_VERSION );
}

public static DatabaseVersion parseVersion( String versionString ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class DB2iDialect extends DB2Dialect {
final static DatabaseVersion DB2_LUW_VERSION = DB2Dialect.MINIMUM_VERSION;

public DB2iDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( MINIMUM_VERSION ) );
registerKeywords( info );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public class DB2zDialect extends DB2Dialect {
final static DatabaseVersion DB2_LUW_VERSION = DB2Dialect.MINIMUM_VERSION;

public DB2zDialect(DialectResolutionInfo info) {
this( info.makeCopy() );
this( info.makeCopyOrDefault( MINIMUM_VERSION ) );
registerKeywords( info );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,17 +96,38 @@ default int getMicro() {
return getDatabaseMicroVersion();
}

/**
* Make a simple copy of this version object,
* unless this version object has {@link #NO_VERSION no version information},
* in which case just return the given {@code defaultVersion}.
* @param defaultVersion The default version, to be returned if
* this version object has {@link #NO_VERSION no version information}.
* @return The copy, or {@code defaultVersion}.
*/
default DatabaseVersion makeCopyOrDefault(DatabaseVersion defaultVersion) {
if ( getMajor() == NO_VERSION && getMinor() == NO_VERSION && getMicro() == NO_VERSION ) {
return defaultVersion;
}
return makeCopy();
}

/**
* Make a simple copy of this version object
* @deprecated In dialect implementations, prefer {@link #makeCopyOrDefault(DatabaseVersion)} to gracefully default
* to the minimum supported version.
*/
@Deprecated
default DatabaseVersion makeCopy() {
return new SimpleDatabaseVersion( this );
}

/**
* Make a copy of this version object, possibly converting {@link #NO_VERSION}
* to zero
* @deprecated In dialect implementations, prefer {@link #makeCopyOrDefault(DatabaseVersion)} to gracefully default
* to the minimum supported version.
*/
@Deprecated
default DatabaseVersion makeCopy(boolean noVersionAsZero) {
return new SimpleDatabaseVersion( this, noVersionAsZero );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ protected Dialect(DatabaseVersion version) {
}

protected Dialect(DialectResolutionInfo info) {
this.version = info.makeCopy();
this.version = info.makeCopyOrDefault( getMinimumSupportedVersion() );
checkVersion();
registerDefaultKeywords();
registerKeywords(info);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ protected static DatabaseVersion createVersion(DialectResolutionInfo info) {
}
}
}
return info.makeCopy();
return info.makeCopyOrDefault( MINIMUM_VERSION );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import org.hibernate.boot.registry.StandardServiceInitiator;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.engine.jdbc.batch.spi.BatchBuilder;
Expand Down Expand Up @@ -163,13 +164,13 @@ private static JdbcEnvironmentImpl getJdbcEnvironmentWithExplicitConfiguration(
final DialectResolutionInfo dialectResolutionInfo = new DialectResolutionInfoImpl(
null,
explicitDatabaseName,
explicitDatabaseVersion != null ? explicitDatabaseVersion : "0",
explicitDatabaseMajorVersion != null ? explicitDatabaseMajorVersion : 0,
explicitDatabaseMinorVersion != null ? explicitDatabaseMinorVersion : 0,
0,
explicitDatabaseVersion,
explicitDatabaseMajorVersion != null ? explicitDatabaseMajorVersion : DatabaseVersion.NO_VERSION,
explicitDatabaseMinorVersion != null ? explicitDatabaseMinorVersion : DatabaseVersion.NO_VERSION,
DatabaseVersion.NO_VERSION,
null,
0,
0,
DatabaseVersion.NO_VERSION,
DatabaseVersion.NO_VERSION,
null,
configurationValues
);
Expand Down
Loading

0 comments on commit 32d4f15

Please sign in to comment.