HHH-18518 change implementation to capture MySQL custom versions better
This commit is contained in:
parent
e039bbc085
commit
9ac9637daa
|
@ -17,6 +17,8 @@ import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import org.hibernate.Length;
|
import org.hibernate.Length;
|
||||||
import org.hibernate.LockOptions;
|
import org.hibernate.LockOptions;
|
||||||
import org.hibernate.PessimisticLockException;
|
import org.hibernate.PessimisticLockException;
|
||||||
|
@ -212,12 +214,12 @@ public class MySQLDialect extends Dialect {
|
||||||
protected static DatabaseVersion createVersion(DialectResolutionInfo info, DatabaseVersion defaultVersion) {
|
protected static DatabaseVersion createVersion(DialectResolutionInfo info, DatabaseVersion defaultVersion) {
|
||||||
final String versionString = info.getDatabaseVersion();
|
final String versionString = info.getDatabaseVersion();
|
||||||
if ( versionString != null ) {
|
if ( versionString != null ) {
|
||||||
final String[] components = versionString.split( "\\." );
|
final Matcher matcher = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+).*").matcher(versionString);
|
||||||
if ( components.length >= 3 ) {
|
if ( matcher.matches() && matcher.groupCount() >= 3 ) {
|
||||||
try {
|
try {
|
||||||
final int majorVersion = Integer.parseInt( components[0] );
|
final int majorVersion = Integer.parseInt( matcher.group(1));
|
||||||
final int minorVersion = Integer.parseInt( components[1] );
|
final int minorVersion = Integer.parseInt( matcher.group(2) );
|
||||||
final int patchLevel = Integer.parseInt( components[2] );
|
final int patchLevel = Integer.parseInt( matcher.group(3) );
|
||||||
return DatabaseVersion.make( majorVersion, minorVersion, patchLevel );
|
return DatabaseVersion.make( majorVersion, minorVersion, patchLevel );
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex) {
|
catch (NumberFormatException ex) {
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
package org.hibernate.dialect;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
|
||||||
|
import org.hibernate.testing.RequiresDialect;
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
@RequiresDialect(MySQLDialect.class)
|
||||||
|
@TestForIssue(jiraKey = "HHH-18518")
|
||||||
|
public class MySQLDialectDatabaseVersionTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void versionWithSuffix() {
|
||||||
|
String version = "8.0.37-azure";
|
||||||
|
Dialect dialect = new MySQLDialect( new TestingMySQLDialectResolutionInfo( version ) );
|
||||||
|
|
||||||
|
assertEquals(8, dialect.getVersion().getMajor());
|
||||||
|
assertEquals(0, dialect.getVersion().getMinor());
|
||||||
|
assertEquals(37, dialect.getVersion().getMicro());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void releaseVersion() {
|
||||||
|
String version = "8.0.37";
|
||||||
|
Dialect dialect = new MySQLDialect( new TestingMySQLDialectResolutionInfo( version ) );
|
||||||
|
|
||||||
|
assertEquals(8, dialect.getVersion().getMajor());
|
||||||
|
assertEquals(0, dialect.getVersion().getMinor());
|
||||||
|
assertEquals(37, dialect.getVersion().getMicro());
|
||||||
|
}
|
||||||
|
|
||||||
|
static final class TestingMySQLDialectResolutionInfo implements DialectResolutionInfo {
|
||||||
|
private final String databaseVersion;
|
||||||
|
|
||||||
|
TestingMySQLDialectResolutionInfo(String databaseVersion) {
|
||||||
|
this.databaseVersion = databaseVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDatabaseName() {
|
||||||
|
return "MySQL";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDatabaseVersion() {
|
||||||
|
return this.databaseVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDatabaseMajorVersion() {
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDatabaseMinorVersion() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDriverName() {
|
||||||
|
return "MySQL JDBC Driver";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDriverMajorVersion() {
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDriverMinorVersion() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLKeywords() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "8.3.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getConfigurationValues() {
|
||||||
|
return Map.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue