Skip to content

Commit eca9456

Browse files
committed
get 'extract(epoch)' working Informix
yay!
1 parent 3d14126 commit eca9456

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ public String extractPattern(TemporalUnit unit) {
435435
case HOUR -> "to_number(to_char(?2,'%H'))";
436436
case DAY_OF_WEEK -> "(weekday(?2)+1)";
437437
case DAY_OF_MONTH -> "day(?2)";
438+
case EPOCH -> "(to_number(cast(cast(sum(?2-datetime(1970-1-1) year to day) as interval day(9) to day) as varchar(12)))*86400+to_number(cast(cast(sum(cast(?2 as datetime hour to second)-datetime(00:00:00) hour to second) as interval second(6) to second) as varchar(9))))";
438439
case NATIVE -> "((to_number(cast(cast(sum(?2) as interval day(9) to day) as varchar(12)))*86400+mod(to_number(cast(cast(sum(?2) as interval second(6) to second) as varchar(9))),86400)+to_number(cast(cast(sum(?2) as interval fraction to fraction) as varchar(6))))*1e3)";
439440
default -> "?1(?2)";
440441
};

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,10 @@
7272

7373
import static org.hamcrest.CoreMatchers.*;
7474
import static org.hamcrest.MatcherAssert.assertThat;
75+
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
7576
import static org.hamcrest.Matchers.isOneOf;
7677

78+
import static org.hamcrest.Matchers.lessThanOrEqualTo;
7779
import static org.hibernate.testing.orm.domain.gambit.EntityOfBasics.Gender.FEMALE;
7880
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
7981
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -2141,13 +2143,18 @@ public void testExtractFunctionDayOfWeekOf(SessionFactoryScope scope) {
21412143
}
21422144

21432145
@Test
2144-
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractEpoch.class)
21452146
public void testExtractFunctionEpoch(SessionFactoryScope scope) {
21462147
scope.inTransaction(
21472148
session -> {
2148-
session.createQuery("select extract(epoch from local datetime)", Long.class).getSingleResult();
2149+
long before = Instant.now().getEpochSecond()-1;
2150+
long epoch = session.createQuery( "select extract(epoch from local datetime)", Long.class ).getSingleResult();
2151+
long after = Instant.now().getEpochSecond()+1;
2152+
assertThat( epoch, allOf( greaterThanOrEqualTo( before ), lessThanOrEqualTo( after ) ) );
2153+
21492154
session.createQuery("select extract(epoch from offset datetime)", Long.class).getSingleResult();
2150-
assertThat( session.createQuery("select extract(epoch from datetime 1974-03-23 12:35)", Long.class).getSingleResult(), is(133274100L) );
2155+
2156+
assertThat( session.createQuery("select extract(epoch from datetime 1974-03-23 12:35)", Long.class).getSingleResult(),
2157+
is(133274100L) );
21512158
}
21522159
);
21532160
}
@@ -2692,7 +2699,6 @@ public void testHexFunction(SessionFactoryScope scope) {
26922699

26932700
@Test
26942701
@JiraKey("HHH-18837")
2695-
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExtractEpoch.class)
26962702
public void testEpochFunction(SessionFactoryScope scope) {
26972703

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

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -557,13 +557,6 @@ public boolean apply(Dialect dialect) {
557557
}
558558
}
559559

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-
567560
public static class SupportsExtractDayOfWeekYearMonth implements DialectFeatureCheck {
568561
public boolean apply(Dialect dialect) {
569562
return !( dialect instanceof InformixDialect );

0 commit comments

Comments
 (0)