Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import jakarta.persistence.Timeout;
import org.hibernate.PessimisticLockException;
import org.hibernate.community.dialect.InformixDialect;
import org.hibernate.dialect.MariaDBDialect;
import org.hibernate.dialect.CockroachDialect;
import org.hibernate.dialect.lock.PessimisticEntityLockException;
import org.hibernate.jpa.SpecHints;
import org.hibernate.testing.orm.AsyncExecutor;
Expand Down Expand Up @@ -87,6 +87,7 @@ void testFindNoWait(SessionFactoryScope factoryScope) {
@Test
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportNoWait.class)
@SkipForDialect(dialectClass = InformixDialect.class, reason = "no failure")
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "Seems FOR UPDATE locks might block read accesses of other TXs")
void testLockNoWait(SessionFactoryScope factoryScope) {
factoryScope.inTransaction( (session) -> {
session.find(Book.class,1, PESSIMISTIC_WRITE);
Expand All @@ -105,10 +106,6 @@ void testLockNoWait(SessionFactoryScope factoryScope) {

@Test
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsSkipLocked.class)
@SkipForDialect(
dialectClass = MariaDBDialect.class,
reason = "Cannot figure this out - it passes when run by itself, but fails when run as part of the complete suite."
)
void testQuerySkipLocked(SessionFactoryScope factoryScope) {
factoryScope.inTransaction( (session1) -> {
session1.find(Book.class,1, PESSIMISTIC_WRITE);
Expand All @@ -127,10 +124,6 @@ void testQuerySkipLocked(SessionFactoryScope factoryScope) {

@Test
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsSkipLocked.class)
@SkipForDialect(
dialectClass = MariaDBDialect.class,
reason = "Cannot figure this out - it passes when run by itself, but fails when run as part of the complete suite."
)
@SkipForDialect(dialectClass = InformixDialect.class, reason = "no failure")
void testFindSkipLocked(SessionFactoryScope factoryScope) {
factoryScope.inTransaction( (session) -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import org.hibernate.dialect.SybaseDialect;
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
import org.hibernate.type.descriptor.jdbc.IntegerJdbcType;
import org.hibernate.type.descriptor.jdbc.VarbinaryJdbcType;
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;

import org.hibernate.testing.orm.junit.BaseSessionFactoryFunctionalTest;
Expand Down Expand Up @@ -54,7 +53,7 @@ public void testStandardBasicSqlTypeDescriptor() {
// A few dialects explicitly override BlobTypeDescriptor.DEFAULT
if ( CockroachDialect.class.isInstance( dialect ) ) {
assertSame(
VarbinaryJdbcType.INSTANCE,
BlobJdbcType.MATERIALIZED,
jdbcTypeRegistry.getDescriptor( Types.BLOB )
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import java.util.LinkedHashMap;
import java.util.Locale;

import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.dialect.Dialect;

import org.hibernate.dialect.SimpleDatabaseVersion;
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
import org.junit.jupiter.api.extension.ExecutionCondition;
import org.junit.jupiter.api.extension.ExtensionContext;
Expand Down Expand Up @@ -181,27 +183,46 @@ public enum VersionMatchMode {
SAME_OR_OLDER
}

record DialectVersionKey(Class<? extends Dialect> dialect, DatabaseVersion version) {
public static DialectVersionKey of(SkipForDialect annotation) {
final Class<? extends Dialect> dialectClass = annotation.dialectClass();
int majorVersion = DatabaseVersion.NO_VERSION;
int minorVersion = DatabaseVersion.NO_VERSION;
int microVersion = DatabaseVersion.NO_VERSION;
if ( annotation.majorVersion() != -1 ) {
majorVersion = annotation.majorVersion();
if ( annotation.minorVersion() != -1 ) {
minorVersion += annotation.minorVersion();
if ( annotation.microVersion() != -1 ) {
microVersion += annotation.microVersion();
}
}
}
return new DialectVersionKey( dialectClass, new SimpleDatabaseVersion( majorVersion, minorVersion, microVersion ) );
}
}

private ConditionEvaluationResult evaluateSkipConditions(ExtensionContext context, Dialect dialect, String enabledResult) {
final Collection<SkipForDialect> effectiveSkips = TestingUtil.collectAnnotations(
context,
SkipForDialect.class,
SkipForDialectGroup.class,
(methodAnnotation, methodAnnotations, classAnnotation, classAnnotations) -> {
final LinkedHashMap<Class<?>, SkipForDialect> map = new LinkedHashMap<>();
final LinkedHashMap<DialectVersionKey, SkipForDialect> map = new LinkedHashMap<>();
if ( classAnnotation != null ) {
map.put( classAnnotation.dialectClass(), classAnnotation );
map.put( DialectVersionKey.of( classAnnotation ), classAnnotation );
}
if ( classAnnotations != null ) {
for ( SkipForDialect annotation : classAnnotations ) {
map.put( annotation.dialectClass(), annotation );
map.put( DialectVersionKey.of( annotation ), annotation );
}
}
if ( methodAnnotation != null ) {
map.put( methodAnnotation.dialectClass(), methodAnnotation );
map.put( DialectVersionKey.of( methodAnnotation ), methodAnnotation );
}
if ( methodAnnotations != null ) {
for ( SkipForDialect annotation : methodAnnotations ) {
map.put( annotation.dialectClass(), annotation );
map.put( DialectVersionKey.of( annotation ), annotation );
}
}
return map.values();
Expand Down