Skip to content

Commit 26a11f8

Browse files
committed
Fix multiple dialect skips for same class but different version
1 parent 0a351ce commit 26a11f8

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFilterExtension.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import java.util.LinkedHashMap;
99
import java.util.Locale;
1010

11+
import org.hibernate.dialect.DatabaseVersion;
1112
import org.hibernate.dialect.Dialect;
1213

14+
import org.hibernate.dialect.SimpleDatabaseVersion;
1315
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
1416
import org.junit.jupiter.api.extension.ExecutionCondition;
1517
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -181,27 +183,46 @@ public enum VersionMatchMode {
181183
SAME_OR_OLDER
182184
}
183185

186+
record DialectVersionKey(Class<? extends Dialect> dialect, DatabaseVersion version) {
187+
public static DialectVersionKey of(SkipForDialect annotation) {
188+
final Class<? extends Dialect> dialectClass = annotation.dialectClass();
189+
int majorVersion = DatabaseVersion.NO_VERSION;
190+
int minorVersion = DatabaseVersion.NO_VERSION;
191+
int microVersion = DatabaseVersion.NO_VERSION;
192+
if ( annotation.majorVersion() != -1 ) {
193+
majorVersion = annotation.majorVersion();
194+
if ( annotation.minorVersion() != -1 ) {
195+
minorVersion += annotation.minorVersion();
196+
if ( annotation.microVersion() != -1 ) {
197+
microVersion += annotation.microVersion();
198+
}
199+
}
200+
}
201+
return new DialectVersionKey( dialectClass, new SimpleDatabaseVersion( majorVersion, minorVersion, microVersion ) );
202+
}
203+
}
204+
184205
private ConditionEvaluationResult evaluateSkipConditions(ExtensionContext context, Dialect dialect, String enabledResult) {
185206
final Collection<SkipForDialect> effectiveSkips = TestingUtil.collectAnnotations(
186207
context,
187208
SkipForDialect.class,
188209
SkipForDialectGroup.class,
189210
(methodAnnotation, methodAnnotations, classAnnotation, classAnnotations) -> {
190-
final LinkedHashMap<Class<?>, SkipForDialect> map = new LinkedHashMap<>();
211+
final LinkedHashMap<DialectVersionKey, SkipForDialect> map = new LinkedHashMap<>();
191212
if ( classAnnotation != null ) {
192-
map.put( classAnnotation.dialectClass(), classAnnotation );
213+
map.put( DialectVersionKey.of( classAnnotation ), classAnnotation );
193214
}
194215
if ( classAnnotations != null ) {
195216
for ( SkipForDialect annotation : classAnnotations ) {
196-
map.put( annotation.dialectClass(), annotation );
217+
map.put( DialectVersionKey.of( annotation ), annotation );
197218
}
198219
}
199220
if ( methodAnnotation != null ) {
200-
map.put( methodAnnotation.dialectClass(), methodAnnotation );
221+
map.put( DialectVersionKey.of( methodAnnotation ), methodAnnotation );
201222
}
202223
if ( methodAnnotations != null ) {
203224
for ( SkipForDialect annotation : methodAnnotations ) {
204-
map.put( annotation.dialectClass(), annotation );
225+
map.put( DialectVersionKey.of( annotation ), annotation );
205226
}
206227
}
207228
return map.values();

0 commit comments

Comments
 (0)