Skip to content

Commit 12d216c

Browse files
committed
enhancements and cleanups in DialectFeatureChecks
add a new DialectFeatureCheck
1 parent 1b44ae5 commit 12d216c

File tree

2 files changed

+57
-31
lines changed

2 files changed

+57
-31
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/FunctionTests.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2122,6 +2122,7 @@ public void testExtractFunction(SessionFactoryScope scope) {
21222122
}
21232123

21242124
@Test
2125+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractDayOfWeekYearMonth.class)
21252126
public void testExtractFunctionDayOfWeekOf(SessionFactoryScope scope) {
21262127
scope.inTransaction(
21272128
session -> {
@@ -2140,6 +2141,7 @@ public void testExtractFunctionDayOfWeekOf(SessionFactoryScope scope) {
21402141
}
21412142

21422143
@Test
2144+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractEpoch.class)
21432145
public void testExtractFunctionEpoch(SessionFactoryScope scope) {
21442146
scope.inTransaction(
21452147
session -> {
@@ -2151,6 +2153,7 @@ public void testExtractFunctionEpoch(SessionFactoryScope scope) {
21512153
}
21522154

21532155
@Test
2156+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractDayOfWeekYearMonth.class)
21542157
public void testExtractFunctionWeek(SessionFactoryScope scope) {
21552158
scope.inTransaction(
21562159
session -> {
@@ -2204,7 +2207,8 @@ public void testExtractFunctionTimeZoneOffset(SessionFactoryScope scope) {
22042207
}
22052208

22062209
@Test
2207-
public void testExtractFunctionWithAssertions(SessionFactoryScope scope) {
2210+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractDayOfWeekYearMonth.class)
2211+
public void testExtractWeekWithAssertions(SessionFactoryScope scope) {
22082212
scope.inTransaction(
22092213
session -> {
22102214
assertThat(
@@ -2250,6 +2254,14 @@ public void testExtractFunctionWithAssertions(SessionFactoryScope scope) {
22502254
session.createQuery("select extract(day of year from date 2019-05-30) from EntityOfBasics", Integer.class).getResultList().get(0),
22512255
is(150)
22522256
);
2257+
}
2258+
);
2259+
}
2260+
2261+
@Test
2262+
public void testExtractFunctionWithAssertions(SessionFactoryScope scope) {
2263+
scope.inTransaction(
2264+
session -> {
22532265
assertThat(
22542266
session.createQuery("select extract(day of month from date 2019-05-27) from EntityOfBasics", Integer.class).getResultList().get(0),
22552267
is(27)
@@ -2680,6 +2692,7 @@ public void testHexFunction(SessionFactoryScope scope) {
26802692

26812693
@Test
26822694
@JiraKey("HHH-18837")
2695+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractEpoch.class)
26832696
public void testEpochFunction(SessionFactoryScope scope) {
26842697

26852698
LocalDate someLocalDate = LocalDate.of( 2013, 7, 5 );

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

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,8 @@ public boolean apply(Dialect dialect) {
445445
public static class SupportsOrderByInCorrelatedSubquery implements DialectFeatureCheck {
446446
public boolean apply(Dialect dialect) {
447447
return dialect.supportsOrderByInSubquery()
448-
// For some reason, HANA doesn't support order by in correlated subqueries...
449-
&& !( dialect instanceof HANADialect );
448+
// HANA doesn't support 'order by' in correlated subqueries
449+
&& !( dialect instanceof HANADialect );
450450
}
451451
}
452452

@@ -478,15 +478,15 @@ public boolean apply(Dialect dialect) {
478478
public static class SupportsStringAggregation implements DialectFeatureCheck {
479479
public boolean apply(Dialect dialect) {
480480
return dialect instanceof H2Dialect
481-
|| dialect instanceof HSQLDialect
482-
|| dialect instanceof MySQLDialect
483-
|| dialect instanceof PostgreSQLDialect
484-
|| dialect instanceof HANADialect
485-
|| dialect instanceof CockroachDialect
486-
|| dialect instanceof DB2Dialect
487-
|| dialect instanceof OracleDialect
488-
|| dialect instanceof SpannerDialect
489-
|| dialect instanceof SQLServerDialect;
481+
|| dialect instanceof HSQLDialect
482+
|| dialect instanceof MySQLDialect
483+
|| dialect instanceof PostgreSQLDialect
484+
|| dialect instanceof HANADialect
485+
|| dialect instanceof CockroachDialect
486+
|| dialect instanceof DB2Dialect
487+
|| dialect instanceof OracleDialect
488+
|| dialect instanceof SpannerDialect
489+
|| dialect instanceof SQLServerDialect;
490490
}
491491
}
492492

@@ -496,7 +496,7 @@ public boolean apply(Dialect dialect) {
496496
|| dialect instanceof PostgreSQLDialect
497497
|| dialect instanceof HANADialect
498498
|| dialect instanceof CockroachDialect
499-
|| dialect instanceof DB2Dialect && ( (DB2Dialect) dialect ).getDB2Version().isSameOrAfter( 11 )
499+
|| dialect instanceof DB2Dialect db2 && db2.getDB2Version().isSameOrAfter( 11 )
500500
|| dialect instanceof OracleDialect
501501
|| dialect instanceof SpannerDialect
502502
|| dialect instanceof SQLServerDialect;
@@ -509,7 +509,7 @@ public boolean apply(Dialect dialect) {
509509
|| dialect instanceof PostgreSQLDialect
510510
|| dialect instanceof HANADialect
511511
|| dialect instanceof CockroachDialect
512-
|| dialect instanceof DB2Dialect && ( (DB2Dialect) dialect ).getDB2Version().isSameOrAfter( 11 )
512+
|| dialect instanceof DB2Dialect db2 && db2.getDB2Version().isSameOrAfter( 11 )
513513
|| dialect instanceof OracleDialect
514514
|| dialect instanceof SpannerDialect
515515
|| dialect instanceof SQLServerDialect;
@@ -519,13 +519,13 @@ public boolean apply(Dialect dialect) {
519519
public static class SupportsWindowFunctions implements DialectFeatureCheck {
520520
public boolean apply(Dialect dialect) {
521521
// Derby doesn't really support window functions, only row_number()
522-
return dialect.supportsWindowFunctions() && !( dialect instanceof DerbyDialect );
522+
return dialect.supportsWindowFunctions()
523+
&& !( dialect instanceof DerbyDialect );
523524
}
524525
}
525526

526527
public static class SupportsFilterClause implements DialectFeatureCheck {
527528
public boolean apply(Dialect dialect) {
528-
// Derby doesn't really support window functions, only row_number()
529529
return dialect instanceof PostgreSQLDialect;
530530
}
531531
}
@@ -539,7 +539,6 @@ public boolean apply(Dialect dialect) {
539539

540540
public static class SupportsFullJoin implements DialectFeatureCheck {
541541
public boolean apply(Dialect dialect) {
542-
// TiDB db does not support subqueries for ON condition
543542
return !( dialect instanceof H2Dialect
544543
|| dialect instanceof MySQLDialect
545544
|| dialect instanceof SybaseDialect
@@ -553,7 +552,21 @@ public boolean apply(Dialect dialect) {
553552
|| dialect instanceof SybaseDialect
554553
|| dialect instanceof DerbyDialect
555554
|| dialect instanceof FirebirdDialect
556-
|| dialect instanceof DB2Dialect && ( (DB2Dialect) dialect ).getDB2Version().isBefore( 11 ) );
555+
|| dialect instanceof InformixDialect
556+
|| dialect instanceof DB2Dialect db2 && db2.getDB2Version().isBefore( 11 ) );
557+
}
558+
}
559+
560+
public static class SupportsExtractEpoch implements DialectFeatureCheck {
561+
public boolean apply(Dialect dialect) {
562+
// I could not find any reasonable way to implement this on Informix
563+
return !( dialect instanceof InformixDialect );
564+
}
565+
}
566+
567+
public static class SupportsExtractDayOfWeekYearMonth implements DialectFeatureCheck {
568+
public boolean apply(Dialect dialect) {
569+
return !( dialect instanceof InformixDialect );
557570
}
558571
}
559572

@@ -697,9 +710,9 @@ public boolean apply(Dialect dialect) {
697710
public static class SupportsJsonQueryNestedPath implements DialectFeatureCheck {
698711
public boolean apply(Dialect dialect) {
699712
return definesFunction( dialect, "json_query" )
700-
&& !( dialect instanceof SQLServerDialect )
701-
&& !( dialect instanceof H2Dialect )
702-
&& !( dialect instanceof CockroachDialect );
713+
&& !( dialect instanceof SQLServerDialect )
714+
&& !( dialect instanceof H2Dialect )
715+
&& !( dialect instanceof CockroachDialect );
703716
}
704717
}
705718

@@ -724,14 +737,14 @@ public boolean apply(Dialect dialect) {
724737
public static class SupportsJsonValueErrorBehavior implements DialectFeatureCheck {
725738
public boolean apply(Dialect dialect) {
726739
return definesFunction( dialect, "json_value" )
727-
// H2 emulation doesn't support error behavior
728-
&& !( dialect instanceof H2Dialect )
729-
// MariaDB simply doesn't support the on error and on empty clauses
730-
&& !( dialect instanceof MariaDBDialect )
731-
// Cockroach doesn't have a native json_value function
732-
&& !( dialect instanceof CockroachDialect )
733-
// PostgreSQL added support for native json_value in version 17
734-
&& ( !( dialect instanceof PostgreSQLDialect ) || dialect.getVersion().isSameOrAfter( 17 ) );
740+
// H2 emulation doesn't support error behavior
741+
&& !( dialect instanceof H2Dialect )
742+
// MariaDB simply doesn't support the on error and on empty clauses
743+
&& !( dialect instanceof MariaDBDialect )
744+
// Cockroach doesn't have a native json_value function
745+
&& !( dialect instanceof CockroachDialect )
746+
// PostgreSQL added support for native json_value in version 17
747+
&& !( dialect instanceof PostgreSQLDialect && dialect.getVersion().isBefore( 17 ) );
735748
}
736749
}
737750

@@ -744,8 +757,8 @@ public boolean apply(Dialect dialect) {
744757
public static class SupportsJsonObjectAgg implements DialectFeatureCheck {
745758
public boolean apply(Dialect dialect) {
746759
return definesFunction( dialect, "json_objectagg" )
747-
// Bug in HSQL: https://sourceforge.net/p/hsqldb/bugs/1718/
748-
&& !( dialect instanceof HSQLDialect );
760+
// Bug in HSQL: https://sourceforge.net/p/hsqldb/bugs/1718/
761+
&& !( dialect instanceof HSQLDialect );
749762
}
750763
}
751764

0 commit comments

Comments
 (0)